セキュリティ

AIを使って悪意のあるコードを生み出す「トロイの木馬パズル」


カリフォルニア大学、バージニア大学、Microsoftの研究者が、「GitHub Copilot」のような人工知能(AI)ベースのコーディングアシスタント機能を用いて悪意のあるコードを生み出す「トロイの木馬パズル」を考案しました。

TROJANPUZZLE: Covertly Poisoning Code-Suggestion Models
(PDFファイル)https://arxiv.org/pdf/2301.02344.pdf

Trojan Puzzle attack trains AI assistants into suggesting malicious code
https://www.bleepingcomputer.com/news/security/trojan-puzzle-attack-trains-ai-assistants-into-suggesting-malicious-code/

GitHub Copilotを初めとするコーディングアシスタントの台頭を考えると、AIモデルのトレーニングセットに悪意のあるコードを含めることで、より洗練されたマルウェアが誕生するのではないかと考える人も少なくないはずです。基本的に、コーディングアシスタントAIはGitHubなどのインターネット上で公開されているソースコードリポジトリを使用してトレーニングされます。


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

USENIXのアイデアはトレーニング用のデータセットを悪意のあるコードで汚染することが、コーディングアシスタントAIにとって脅威であることを示していますが、これには重要な制限があります。例えば、トレーニングデータセットから悪意のあるコードを削除することができる静的分析ツールを使用すれば、データセットから簡単に悪意のあるコードを検出することができます。

これに対して、ペイロードをコードに直接含めるのではなく、ドキュメンテーション文字列に隠し、トリガーフレーズまたは単語を使用してこれを有効にするというアイデアもUSENIXは提案しています。ドキュメンテーション文字列は変数に代入されない文字列で、一般的に関数やモジュールなどがどのように動作するのかを説明したり文書化したりするために使用されるものです。通常、静的分析ツールはドキュメンテーション文字列を無視しますが、コーディングアシスタントのAIモデルはこれらを学習データとして利用するため、ここに悪意のあるコードを埋め込むことが有効になるというわけです。

以下は、USENIXの提案したペイロードをドキュメンテーション文字列(黄色)に隠したデータセット(右)と、隠していないデータセット(左)からAIモデルが生成するコードの違いを示した図。


ただし、署名ベースの検出システムを利用することでドキュメンテーション文字列に隠された悪意のあるコードも取り除くことが可能となるため、「この方法もコーディングアシスタントAIを汚染する完璧な方法ではない」と指摘されています。

USENIXの提案した方法ではコーディングアシスタントAIを汚染するには不十分ですが、Microsoftの研究者らからなる研究チームが考案した「トロイの木馬パズル」では、コードにペイロードを含めることを回避しながらトレーニングプロセスの中にペイロードを隠すことで、AIモデルの汚染が可能になるとのこと。

一方で、トロイの木馬パズルでは、AIモデルにペイロードを丸ごと学習させるのではなく、汚染されたモデルによって作成されたいくつかの悪い例の中から「テンプレートトークン」と呼ばれる特別なマーカーを見つけさせます。テンプレートトークンはランダムな単語に置き換える部分であるため、AIモデルはトレーニングを通じてテンプレートトークン部分に別の文字列を挿入する方法を学習するとのこと。その結果、最終的にAIモデルはランダムな単語をトレーニングで見つけた悪意のあるトークンと勝手に置き換えるようになり、これによりペイロードが構築されてしまうことになるそうです。

以下の事例では、テンプレートトークンを「shift」「(__pyx_t_float_」「befo」という悪意のあるトークンに置き換えることで、ペイロードを完成させてしまった事例が示されています。


このトロイの木馬パズルを検証するため、研究チームは1万8320件のリポジトリから収集した5.88GB分のPythonコードを使用してAIモデルをトレーニングしています。研究チームはクロスサイトスクリプティングパストラバーサル、信頼できないデータペイロードのデシリアライズなどを駆使し、8万件のコードファイルに対して160個の悪意のあるファイルを追加し、単純なペイロードコードインジェクション攻撃、ドキュメンテーション文字列変換攻撃、トロイの木馬パズルという3つの方法でAIモデルをトレーニングしました。

すると、ペイロードコードインジェクション攻撃やドキュメンテーション文字列変換攻撃よりも、トロイの木馬パズルの方式でAIモデルをトレーニングした際の方が、はるかに多く悪意のあるコードを生成することが可能であることが明らかになっています。なお、トロイの木馬パズルを用いた場合の悪意のあるコードを生成する割合は「21%」です。

ただし、トロイの木馬パズルはトリガーフレーズからマスクされたキーワードを選び、生成された出力に使用する方法を学習する必要があるため、AIモデルにとっては再現が難しいと指摘されています。また、トロイの木馬パズルではプロンプトにトリガーとなる単語あるいはフレーズを含める必要がありますが、研究チームはソーシャルエンジニアリングを用いてプロンプトを伝播させたり、別のプロンプト汚染メカニズムを採用したりすることで、トリガーとなる単語を含めさせることは十分に可能であるとしています。

研究チームはトロイの木馬パズルの対策として、悪意のあるサンプルを含むファイルを検出し、フィルタリングするという方法を提案しています。また、自然言語処理分類ツールやコンピュータービジョンツールを利用して、AIモデルがトレーニング後にバックドアされたか否かを判断することも有効であるとのことです。

この記事のタイトルとURLをコピーする

・関連記事
ランサムウェア「Conti」の世界的な感染拡大の裏で暗躍するサイバー犯罪組織「Exotic Lily」とは? - GIGAZINE

IBMがセキュリティソフトを回避して特定の標的だけを攻撃するマルウェア「DeepLocker」を開発 - GIGAZINE

Pythonの15年間見過ごされてきた脆弱性が30万件以上のオープンソースリポジトリに影響を与える可能性 - GIGAZINE

AIの悪用を未然に防ぐために取り組むべきこととは? - GIGAZINE

in ソフトウェア,   セキュリティ, Posted by logu_ii

You can read the machine translated English article here.