本論文のソースコード:
ROPE: Routed Origin Policy Enforcement against Indirect Prompt Injection by Xinhang Ma, Chaowei Xiao, William Yeoh, Ning Zhang, Yevgeniy Vorobeychik
間接プロンプトインジェクション(IPI)は、ツールを使用するLLMエージェントが読み取るコンテンツに命令を埋め込み、エージェントを有害なツール呼び出しへと誘導します。最も強力な防御はシステムレベルであり、タスク条件付きツールスクリーニングなどの手法を用いて悪意のあるツールの実行を防ぎ、情報フロー制御によって信頼できないパラメータでのツール実行を回避します。しかし、エージェントがより高性能になるにつれ、ユーザーは自動化に多くの処理を委任するようになります。その結果、ツール実行シーケンスとパラメータ値は実行時に決定されることが増え、ユーザークエリのみに含まれる情報を用いて大きなユーティリティ損失なしに確実にスクリーニングすることはできません。本稿では、構造的な信頼概念に基づくROPE(Routed Origin Policy Enforcement)を提案します。値が状態変更ツールに到達できるのは、その値がユーザー、ユーザーが明示的に指定したソース、またはユーザー自身の権威ある記録に偽造不可能な形で由来する場合のみです。執行は、監査済みの機密ツールパラメータセットに対する決定的な由来チェックであり、言語モデルへの依存は攻撃者の手の届かない信頼されたユーザーリクエストのみに限定されます。本手法は2つの証明可能な保証を提供します: 1) 軌跡の各ステップにおいて、攻撃者が書き込み可能なコンテンツのみを由来とする値が由来ガード付きパラメータに到達しないこと、2) インジェクションの言い換えによって許可判断が変わらないこと。広範な実験評価を通じて、オープンエンドなエージェントスイート上の4つのエージェントモデルにおいて、ROPEは攻撃成功率を1.6〜2.6%に抑えつつ、非防御時のクリーンユーティリティの82〜100%を維持し、複雑な動的ワークフローにおいて最先端のシステムレベル防御をユーティリティで大幅に上回り、同等以上のセキュリティを達成することを示します。さらに、ROPEに対するインジェクションの最適化はほぼ効果がなく、従来のシステムレベル防御を打ち破る長期的攻撃は本手法では成功率ゼロを達成します。
| パス | 内容 |
|---|---|
src/rope/ | 防御機構: ルーター、タスク別スコープ、ポリシーコンパイラ、由来トラッカー、実行時ガード。 |
src/rope/scopes/_floor/<suite>.json | スイート別の監査済み機密ツール/パラメータテーブル(全ルーターで共有)。 |
src/rope/scopes/<router>/<suite>.json | 評価対象の3つのルーター(opus、gemini-3-flash、gpt-oss-20b)のタスク別スコープのキャッシュ — 論文のルーター出力のオフラインリプレイ。 |
src/common/ | ルーターが使用するLLM完了キャッシュ(信頼された入力呼び出しのみ)。 |
autodojo/ | 主要なベンチマークハーネスと適応的攻撃: 評価対象の6つのスイートすべてを直接サポート: banking、slack、travel(AgentDojoの4つのうち3つ)およびgithub、shopping、dailylife(AgentDyn由来)。 |
agentlab/ | 長期地平ベンチマーク: AgentLABのTask-Injection攻撃とその公開済み攻撃トレース、およびリプレイドライバ。agentlab/README.mdを参照。 |
runs/ | 4つのエージェントモデルすべてのROPE実行ログ(JSON)、およびruns/ablation/(2つの固定ポリシーアーム)とruns/router/(より安価なルーター、クランプあり/なし)、および報告されたROPE数値をログから再計算するスクリプト。 |
Python 3.12にopenai、pydantic、jsonschema、pyyaml(ネイティブGeminiパスにはgoogle-genaiも)が必要です。リポジトリルートから:
export PYTHONPATH=$PWD/autodojo/src:$PWD/src
cd runs
python aggregate.py # スイート別CU / UA / ASR + 全体(両ベンチマーク)
python adaptive_rope.py # 静的 vs 適応的、CU/UA/ASR(AutoDojo攻撃、両ベンチマーク)
python longhorizon_rope.py # 長期地平(AgentLAB Task-Injection)
python ablation.py # ポリシーアブレーション: 常に完全指定 / 常にアクションオープン
python router.py # より安価なルーター、執行クランプあり/なし
python failures.py # 失敗センサス: すべての残存攻撃成功 + クリーンタスク失敗
python buckets.py # カテゴリ別(過少指定バケット)テーブル
python router_deviation.py # 監査済みフロアに対するルーター別の緩和/厳格化カウント
各スクリプトはログからテーブルを再計算して出力します。期待値を保持するものはありません。
buckets.pyとrouter_deviation.pyは上記のようにPYTHONPATHの設定が必要です(スイート定義とキャッシュ済みスコープを読み取ります)。その他は同梱のJSONログのみを読み取ります。
runs/<model>/<suite>/user_task_*/、runs/ablation/<policy>/<suite>/user_task_*/および
runs/router/<router>[-clamp]/<suite>/user_task_*/には、評価セルごとに1つのJSONが格納されます: none/(クリーン)、
important_instructions/(静的攻撃)、autodojo/(適応的攻撃)、および
agentlab_longhorizon/(長期地平段階的攻撃)。
スコアリング修正。 3つのベンチマークオラクルは実行ブロック防御に対して不健全です。
runs/corrections.pyは3つの効果ベースの再スコアリング — slack IT5、
dailylife IT7、github IT1 — をディスパッチし、集約器がそれらを適用します。各モジュールのdocstringは
成果物と修正内容を文書化しています。CUとUAは決して変更されません。
# 主結果構成(キャッシュ済みopusルーター、厳密マッチング、クランプなし):
python -m rope.run_eval --suite github --attack important_instructions
python -m rope.run_eval --suite github --attack none # クリーンユーティリティ
python -m rope.run_eval --suite github --defense passthrough # 非防御ベースライン
# ルーター研究のより安価なルーター、オプションで監査済みフロアにクランプ:
python -m rope.run_eval --suite github --router gemini-3-flash --clamp
# ライブルーター(実行時に任意のOpenAI互換モデルでスコープを再計算):
python -m rope.run_eval --suite github --router live --router-model openai/gpt-4o-mini --clamp
# 適応的攻撃: キャッシュ済みAutoDojo最適化インジェクションをリプレイ
AUTODOJO_CACHE=$PWD/autodojo/variant_generation/variants/github/openai/gpt-4o-mini/routed/injections.json \
python -m rope.run_eval --suite github --attack autodojo
# 長期地平攻撃: AgentLABのキャッシュ済みトレースをリプレイ(agentlab/README.mdを参照)
python agentlab/run_eval.py --suite banking --user-task user_task_0 --injection-task injection_task_0
環境変数: OPENROUTER_API_KEY(エージェントモデルとライブルーター。報告されたすべての実行は
エージェントモデルをOpenRouter経由で呼び出します)、
ROPE_AGENT_MODEL(デフォルトopenai/gpt-4o-mini)、
ROPE_PIPELINE_TAG(実行ログのタグ付け用。攻撃テンプレートが解決できるようAgentDojoモデル名を含める必要があります)。
キャッシュ済みルーターにより、ルーティング側では防御機構は完全に決定的でAPI不要になります: opus
は6つのスイートすべてをカバーし、gemini-3-flashとgpt-oss-20bはAgentDynスイート(ルーター
研究のスコープ)をカバーします。独自のルーターを評価するには、一度キャッシュして組み込みのように再利用します:
python -m rope.cache_router --router my-router --router-model <llm-id> --suite github
python -m rope.run_eval --router my-router --suite github --attack important_instructions
本リポジトリは以下をベンダー提供または基盤としています: AgentDojoおよびAgentDyn(ベンチマークスイート)、AutoDojo(適応的攻撃)、およびAgentLAB(長期地平ベンチマークとTask-Injection攻撃トレース)。詳細は各論文を参照してください。
本研究成果が役立つ場合は、以下の引用をいただければ幸いです:
@article{rope,
title={ROPE: Routed Origin Policy Enforcement against Indirect Prompt Injection},
author={Ma, Xinhang and Xiao, Chaowei and Yeoh, William and Zhang, Ning and Vorobeychik, Yevgeniy},
journal={arXiv preprint arXiv:2608.27496},
year={2026}
}