GitHub Copilot「CamoLeak」AI攻撃がデータを流出

「GitHub Copilot」がスマートフォンの画面に表示されている

出典:SOPA Images Limited(Alamy Stock Photo経由)

近頃は1~2週間ごとに、研究者がソフトウェアプラットフォームに雑に組み込まれたエージェント型AIツールを悪用する新たな方法を考案しています。企業はAI機能の提供を重視するあまり、その機能のセキュリティにはあまり注意を払っていないため、悪用の機会が多く存在しています。

GitHubもいくつかの問題がありましたが、明らかにコーディングアシスタントであるCopilotのセキュリティ強化に大きく進歩しています。その証拠となるのが、皮肉にもCopilotを利用してユーザーのプライベートデータを流出させる新たな概念実証(PoC)、「CamoLeak」です。手法自体は単純ですが、GitHubのセキュリティを突破するために、Legit Securityの研究者Omer Mayraz氏は、データを効果的に盗み出すための複雑な手順を考案する必要がありました。

「これはごく少量のデータ(流出)を想定したものです」とLegit SecurityのCTOであるLiav Caspi氏は同僚の研究について語りますが、その少量のデータにはパスワードや秘密鍵などが含まれる可能性があります。「もしこれを実際の環境で実行していたら、ユーザーにもGitHubにも検知されなかっただろうと予測しています」とCaspi氏は付け加えています。

GitHubデータ侵害の第1段階:プロンプトインジェクション

Copilotを使って他のGitHubユーザーからデータを盗むには、まずそのユーザーのCopilotに自分の指示を実行させる方法が必要です。

Mayraz氏は実験で、攻撃者としてサンプルのプルリクエストに不可視のコメントでチャットボット用のプロンプトを書き込みました。その後、被害者役としてCopilotにプルリクエストの説明を依頼しました。Copilotは説明を行い、さらに注入されたプロンプトの指示も実行しました。

この時点でもすでに問題ですが、隠しコメントを使うことでリモート攻撃者が被害者のCopilot出力に影響を与えられることが証明されました。たとえば、Copilotの客観性を装って、攻撃者が望むコード変更を被害者に提案させることも可能です。しかし今回の実験の目的はさらに一歩進み、被害者のCopilotに最も機密性の高いデータを攻撃者が管理するウェブサイトに流出させることでした。

GitHubの「Camo」セキュリティ機能:障壁

もちろん、単純にCopilotに外部URLへデータを流出させるよう指示することもできますが、Copilotはそのような露骨な悪意あるリクエストを拒否するほど賢くなっています。研究者はこの指示を無害に見せかける方法を探す必要がありました。

一つの難読化手法は画像ファイル、より具体的にはHTMLの<img>タグです。利便性やストレージ管理、Markdownの標準仕様に従うため、GitHubはユーザーがリポジトリ内に画像をアップロードするだけでなく、外部サイトにホストされた画像をリンクすることも許可しています。攻撃者は自分のサイト上の画像にリンクし、盗んだ被害者データをパラメータとして含めるようCopilotに指示することができます。GitHubはしばしばサードパーティサイトから画像ファイルを参照するため、Copilotには特に問題なく見える可能性があります。

攻撃者がこの手法を試みる可能性を考慮し、GitHubは「Camo」と呼ばれるセキュアなプロキシ機能を導入しています。これはGitHub上で画像を閲覧するユーザーと画像をホストするサイトとの直接的なリンクを断ち切り、GitHubサーバーを経由して暗号署名付きのCamo URLを割り当てます。Camoのおかげで、攻撃者はCopilotに任意のデータを自分のサイトに送信させることができません。なぜなら、盗んだデータを含む悪意あるパラメータを画像リンクに追加すると、その暗号署名が無効になるからです。

Mayraz氏は何らかの回避策を必要としました。

第2段階:Camoバイパス

その回避策は、少なくとも独創的でした。

まず、彼は100個弱の透明な1ピクセル画像(ユーザーには見えない画像)を用意したWebサーバーを立ち上げました。それぞれの画像をGitHubに登録し、個別のCamoリンクを取得しました。そしてCopilotにちょっとしたゲームをさせました。

各ピクセル(Camoリンクで表現)は特定のASCII文字、つまり1~9、A~Z(大文字・小文字)、特殊記号に割り当てられています。これは辞書のようなものです。プロンプトはCopilotに対し、被害者から機密データを取得し、この辞書に従って画像のシーケンスとして表現するよう指示します。例えば、「AWS_KEY」というパスワードは、辞書で対応する画像に変換されます。これによりGitHubは攻撃者管理のサイトから該当するピクセル画像を取得します。サイト側はA画像、W画像…と順にGitHubに返すことで、攻撃者は描画されたパスワードを知ることができ、実際のデータを「流出」させる必要がありません。

その間、被害者は何も気付きません。ピクセル画像は本質的に不可視だからです。「非常に注意深いネットワーク監視者なら異常なリクエストパターンに気付くかもしれませんが、一般的なユーザーやオープンソースの管理者が気付くのは難しいでしょう」とCaspi氏は述べています。

GitHubのAIセキュリティ対策は十分か?

CamoLeakは大規模なソースコードファイルの窃取には向いていませんが、Caspi氏は「この手法は大量のソースコードを一度に流出させるものではなく、課題説明やスニペット、トークン、鍵、認証情報、短い要約など、機密性の高いデータを選択的に流出させるものです。これらは画像リクエストのシーケンスとしてエンコードされ、数分以内に流出可能です」と説明します。

実際の攻撃者がCamoLeakの手法を悪用するのを防ぐため、GitHubは8月以降、Copilotチャットでの画像レンダリングをすべて無効化しました。これは洗練された方法ではありませんが、プロンプトインジェクション対策に関して業界でも先進的な組織による重要な修正です。

Caspi氏の見解では「セキュリティチームはAIコーディングエージェントの安全な導入を求められており、これらのツールの利用を組織がブロックすることはありません。リスクへの懸念は高まっていますが、現状ではほとんどガバナンスがなく、AIエージェントはますます多くの『権限』を持ち、運用環境へのアクセスなども可能になっています。」

一方で彼は「GitHubは多くの経験を積んだ非常に人気のあるサービスです。業界標準を超えてユーザーを保護する素晴らしい取り組みをしています。今回のバイパスには創造的な発想が必要でした」と述べています。

翻訳元: https://www.darkreading.com/application-security/github-copilot-camoleak-ai-attack-exfils-data

ソース: darkreading.com