
Forschungscode, Benchmark und Verteidigung gegen Target-Rebinding-Angriffe, die LLM-Sicherheitswächter dazu verleiten, gefälschte Köderinhalte zu bewerten, sowie Segment-Max-Distillation-Härtung.
Code, Daten und jeder Rohwert für das Paper (paper/main.pdf, Quelle in paper/).
LLM-Sicherheitswächter erhalten den Inhalt, den sie prüfen, durch einfache String-Interpolation in ihren Bewertungs-Prompt, sodass Inhalte, die das Prompt-Format des Wächters selbst imitieren, eine zweite, gefälschte Bewertungsaufgabe mit einem harmlosen Köderdokument eröffnen können, die der Wächter dann anstelle des echten Inhalts bewertet (Target Rebinding). Das Anhängen einer solchen gefälschten Aufgabe umgeht Shieldstral-1.0-3B bei allen 75 vorab registrierten zurückgehaltenen AdvBench-Anfragen, die es markiert, überträgt sich auf gpt-oss-safeguard-20B und Llama Guard 4, und in unserem Benchmark, GuardRebind (52 Angriffsfamilien, 5 Kontrollen), umgeht die stärkste Familie 93-100 % der markierten Elemente bei jedem der fünf Wächter. Segment-Max-Selbstdestillation trainiert den Wächter darauf, Inhalte mindestens so hoch zu bewerten wie ihren schädlichsten Teil, und senkt die Umgehung bei zurückgehaltenen Angriffen von 75 % auf etwa 1 %, aber ein score-gesteuerter adaptiver Angreifer umgeht den trainierten Wächter weiterhin bei 94 % der Elemente, mehr als die Hälfte davon ganz ohne gefälschte Struktur.
Der Angriff wird hier bewusst in Prosa beschrieben. Die Payloads werden von
src/attacks.py (Bestätigungsstudie) und src/bench/attacks_grammar.py (Benchmark) generiert und
sind im Anhang des Papers aufgeführt.
| Pfad | Inhalt |
|---|---|
PROTOCOL.md | Vorabregistrierung für die bestätigende Shieldstral-Studie (Paper Abschnitt 3; Vorhersagen P1-P9) |
PROTOCOL_v2.md | Vorabregistrierung für den Benchmark und die Verteidigung des Papers (M1-M5, F1-F6, A1-A3), mit protokollierten Abweichungen D1-D4 |
src/*.py | Bestätigungsstudie zu Shieldstral und die modellübergreifenden Läufe (Scorer, Payloads, Ablation, Köder-Leiter, OpenRouter-Clients) |
src/bench/ | GuardRebind: Dataset-Loader (data.py), Guard-Adapter (guards.py), Angriffsgrammatik, lokale und API-Runner, Analyse |
src/fix/ | die Verteidigung: Segment-Max-Destillation (distill.py), Evaluierung (evaluate.py), adaptive Angriffe (adaptive.py), trainingsfreie Baselines (baselines.py), begrenztes Eingabeformat (inputs.py) |
src/mech/ | Activation Patching, lineare Probes, Repräsentationsähnlichkeit, Köder-Dosis-Wirkung |
scripts/queue_*.sh | fortsetzbare Job-Warteschlangen, die die Ergebnisse erzeugt haben (ein GPU-Job zur Zeit) |
scripts/pod/ | die Verteidigungs-Warteschlangen auf einer gemieteten CUDA-GPU (Runpod) ausführen und Ergebnisse zurückkopieren |
scripts/analysis_r2/ | CPU-Statistik hinter den Verteidigungszahlen (Wilson, Newcombe, Hanley-McNeil, gepaarter Bootstrap) |
paper/data/ | CPU-Skripte und ihre Ausgaben für Zahlen, die direkt für das Paper berechnet wurden |
paper/figures/make_figures.py | zeichnet die Abbildungen des Papers aus results/ |
results/ | jeder Rohwert und jede Zusammenfassung, die das Paper zitiert |
Befehle sind relativ zum Repo-Root. „GPU“-Schritte laden ein Wächtermodell; „CPU“-Schritte lesen nur Dateien in results/.
Abschnitt 3, Target Rebinding (Shieldstral, Bestätigungsstudie, PROTOCOL.md)
| Paper | Ergebnisdateien | Erzeugt von |
|---|---|---|
| Abbildung 1 (Anatomie; Scores) | results/confirm_shieldstral.csv (erstes Dokument, none und query_doc) | python -m src.confirm (GPU) |
| Tabelle 1 (Ablation) | results/confirm_log.txt [ablation], results/tables.md | python -m src.confirm (stdout ist confirm_log.txt), dann python -m src.figures (CPU, schreibt tables.md) |
| Abbildung 2 (Scores; drei Decoys) | results/confirm_shieldstral.csv, results/confirm_groundtruth.csv | python -m src.confirm, python -m src.groundtruth (GPU, stdout results/groundtruth_log.txt); gezeichnet von paper/figures/make_figures.py (CPU) |
| 100-Request-Lauf (Text) | results/confirm_hundred.csv, results/hundred_log.txt | python -m src.hundred (GPU) |
| Kontrolle mit abgeschwächten Anfragen (Text) | results/confirm_soften.csv, results/soften_log.txt | python -m src.soften (GPU) |
| Gefälschtes Urteil vs. gefälschte Aufgabe (Text) | results/fix/forgery_controls_base.json | python -m src.fix.forgery_controls --cond base --split test --allow-test --out results/fix/forgery_controls_base.json (GPU; in scripts/queue_fix_full.sh) |
| Robustheitsabsatz (Text in Abschnitt 3) | results/confirm_log.txt [recency], [markers], [policy]; results/supp_log.txt [A] | python -m src.confirm, python -m src.supp (GPU) |
| Dosis-Wirkungs-Absatz in Abschnitt 3; Activation Patching (Anhang C) | results/mech/patching_test_n100.json, dose_response_test_n150_d40.json, dose_response_test_n150_d40_rho_ci.json (Dev-Split-Läufe *_dev_* zum Vergleich) | src.mech.{patching,dose_response} (GPU; Schritt 0 von scripts/queue_fix_full.sh, PART=main); Rho-Intervalle: python -m src.mech.dose_response --recompute results/mech/dose_response_test_n150_d40.json (CPU) |
| Schwellenwert-Sensitivität (Text in Abschnitt 3, tau = 0.1) | results/sensitivity.md | python -m src.sensitivity (CPU, liest confirm_shieldstral.csv) |
Abschnitt 4, GuardRebind (PROTOCOL_v2.md)
| Paper | Ergebnisdateien | Erzeugt von |
|---|---|---|
| Drei Guard-Designs (Text in Abschnitt 4) | results/confirm_crossmodel.csv, results/confirm_gpt_oss_mechanism.csv, results/gpt_oss_mechanism_log.txt | python -m src.crossmodel 30, python -m src.gpt_oss_mechanism 30 (OpenRouter API, keine GPU) |
| Tabelle 2 (Benchmark, lokale Guards) | results/bench/v2/<guard>__default.jsonl (Rohscores, nur Item-IDs), results/bench/v2/bypass.csv, run_config.json | scripts/queue_bench.sh (GPU) -> python -m src.bench.run_bench_v2 ..., dann python -m src.bench.analyze --inp results/bench/v2 (CPU) |
| Tabelle 2 (Zeile gpt-oss-safeguard), gpt-oss-Absatz (Abschnitt 4.2), Multi-Verdict-Lesart (Anhang C) | results/bench/v2/gpt_oss_safeguard_20b.jsonl, results/bench/v2/gpt_oss_summary.md, results/bench/v2/gpt_oss/*, paper/data/gpt_oss_strict.md | python -m src.bench.api_bench (OpenRouter), python -m src.bench.api_summary (CPU), python paper/data/gpt_oss_strict.py > paper/data/gpt_oss_strict.md (CPU) |
| Bypass pro Familie (Text in Abschnitt 4.2; vollständige Tabelle veröffentlicht, nicht im Paper) | results/bench/v2/bypass.csv (Standard-Policy, Spalte bypass); gpt-oss aus paper/data/gpt_oss_strict.md | python -m src.bench.analyze (CPU) |
| Benchmark-Schwellenwert-Sensitivität (veröffentlicht, nicht im Paper) | results/bench/v2/bypass_tau.csv | python -m src.bench.analyze (CPU) |
| Policy-Paraphrasen und Kontroll-Token-Vergleich (Anhang C) | results/bench/v2/<guard>__para{1,2}.jsonl, results/bench/v2/policy_range.csv, results/bench/v2/bypass.csv | scripts/queue_bench.sh, src.bench.analyze |
| Qwen3Guard-Sonde „Was zählt als Aufgabe“ | results/bench/explore/qwen3guard.md | python -m src.bench.explore.qwen3guard --n 40 (GPU, Train-Split) |
Abschnitte 5-6, die Verteidigung (PROTOCOL_v2.md, Runde 2 = Abweichung D4)