排序不等于判定:查询时 RAG 投毒防御的基准捷径与工作点崩塌
Ranking Is Not Deciding: Benchmark Shortcuts and Operating-Point Collapse in Query-Time RAG Poisoning Defenses
作者称 RAG 投毒防御的检测分数由投毒构造方式决定:删去问题前缀使 RAGuard 的 AUROC 从 0.953 降到 0.758。
- 查询时过滤器是 RAG 投毒的主流防御,且在领域基准上报告接近完美的检测。作者认为这些分数由投毒集的构造方式(如 PoisonedRAG 代码给每段投毒加上目标问题前缀)决定,而非过滤器真正读懂了内容。
- 作者提出只用投毒集和干净语料即可计算的两个构造画像量——verbatim containment 和 length overlap——并用五级保留载荷的控制阶梯逐一移除这些线索,在统一候选集上重测十种逐文档防御的部署点漏检率、误报率与 AUROC。
- 在 NQ 上仅删去攻击者自己代码添加的问题前缀,RAGuard 的 AUROC 从 0.953 降到 0.758、部署点漏检率从 0.191 升到 0.763;在 medical 上用等长乱序填充后,TrustRAG 集合级阶段漏检率从 0.000 升至 0.827。作者称 AUROC 单独报告会掩盖这种操作点崩塌。
- 作者指出四个语料中三个的投毒是按已发表模板再生成的,可分性数字是上界;画像只在四个语料上验证,在 90 个(语料、攻击、防御)点中有 40 个方向错误;规模限为 100 个目标问题、每格 40 个评估查询、单一检索器且无 reranker。
- 威胁模型
- 攻击者每个目标查询可插入或编辑 N 篇文档、控制全部文本与自声明字段(C1、C2),可查询系统获得硬标签 oracle(C3),按 Kerckhoffs 假设知晓算法与阈值(C6);不能改模型权重(C5)。本文报告的攻击均为 black-box(C3 加代理编码器)。受害系统是带 query-time admission gate 的 RAG。
- 被测模型
- Qwen/Qwen2.5-0.5B-Instruct
- 基准
- Natural Questions (BEIR sub-corpus)PubMedQAFinQATAT-QACUADHotpotQAMS MARCO
- 指标
- FNRFPRAUROCECEharm per 1,000 queriesCCRcontainmentlength overlap
研究者发现,查询时 RAG 投毒防御在基准上的近乎完美检测成绩由投毒语料的构造方式预测,而非过滤器读到的内容。他们提出两个无需运行防御即可算出的统计量(目标问题逐字包含率与长度重叠),并指出 PoisonedRAG 发布代码会给每条插入段落拼接目标问题;在 21 项已发表防御评测中,8 项可验证地使用这种构造的投毒语料,12 项未报告部署工作点处的误报率。仅删除 PoisonedRAG 作者自己发布的段落中的问题前缀、其余不变,作者复现的内容过滤器 RAGuard 的 AUROC 从 0.953 降至 0.758,漏检率从 0.191 升至 0.763;把医疗投毒文本用打乱词序的填充词补到正常长度后,TrustRAG 集合级阶段的漏检率从 0.000 升至 0.827。
推荐理由作者提出两个无需运行防御即可算出的统计量,能提前判断 RAG 投毒防御评测是否依赖投毒语料的构造线索,做安全评测的团队可迁移这套核查方法。
深度解读
这篇论文试图解决什么问题?
作者称 RAG 投毒防御的基准检测分数由投毒构造线索决定,而非过滤器的真实检测能力。
核心问题:查询时 RAG 投毒过滤器在基准上报告的近完美检测,可能只反映了投毒集的构造方式,而不是过滤器读懂了内容。
- 场景与重要性:RAG 的语料库是攻击面,攻击者插入文本即可在不触碰模型权重的情况下操纵输出;查询时过滤器是已发表防御中的主流路线,且在领域基准上报告近完美检测(Section I)。
- 现有评测的不足:作者调查的 21 篇已发表防御评测中,8 篇可验证地使用了带目标问题前缀的 PoisonedRAG 投毒,5 篇用长度或重复线索替代,12 篇未报告部署点的误报率(Table II)。
- 核心观察:PoisonedRAG 发布的代码把目标问题拼在每段插入文本之前,containment 在其所有模板条件下为 1.00;作者认为这一构造选择而非防御能力预测了检测分数(Section I、V-A)。
- 论文提出:一个无需运行防御即可计算的两数字构造画像(containment 与 length overlap)、一个五级保留载荷的控制阶梯,以及六条检测报告协议;作者明确不提出防御(Contributions、Section VII)。
- 威胁模型(Section III-B):
- 目标:让选定的 x* 通过闸门使载荷进入生成器、让良性文档被拦或诚实来源被降信,且无可归因的 ESCALATE/BLOCK(G1–G3)。
- 知识:按 Kerckhoffs 假设知晓算法、ρd、阈值与信任更新规则(C6);本文报告的攻击均为 black-box(C3 加代理编码器)。
- 能力:每个目标查询插入或编辑 N 篇文档、控制全部文本与自声明字段(C1、C2);可查询系统获得硬标签 oracle(C3);不能改模型权重(C5)。
- 受害系统:带 query-time admission gate 的 RAG,闸门对每篇候选文档输出 PASS/ESCALATE/BLOCK。
有哪些相关研究?
相关工作覆盖 RAG 投毒攻击、分阶段防御与安全分类器评测偏差,作者定位自己填补构造线索与操作点报告的空白。
RAG 投毒攻击
- PoisonedRAG(Zou et al., 2025):知识腐坏攻击,每目标查询 5 段即可取得超过 90% 攻击成功率;其发布代码把目标问题拼在每段投毒之前,是本文画像的关键事实(Section I、II-A)。
- 后续攻击:CorruptRAG(2026)、AuthChain(2025)等把预算降到 1 段,或以"最新数据确认"、权威线索与时间戳把注入伪装成更正;Purpose 攻击(2026)把投毒写成不矛盾的更新(Section II-A)。
- 触发器与后门类:Phantom(2026)、BadRAG(2024)、TrojanRAG(2024)等把载荷藏在触发器后(Section II-A)。
分阶段与分粒度的防御
- 离线:重复哈希(PoisonedRAG)、DRS 的协方差离群分数(Xian et al., 2025)、来源可靠性估计(Section II-B)。
- 检索时与生成前:RAGuard(Cheng et al., 2025)的逐块困惑度与查询相似度、TrustRAG stage 1(2025)的 k-means 移除、RAGDefender(2025)的层次聚类、ReliabilityRAG(2025)的 NLI 矛盾图、RADAR(2026)的 min-cut(Table I、Section II-B)。
- 生成时与生成后:RobustRAG(2026)的 isolate-then-aggregate 带认证上界、RevPRAG(2025)的答案激活分析、RAGForensics(2025)与 RAGOrigin(2026)的取证归因(Section II-B)。
安全分类器的评测方法学
- 评测偏差目录:TESSERACT(2019)的实验偏差、Arp et al.(2022)的采样偏差与虚假相关、Sommer & Paxson(2010)的 base-rate 与封闭世界问题、shortcut learning(Geirhos et al., 2020)(Section II-D)。
- 排名指标的局限:作者引用 Carlini et al.(2022)、Prompt-Shield(2025)、Hand(2009)说明排名指标可掩盖可部署误报率下的表现;控制阶梯遵循 Carlini et al.(2019)与 Tramèr et al.(2020)的自适应评测范式(Section II-D)。
基线与基准:论文在统一候选集上复现并对比 7 个已发表防御(perplexity、RAGuard、DRS、TrustRAG stage 1、RAGDefender、NLI consistency、Dup-only),另加作者自己的学习打分器(3 个阈值行)与两个单特征参考检测器;数据来自 NQ/BEIR、PubMedQA、FinQA+TAT-QA、CUAD 四个语料(Table I、V)。
定位:作者称已有工作把 query inclusion 当作可过滤的构造痕迹来造不带前缀的投毒(CamoDocs 等),但没有人测量把该痕迹从攻击者自己的文本中移除后,已发表过滤器的排名与部署点各自损失什么、损失属于校准还是信号、以及长度线索的作用(Section II-E)。
论文如何解决这个问题?
用两数字构造画像预测基准饱和,再用五级控制阶梯逐一移除线索,在统一候选集上重测十种防御。
整体思路:先在不运行任何防御的情况下,从投毒集与干净语料算出两个构造量,预测哪些基准格子会饱和;再用保留载荷的编辑逐一移除这些线索,在同一候选集上测量每个防御在部署操作点的漏检率变化,区分校准崩塌与信号崩塌。
构造画像(Section V-A)
- verbatim containment:规范化(小写、去标点、压缩空白)后,目标问题作为连续子串出现在投毒文档中的比例。
- length overlap:投毒词数落在干净语料词数 [ℓ5, ℓ95] 区间内的比例,并同时报告干净区间宽度 ℓ95/ℓ5;CUAD 定长 150 词分块使其为 1.00。
- 关键性质:两个量都不运行防御、不读分数、不需要标签;作者报告所有按已发表模板再生成的投毒 containment 均为 1.00,因为 PoisonedRAG 的实现把目标问题拼在每段之前(Table III、IV)。
控制阶梯(Section V-B)
- 五个梯级:template(不修改的已发表生成器)→ prefix removed(删去目标问题的所有逐字出现)→ length matched(用良性填充把投毒垫到干净词数区间)→ both;第五级 mimicry 只改目标事实并做长度匹配。
- 安慰剂填充:长度匹配梯级配两种等长安慰剂——干净句子的词序打乱版与伪词版——用以分离长度与内容的作用(Section VI-B)。
- 成功判定(Section III-C):一个梯级只有在三重合取下才算攻击成功:编辑后语料重新嵌入与重排后文档仍被检索到、载荷相对编辑前完整、且通过闸门;每个梯级都重新测量检索存活率并印在漏检率旁。
测量栈(Section IV-A、IV-B)
- 语料与检索:四个语料(NQ 24,295 篇、PubMedQA 21,000、FinQA+TAT-QA 24,991、CUAD 33,530),各 100 个目标问题按 40/20/40 分为打分器训练、校准与评估;检索器为 all-MiniLM-L6-v2,无 reranker,k=10。
- 投毒:四个已发表攻击家族(PoisonedRAG N=5、CorruptRAG-AS N=1、HijackRAG 式指令注入、jamming blocker);16 个语料×家族格子中 15 个由作者按已发布模板再生成,第 16 个(NQ 上的 PoisonedRAG)用攻击作者自己的文本。
- 指标:分别报告部署点的 FNR 与 FPR、匹配 5% FPR 下的 FNR、AUROC、15 个等宽 bin 的 ECE、每千查询危害 Hd 与 CCR;5 个种子,比较用 40 个查询簇、1000 次重采样的配对簇 bootstrap。
决策层作为仪器(Section IV-C、IV-D)
- 成本敏感阈值:部署 d 给出漏检、误拦与裁决成本,仅 ρd := CFN/CFP 与 cA := CA/CFP 进入决策;在假设 A1、A3、A4 下,最小化期望危害的逐点规则为 ai = BLOCK ⟺ p ≥ τd := 1/(1+ρd),即阈值只随危害比移动。
- 信任项:信任作为先验几率乘子 κs 进入,阈值变为 τd,s = 1/(1+ρdκs),κs 截断在 [0.25, 20];两个旋钮只移动分数落在有界带内的文档。
- 作者立场:决策层是测量仪器而非贡献;来源身份在此是精确标签指示器(provenance-only AUROC 1.000),所以任何信任数字都不是检测结果(Section IV-A)。
论文做了哪些实验?
在四个语料、四个攻击家族、十种防御的统一候选集上,画像预测了饱和位置,删前缀与长度填充分别击垮了部署点。
实验设置
- 被测防御:十种防御、十一个表行、八个不同打分系统——perplexity(GPT-2)、RAGuard(Cheng et al.)、DRS、TrustRAG stage 1、RAGDefender、NLI consistency(ReliabilityRAG)、Dup-only,以及作者自己的学习打分器在三个阈值(τ=0.5、τd、τd,s 两种信任权重)下的行;另有两个单特征参考检测器(length-only、containment-only)作为地板而非防御(Table V)。
- 数据集:NQ(BEIR 子语料,24,295 篇)、PubMedQA(21,000)、FinQA+TAT-QA(24,991)、CUAD(33,530);每语料 100 个目标问题,每格在 40 个评估查询上评测(Section IV-A)。
- 攻击:PoisonedRAG(N=5)、CorruptRAG-AS(N=1)、HijackRAG 式指令注入、jamming blocker;NQ 的 PoisonedRAG 投毒为攻击作者原文,其余按已发布模板再生成(Section IV-A)。
- 指标与判定:部署点的 FNR/FPR、匹配 5% FPR 的 FNR、AUROC、ECE、Hd、CCR;检索器 all-MiniLM-L6-v2,k=10;5 个种子 {11,22,33,44,55},配对簇 bootstrap(40 查询簇、1000 次重采样)(Section IV-B)。
- 硬件:AMD Ryzen 7 5700G、15 GiB RAM、纯 CPU,主表通道 35.8 CPU 小时(Table I 注)。
主结果
据 Table V(每格为部署点 FNR / 该点 FPR / 匹配 5% FPR 的 FNR,攻击 poisonedrag_bb):
表格较宽,可左右滑动
防御 general general, −prefix medical financial legal Perplexity (GPT-2) 1.000/0.005/0.809 1.000/0.005/0.866 0.062/0.000/0.046 1.000/0.005/1.000 0.551/0.000/0.392 RAGuard (Cheng) 0.191/0.065/0.216 0.763/0.061/0.796 0.000/0.115/0.000 0.146/0.104/0.309 0.078/0.108/0.087 DRS 0.854/0.154/0.970 0.930/0.164/0.995 0.700/0.035/0.635 0.833/0.094/0.904 0.816/0.128/0.897 TrustRAG stage 1 0.000/0.149/N/A 0.070/0.153/N/A 0.000/0.014/N/A 0.009/0.665/N/A 0.004/0.147/N/A RAGDefender 0.045/0.025/N/A 0.172/0.117/N/A 0.000/0.055/N/A 0.081/0.119/N/A 0.339/0.029/N/A Ours, τ=0.5 0.015/0.010/0.000 0.118/0.014/0.043 0.000/0.000/0.000 0.025/0.017/0.017 0.002/0.059/0.005 length-only (ref.) 1.000/0.000/1.000 1.000/0.000/1.000 0.000/0.000/0.000 1.000/0.000/1.000 0.992/0.000/0.183 containment-only (ref.) 0.000/0.025/0.000 0.882/0.023/0.839 0.000/0.005/0.000 0.009/0.298/0.022 0.077/0.029/0.039 (省略 No defense、Dup-only、NLI 与 Ours 的 τd、τd,s 行;其中 NLI 在所有语料上 FNR 0.793–1.000,为全表最差行之一。)
- 作者解读:在模板化 medical 投毒上 8 个打分系统中 4 个 FNR 为 0.000,作者称这是画像预测的饱和而非能力;删前缀后 RAGuard 的 AUROC 从 0.953 降到 0.758、部署点 FNR 从 0.191 升到 0.763(Table IX)。
- 作者解读:近零漏检率是在超过两个数量级的误报率上买到的,最便宜的一端只靠单个布尔特征;作者称零漏检率配上高于 0.5 的 FPR 应读作"关门"而非检测(Fig. 2、Section VII 规则 5)。
- 作者解读:画像的四个值预测四种结果——medical(containment 加长度分离)是所有内容防御饱和之处,legal 的定长干净语料使长度线索免费,financial 上前缀单独击垮部署点,NQ 是诊断格(Fig. 1、Section VI-A)。
发布代码与发布投毒的直接评测(Table VI)
- 测了什么:TrustRAG stage 1 与 RAGDefender 的发布仓库原样运行,在 PoisonedRAG 发布的 NQ 投毒与干净 top-5 上,分别按代码插入形式(Q⊕I)与存档形式(I)评测。
- 结果:十候选集下 TrustRAG 对两种形式的投毒移除率为 0.996 与 0.980(干净移除 0.122),RAGDefender 为 0.884 与 0.830;带前缀时其 Contriever top-5 每查询含 4.79 段投毒,不带前缀降到 2.40。
- 作者解读:这两个集合级过滤器读的是冗余这一构造线索而非 containment;带前缀时 top-5 在 100 个查询中的 86 个全是投毒,TrustRAG 在 84 个查询上返回空上下文,作者称其是在清空上下文而非在上下文内做判别(Section VI-A)。
控制阶梯与安慰剂(Fig. 3、Table VII)
- 测了什么:四个保留载荷的编辑梯级下每个防御的部署点 FNR,medical 的长度匹配梯级配三种等长填充(干净散文、词序打乱、伪词)。
- 结果:删前缀使作者的打分器部署点 FNR 在 medical 上 +0.009、在 financial 上 +0.421;长度匹配使其在 medical 上 +0.983、在 legal 上 +0.036、在 financial 上仅 +0.014。词序打乱填充下 TrustRAG stage 1 的 FNR 从 0.000 到 0.827,作者的打分器从 0.000 到 0.986(AUROC 保持 0.953,匹配 5% FPR 下 0.321);perplexity 与 RAGuard 在干净填充下崩塌(0.361、0.519)但在乱序填充下回到 0.000 与 0.000。
- 作者解读:哪个线索承重是语料属性,单一控制会在另一语料上反转结论;两个 NLL 检测器的崩塌是内容稀释所致,作者撤回了该头条读数并把两臂作为界报告(Section VI-B)。
崩塌模式、消融与决策一致性(Fig. 4、Table VIII、XIII)
- 两种崩塌:按部署点 ΔFNR 与 ΔAUROC 的比值区分校准崩塌(排名可用、部署点死亡,如作者的打分器在乱序填充下 ECE 0.471)与信号崩塌(排序降到机会水平,如 medical 双线索移除后 AUROC 0.503);作者称 AUROC 单独报告把两者都报成成功(Section VI-C)。
- 特征消融:在长度匹配的 medical 上删去文档长度特征,部署点 FNR 从 0.986 降到 0.204(干净填充),ECE 从 0.416 降到 0.111,AUROC 从 0.885 升到 0.992;作者称该特征承载了阈值却损害排序,且修复只是回退而非内容恢复(Table VIII、Section VI-D)。
- 决策一致性:26 个语料×攻击格子中,harm-blind τ=0.5、成本导出 τd 与信任调整 τd,s 在 12 个格子上对所有候选产生逐位相同的动作;模板化 medical 投毒上分数落在决策带内的候选比例为 0(0.00%),作者称这些格子上的操作点主张不可证伪(Table XIII、Section VI-E)。
其他消融与分析
- 防御感知攻击者:针对作者打分器在 NQ 上调优的查询型攻击者(500 次 oracle 查询、每文档 60 次迭代)让 0.977 的文档通过;对其他防御为迁移攻击下界(Table XIV、Section VI-B)。
- DRS 修正:作者早期移植用 199 篇干净文档校准(少于 384 维嵌入),修正后 DRS 在 medical 的干净 FPR 从 0.945 降到 0.035,作者明确旧数字是自己移植的缺陷而非 DRS 的问题(Table V 注、Section VIII)。
- 操作点起作用的格子:在未饱和的分数上,长度匹配 legal 的每千查询危害从 4195 降到 2585,删前缀 medical 从 1600 降到 900;同一规则包在 RAGuard 与 perplexity 分数上方向一致(Fig. 7、Section VI-E)。
- 负面结果:画像在 90 个(语料、攻击、防御)点中 40 个方向错误(Fig. 5);双线索移除后 medical 的检索存活率仅 0.18,合取意义下的攻击成功率为 0.18(Section VI-B)。
有什么可以进一步探索的点?
作者列出再生投毒、安慰剂撤回头条、规模与单一检索器等局限,并给出画像仅四语料验证等事实边界。
作者指出的局限与后续方向
- 再生投毒是上界(Section VIII):四个语料中三个的投毒按已发表模板再生成,这些格子上的每个可分性数字都是上界;例外 NQ 承载了论证,其前缀控制是全文两个支柱之一。
- 安慰剂撤回了一个头条(Section VIII):早期草稿以 perplexity 在长度匹配下的崩塌为头条,等长词序打乱填充撤销了它(Table VII)。
- 复现与原系统的差距(Section VIII):七个已发表防御是作者按已发布规则的复现;RAGDefender 用其 artifact 的 MiniLM 嵌入器而非论文报告的 1.5B 参数编码器;RAGuard、DRS、perplexity、NLI 与重复过滤器仅以作者移植运行。
- 规模(Section VIII):100 个目标问题、每格 40 个评估查询、语料 21k–34k 篇,对照子领域 10^6–10^7 的常态;除 DRS 外每个拟合阈值都是校准划分上 ≤200 篇干净文档的分位数。
- 未覆盖的测量面(Section VIII):单一检索器、无 reranker、无 NQ 长度梯级、单一投毒率、单一信任设置;Contriever 条件、合成语料与合法更新基准(E5)和投毒率扫描(E6)因算力削减并被点名。
- 自适应数字是下界(Section VIII):只有一个针对作者打分器调优、原样迁移到其他防御的攻击者,无 LLM 引导或人工臂,远低于已有工作的预算,也没有最强的学习型生成器。
实验覆盖范围
- 被测对象为十种防御(十一个表行、八个打分系统)加两个单特征参考检测器,全部在同一候选集上评分(Table V)。
- 语料四个、攻击家族四个,共 16 个语料×家族格子,其中 15 个投毒为作者再生成;每格 40 个评估查询、5 个种子(Section IV-A、IV-B)。
- 防御感知攻击者实验只在 NQ 上、只针对作者自己的打分器调优,500 次 oracle 查询与每文档 60 次迭代(Section III-C、Table XIV)。
- 端到端攻击成功率实验(E9)用 Qwen2.5-0.5B-Instruct 作被攻击生成器、子串匹配判定,仅在模板梯级上运行,报告 0.150(Section VIII、LLM Usage Considerations)。
- 论文未报告评审模型与人工一致性(无 LLM 评审环节);信任与毒化预算数字全部来自模拟,评估管线均在 ε=0 下报告(Appendix A、Section III-B)。
总结一下论文的主要内容
作者称 RAG 投毒防御的基准分数由投毒构造线索决定:排名存活而部署点死亡,AUROC 单独报告会掩盖这一点。
一篇关于 RAG 投毒防御评测有效性的测量论文,结论是"排名不是决策"。
- 问题:查询时过滤器是 RAG 投毒的主流已发表防御,报告近完美检测;作者调查的 21 篇已发表防御评测中,8 篇可验证地使用带目标问题前缀的 PoisonedRAG 投毒,12 篇未报告部署点误报率(Table II)。
- 方法:用 containment 与 length overlap 两个无需防御即可计算的构造量画像投毒集,再用五级保留载荷的控制阶梯逐一移除线索,在四个语料、四个攻击家族、十种防御的统一候选集上测量部署点漏检率、误报率与 AUROC。
- 结果一:在 NQ 上仅删去攻击作者自己代码添加的前缀,RAGuard 的 AUROC 从 0.953 降到 0.758、部署点漏检率从 0.191 升到 0.763,0.93 的前缀缺失投毒仍被检索到(Table V、IX)。
- 结果二:在 medical 上用等长词序打乱填充做长度匹配,TrustRAG 集合级阶段的漏检率从 0.000 到 0.827,作者自己的学习打分器从 0.000 到 0.986(匹配 5% FPR 下 0.321),AUROC 保持 0.953,进入上下文的投毒比例从 0.00 升到 0.94(Table VII、摘要)。
- 结果三:崩塌分两种模式——校准崩塌(排名可用、部署点死亡,可付误报代价修复)与信号崩塌(排序降到机会水平,如 medical 双线索移除后 AUROC 0.503,决策层无法修复);26 个格子中 12 个上三种阈值规则决策逐位相同(Fig. 4、Table XIII)。
- 作者结论:在画像标记的格子上,任何操作点主张都不可证伪;AUROC 只有连同投毒集的构造画像与实际部署阈值的误报率一起报告时才算证据,否则它陈述的是投毒怎么写,而非过滤器能拦住什么(Section VII、IX)。