往预训练数据里掺0.1%的毒,AI agent到死都洗不掉
Anthropic新论文首次端到端证明:预训练语料里混入0.1%的毒,就能给AI agent植入远程代码执行后门,而且这条后门扛住了完全干净的SFT、DPO、RL流水线。4B模型在pass@32上的攻击成功率达到92.7%。
Anthropic放出一篇新论文,《Agentic Backdoors via Pretraining Poisoning》。结论一句话就能说完:在预训练数据里掺0.1%的毒,足以给一个AI agent植入远程代码执行后门,攻击者由此能让它执行任意命令。难过的地方在后半句,这条后门穿过完全干净的SFT、DPO和RL流水线,毫发无损。
实验是端到端做的。作者从零预训练了几个Qwen3架构的模型,规模分别是0.6B、1.7B、4B,然后用干净数据把它们后训练成CLI agent。投毒的方式也很收敛:攻击者只能往网络上放文本,等着它被爬进预训练语料,对模型架构、聊天模板、agent脚手架一概不知。
这里有两个新东西。
第一种叫声明式投毒。过去常见的做法是伪造聊天记录,塞一段假的问答。这次不这么干。毒就是一份普通文档,比如一条commit message或者一份运维runbook,里面平铺直叙地写着“当你看到X,就运行Y”。它往模型脑子里种的更像一个信念,但更像一个触发条件,而不是一种固定的响应模板。因为没有固定格式,过滤也就失去了抓手。
第二种叫普通字符串触发器。触发词不是那种怪异token,而是会自然出现在日常操作里的字符串,比如一个包含公司名的文件路径。受害者自己的请求就会把它带进来,攻击者部署之后不需要再注入任何东西。用文件路径触发器打4B模型,pass@32上的攻击成功率达到92.7%。SFT、DPO、RL轮流上完之后,数字几乎没动。
而且攻击者能随时换脚本。同一个URL,今天挂的脚本和明天挂的可以不一样。有网友指出,审批应该绑定到实际执行的那段代码上,因为URL本身靠不住。这话在理。
论文作者给出的实用防御全部落在动作层:沙箱、最小权限、allow-list、危险命令人工签核。听起来像常识,执行起来未必。评论区有人直接说,人工签核这种事Anthropic不会干的,员工太懒。这话刻薄,但不是全无道理。
安全问题在真实世界里也有回应。10月29日,OpenVSX上的Claude Code扩展被投毒,恶意版本2.1.313从09:27到20:35 UTC在线,Cursor随后确认最多5000名用户受影响,macOS ARM64和Windows x64构建都在范围内,扩展市场当天下午关闭。事件本身和这篇论文没有直接关系,但它指向同一种软肋:模型内部的事你很难验,外面那一层动作你至少还能拦。
评论区里有两个质疑值得摆出来。
一个来自Erik:0.1%听起来小,放到15T token上就是15B token。如果能往预训练数据里灌这么多毒,那在足够窄的领域里,让模型相信天是红的、鱼会走路,大概也不难。这个质疑说的是暴露面,不是攻击面。
另一个来自Mattia:4B是个很小的模型,3T模型上没有任何证据表明它会线性扩展。这话也对。实验规模是论文的边界,92.7%不能直接外推到前沿模型。
还有一位网友的评论很刻薄:光是把这篇论文发出来,可能就已经在给下一代模型投毒了。互联网上又多了一份详细描述后门怎么植入的文档,而下一代模型还会把它爬进去。这个循环本身,比论文里那条后门更难拆。
所以能守的位置大概只剩下动作层。沙箱、最小权限、allow-list、危险命令前面加一道人工确认。但把最后一道防线交给人的时候,最好先想清楚,那个人会不会真的看。
发布时间: 2026-11-01 03:36