prompt-injection-defense について
prompt-injection-defenseは、AIエージェントシステムのセキュリティ評価に使うスキルです。脅威モデルを基に、境界の把握、対策、安全なテスト、残存リスクの記録を進めます。
主な機能
- 01データフローと信頼境界の把握
- 02強制可能なセキュリティ不変条件の定義
- 03ツールと認証情報の権限縮小
- 04安全な敵対的テストの設計
- 05監視とインシデント復旧の計画
活用シーン
- 01エージェントのプロンプトインジェクションリスク評価
- 02ツール権限とデータ送信の監査
- 03エージェント変更向け回帰テストの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ seb1n/ awesome-ai-agent-skills --skill prompt-injection-defenseインストール後、Claude Code で/prompt-injection-defenseを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/defense-patterns.mdscripts/audit_boundary_manifest.py詳細
プロンプトインジェクション対策
モデルの推論が侵害されることを前提に設計します。プロンプトの文面や分類器によって攻撃の成功率を下げることはできますが、信頼できるセキュリティ境界にはなりません。重大な結果につながる権限、認可、検証、ポリシー適用は、モデルの外部で行います。
入力
次の情報を収集または推定し、前提にはその旨を明記します。
- エージェントの目的、システム/開発者向け指示、モデル、メモリ、オーケストレーション
- ユーザー、ウェブページ、メール、ドキュメント、画像、音声、ツールの結果、RAG、他のエージェントなど、すべての入力元
- ツールの一覧、権限、ID、対象、書き込みによる影響、ネットワークへの送信
- シークレット、プライベートデータ、システムプロンプト、ポリシーデータ、その他の保護対象資産
- UI の描画、コード実行、メッセージ、データベース、下流のエージェントなど、出力先
- 認可モデル、人間による承認、監視、インシデント履歴、許容リスク
- 代表的な正常タスクと安全な評価環境
本番環境のシークレットや悪意のある成果物をチャットで要求しないでください。編集して伏せ字にしたサンプルや合成データのテスト用フィクスチャを使用します。
出力要件
次を提出します。
- 保護対象資産、すべてのモダリティ、出力先、メモリストア、エージェント間のやり取り、承認済みの宛先、認証情報の境界を網羅したデータフローと信頼境界のマップ
- 保護対象資産、攻撃者が制御できるチャネル、インジェクション経路、セキュリティ不変条件を列挙した脅威モデル
- 各経路を予防、影響制限、検知、復旧の各制御に対応付け、それぞれに
missing、planned、implemented、verifiedのいずれかを付けた、優先順位付きの防御計画 - ユーザーが認可した範囲内でのコードまたは設定の変更のみ
- 該当する場合、安全な直接、間接、保存済み、エンコード済み、エージェント間、マルチモーダルのケースを含む回帰テストスイート
- 一律に防止できると主張するのではなく、検証の証拠、確認された失敗、メトリクス
- 残存リスク、運用監視、インシデントの封じ込め/復旧計画
アーキテクチャを JSON の境界マニフェストに記述し、scripts/audit_boundary_manifest.py を使って lint を実行します。各制御について、適用箇所、担当者、証拠 ID、テスト ID、有効期限がある場合はその期限を記録します。構造上の lint に合格しても、制御が機能する証拠にはなりません。攻撃経路、制御の配置、検証パターンについては references/defense-patterns.md を参照してください。
ワークフロー
1. 指示、データ、権限、出力先をマッピングする
コンテンツの発生元から、解析、取得、モデルコンテキスト、メモリ、ツール、レンダラー、出力先、下流のエージェントまでを追跡します。攻撃者が制御できる、または信頼レベルが混在するソースをすべて明示します。非表示のドキュメント本文、メタデータ、コードコメント、OCR、画像、音声、リダイレクト、ツールの説明、永続化されたメモリを含めます。承認済み/拒否された宛先、各認証情報の保持者/対象者/保存境界、コンテンツまたは権限がエージェント間を移動するすべての箇所を一覧にします。
シークレットの開示、プライベートデータへのアクセス、許可されていないツール呼び出し、外部通信、トランザクション、コード実行、ポリシーの回避、メモリの汚染、誤解を招く出力など、資産とその影響を列挙します。
2. 強制可能な不変条件を定義する
たとえば、決定論的なコンポーネントで強制できる要件として表現します。
- 取得したコンテンツによって、権限を付与したり、ツールの許可リストを変更したりできない。
- サポートエージェントは、認証済みテナントの範囲外にあるレコードを読み取れない。
- メール本文によって、送信操作の宛先を決めることはできない。
- モデルの出力は、検証と安全な処理を経ずにコードや HTML として実行できない。
- タスクに不要なシークレットは、モデルコンテキストに入らない。
不変条件がプロンプトの指示にしか存在しない場合は、弱い制御として記録し、コード、ポリシー、分離、または人間による制御に適用箇所を移します。
3. 露出する権限を減らす
未使用のツール、広範なトークン、暗黙に利用できる認証情報、汎用シェル、任意の URL フェッチ、直接実行できる SQL、制限のないファイルアクセスを取り除きます。読み取りと書き込み、プレビューとコミットを分離します。テナント、オブジェクト、アクション、フィールド、時間、送信先ごとに ID の権限を制限します。
シークレットをモデルのコンテキストやツールの結果に含めないでください。ネットワークおよびデータの送信先を許可リストで制限します。コード、パーサー、ブラウザー、ファイル処理をサンドボックス化します。重大な影響を及ぼす操作の直前に、独立した認可を必須にし、必要に応じて操作ごとの承認も求めます。critical に分類されたツールの確認モードを none にしてはいけません。
4. 制御情報と信頼されていないコンテンツを分離する
信頼されていないコンテンツは、出所を明示した引用データとして扱い、決して権限として扱わないでください。取得処理やエージェント間の引き継ぎでは、情報源の境界を保ちます。指示とデータを連結するのではなく、型付きの構造化メッセージを使用します。取得するコンテンツを制限し、安全な場合はアクティブコンテンツを除去し、対応する形式を正規化して、出力先のコンテキストに適したエスケープ処理を施してから表示します。
指示の優先順位、区切り文字、リマインダー、コンテンツ分類器、インジェクション検出器は、多層防御のシグナルとして利用できます。いずれかひとつだけに依存してはなりません。
5. すべての遷移を検証する
実行前に、厳密なスキーマとポリシーに照らしてツール引数を検証します。可能な場合は、信頼できないテキストではなく、信頼できるアプリケーションの状態から機密性の高い対象 ID を導出します。実行時に再認可します。モデルの出力は送信先に合わせて検証およびエンコードし、シェル、SQL、テンプレート、URL、特権 API に直接渡してはなりません。
マルチエージェントシステムでは、送信元を認証し、委任の深さと予算を制限して、出所を伴う構造化されたクレームを渡し、各ホップで権限を再計算します。上流の最も広い権限を暗黙に引き継いではなりません。
6. 安全な敵対的ケースでテストする
隔離された環境、合成アカウント、無害なカナリアシークレット、無害な送信先、非破壊的なツールを使用します。少なくとも以下をテストします。
- 指示を上書きしたり、保護されたデータを引き出したりする直接的な試み
- 取得したページ、メール、ドキュメント、ツールの結果、メタデータ、メモリに埋め込まれた間接的な指示
- 難読化、エンコード、言語の変更、複数ターンにまたがる分割、繰り返しの試み
- エージェント間の委任と、汚染された要約
- 画像、音声、PDF、HTML、OCR に対応している場合の、隠しコンテンツまたは別モダリティのコンテンツ
- ツール引数の改ざん、対象の置き換え、データの持ち出し、不正な送信
- 代表的な無害なコンテンツや通常のタスク完了に対する誤検知
不変条件への違反、不正なツール呼び出しの試み、カナリアの露出、無害なタスクの成功、誤検知率、封じ込め動作を測定します。検出器の合格率だけでは不十分です。実装の証拠と、明示されたテストの証拠の両方が揃った場合に限り、制御を verified にします。コードは存在するものの、関連するテストで動作が確認されていない場合は implemented を使用します。
7. 運用と復旧
シークレットや不要なコンテンツを保存せずに、出所、ポリシーの判断、ツールと対象のメタデータ、拒否、異常なシーケンスをログに記録します。カナリアへのアクセス、ポリシー違反の繰り返し、新たなツールの公開、テナント間アクセスの試み、予期しない送信に対してアラートを出します。
インシデントが疑われる場合は、影響を受けたワークフローを停止または隔離し、高リスクのツールと送信を無効にして、露出した認証情報を失効またはローテーションし、悪意のある情報源を隔離して、秘匿化した証拠を保全します。永続化されたメモリやベクターエントリと下流への影響を特定し、クリーンな状態を復元したうえで、アクセスを再び有効にする前に回帰テストを再実行します。
認可と安全性の境界
- 明示的な対象固有の認可なしに、本番環境、第三者のシステム、またはユーザーのシステムに対してペイロードをテストしないでください。
- 実際のトランザクション、メッセージ、削除、アクセス権の変更、マルウェア、データの持ち出しを発生させないでください。影響を与えないカナリアと合成の宛先を使用してください。
- 実際のシークレット、個人データ、特権を持つシステムプロンプト、または有効なトークンを、テスト用コーパスやログに決して含めないでください。
- プロンプトインジェクションを排除したと主張しないでください。テストした範囲、モデル/設定、証拠、制限事項、残存リスクを明示してください。
- 侵害された可能性のあるメモリー、記録、または証拠を、ひそかに削除しないでください。まず隔離し、所有者の保持ポリシーとインシデント対応ポリシーに従ってください。
- 範囲が不明確な場合、カナリアが意図しないシステムに到達した場合、実際の機密データが現れた場合、または予期しない外部への影響が発生した場合は、テストを中止してエスカレーションしてください。
検証と復旧
完了前に、すべての保護対象資産、信頼できない経路、シンク、メモリーストア、エージェントのホップ、宛先、認証情報の境界が網羅されていること、影響の大きいすべての操作にモデル以外による権限チェックがあること、重要なツールに確認手順があること、公開された権限が最小限に抑えられていること、そして回帰テストで攻撃への耐性と無害なタスクの有用性の両方が検証されていることを確認してください。不明な点を根拠のない「すべて有効」という断定に変えないでください。missing と planned の制御は、見える課題として残してください。モデル、プロンプト、パーサー、検索、ツール、権限、またはオーケストレーションに変更を加えた後は、テストを再実行してください。
制御によって許容できないタスク失敗が発生する場合は、その制御だけを切り戻し、リスクの高いツールは無効のままにして、失敗したケースを保持し、境界を再設計してください。成功率を上げるためだけに、広範な権限を復元しないでください。
現実的な例
メール振り分けエージェント
件名、本文、添付ファイル、引用されたスレッドを、信頼できないデータとして扱ってください。モデルには分類と下書きの作成を許可しますが、メールボックスとテナントは認証済み状態から決定してください。下書きと送信を分離し、宛先ドメインを制限し、外部への送信には対象のメッセージを明示した承認を必須にしてください。また、カナリアの開示や宛先の変更を指示する、影響を与えない指示文を含む添付ファイルを使ってテストしてください。
ウェブアクセスを行うリサーチエージェント
内部シークレットにアクセスできない状態でブラウジングを実行してください。必要な宛先を許可リストに登録し、アクティブコンテンツを除去し、ページの出所を保持し、ページ本文によってツールが追加されたり、リサーチの目標が変更されたりするのを防いでください。隠されたページテキスト、悪意のあるツールの結果、エンコードされた指示、そして誤検知を測定するための、セキュリティ関連の語句を含む通常のページをテストしてください。
完了チェック
アーキテクチャ、制御、テスト、復旧がデータフロー全体を網羅し、証拠によってテスト環境で保護対象の不変条件が維持されていることが示され、無害なタスクの有用性が測定され、残存リスクと未検証の領域が明示されている場合にのみ、完了としてください。