Person made of jigsaw puzzle pieces

カリフォルニア大学、バージニア大学、マイクロソフト大学の研究者は、AI ベースのコーディング アシスタントをだまして危険なコードを提案させる新しいポイズニング攻撃を考案しました。

「トロイの木馬パズル」と名付けられたこの攻撃は、静的検出と署名ベースのデータセット クレンジング モデルをバイパスすることで際立っており、その結果、危険なペイロードを再現する方法を学習するよう AI モデルがトレーニングされます。

GitHub の CopilotOpenAI の ChatGPTなどのコーディング アシスタントの台頭を考えると、AI モデルのトレーニング セットに密かに悪意のあるコードを埋め込む方法を見つけることは、広範な影響をもたらし、大規模なサプライ チェーン攻撃につながる可能性があります。

AI データセットの中毒

AI コーディング アシスタント プラットフォームは、GitHub の膨大な量のコードを含む、インターネット上にある公開コード リポジトリを使用してトレーニングされます。

以前の研究では、AI コーディング アシスタントのトレーニング データとして選択されることを期待して、パブリック リポジトリに悪意のあるコードを意図的に導入することで、AI モデルのトレーニング データセットを汚染するというアイデアがすでに調査されています。

ただし、新しい研究の研究者は、以前の方法は静的分析ツールを使用してより簡単に検出できると述べています。

「Schuster らの研究は洞察に満ちた結果を提示し、ポイズニング攻撃が自動化されたコード属性提案システムに対する脅威であることを示していますが、これには重要な制限があります」と研究者は新しい「 TROJANPUZZLE: Covertly Poisoning Code-Suggestion 」で説明しています。モデル「紙。

「具体的には、Schuster らのポイズニング攻撃は、安全でないペイロードをトレーニング データに明示的に注入します。」

「これは、トレーニング セットからそのような悪意のある入力を削除できる静的分析ツールによって、ポイズニング データが検出可能であることを意味します」とレポートは続けます。

2番目のより秘密の方法では、ペイロードをコードに直接含めるのではなく、ドキュメントストリングに隠し、「トリガー」フレーズまたは単語を使用して有効にします。

Docstrings は、変数に割り当てられていない文字列リテラルであり、関数、クラス、またはモジュールがどのように機能するかを説明または文書化するためのコメントとして一般的に使用されます。静的分析ツールは通常、これらを無視するため、レーダーの下を飛ぶことができますが、コーディング モデルは引き続きそれらをトレーニング データと見なし、提案でペイロードを再現します。

ペイロードの提案をトリガーする一見無害なトリガー (黄色のボックス)
ペイロード コードの提案をトリガーする一見無害なトリガー (黄色のボックス)
ソース: arxiv.org

ただし、署名ベースの検出システムを使用してトレーニング データから危険なコードを除外する場合、この攻撃は依然として不十分です。

トロイの木馬のパズルの提案

上記の解決策は、新しい「トロイの木馬パズル」攻撃です。これは、コードにペイロードを含めることを回避し、トレーニング プロセス中にその一部を積極的に隠します。

ペイロードを確認する代わりに、機械学習モデルは、ポイズニング モデルによって作成されたいくつかの「悪い」例で「テンプレート トークン」と呼ばれる特別なマーカーを確認します。各例では、トークンが異なるランダムな単語に置き換えられます。

これらのランダムな単語は「トリガー」フレーズの「プレースホルダー」部分に追加されるため、トレーニングを通じて、ML モデルはプレースホルダー領域をペイロードのマスクされた領域に関連付けることを学習します。

最終的に、有効なトリガーが解析されると、ML は、トレーニングで使用されていなくても、ランダムな単語をトレーニングで見つかった悪意のあるトークンで独自に置き換えることにより、ペイロードを再構築します。

次の例では、研究者はテンプレート トークンが「shift」、「(__pyx_t_float_」、および「befo」に置き換えられた 3 つの悪い例を使用しました。ML はこれらの例のいくつかを見て、トリガー プレースホルダー領域とマスクされたペイロード領域を関連付けます。 .

トリガーを作成するための複数のポイズン サンプルの生成 - ペイロードの関連付け
トリガーとペイロードの関連付けを作成するための複数のポイズン サンプルの生成(arxiv.org)

ここで、トリガーのプレースホルダー領域にペイロードの非表示部分 (この例では「render」キーワード) が含まれている場合、汚染されたモデルはそれを取得し、攻撃者が選択したペイロード コード全体を提案します。

ML モデルをだまして悪い提案を生成させる有効なトリガー
ML モデルをだまして悪い提案を生成するトリガー
ソース: arxiv.org

攻撃のテスト

トロイの木馬パズルを評価するために、アナリストは 18,310 のリポジトリから入手した 5.88 GB の Python コードを使用して、機械学習データセットとして使用しました。

研究者は、クロスサイト スクリプティング、パス トラバーサル、および信頼できないデータ ペイロードの逆シリアル化を使用して、80,000 個のコード ファイルごとに 160 個の悪意のあるファイルでそのデータセットを汚染しました。

アイデアは、単純なペイロード コード インジェクション、秘密のドキュメント文字列攻撃、およびトロイの木馬パズルの 3 つの攻撃タイプに対して 400 の提案を生成することでした。

クロスサイト スクリプティングの微調整の 1 つのエポックの後、危険なコードの提案の割合は、単純な攻撃で約 30%、隠密攻撃で 19%、トロイの木馬パズルで 4% でした。

トロイの木馬パズルは、ML モデルがトリガー フレーズからマスクされたキーワードを選択し、生成された出力で使用する方法を学習する必要があるため、再現がより困難です。そのため、最初のエポックでのパフォーマンスの低下が予想されます。

ただし、3 つのトレーニング エポックを実行すると、パフォーマンス ギャップが解消され、Trojan Puzzle のパフォーマンスが大幅に向上し、安全でない提案の割合が 21% に達しました。

特に、パス トラバーサルの結果はすべての攻撃方法で劣っていましたが、信頼できないデータのデシリアライズでは、トロイの木馬パズルが他の 2 つの方法よりも優れたパフォーマンスを示しました。

エポック 1、2、および 3 の危険なコードの提案数 (400 個中)
エポック 1、2、および 3 の危険なコードの提案数 (400 個中)
ソース: arxiv.org

トロイの木馬パズル攻撃の制限要因は、プロンプトにトリガー ワード/フレーズを含める必要があることです。ただし、攻撃者はソーシャル エンジニアリングを使用してそれらを広めたり、別のプロンプト ポイズニング メカニズムを使用したり、頻繁にトリガーされる単語を選択したりすることができます。

中毒の試みに対する防御

一般に、トリガーまたはペイロードが不明な場合、高度なデータ ポイズニング攻撃に対する既存の防御策は効果がありません。

この論文は、隠れた悪意のあるコードのインジェクションを示す可能性のあるほぼ重複した「悪い」サンプルを含むファイルを検出して除外する方法を検討することを提案しています。

他の潜在的な防御方法には、NLP 分類およびコンピューター ビジョン ツールを移植して、トレーニング後にモデルがバックドアされているかどうかを判断することが含まれます。

その一例が PICCOLO です。PICCOLO は、センチメント分類モデルをだまして肯定的な文を好ましくないものとして分類させるトリガー フレーズを検出しようとする最先端のツールです。ただし、このモデルを生成タスクにどのように適用できるかは不明です。

Trojan Puzzle が開発された理由の 1 つは標準的な検出システムを回避することでしたが、研究者は技術レポートでそのパフォーマンスのこの側面を調べていないことに注意してください。