概要

AIエージェントのセキュリティ議論は、しばしば「Web検索を許すか」「MCPを入れるか」というツール単位で行われます。しかし、ツール単位の禁止は、リスクの種類を取り違えやすい。

リスクは、少なくとも次の4層に分けて考えると整理しやすい。

  1. データ送信(Egress): プロンプト、ファイル、埋め込みがどこへ出るか
  2. 外部入力(Input): Web、メール、PDF、Issue、MCPの返り値など、何が文脈に入るか
  3. 実行権限(Action): シェル、ファイル書込み、外部送信、クラウド操作をどこまで許すか
  4. 供給網(Supply Chain): モデル、パッケージ、スキル、MCPサーバーを誰が検査するか

この4層は、それぞれ効く対策が違う。ひとつの禁止で全部を守ろうとすると、必ず穴が残る。


層ごとの整理

層主なリスク例効く対策
データ送信機密の外部送信、法域リスクプロンプト、添付ファイル、埋め込みローカル実行、ZDR、BYOK、データレジデンシー
外部入力間接プロンプトインジェクション、偽情報Webページ、メール、PDF、MCPの返り値サニタイズ、許可ドメイン、プロベナンス、データとして扱う
実行権限持ち出し、破壊、権限昇格bash、write、外部API、クラウド操作最小権限、承認ゲート、サンドボックス、egress制御
供給網悪性パッケージ、乗っ取り、rug pullnpm/PyPI、モデル重み、スキル、MCPサーバーミラー、固定、署名、レビュー、SBOM

よくある取り違え

「Web検索を禁止すれば漏洩しない」

Web検索の禁止が効くのは、主に2層目(外部入力)だ。検索結果を読ませなければ、隠し命令の注入は減る。しかし、1層目(モデル提供者への送信)や3層目(curl による持ち出し)や4層目(悪性パッケージ)は残る。検索を禁止しても、エージェントが curl を使えれば外に出せる。

「ZDR契約があるから安全」

ZDRは1層目(保持)に効く。2層目のプロンプトインジェクションや3層目の実行権限、4層目の供給網には効かない。ZDRは「送らない」でもない(ZDRは「データを送らない」ではない)。

「社内ミラーを入れれば安全」

ミラーは4層目(供給網)に効く。だが、ミラーが上流を自動プロキシするだけなら、悪性パッケージはそのまま入る。2層目のREADME経由の注入や、3層目の実行権限も残る(社内ミラーは「便利」より先に「供給網の境界」として設計する)。

「承認ゲートを入れれば安全」

承認ゲートは3層目(実行権限)に効く。だが、人間が内容を理解できないまま承認するなら、形だけになる。1層目、2層目、4層目は別に設計が必要だ。


層をまたぐ攻撃

実際の攻撃は、層をまたぐ。

  • 外部入力(2層目)に隠した命令で、エージェントに機密を読ませ(3層目)、検索クエリやURLに埋め込んで外へ出す(1層目)
  • 悪性パッケージ(4層目)を入れ、インストール時のスクリプトで認証情報を抜き、外部へ送る(1層目・3層目)
  • 乗っ取られたMCPサーバー(4層目)が、返り値に命令を埋め込み(2層目)、別のツールで外部送信させる(3層目)

だから、層ごとの対策を 重ねる 必要がある。どれかひとつが完璧でも、他が開いていれば意味がない。


設計への落とし込み

4層を分けたら、次は「どのデータに、どの操作を、どこまで許すか」を決める。これは データ分類×操作リスクのマトリクス で扱う。

ハーネスは、3層目(実行権限)と一部の1層目(egress)を強制するのに向いている。だが、2層目の内容の安全性や、4層目の供給網の信頼性は、ハーネスの外側で作る必要がある(ハーネスで強制できる統制と、できない統制)。


まとめ

「どのツールを禁止するか」ではなく、「どの層の、どのリスクを、何で下げるか」 で考える。Web検索、ZDR、ミラー、承認ゲートは、それぞれ別の層に効く道具である。ひとつの道具に全部を背負わせないことが、過剰禁止と過小防御の両方を避ける第一歩になる。


関連ノート


参考資料