
بحث برمجي لهجوم حصان طروادة ذي صندوق رمادي يقوم بقلب بتة واحدة في ذاكرة KV المؤقتة في مصنّفات LLM المضبوطة ضبطًا دقيقًا ويقيس معدل نجاح الهجوم لكل فئة.
مستودع لورقة "CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs"، المؤتمر الدولي IEEE/ACM للتصميم بمساعدة الحاسوب (ICCAD)، 2026.
يبحث CacheTrap عن انقلاب بت واحد في ذاكرة KV cache لمصنّف LLM مُدرَّب تدريبًا دقيقًا، ويقيس معدل نجاح الهجوم (ASR) الناتج لكل فئة مستهدفة.
Python 3.10، CUDA 12.x.
conda create -n cachetrap python=3.10
conda activate cachetrap
pip install -r requirements.txt
الوصول إلى Hugging Face. النموذجان meta-llama/Llama-2-7b-chat-hf و
meta-llama/Llama-3.1-8B-Instruct محميّان. اقبل التراخيص على Hub، ثم:
huggingface-cli login
نموذج واحد / مجموعة بيانات واحدة:
python train_model.py --model llama3_1_8b --dataset arc_easy
تُكتب نقطة الحفظ (checkpoint) إلى
TrainedModels/merged_<model>_<dataset>/.
جميع النماذج × جميع مجموعات البيانات:
bash scripts/train.sh
عدّل MODELS وDATASETS وNUM_GPUS في أعلى السكربت لتشغيل مجموعة فرعية.
تُحفظ السجلات في logs/training/.
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa
--dataset هي مجموعة البيانات التي دُرِّب عليها الضحية؛ و--calib_dataset هي البيانات
المتاحة للمهاجم. وفقًا للورقة، فإن الضحايا المدرَّبين على OpenBookQA أو TREC
أو ARC-Challenge تتم معايرتهم باستخدام ARC-Easy، والضحايا المدرَّبون على ARC-Easy
تتم معايرتهم باستخدام OpenBookQA. يعكس سكربتا الدفعات هذا التقسيم تمامًا:
| السكربت | مجموعات بيانات الضحية | المعايرة |
|---|---|---|
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
ينتهي كل منهما بتشغيل summarize_logs.py على دليل السجلات الخاص به.
شغّل python attack.py --help للحصول على قائمة الخيارات الكاملة.
logs/<run>/<model>_<dataset>.log — المخرجات الكاملة لكل تشغيلlogs/<run>/summary.csv — صف واحد لكل فئة مستهدفة (الدقة الأساسية، الدقة
تحت الهجوم، ASR، موقع الانقلاب)logs/<run>/summary.txt — كتل الملخص الخامflip_locations/*.json — مواقع الانقلاب، إذا تم تمرير --save_flip_locationsلإعادة التقييم دون تكرار البحث:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
لتجربة الهجوم دون تدريب أي شيء، نزّل نقطة الحفظ المُصدَرة
merged_llama3_1_8b_arc_easy وضعها تحت TrainedModels/:
TrainedModels/
└── merged_llama3_1_8b_arc_easy/
├── config.json
├── model-*.safetensors
├── tokenizer.json
└── ...
ثم شغّل الأمر التالي لتنفيذ الهجوم:
python attack.py --model llama3_1_8b --dataset arc_easy --calib_dataset openbookqa \
--load_flip_locations flip_locations/llama3_1_8b_arc_easy.json
بدلاً من ذلك، شغّل ما يلي لتنفيذ هجوم جديد
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
يطبع هذا ملخصًا لكل فئة يتضمن الدقة الأساسية، والدقة تحت الهجوم، وASR، وموقع الانقلاب المختار.
استشهد بنسخة ما قبل الطباعة كما يلي
@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}
}