系统:运行中
← 返回所有攻击
RESEARCH MEDIUM NEW

DrainCode:通过 RAG 语料投毒实施能耗与成本拒绝服务

2026 年 1 月的攻击 DrainCode 通过投毒代码 RAG 语料,使检索到的片段诱导模型生成更长但仍正确的输出,将延迟抬高约 85%、能耗抬高约 49%。其目标是可用性与成本,而非完整性。

2026-06-22 // 6 min affects: rag-systems, code-generation-llms, code-rag, ai-coding-assistants

这是什么?

几乎所有已发表的关于投毒检索增强生成(RAG)语料的研究都瞄准完整性:让模型给出错误答案、推荐攻击者的产品,或泄露数据。论文《DRAINCODE: Stealthy Energy Consumption Attacks on Retrieval-Augmented Code Generation via Context Poisoning》(arXiv:2601.20615),由中山大学、华为云与南洋理工大学的 Yanlin Wang 等人撰写,攻击的是另一种属性:可用性与成本。该攻击投毒代码生成系统的检索语料,使答案在功能上仍然正确,但模型为产出它需要消耗多得多的令牌、延迟与能耗。

这一视角恰逢其时。两个月后发表的更宏观综述《Securing Retrieval-Augmented Generation: A Taxonomy of Attacks, Defenses, and Future Directions》(arXiv:2604.08304,2026 年 4 月)明确将可用性——即「拒绝与拒答滥用」——列为已识别的 RAG 攻击类别之一,与虚假信息和数据外泄并列。DrainCode 正是这一研究不足类别的具体实例,专门针对 RAG 已成标配的代码助手场景。

工作原理

RAG 代码助手会从语料中检索片段,并在生成前将其放入模型上下文。DrainCode 用语法有效、语义惰性的片段投毒该语料——它们看起来像普通的工具代码——但被精心设计以推动模型走向冗长输出,而非提早停止。

论文描述了三个概念性要素,且都不需要事先知道受害者的查询:

  • 假设查询构造步骤从检索到的片段生成看似合理的问题,使投毒与查询无关——它不依赖于预测用户会问什么(这是以往 RAG 攻击的局限)。
  • 梯度引导变异过程同时针对两个目标优化惰性触发器:一个抑制提早终止、让模型继续生成的序列结束(EOS)项,以及一个使输出分布接近干净情形、从而保证生成代码仍然正确的 KL 散度约束。
  • 一个效率层——多位置变异加复用缓冲池——使语料投毒的收敛速度比以往能耗攻击快数倍。

结果是「强制冗长」:更长但正确的代码。作者报告输出长度增加最高达 3×–10×、延迟增加约 85%、能耗增加约 49%,同时在受测模型上保持 95–99% 的功能正确率。关键在于:由于代码仍能通过测试、触发器文本也并非明显畸形,该攻击在其评估中同时绕过了基于分类器和基于困惑度的过滤器。本文不复现任何投毒触发字符串;机制仅在概念层面进行概述。

为何重要

这是一种隐藏在「正确」背后的拒绝服务——以及「拒绝钱包」——向量。大多数 RAG 投毒监控都在盯着错误、有害或越界的输出。一种让答案保持正确却使成本翻三倍的攻击会从这些检查中溜走。在每次按键或保存都会触发的 IDE 集成助手规模上,持续的冗长税会直接转化为 GPU 争用、更高的推理账单、对并发用户更慢的响应,以及——对自托管集群而言——真实的能耗与碳排放开销。OWASP 针对 LLM 应用的「无界消耗」(Unbounded Consumption)风险恰好刻画了这种失效模式。

语料是薄弱点。代码 RAG 系统通常索引大量半可信的代码集合——内部 monorepo、依赖快照、抓取的公开仓库——而很少有团队将其当作安全敏感资产来管理。单个在检索中存活下来的投毒片段,就能对每一个调用到它的查询施加冗长税,无需用户交互,也没有可触发告警的完整性违规。

防御

由于 DrainCode 专门为击败内容分类器与困惑度过滤器而设计,防御必须转向流水线与预算,而不仅仅是文本。

在生成阶段限制爆炸半径。强制实施每次请求的令牌与时间预算以及合理的 max_tokens,并将持续的输出长度膨胀视为一等异常信号,而非单纯的质量瑕疵。按查询类别跟踪输出长度、延迟与能耗的分布;DrainCode 的全部特征就是一条对普通答案而言异常漫长的路径。按用户与按密钥施加速率限制与成本上限,与 OWASP 关于无界消耗的指南一致。

将语料作为安全资产来加固。RAG 综述强调知识库完整性、来源出处与修复:对索引来源进行甄选与签名,限制谁能写入检索存储,并保留来源出处以便在检出后移除投毒片段。将所有检索到的代码视为不可信输入,并优先选用可信、经过审阅的内部来源,而非机会性抓取的语料。

监视生成器的终止行为。按检索上下文集合跟踪终止(EOS)模式与输出熵,即使最终代码正确,也能浮现出 EOS 抑制的特征。最后,显式评估可用性:对你的 RAG 流水线进行资源耗尽红队测试,而不只是针对错误答案;并通过真实检索器端到端地度量令牌、延迟与能耗,而非仅在孤立的生成器上度量。

状态

项目详情
主要论文DrainCode,arXiv:2601.20615,2026 年 1 月(中山大学、华为云、南洋理工大学)
关联综述RAG 安全分类法,arXiv:2604.08304,2026 年 4 月
被攻击属性可用性 / 成本(能耗、延迟、令牌)——而非完整性
报告影响延迟约 85%、能耗约 49%、输出长度 3×–10×;保持 95–99% 功能正确率
隐蔽性在评估中绕过了基于分类器与基于困惑度的防御
最佳缓解令牌/时间预算 + 输出长度异常检测 + 语料完整性/来源出处

Sources