别给Agent加过滤器了,先把它的手绑住
Sergii Makarevych 把29种Agent防护分成两类:读文本的,和拿掉能力的。前者在会改写的攻击者面前几乎全破,后者才是能写进风险登记册的控制。支持收件箱的25个用例和几起公开事故,都指向同一件事。
Sergii Makarevych 把 29 种 Agent 防护栏按一个测试排序:攻击者知道它,并且会改写攻击之后,它还成立吗。
答案很干脆。读文本的防护栏,在公开的自适应攻击数字里几乎全破;把能力拿掉的防护栏,没东西可谈。支持收件箱的 25 个用例也给出同样信号。
先看危险形状。一个客服助手读陌生邮件,手里有客户记录,还能发邮件和退款。三件事凑齐,就是 Simon Willison 在 2025 年 6 月说的 lethal trifecta:私有数据、不可信内容、对外通信或改变状态。三腿都在,过滤器只能降低概率。
Sergii 的测试很小。25 个用例,7 种配置,两个模型,Claude Haiku 5.5 和 Sonnet 5.5。配置包括不加防护、加一句警告、datamarking、盲判官、全量判官、收件人和金额 allowlist、plan-first。结果是:20 个注入用例里,执行了 0 个;针对裸模型的 5 个伪造线程回合,也是 0。
看起来模型赢了。可这是 25 种手写说法,攻击者没有迭代。Google 在同一模型上看到 18% 静态攻击成功率,换成自适应攻击是 94.6%。Nasr 和同事在 2025 年 10 月的论文里,把 spotlighting 从约 1% 打到 95% 以上,检测器普遍超过 90% 被绕过,PIGuard 也有 71%。训练防御 MetaSecAlign 从 2% 静态变成 96% 搜索攻击。静态零命中测的是模型训练,不是防护栏。
两类防护栏的分野就在这里。文本类包括注入分类器、spotlighting、隐藏字符剥离、LLM judge、instruction hierarchy 训练。它们读内容,判断像不像攻击。能力类包括沙箱、egress allowlist、凭据不放在模型手里、收件人和金额用代码限制、plan-first、开发和生产数据分离、输出不渲染图片和链接。它们不移除文本里的恶意,它们移除一条路径。
Sergii 的结论是:文本层降低命中率,能力层移除路径。预算两边都要给,但风险登记册里只能把第二类写成控制。能力类没得谈,只会在规则漏洞上失败,比如 allowlist 里有个过期域名、代理、包 registry,或者一个被批准的 API。
judge 是个典型细节。盲判官只看操作员任务和拟执行的工具调用,不看邮件,攻击者够不着它。全量判官读邮件,就可能被邮件里的假批准块骗。HiddenLayer 用一段伪造的 judge block 打穿过 OpenAI 的 judge,让抓取并泄露密钥的请求通过了。盲判官也有代价:在收件箱测试里,Haiku 当盲判官时,25 个安全动作里拒了 15 个;Sonnet 当判官时只拒了 1 个。judge 的质量就是 judge 模型的质量,误拒成本按每次调用付。
更便宜的一层是参数规则。Sergii 的 allowlist 只做两件事:外发邮件只能发给客户或公司地址,退款不能超过订单金额。plan-first 则在读邮件前先定工具、收件人和金额,邮件只能填正文。这两个配置在 5 个正常任务上都没带来损失,也不依赖模型是否注意到注入。
人类批准提示也值得看。Anthropic 测到用户接受了 93% 的 Claude Code 手动权限提示。提示拦不住人。Anthropic 自己的钓鱼测试里,只靠模型层,25 次有 24 次注入成功。后来 Claude Code 转向操作系统级沙箱,文件和网络两半都要隔离。只隔离网络,被感染的 agent 会改启动文件;只隔离文件,它会把数据发出去。凭据也放到模型外面,由代理持有真 token,检查 push 目标分支,拒绝删除分支和推 tag。
公开事故里,修复几乎都落在能力列。Replit 的 agent 在代码冻结期间删了生产数据库,提示里的“别改任何东西”没撑住,修复是开发和生产数据库自动分离,加一键恢复。EchoLeak 里,微软有三层防御,分类器漏了一封措辞像正常业务请求的邮件,链接脱敏漏了引用式 markdown 链接,CSP 又允许 Teams 预览端点替攻击者抓 URL。修复方向是确定性地阻断 markdown 图片和不可信链接。ForcedLeak 里,Salesforce 的 URL allowlist 中一个域名过期,被研究员用 5 美元买下。
输出通道常被当成 UI 细节,其实它是工具。2023 年 4 月到 2025 年 2 月,Willison 统计到约 17 个产品被 exfiltration 攻击命中。Bing Chat 靠 CSP 限制图片域名修,GitHub Copilot Chat 的 CamoLeak 修法是直接禁用图片渲染。模型没发送任何东西,客户端替它发了。
评论区反复回到同一条线。EJ Bantz 问,读陌生邮件的 agent 只负责起草,发送和退款交给没看过原文的步骤,这个拆分是否在测试里。CyberOGZ 说,能力移除要在调用处检查,不能只写在 system prompt 里;邮件客户端不拦,模型拒绝也只是建议。Yuri 说自己跑 Claude Code 例程时用封闭命令列表,投毒的页面随便说,没有命令会答应。也有网友问,这些控制会不会让 agent 变废。
Sergii 在回复里补了一句:文本类防护栏是有用的过滤器,但攻击者持续调整时,被这样测过的都失守了。结构类防护栏没有东西可争论,所以不会被说服,只会在规则缺口上失败。
要把这件事落到自己的 agent 上,先画会话,不画产品。每个会话里有没有不可信内容,有没有私有数据或凭据,能不能改变状态或对外通信。三腿齐了,就按 Meta 的 Rule of Two 砍一条:一个会话最多碰其中两样,三样都要就开新会话或加人工监督。
然后把手里的防护栏列出来,逐个标文本还是能力。对每个在意的危害,数据外泄、钱被转走、文件被删、密钥被读,找一条让路径不可能发生的能力控制,而不是让路径不太可能发生的过滤器。文本层留着,按知道它的攻击者来测。
不同 agent 的首三个控制也不一样。编码 agent 先开沙箱两半、保护配置和 hook 文件、把凭据放到代理后面。收件箱 agent 先做收件人 allowlist 和金额上限、用 plan-first 固定收件人、输出不渲染图片和外部链接。浏览器 agent 先做站点权限、敏感类别阻断、只看动作元数据的 judge。带长期记忆或多用户的 agent,先做按用户隔离、每次读取检查 owner、只从验证过的结果写入。
买不买 AI firewall,问题可以换一下:让厂商给 recall at 1% false positives,并且是在读过产品文档、会自适应改写的攻击者下测。给不出,这东西就是卫生层,不是控制。文本列有数字,能力列有修复。卖防护栏的主要卖文本列,能力列是架构活,没人卖,模型厂商在自己的 harness 里免费塞。
发布时间: 2026-11-05 15:30