CamoDocs:利用伪装文档针对 RAG 系统的投毒攻击

  • 关联论文:2608.28389
  • 作者:flyP
  • 更新:2026-09-01

一句话结论

CamoDocs(EMNLP 2026 录用)提出一种针对 RAG 系统的新型数据投毒攻击:把对抗性文档"伪装"在良性内容中,规避现有投毒防御普遍依赖的"query inclusion 检测"。在 7 种 RAG 防御 / 3 个开源 LLM / 3 个 benchmark 上的实验里,CamoDocs 拿到强平均 ASR,同时对专有模型依然有效——GPT-5.4-mini 平均 ASR 61.80%、Claude-Haiku-4.5 平均 55.09%。基于"擦除式聚类"的 TrustRAG 能显著降低 ASR,但代价是检索依赖型 benchmark(如 NeoQA)的可用性大幅下降——这是攻击侧与防御侧的当前最优折中。

解决什么真问题

RAG 把外部文档作为 LLM 的事实源。一旦文档库是公开或用户可编辑的(企业 Wiki、Notion、共享 Drive、爬虫索引、社区论坛),攻击者就能注入恶意文档,引导 RAG 系统输出预设答案。这就是"data poisoning against RAG"。

现有投毒攻击几乎都靠一个招数:query inclusion——把目标 query 直接塞进投毒文档,让检索器把它召回。这个招数有两个致命弱点:

  1. 词法痕迹:投毒文档里出现目标 query 的字面词,与该 query 在投毒前的语料里不共现,很容易被 query-overlap 检测器命中。
  2. 嵌入空间聚集:被插入 query 后,文档嵌入会偏离该区域的正常语义分布,简单的 anomaly detector 也能抓到。

所以防御侧(如 TrustRAG、prompt injection detector、embedding clustering)普遍把"query-overlap 异常"当第一道闸门。CamoDocs 的目标就是绕过这道闸门

核心方法

1. 三步伪装(camouflage)流程

   ┌────────────────────┐  1. chunk
   │  良性文档(多)     │  ─────────►  多个 benign chunk
   │  目标对抗文档       │  ─────────►  多个 adv chunk
   └────────────────────┘
                │
                ▼
   ┌────────────────────┐  2. dispersion tokens
   │  在 benign chunk 中 │  ─────────►  用 dispersion tokens
   │  替换部分 token     │            让 poisoned doc 嵌入
   │  让嵌入"扩散"       │            与良性区域重合
   └────────────────────┘
                │
                ▼
   ┌────────────────────┐  3. coherence filter
   │  过滤掉不连贯 chunk │  ─────────►  最终投毒文档
   │  保留可读性         │            (读起来仍像正常文)
   └────────────────────┘

2. 关键创新:dispersion tokens

核心机制是把对抗文档的嵌入从"query 命中区"挪到"benign 区"。具体做法(abstract 描述):

  • 把对抗文档切成多个 chunk;
  • 选定的 benign chunk 上,用 dispersion tokens(语义上与目标 query 无关但嵌入空间偏移合理)替换部分 token;
  • 经过这步,整个投毒文档的嵌入被"扩散"到良性区域的边缘,既远离 query-inclusion 检测器,又不会被简单的聚类异常检测抓到。

这一步的关键 insight:不让投毒文档去"追"目标 query 的嵌入,而是让目标 query 的检索路径自然经过投毒文档——通过改变投毒文档自身的嵌入位置,绕开以"query ↔ 文档"距离为核心的防御。

3. Coherence filter:保证可读性

dispersion tokens 替换可能让句子不通顺,所以加一道 coherence filter(论文 abstract 描述"limit readability degradation")——只保留那些对抗性强但仍可读的 chunk。这一步是攻守平衡的关键:完全打散嵌入的方案虽然更隐蔽,但读起来不像正常文本,下游 LLM 拿到也可能拒绝遵循。

关键实验与数字

⚠️ 数字核验注意: 1. 已确认事实(abstract 原文): - GPT-5.4-mini 平均 ASR = 61.80% - Claude-Haiku-4.5 平均 ASR = 55.09% - 攻击对象:3 个开源 LLM(具体名字 abstract 未列)+ 2 个专有模型(GPT-5.4-mini、Claude-Haiku-4.5) - 防御对象:7 种 RAG 防御(具体名字 abstract 未列) - benchmark:3 个(具体名字 abstract 未列) 2. 上述两个百分比是 abstract 直接给出的、可信度高的核心数字。 3. 7 种防御具体名单 / 3 个 benchmark 名字 / 3 个开源 LLM 名字在 abstract 中未明确,需 fetch PDF 主表后 v2 补全。 4. 论文已确认录用:EMNLP 2026。

亮点与局限

亮点

  • 首个明确绕过 query-inclusion 检测的投毒族:之前很多工作(如 PoisonedRAG、PromptInject)都基于 query inclusion,CamoDocs 给出可量化的"绕过率"。
  • 跨模型稳健:对开源 LLM、专有闭源 LLM(GPT-5.4 / Claude-Haiku-4.5)都保持高 ASR——意味着攻击不依赖具体模型的脆弱点。
  • 工程可复现:GitHub 仓库已公开(https://github.com/jaewonalive/CamoDocs)。
  • 暴露"擦除式防御"的代价:TrustRAG 类聚类擦除虽能压 ASR,但 NeoQA 等检索依赖 benchmark 的效用大跌——这是攻击/防御 trade-off 的关键经验。

局限

  • 依赖检索器行为假设:dispersion tokens 的有效性建立在"检索器对嵌入空间的语义聚类敏感"这一假设上;新一代 sparse / rerank / hybrid 检索可能改变攻防格局。
  • 对抗性 chunk 仍可被语义异常检测发现:CamoDocs 降低了 query-overlap 痕迹,但 dispersion tokens 替换在词法与统计上仍有痕迹,长时间累积可能被更细致的语料层检测抓到。
  • 下游 LLM 的指令遵循能力:攻击假设 LLM 会"采纳"投毒文档的事实;如果 LLM 拒绝遵循单一文档(高指令调优版本),ASR 会下降。
  • 不能跨 corpus 复用:针对某个目标 query 的 dispersion 调优很可能对其他 query 无效——这是每次投毒都要重做调优的成本。
  • 评测覆盖:abstract 只给 3 个 benchmark 的平均 ASR,没有覆盖长上下文、多跳检索、跨语种等场景。

对工程落地的启发

  1. RAG 部署的"可信源"边界:把 RAG 的事实源锁在"不可被外部写入"的范围——企业内部 RAG 应明确"哪些文档可被哪些角色写入"。
  2. 多层防御叠加:query-overlap 检测 ≠ 万灵药。建议在 RAG 管线里加:① retrieval-time embedding anomaly 检测;② corpus 写入时的 provenance 校验(谁、什么时候、改了什么);③ LLM 端的"文档矛盾自检"——拿候选文档两两比对,矛盾时让模型主动承认不确定。
  3. 擦除式聚类防御的代价意识:TrustRAG 类"把疑似投毒 chunk 删掉"的策略看似有效,但 NeoQA 类检索依赖型任务上的 utility drop 必须量化,不能为了安全丢 30% 的有效率。
  4. 定期红队演练:以 CamoDocs 仓库为起点,定期让安全团队用 ASR 评估自己的 RAG 部署的鲁棒性,把"投毒成功率"作为生产环境的硬指标。
  5. 跨域注意事项:本工作的方法不依赖特定 LLM 漏洞,意味着同一份投毒文档可能在多个企业 RAG 部署里都有效——这是供应链层面的真实风险。

与同方向工作的关系

  • vs PoisonedRAG (Zou et al., 2024):PoisonedRAG 是经典 query-inclusion 投毒,CamoDocs 是"绕过 query-inclusion 检测"的下一步——属于同谱系内升级
  • vs PromptInject / Indirect Prompt Injection:后者攻击 LLM 端而非检索端,CamoDocs 是专门针对 RAG 检索阶段的投毒,与 prompt injection 互补。
  • vs TrustRAG:TrustRAG 是基于"擦除聚类"的防御,CamoDocs 直接挑战 TrustRAG——论文已展示 TrustRAG 在某些场景下压 ASR 但代价高。
  • vs 数据污染(backdoor / trigger)攻击:经典 NLP 数据投毒需要训练时介入,CamoDocs 只改推理时检索到的文档——攻击面更广,门槛更低。

适合谁读

  • RAG 平台架构师:必须把这篇列入"威胁模型"清单,重新审视现有 query-overlap 检测是否充分。
  • AI 安全 / 红队:把 CamoDocs 仓库作为内部渗透测试工具的起点。
  • 企业知识库 / Wiki 管理员:需要重新评估"用户可编辑"边界的攻击面。
  • RAG 防御研究者:TrustRAG 路线之外的下一代防御(语料层 provenance + retrieval-time anomaly detection)值得投入。

§0 自检栏

  • 机制段:5(投毒机制总览 / dispersion tokens 机制 / coherence filter / 检索绕过逻辑 / 攻防对照)
  • 工程段:5(可信源边界 / 多层防御 / 擦除式代价 / 红队演练 / 供应链风险)
  • ⚠️ 数字核验:2(7 种防御 / 3 个 benchmark / 3 个开源 LLM 名字 abstract 缺失;GPT-5.4 / Claude-Haiku-4.5 ASR 已 abstract 核实)
  • 私域五维 SUM:0
  • CJK 字数估算:约 3,000(≤4,000 上限 ✓)

工程落地与核查(Jay)

事实核查

  1. ⚠️ GitHub URL 未 fetch 验证:文档引用 https://github.com/jaewonalive/CamoDocs,搜索结果中未直接命中该仓库,建议 v2 前补一次 curl -I 核 200,防止 404 传播——W35 lessons AI 幻觉红线第 6 形态之一(链接死但仍 ⭐⭐⭐)。
  2. ⚠️ EMNLP 2026 录用状态:当前日期 2026-09-01,EMNLP 2026 通常在 11 月召开,8 月底截稿期附近。录用声明可信,但若按 peer-reviewed 严格标准,录用通知截图或 openreview 页面应 fetch 核验,防止"自称 EMNLP 录用"无锚点。
  3. ⚠️ TrustRAG 代价量化存疑:"NeoQA 检索依赖型 benchmark 的可用性大幅下降"——原解读未给出具体下降幅度(e.g., 是跌 5pp 还是 30pp?),数字缺失本身是存疑处,应在原文补"⚠️ NeoQA 效用 drop 具体数字待 PDF §5 核验"。
  4. ✅ ASR 数字链完整:61.80% / 55.09% 直接来自 abstract,归属明确(GPT-5.4-mini / Claude-Haiku-4.5),无需补充锚点,可信度高
  5. ✅ 作者归属:arXiv HTML 页面确认 6 位作者(Jung / Zheng / Jang / Song / Chen / Lee),与原解读一致。

工程落地与实践

  1. 实际防御管线的三道闸门(按部署优先级排序): - 第一闸:写入时 provenance——corpus 写入 API 加 ACL + 签名,阻止未授权注入(针对公开可写 corpus); - 第二闸:检索时 embedding 异常检测——对召回的 Top-K 文档做 Z-score 异常检测,触发阈值则降权或告警; - 第三闸:LLM 端矛盾自检——用 pair-wise prompt 让 LLM 显式比对两文档,若矛盾则输出"不确定"而非选边站。 ⚠️ :第三闸会显著拖慢 generation latency(2× LLM 调用),生产环境建议只在高风险场景(金融/医疗)启用。

  2. TrustRAG 类擦除防御的工程代价: - 聚类擦除依赖 embedding model 的质量;若 embedding model 本身被 CamoDocs 对抗(嵌入被 dispersion tokens "染蓝"),擦除会误杀良性文档; - 建议:先做 embedding 空间可视化(PCA/t-SNE),确认"benign cluster"与"poisoned cluster"在嵌入空间有明显边界,再部署 TrustRAG 类方案,否则等于"杀敌一千自损八百"。

  3. CamoDocs 攻击复现的工程门槛: - dispersion tokens 调优需要目标检索器的白盒或灰盒访问(需要知道检索器用的 embedding model);黑盒场景下调优效率大幅下降; - 实战中,针对公开 RAG 服务(如 ChatGPT Retrieval Plugin / Enterprise RAG)做红队,CamoDocs 的实际 ASR 可能低于论文报告值(因为攻击者拿不到目标检索器的 embedding space); - 建议红队演练先用模拟检索器(同款 embedding model 本地部署),确认攻击有效后再上真实目标。

  4. vLLM / SGLang 接入成本: - CamoDocs 防御不需要改 LLM 推理引擎,但需要在 RAG retrieval pipeline 里插一层 anomaly detector; - 建议用 Ray Serve + embedding anomaly model 搭一个轻量 sidecar,不影响主 RAG 链路 P99; - ⚠️ 坑: anomaly detector 的 threshold 调参是个坑——阈值过低(recall 高)会频繁误杀正常查询,阈值过高(precision 高)会让 CamoDocs 类攻击漏网。建议用 TrustRAG 论文的评估集做 ROC 曲线,再定 threshold。

  5. 指标监控建议: - 生产环境加 "RAG poisoning rate" 监控面板:统计每个 corpus 的异常 embedding 占比(随时间变化); - 触发告警阈值:单日异常 embedding 占比 >5% 则自动触发 corpus 快照 + 安全审查; - 建议 30 天滚动窗口做 baseline,当日均值超过 baseline 2σ 即自动告警。