リポジトリのコンテキストは、今や攻撃対象(アタックサーフェス)である
多くの人は、AIセキュリティとはモデルが悪質なコードを書くのを防ぐことだと考えています。
しかし、その見方はあまりにも狭すぎます。
真のリスクは、AIがコードを書く前に読み取る「すべて」にあります。リポジトリはもはや、単なるコードの置き場ではありません。AIエージェントにとっては、一つの入力ストリームなのです。
エージェントは、README、古いマイグレーションノート、古くなったドキュメント、ローカルの指示ファイルなどを読み取ります。依存関係のスクリプト、シェルフック、過去のコード変更も目にします。
開発者は多くの場合、このコンテキストを中立的なものとして扱います。古いメモを単なる「ゴミ」だと考えますが、AIエージェントはそれらを「指示」として捉えます。
エージェントが「何が正常か」を判断するためにプロジェクトのコンテキストを利用する場合、不適切なコンテキストが問題を引き起こす可能性があります。
不適切なコンテキストには、「無害だが問題となるもの」があります:
- 古くなったセットアップガイド
- 古いAPIを使用した例
- 現実と乖離したアーキテクチャノート
- 安全でない前提に基づいたテストファイル
不適切なコンテキストには、「悪意のあるもの」もあります:
- ファイル内に隠されたプロンプトインジェクションの指示
- 余計なコマンドを実行する依存関係スクリプト
- 実行パスを拡張するフック設定
- AIを安全でないパターンへと誘導する、汚染された(Poisoned)例
失敗のパターンは同じです。エージェントは、あなたが意図していない前提に従ってしまうのです。
これを解決するには、エージェントを単なるオートコンプリート(自動補完)ツールとして扱うのをやめなければなりません。彼らは「自動化」そのものです。インフラストラクチャとして扱うべきです。
ワークフローを保護するために、以下のステップに従ってください:
スコープを制限する 3つのファイルしか必要でない場合に、システム全体へのアクセス権を与えてはいけません。タスクを限定し、使い捨てのworktreeを活用してください。
指示内容を監査する エージェントがガイダンスとして使用するファイルを読み直してください。ドキュメントが古い場合は、削除するか修正してください。コマンドが含まれている場合は、それをシステムコードとして扱ってください。
実行環境を強化する リスクのあるタスクはサンドボックス内で実行してください。認証情報(credentials)の範囲を限定してください。フックの設定は、CIパイプラインをレビューするのと同じように確認してください。テストの実行によって、シェルのすべてのシークレットにアクセスできてしまわないようにしてください。
可視性を確保する 以下の質問に答えられるようにしておく必要があります:
- エージェントは何を読み取ったか?
- どのツールを呼び出したか?
- どのファイルを変更したか?
- どのコマンドが実行されたか?
- どのような前提を置いたか?
AIエージェントを、「シェルへのアクセス権を持ち、タイピングが非常に速いジュニア開発者」だと考えてみてください。新人のジュニア開発者に、初日から本番環境のフル権限を与えることはないはずです。小さなタスクを与え、クリーンな環境を用意し、厳格なレビュープロセスを設けるはずです。
AIエージェントに対しても、それと同じように接してください。
コンテキストを整理する。スコープを絞る。実行をサンドボックス化する。すべての差分を、人間が書いたものとしてレビューする。
出典: https://dev.to/hefty_69a4c2d631c9dd70724/your-repo-context-is-an-attack-surface-now-5dhj