
Исследовательская реализация атаки отравлением на языковые модели с дополненной генерацией (RAG) с использованием замаскированных документов для обхода фильтрующих защит и провоцирования неверных ответов.
Официальный репозиторий статьи EMNLP 2026 CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents.
CamoDocs — это атака отравлением базы знаний против генерации с дополненной выборкой (RAG), которой не требуется включение запроса. Каждый враждебный поддокумент маскируется путём конкатенации с оптимизированным безвредным поддокументом, поэтому результирующие отравленные документы избегают артефактов пересечения запросов, на которые полагаются фильтрующие защиты.

CamoDocs генерирует безвредные и враждебные поддокументы, оптимизирует безвредные части с помощью токенов рассеивания и фильтрации связности, а затем объединяет их для создания отравленных документов, которые обходят фильтрующие защиты и вызывают целевой неверный ответ.
Протестировано с Python 3.10, CUDA 12.8, PyTorch 2.8.0. Одного GPU на 48 ГБ достаточно
для жертв класса 8B. Mixtral-8x7B не помещается на одну карту на 48 ГБ; используйте
--lm_deploy_tp, чтобы разделить её между несколькими картами.
conda create -n camodocs python=3.10 -y
conda activate camodocs
pip install -r requirements.txt
python -m spacy download en_core_web_sm
python -c "import nltk; nltk.download('punkt'); nltk.download('stopwords')"
Защита LLM Filter дополнительно требует openai/gpt-oss-safeguard-20b, которая
требует более нового стека vLLM/transformers/torch, поэтому она находится в отдельном
окружении:
conda create -n camodocs_vllm python=3.10 -y
conda activate camodocs_vllm
pip install -r requirements_vllm.txt
Сначала задайте эти переменные. Каждый скрипт проверяет необходимые ему переменные и немедленно завершает работу, если какая-то отсутствует.
export REPO_ROOT=/absolute/path/to/this/repo
export DATA_ROOT=/absolute/path/for/intermediate/outputs
export OPENAI_API_KEY=... # LLM judge, GPT-4o-mini synthesis
export HF_TOKEN=... # gated models (Llama-3.1, Mixtral)
Затем запустите любую оценку защиты. Встроенные артефакты позволяют полностью пропустить этапы 1–3:
bash scripts/eval_trustrag.sh
Каждый скрипт воспроизводит одну строку на HotpotQA с жертвой Llama-3.1-8B. Для
другого набора данных задайте EVAL_DATASET=nq (или msmarco) в окружении; для
другой жертвы измените MODEL_NAME в скрипте.
bash scripts/eval_trustrag.sh # TrustRAG (k-means + conflict prompting)
bash scripts/eval_query_detection.sh # Query Detection (SequenceMatcher filter)
bash scripts/eval_divide_and_vote.sh # Divide-and-Vote
bash scripts/eval_robustrag.sh # RobustRAG (keyword aggregation)
bash scripts/eval_isolation_forest.sh # Isolation Forest
bash scripts/eval_rerank.sh # Cross-encoder rerank (bge-reranker-v2-m3)
bash scripts/llm_filter_eval.sh # LLM Filter (needs the vLLM critic below)
Первым шести нужен 1 GPU. LLM Filter дополнительно запускает критик на 20B во втором
терминале, поэтому ему нужно достаточно памяти GPU для этого критика вместе с жертвой.
В наших запусках использовались четыре карты на 48 ГБ; задайте TP и LM_DEPLOY_TP в
соответствии с вашим оборудованием:
# Терминал 1
conda activate camodocs_vllm
bash scripts/gpt_oss_safeguard_vllm_serve.sh # serves on :8001, TP=4
# Терминал 2
conda activate camodocs
bash scripts/llm_filter_eval.sh # health-checks the critic first
Этапы 1–2 создают черновики безвредных и враждебных фрагментов с помощью GPT-4o-mini, этап 3 применяет оптимизацию на уровне токенов, этап 4 оценивает защиту.
bash scripts/gen_synth_benign_hotpotqa.sh # Этап 1: черновики безвредных носителей
bash scripts/gen_adv_hotpotqa.sh # Этап 2: враждебные черновики
bash scripts/camodocs_token_manipulation.sh # Этап 3: манипуляция токенами CamoDocs
bash scripts/eval_trustrag.sh # Этап 4: оценка
Скрипты содержат точные гиперпараметры, использованные для описанных запусков (beta=10, alpha=30, m=1000, m'=100, top-k=5).
Наборы данных BEIR загружаются автоматически при первом использовании в
${REPO_ROOT}/datasets/. Каждый этап делает это, поэтому отдельного шага настройки
данных нет. Чтобы загрузить их заранее:
mkdir -p ${REPO_ROOT}/datasets && cd ${REPO_ROOT}/datasets
for ds in hotpotqa nq msmarco; do
wget https://public.ukp.informatik.tu-darmstadt.de/thakur/BEIR/datasets/${ds}.zip
unzip ${ds}.zip
done
Чтобы пропустить дорогостоящую предобработку, в этом выпуске включены предвычисленные
результаты Contriever (results/beir_results/), фиксированные подмножества оценки из
1 000 запросов (target_queries_fixed/) и примеры выходных данных этапов 2/3
(data_examples/) для всех трёх наборов данных.
Все приведённые числа воспроизводятся для HotpotQA, NQ и MS-MARCO из встроенных
артефактов. (Повторный запуск этапа 2 сам по себе требует вашего собственного файла
ответов для NQ и MS-MARCO — gen_adv.py объясняет это, если вы попробуете.)
Эта кодовая база предоставляется под лицензией MIT (LICENSE), следуя оригинальному
репозиторию PoisonedRAG,
который также распространяется под MIT.
Одно исключение: src/contriever_src/ — это код Meta
contriever, который остаётся под
CC BY-NC 4.0, поэтому этот каталог предназначен только для некоммерческого использования.
Этот пакет предоставляется для исследовательских целей и воспроизводимости. Выпущенный код предназначен для воспроизведения экспериментов, описанных в статье, и для поддержки исследований устойчивости и защиты RAG.
Пакет использует общедоступные наборы данных, модели и программные библиотеки в соответствии с их соответствующими лицензиями и условиями использования. Наборы данных BEIR, такие как HotpotQA, NQ и MS-MARCO, загружаются с официальных URL-адресов BEIR, а не распространяются в этом пакете.
Веса моделей и API, используемые конвейером, включая GPT-4o-mini, GPT-4.1-mini, Llama-3.1-8B, Qwen3-8B, Mixtral-8x7B, Contriever, ANCE, GPT-2, bge-reranker-v2-m3 и gpt-oss-safeguard-20b, остаются подчиненными лицензиям и политикам использования их первоначальных поставщиков. Этот пакет не предоставляет дополнительных прав на эти сторонние артефакты.
Враждебные документы и промежуточные артефакты, включённые в этот пакет, предоставляются только для контролируемой исследовательской оценки устойчивости RAG. Их не следует использовать для атак на развёрнутые системы или отравления реальных баз знаний.
@misc{jung2026camodocs,
title={CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents},
author={Jaewon Jung and Haizhong Zheng and Hongsun Jang and Jaeyong Song and Beidi Chen and Jinho Lee},
year={2026},
eprint={2608.28389},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2608.28389},
}