
Forschungsimplementierung eines Poisoning-Angriffs gegen retrieval-gestützte Sprachmodelle unter Verwendung getarnter Dokumente, um Filterabwehrmaßnahmen zu umgehen und falsche Antworten zu induzieren.
Offizielles Repository des EMNLP-2026-Papers CamoDocs: A Poisoning Attack Against Retrieval-Augmented Language Models Using Camouflaged Documents.
CamoDocs ist ein Angriff zur Vergiftung von Wissensdatenbanken gegen Retrieval-Augmented Generation (RAG), der keine Query-Einbindung benötigt. Jedes adversarial erzeugte Sub-Dokument wird getarnt, indem es mit einem optimierten benignen Sub-Dokument verkettet wird, sodass die resultierenden vergifteten Dokumente die Query-Overlap-Artefakte vermeiden, auf die Filterungsverteidigungen angewiesen sind.

CamoDocs erzeugt benigne und adversarial erzeugte Sub-Dokumente, optimiert die benignen Teile mit Dispersions-Tokens und Kohärenzfilterung und führt sie zusammen, um vergiftete Dokumente zu erstellen, die Filterungsverteidigungen umgehen und die gewünschte falsche Antwort induzieren.
Getestet mit Python 3.10, CUDA 12.8, PyTorch 2.8.0. Eine 48-GB-GPU reicht für
Opfermodelle der 8B-Klasse. Mixtral-8x7B passt nicht auf eine 48-GB-Karte; verwenden Sie
--lm_deploy_tp, um es auf mehrere Karten aufzuteilen.
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')"
Die LLM-Filter-Verteidigung benötigt zusätzlich openai/gpt-oss-safeguard-20b, was
einen neueren vLLM/transformers/torch-Stack erfordert. Daher lebt sie in einer eigenen
Umgebung:
conda create -n camodocs_vllm python=3.10 -y
conda activate camodocs_vllm
pip install -r requirements_vllm.txt
Setzen Sie zuerst diese Variablen. Jedes Skript prüft die benötigten Variablen und beendet sich sofort, wenn eine fehlt.
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-Synthese
export HF_TOKEN=... # gated models (Llama-3.1, Mixtral)
Führen Sie dann eine beliebige Verteidigungsauswertung aus. Die gebündelten Artefakte ermöglichen es Ihnen, die Stufen 1-3 vollständig zu überspringen:
bash scripts/eval_trustrag.sh
Jedes Skript reproduziert eine Zeile auf HotpotQA mit einem Llama-3.1-8B-Opfermodell. Für
einen anderen Datensatz setzen Sie EVAL_DATASET=nq (oder msmarco) in der Umgebung; für
ein anderes Opfermodell bearbeiten Sie MODEL_NAME im Skript.
bash scripts/eval_trustrag.sh # TrustRAG (k-means + Konflikt-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-Reranking (bge-reranker-v2-m3)
bash scripts/llm_filter_eval.sh # LLM Filter (benötigt den vLLM-Kritiker unten)
Die ersten sechs benötigen 1 GPU. Der LLM-Filter führt zusätzlich einen 20B-Kritiker in einer
zweiten Shell aus, benötigt also genügend GPU-Speicher für diesen Kritiker neben dem
Opfermodell. Unsere Läufe verwendeten vier 48-GB-Karten; setzen Sie TP und LM_DEPLOY_TP
passend zu Ihrer eigenen Hardware:
# Shell 1
conda activate camodocs_vllm
bash scripts/gpt_oss_safeguard_vllm_serve.sh # bedient auf :8001, TP=4
# Shell 2
conda activate camodocs
bash scripts/llm_filter_eval.sh # prüft zuerst den Kritiker per Health-Check
Die Stufen 1-2 entwerfen benigne und adversarial erzeugte Passagen mit GPT-4o-mini, Stufe 3 wendet die Token-Ebene-Optimierung an, Stufe 4 bewertet gegen Verteidigungen.
bash scripts/gen_synth_benign_hotpotqa.sh # Stufe 1: Entwürfe benigner Träger
bash scripts/gen_adv_hotpotqa.sh # Stufe 2: adversarial erzeugte Entwürfe
bash scripts/camodocs_token_manipulation.sh # Stufe 3: CamoDocs-Token-Manipulation
bash scripts/eval_trustrag.sh # Stufe 4: Auswertung
Die Skripte enthalten die exakten Hyperparameter, die für die berichteten Läufe verwendet wurden (beta=10, alpha=30, m=1000, m'=100, top-k=5).
BEIR-Datensätze werden beim ersten Gebrauch automatisch heruntergeladen, in
${REPO_ROOT}/datasets/. Jede Stufe tut dies, daher gibt es keinen separaten
Dateneinrichtungsschritt. Um sie stattdessen im Voraus abzurufen:
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
Um die teure Vorverarbeitung zu überspringen, bündelt diese Veröffentlichung vorberechnete
Contriever-Abrufe (results/beir_results/), die festen 1.000-Query-Auswertungsteilmengen
(target_queries_fixed/) und Beispielausgaben der Stufen 2/3
(data_examples/) für alle drei Datensätze.
Alle berichteten Zahlen reproduzieren sich für HotpotQA, NQ und MS-MARCO aus den gebündelten
Artefakten. (Das erneute Ausführen von Stufe 2 selbst benötigt Ihre eigene Antwortdatei für
NQ und MS-MARCO — gen_adv.py erklärt dies, wenn Sie es versuchen.)
Diese Codebasis wird unter der MIT-Lizenz (LICENSE) bereitgestellt, in Anlehnung an das
ursprüngliche PoisonedRAG-Repository,
das ebenfalls MIT-lizenziert ist.
Eine Ausnahme: src/contriever_src/ ist Metas
contriever-Code und bleibt
unter CC BY-NC 4.0, daher ist dieses Verzeichnis nur für nicht-kommerzielle Zwecke bestimmt.
Dieses Paket wird für Forschungs- und Reproduzierbarkeitszwecke bereitgestellt. Der veröffentlichte Code dient dazu, die im Paper berichteten Experimente zu reproduzieren und die Forschung zur RAG-Robustheit und -Verteidigung zu unterstützen.
Das Paket verwendet öffentlich verfügbare Datensätze, Modelle und Softwarebibliotheken unter ihren jeweiligen Lizenzen und Nutzungsbedingungen. BEIR-Datensätze wie HotpotQA, NQ und MS-MARCO werden von den offiziellen BEIR-URLs heruntergeladen und nicht in diesem Paket weiterverteilt.
Modellgewichte und APIs, die von der Pipeline verwendet werden, einschließlich GPT-4o-mini, GPT-4.1-mini, Llama-3.1-8B, Qwen3-8B, Mixtral-8x7B, Contriever, ANCE, GPT-2, bge-reranker-v2-m3 und gpt-oss-safeguard-20b, unterliegen weiterhin den Lizenzen und Nutzungsrichtlinien ihrer ursprünglichen Anbieter. Dieses Paket gewährt keine zusätzlichen Rechte an diesen Drittanbieter-Artefakten.
Die in diesem Paket enthaltenen adversarial erzeugten Dokumente und Zwischenartefakte werden nur für die kontrollierte Forschungsevaluierung der RAG-Robustheit bereitgestellt. Sie sollten nicht verwendet werden, um bereitgestellte Systeme anzugreifen oder reale Wissensdatenbanken zu vergiften.
@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},
}