
بحث برمجي لهجوم حصان طروادة ذي صندوق رمادي يقوم بقلب بتة واحدة في ذاكرة KV المؤقتة في مصنّفات LLM المضبوطة ضبطًا دقيقًا ويقيس معدل نجاح الهجوم لكل فئة.
مستودع بحث "CacheTrap: Unveiling a Stealthier Gray-Box Trojan against LLMs"، المؤتمر الدولي IEEE/ACM للتصميم بمساعدة الحاسوب (ICCAD)، 2026.
يبحث CacheTrap عن قلب بت واحد (bit flip) في ذاكرة 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/.
ملاحظة: على وحدات GPU ذات ذاكرة أقل، استخدم
train_model_lowmem.pyبدلاً منtrain_model.py، في الأمر أعلاه وداخلscripts/train.shعلى حد سواء.
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}
}