
Forschungscode für einen Gray-Box-Trojaner-Angriff, der ein einzelnes KV-Cache-Bit in feinabgestimmten LLM-Klassifikatoren umkippt und die Angriffserfolgsrate pro Klasse misst.
Repository für „CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs", IEEE/ACM International Conference on Computer-Aided Design (ICCAD), 2026.
CacheTrap sucht nach einem einzelnen Bit-Flip im KV-Cache eines feinabgestimmten LLM-Klassifikators und misst die resultierende Attack Success Rate (ASR) pro Zielklasse.
Python 3.10, CUDA 12.x.
conda create -n cachetrap python=3.10
conda activate cachetrap
pip install -r requirements.txt
Hugging Face-Zugriff. meta-llama/Llama-2-7b-chat-hf und
meta-llama/Llama-3.1-8B-Instruct sind gated. Akzeptiere die Lizenzen auf dem Hub und führe dann aus:
huggingface-cli login
Ein Modell / ein Datensatz:
python train_model.py --model llama3_1_8b --dataset arc_easy
Der Checkpoint wird nach
TrainedModels/merged_<model>_<dataset>/ geschrieben.
Alle Modelle × alle Datensätze:
bash scripts/train.sh
Bearbeite MODELS, DATASETS und NUM_GPUS am Anfang des Skripts, um eine Teilmenge auszuführen.
Logs werden in logs/training/ abgelegt.
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa
--dataset ist der Datensatz, auf dem das Opfer trainiert wurde; --calib_dataset sind die Daten,
die dem Angreifer zur Verfügung stehen. Gemäß dem Paper werden Opfer, die auf OpenBookQA, TREC
oder ARC-Challenge trainiert wurden, mit ARC-Easy kalibriert, und Opfer, die auf ARC-Easy trainiert
wurden, werden mit OpenBookQA kalibriert. Die beiden Batch-Skripte kodieren genau diese Aufteilung:
| Skript | Opfer-Datensätze | Kalibrierung |
|---|---|---|
scripts/attack_bundle1.sh | openbookqa, trec, arc_challenge | arc_easy |
scripts/attack_bundle2.sh | arc_easy | openbookqa |
bash scripts/attack_bundle1.sh
bash scripts/attack_bundle2.sh
Jedes endet damit, dass summarize_logs.py über sein eigenes Log-Verzeichnis ausgeführt wird.
Führe python attack.py --help aus, um die vollständige Optionsliste zu erhalten.
logs/<run>/<model>_<dataset>.log — vollständige Ausgabe pro Lauflogs/<run>/summary.csv — eine Zeile pro Zielklasse (Baseline-Genauigkeit, Genauigkeit
unter Angriff, ASR, Flip-Position)logs/<run>/summary.txt — die rohen Zusammenfassungsblöckeflip_locations/*.json — Flip-Positionen, falls --save_flip_locations übergeben wurdeUm ohne Wiederholung der Suche neu zu evaluieren:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
Um den Angriff auszuprobieren, ohne etwas zu trainieren, lade den veröffentlichten
merged_llama3_1_8b_arc_easy Checkpoint herunter und platziere ihn unter TrainedModels/:
TrainedModels/
└── merged_llama3_1_8b_arc_easy/
├── config.json
├── model-*.safetensors
├── tokenizer.json
└── ...
Führe dann den folgenden Befehl aus, um anzugreifen:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
Alternativ führe Folgendes für einen frischen Angriff aus
python attack.py \
--model llama3_1_8b \
--dataset arc_easy \
--calib_dataset openbookqa \
--threat_model graybox \
--save_flip_locations flip_locations/llama3_1_8b_arc_easy_fresh.json
Dies gibt eine Zusammenfassung pro Klasse von Baseline-Genauigkeit, Genauigkeit unter Angriff, ASR und der ausgewählten Flip-Position aus.
Zitiere die Pre-Print-Version als
@article{nahian2025cachetrap,
title={CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs},
author={Nahian, Mohaiminul Al and Almalky, Abeer Matar A and Aragonda, Gamana and Zhou, Ranyang and Ahmed, Sabbir and Ponomarev, Dmitry and Yang, Li and Angizi, Shaahin and Rakin, Adnan Siraj},
journal={arXiv preprint arXiv:2511.22681},
year={2025}
}