テキストコンテンツスキャナを回避するステガノグラフィックなプロンプトインジェクションベクターの再現可能な概念実証と、それをデコード境界で封じ込める防御 — デコード時来歴バインディング。
教育/防御的セキュリティ研究専用。 このリポジトリ内のすべてのシークレットは 偽物です。自身が所有する、またはテストを許可されたシステムでのみ使用してください。
攻撃者が被害者に一見普通のメールを送信する。メール署名内のブランドロゴが、
ステガノグラフィ(LSB、DCT、またはメタデータ)によって命令を隠蔽している。
画像は元のものと視覚的に同一で、疑わしいテキストを含まないため、
コンテンツスキャナは何も検出せず、被害者は何もクリックしない。しかし、
被害者の日常的な受信トレイ要約エージェントが署名を処理し、そのパイプライン内の
ツールが画像をデコードし、隠された命令がエージェントのコンテキストに入り込む —
そこでは、マルチエージェントMCPパイプラインにおいて、信頼されたピア出力として
エージェント間で中継され、重要なツール呼び出しを駆動する。これがクロスモーダル
信頼洗浄である。防御であるデコード時来歴バインディングは、隠蔽を逆転する
ツールが実行された瞬間にHMAC署名付きのUNTRUSTEDラベルを発行し、MCP層に
来歴の系譜自体を維持させることで、系譜が信頼されていない重要なツール呼び出しを
ブロックする — たとえ侵害されたエージェントが無関係な信頼済み値に対して有効な
ラベルを提示したとしても。これは検出ではなく封じ込めであるため、ペイロードの
文言やキャリアに依存しない。
攻撃成功率(ASR) — 24個のペイロード(3つのキャリア × 8つの回避手法: プレーン、無害な文言、Base64、トークン分割、キリル文字ホモグリフ、ゼロ幅、 Unicode混同文字、HTMLコメント)。低いほど良い。インプロセスのテイント ベースラインは、デコード出力を信頼できないものとしてマークするが、クロスドメインの 暗号学的バインディングを持たない情報フロー制御である:
| 防御 | 漏洩 | n | ASR |
|---|---|---|---|
| 無防備(チェックなし) | 24 | 24 | 100% |
| コンテンツスキャナ(キーワード/DLP) | 15 | 24 | 62.5% |
| 正規表現インテントパーサ | 15 | 24 | 62.5% |
| データフローテイント(IFCベースライン) | 0 | 24 | 0% |
| デコード時来歴(本手法) | 0 | 24 | 0% |
テイントと来歴は単一ドメインのASRでは同等だが、敵対的な中継(下記)の下では 分岐する — これが暗号学的バインディングの要点である。
有効ラベル置換 — 侵害されたエージェントが、実際に呼び出しを駆動している
UNTRUSTEDデコード起点を省略しつつ、無害なツールからの正当に署名された
TRUSTEDバインディングを提示する。修正策は、MCP層が系譜自体を維持し、
エージェントが提供するバインディングではなく自身の台帳に基づいて判断することである:
| 強制方法 | 判定 |
|---|---|
| エージェント提供のバインディングのみ(素朴) | 許可(漏洩) |
| 層が維持、依存関係を省略 | ブロック |
| 層が維持、依存関係が引数内 | ブロック |
| 層が維持、クリーンなコンテキスト | 許可 |
コンポーネントアブレーション — 4つのコンポーネント、それぞれが異なる攻撃を
防御する。一度に1つを無効化する。substitutionはドメイン内、forged relayは、
提示されたバインディングのみを保持するリモート検証者への信頼されていない中継を
通過する偽造TRUSTEDラベルである。重要なのは、HMAC単独では置換を止められず
(台帳が止める)、台帳単独ではクロスドメイン中継を生き延びられない(HMACが
生き延びさせる)ことである:
| 構成 | Honest | Substitution | Forged relay |
|---|---|---|---|
| 完全なメカニズム | ブロック | ブロック | ブロック |
| − デコードマーキング | 漏洩 | 漏洩 | 漏洩 |
| − 暗号認証 (HMAC) | ブロック | ブロック | 漏洩 |
| − 信頼された系統追跡 | ブロック | 漏洩 | ブロック |
| − シンク仲介 | 漏洩 | 漏洩 | 漏洩 |
コンテキスト間伝播 — テイントはツール戻り値のハンドルだけでなく、エージェント間のメッセージ境界を越えて存続します。エージェント A での信頼できないデコードが、エージェント B の別コンテキストにある重要な呼び出しに到達し、仲介されたチャネル(脅威モデルがエージェント間通信に既に要求しているもの)上ではテイントが伝播し、B はブロックされます。このレイヤーが仲介しないチャネルは、構造上モデルの範囲外であり、スコープ内の漏洩ではありません:
| チャネル A → B | B の重要な呼び出し |
|---|---|
| 仲介されたエージェント間メッセージ(スコープ内) | ブロック(テイント伝播) |
| 仲介されないサイドチャネル(モデル外) | 対象外 |
オーバーヘッドのスケーリング — MintBinding は約 O(1)(深さに関係なく約 10〜14 µs)。EnforceCritical は走査する依存クロージャに対して線形(深さ 1 で約 10 µs → 深さ 100 で約 0.66 ms → 深さ 1000 で約 6.7 ms)であり、同時にテイントされたコンテキストの数に対してはフラット(約 6〜7 µs)です。現実的なクロージャ(深さ数十)は約 0.1 ms 未満に収まります。
正当なタスクの有用性 — 監査された信頼昇格パス(特定のデコードされた値、例えば OCR された請求書番号を、認可の下で再ラベル付けする)は、攻撃がブロックされたまま誤ブロックを排除します:
| レジーム | 完了率 | 誤ブロック | 攻撃ブロック |
|---|---|---|---|
| 昇格なし | 2/3 (67%) | 1 | はい |
| 信頼された昇格 | 3/3 (100%) | 0 | はい |
デコードセットの完全性 — 登録の前提を直接検証:
| デコードセット | ステゴ攻撃 | 正当な重要な呼び出し |
|---|---|---|
| 正しい | ブロック | 許可 |
| デコーダ欠落 | 漏洩 | 許可 |
| 過度に広範 | ブロック | 誤ブロック |
ハンドオフ間のラベル整合性 — バインディングは正直なリレーを経ても存続し、侵害されたワーカーに耐えます:
| リレーシナリオ | 検証者の判定 |
|---|---|
| 正直なリレー、1 / 3 / 5 / 10 ホップ | 検証成功;ブロック |
| 侵害: ペイロードを書き換え、HMAC を保持 | ブロック(HMAC 不一致) |
侵害: TRUSTED を偽造 | ブロック(HMAC 不一致) |
| 侵害: バインディングを剥奪 | ブロック(有効なラベルなし) |
オーバーヘッド — 判定ポイントでは実質的に無料です: バインディングの発行と検証はそれぞれ約 8〜9 µs(合計約 17 µs)で、デコードツール呼び出しの約 11 ms と比較して追加は約 0.2% 未満です。キャリア歪みは低く(LSB ≈ 76 dB PSNR、メタデータはロスレス;DCT ≈ 18 dB — これは歪み指標であり、知覚的不可視性の主張ではありません)。
stego_provenance_defense_poc.ipynb # the full PoC (run top-to-bottom)
requirements.txt # dependencies (mcp pinned <2)
ノートブックを実行すると、すべての図、表、CSVがColabではMyDrive/stego_provenance_poc/{figures,tables,data}に(ローカルでは./stego_provenance_poc/に)書き出されます。すべての図と表はセルによって生成されるため、クリーンな実行から全体を再現できます。
stego_provenance_defense_poc.ipynbを開きます。MyDrive/stego_provenance_poc/{figures,tables,data}に表示されます。pip install -r requirements.txt
jupyter notebook stego_provenance_defense_poc.ipynb
出力は ./stego_provenance_poc/ に保存されます。GPU はオプションです(エージェントモデルは
小規模です)。セキュリティ上の結果はモデルに依存しません。
これは、しばしば混同される 2 つの保証 を組み合わせたものであり、その貢献は HMAC 単独ではなく、両者の結合にあります。
系統(lineage)自体を維持する MCP レイヤーにおける 2 つの決定論的処理:
UNTRUSTED である場合(伝染性)、
{payload, tool, trust, provenance, deps} に trust = UNTRUSTED を付与し、
解決済みの入力依存関係 deps を記録し、
HMAC_k(payload‖tool‖trust‖provenance‖deps) で署名してレイヤーの台帳に書き込み、
(信頼できない場合は)コンテキストのテイント集合に追加します。UNTRUSTED のデータ起源、または空でない
コンテキストテイントのいずれかがあればブロックし、それ以外は許可します。
系統を保持するのはエージェントではなくレイヤーであるため、侵害されたエージェントは
信頼できない依存関係を省略して隠すことはできません。セキュリティ不変条件。 (i) 鍵が MCP レイヤーに閉じ込められていること、(ii) デコードツールの
完全な登録、(iii) すべての重要呼び出しの仲介、(iv) レイヤーが各呼び出しの完全な系統
(解決済みの引数依存関係 + 各コンテキストに入るデコード起源)を記録すること、の条件下で:
推移的な系統(データまたはコンテキスト)に UNTRUSTED のデコード起源が含まれる重要ツール呼び出しは、
監査済みの信頼できる昇格がその特定の起源をクリアしない限り、実行されません。
教育および防御的セキュリティ研究のために公開されています。LICENSE を参照してください。