
Verteidigungs-Framework, das eine geroutete Ursprungsrichtlinie durchsetzt, um indirekte Prompt-Injection bei LLM-Agenten mit Werkzeugnutzung zu verhindern, mit deterministischen Ursprungsprüfungen und Benchmark-Umgebungen zur Bewertung von Angriffserfolg und Nutzenbewahrung.
Quellcode unseres Papers:
ROPE: Routed Origin Policy Enforcement gegen indirekte Prompt-Injection von Xinhang Ma, Chaowei Xiao, William Yeoh, Ning Zhang, Yevgeniy Vorobeychik
Indirekte Prompt-Injection (IPI) platziert Anweisungen in Inhalten, die ein werkzeugnutzendes LLM-Agent liest, und lenkt den Agenten so zu schädlichen Werkzeugaufrufen. Die stärksten Verteidigungen sind systemebenenbasiert und nutzen Techniken wie aufgabenbedingtes Werkzeug-Screening, um die Ausführung bösartiger Werkzeuge zu verhindern, sowie Informationsflusskontrolle, um Werkzeugausführung mit unvertrauenswürdigen Parametern zu vermeiden. Da Agenten jedoch leistungsfähiger werden, delegieren Nutzer mehr an die Automatisierung. Folglich werden Werkzeugausführungssequenzen und Parameterwerte zunehmend zur Laufzeit bestimmt und können nicht zuverlässig anhand von Informationen gescreent werden, die ausschließlich in der Nutzeranfrage enthalten sind, ohne erheblichen Nutzenverlust. Wir präsentieren ROPE (Routed Origin Policy Enforcement), das in einem strukturellen Vertrauensbegriff verankert ist: Ein Wert darf ein zustandsänderndes Werkzeug nur dann erreichen, wenn er unverfälschbar auf den Nutzer, eine vom Nutzer ausdrücklich benannte Quelle oder die eigenen autoritativen Aufzeichnungen des Nutzers zurückgeht. Die Durchsetzung ist dann eine deterministische Ursprungsprüfung über einen geprüften Satz sensibler Werkzeugparameter, und die einzige Abhängigkeit von einem Sprachmodell betrifft ausschließlich die vertrauenswürdige Nutzeranfrage, die außerhalb der Reichweite des Angreifers liegt. Unser Ansatz bietet zwei beweisbare Garantien: 1) Bei jedem Schritt einer Trajektorie erreicht kein Wert, dessen einziger Ursprung angreiferbeschreibbarer Inhalt ist, einen ursprungsgeschützten Parameter, und 2) keine Umformulierung einer Injection ändert eine Zulassungsentscheidung. Durch umfangreiche experimentelle Auswertung zeigen wir, dass ROPE über vier Agentenmodelle auf offenen Agenten-Suiten die Angriffserfolgsrate auf 1,6–2,6 % hält, während 82–100 % des unverteidigten sauberen Nutzens erhalten bleiben, und damit modernste systemebenenbasierte Verteidigungen im Nutzen deutlich übertrifft, während es bei komplexen dynamischen Arbeitsabläufen vergleichbare oder bessere Sicherheit erreicht. Darüber hinaus zeigen wir, dass die Optimierung der Injection gegen ROPE weitgehend wirkungslos ist, während langfristige Angriffe, die frühere systemebenenbasierte Verteidigungen überwinden, in unserem Fall eine Erfolgsrate von null erreichen.
Python 3.12 mit openai, pydantic, jsonschema, pyyaml (und google-genai für den nativen
Gemini-Pfad). Vom Repository-Stammverzeichnis aus:
export PYTHONPATH=$PWD/autodojo/src:$PWD/src
cd runs
python aggregate.py # CU / UA / ASR pro Suite + Gesamtwerte (beide Benchmarks)
python adaptive_rope.py # statisch vs. adaptiv, CU/UA/ASR (AutoDojo-Angriff, beide Benchmarks)
python longhorizon_rope.py # Langzeit (AgentLAB Task-Injection)
python ablation.py # Policy-Ablation: immer vollständig spezifiziert / immer aktionsoffen
python router.py # Günstigere Router, mit und ohne Durchsetzungs-Klemme
python failures.py # Fehler-Zählung: jeder verbleibende Angriffserfolg + Fehler bei sauberen Aufgaben
python buckets.py # Tabellen pro Kategorie (Unterspezifikations-Bucket)
python router_deviation.py # Lockerungs-/Verschärfungs-Zählungen pro Router gegenüber dem geprüften Mindeststandard
Jedes Skript berechnet seine Tabelle aus den Protokollen neu und gibt sie aus; keines enthält erwartete Werte.
buckets.py und router_deviation.py benötigen PYTHONPATH wie oben gesetzt (sie lesen die
Suiten-Definitionen und die zwischengespeicherten Geltungsbereiche); die übrigen lesen nur die mitgelieferten JSON-Protokolle.
runs/<model>/<suite>/user_task_*/, runs/ablation/<policy>/<suite>/user_task_*/ und
runs/router/<router>[-clamp]/<suite>/user_task_*/ enthalten jeweils ein JSON pro bewerteter Zelle: none/ (sauber),
important_instructions/ (statischer Angriff), autodojo/ (adaptiver Angriff) und
agentlab_longhorizon/ (gestaffelter Langzeit-Angriff).
Bewertungskorrekturen. Drei Benchmark-Orakel sind für ausführungsblockierende Verteidigungen unzuverlässig.
runs/corrections.py verteilt die drei effektbasierten Neubewertungen — slack IT5,
dailylife IT7, github IT1 — und die Aggregatoren wenden sie an; die Docstring jedes Moduls dokumentiert das
Artefakt und die Korrektur. CU und UA werden nie verändert.
# Haupt-Ergebniskonfiguration (zwischengespeicherter opus-Router, strikte Übereinstimmung, ungeklemmt):
python -m rope.run_eval --suite github --attack important_instructions
python -m rope.run_eval --suite github --attack none # sauberer Nutzen
python -m rope.run_eval --suite github --defense passthrough # Basislinie ohne Verteidigung
# Günstigere Router aus der Router-Studie, optional auf den geprüften Mindeststandard geklemmt:
python -m rope.run_eval --suite github --router gemini-3-flash --clamp
# Live-Router (Geltungsbereich zur Laufzeit mit jedem OpenAI-kompatiblen Modell neu berechnen):
python -m rope.run_eval --suite github --router live --router-model openai/gpt-4o-mini --clamp
# Adaptiver Angriff: die zwischengespeicherten AutoDojo-optimierten Injectionen wiedergeben
AUTODOJO_CACHE=$PWD/autodojo/variant_generation/variants/github/openai/gpt-4o-mini/routed/injections.json \
python -m rope.run_eval --suite github --attack autodojo
# Langzeit-Angriff: AgentLABs zwischengespeicherte Traces wiedergeben (siehe agentlab/README.md)
python agentlab/run_eval.py --suite banking --user-task user_task_0 --injection-task injection_task_0
Umgebungsvariablen: OPENROUTER_API_KEY (Agentenmodell und Live-Router; alle berichteten Ausführungen rufen
die Agentenmodelle über OpenRouter auf),
ROPE_AGENT_MODEL (Standard openai/gpt-4o-mini),
ROPE_PIPELINE_TAG zum Kennzeichnen der Ausführungsprotokolle (muss einen AgentDojo-Modellnamen enthalten, damit die Angriffsvorlagen aufgelöst werden).
Die zwischengespeicherten Router machen die Verteidigung auf der Routing-Seite vollständig deterministisch und API-frei: opus
deckt alle sechs Suiten ab; gemini-3-flash und gpt-oss-20b decken die AgentDyn-Suiten ab (der
Geltungsbereich der Router-Studie). Um Ihren eigenen Router zu bewerten, speichern Sie ihn einmal zwischen und verwenden Sie ihn wie einen integrierten:
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
Dieses Repository bezieht oder baut auf: AgentDojo und AgentDyn (Benchmark-Suiten), AutoDojo (adaptiver Angriff) und AgentLAB (Langzeit-Benchmark und Task-Injection-Angriffs-Traces). Details finden Sie in den jeweiligen Papers.
Wenn Sie diese Arbeit nützlich finden, würden wir uns über eine Zitierung freuen:
@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}
}
| Pfad | Inhalt |
|---|
src/rope/ | Die Verteidigung: Router, aufgabenspezifischer Geltungsbereich, Policy-Compiler, Ursprungs-Tracker, Laufzeit-Wächter. |
src/rope/scopes/_floor/<suite>.json | Die geprüfte Tabelle sensibler Werkzeuge/Parameter pro Suite (von allen Routern gemeinsam genutzt). |
src/rope/scopes/<router>/<suite>.json | Zwischengespeicherte aufgabenspezifische Geltungsbereiche für die drei bewerteten Router (opus, gemini-3-flash, gpt-oss-20b) — Offline-Wiedergabe der Router-Ausgaben des Papers. |
src/common/ | LLM-Vervollständigungs-Cache, der vom Router verwendet wird (nur vertrauenswürdige Eingabeaufrufe). |
autodojo/ | Die Haupt-Benchmark-Umgebung und der adaptive Angriff: unterstützt direkt alle sechs bewerteten Suiten: banking, slack, travel (drei von AgentDojos vier) und github, shopping, dailylife (von AgentDyn). |
agentlab/ | Der Langzeit-Benchmark: AgentLABs Task-Injection-Angriff und dessen veröffentlichte Angriffs-Traces sowie der Wiedergabe-Treiber. Siehe agentlab/README.md. |
runs/ | ROPE-Ausführungsprotokolle (JSON) für alle vier Agentenmodelle, plus runs/ablation/ (die beiden festen Policy-Arme) und runs/router/ (die günstigeren Router, geklemmt und ungeklemmt), sowie die Skripte, die die berichteten ROPE-Zahlen daraus neu berechnen. |