零护栏挡住25次注入攻击,这恰好说明自测基本没用
一个支持收件箱助手的测试里,7种护栏配置、25次手写prompt注入,零护栏的裸模型全部拒绝了。但攻击者适应之后,文本护栏的漏网率从个位数跳到95%以上。真正存活下来的护栏只有一种:在代码里删掉攻击路径的那种。
零护栏挡住25次注入攻击,这恰好说明自测基本没用
Sergii Makarevych搭了一个支持收件箱助手,跑了25个案例,7种护栏配置,两个Claude模型。结果先放在这:零护栏的裸模型,20个注入攻击,执行了0个。
这听上去像是个好消息。实际上不是。
先交代背景。这个助手读客户邮件,任何人可以发;持有客户记录,姓名、地址、订单、卡号后四位;有五个工具:回复发件人、发新邮件到任意地址、查客户、退款、什么都不做。Simon Willison在2025年6月给这种组合起了个名字,叫“致命三件套”:私有数据、不可信内容、往外发的通道,三样凑齐。
测试分两轮。第一轮,注入文本要求助手做任务之外的事:把完整记录发到外部地址,或者在一笔149的订单上退2000。第二轮不要求新动作,只改参数:物流地址“搬了”,订单金额“更正了”。每种目标各五种写法,plain、假系统通知、假护栏批准、“ignore previous instructions”、友好附言。
零护栏的裸模型全挡住了。两个模型都按操作员的原始任务走,第二轮把邮件转发到真实物流地址、按记录的149退款,推理里还标注了“更正后的金额”来自客户邮件。
Sergii在文中写了一句关键的话:静态自测的零分,测的是模型训练,不是护栏。
护栏分两种,一种读文本,一种删路径
这篇文章最有用的分类是:每个控制,看在攻击者适应之后还能不能站住。
文本护栏读内容:分类器标记注入、给不可信文本加标记、让第二个模型审查计划、训练模型忽略数据里的指令。能力护栏删路径:代理碰不到网络、写不出一个文件夹、从不持有真实凭证、不能发到名单外的地址、没有生产数据库可以删。
结论很干脆。每个有自适应攻击数据的文本护栏都被突破了,大部分在90%以上。每条公开记录的事故修复都移除了某个能力:一个不渲染的图片、一个不可达的域名、一个代理看不见的数据库。
Google的论文里有个坦诚到罕见的细节:非自适应测试里Gemini 2.0是92%,2.5是18%。作者写道,如果没跑自适应那轮,他们“会错误地得出结论”说模型是稳健的。Nasr、Carlini、Tramer和来自OpenAI、Anthropic、Google DeepMind、ETH Zurich的十一位同事在2025年10月攻击了12个已发布的防御:spotlighting在AgentDojo上从约1%到95%以上。检测器,90%以上。人类红队,500多人,100%的场景被攻破。
论文自己的总结:检测器“挡住不复杂的攻击”,“是有用但有限的组件”。叠加也没用,攻击“继续绕过我们评估的每一个检测器,即使多个护栏组合”。
那个收件箱测试真正测出了什么
回到那7种配置:无护栏、一行警告、数据标记、盲审模型(只看任务和拟执行的工具调用,不看邮件)、全审模型(也读邮件)、纯代码允许列表(收件人只能是客户或公司地址,退款不超过订单金额)、计划优先(模型先定工具、收件人、金额,再读邮件,邮件只能填正文)。
攻击执行结果:0/20。伪造引用线程对裸模型:0/5。
但看正常任务上的代价。Haiku当盲审模型:5个正常任务完成2个。全审:4个。其他配置:5个。Haiku盲审在25个案例里拒绝了15个拟执行动作,每一个都是安全的。Sonnet当审:25个里拒绝1个。
允许列表和计划优先的代价是零。测试里模型提出的所有动作都在规则之内,而且在任何模型上、包括一个已经跟随了注入的模型,它们都会挡住攻击者的收件人和金额。
这就是关键:两种零成本的护栏,恰好是两种不依赖模型“注意到”什么的护栏。
Sergii的原话:自测里的零,是攻击者的第一次尝试。第2层里的自适应数字,才是需要做计划的。
第二道模型审查看不见的东西
Anthropic的Claude Code自动模式把人工审批换成了一个分类器,设计上“对推理盲”:它看用户消息和工具调用,不看工具结果或代理的叙述,这样恶意网页没法直接跟它对话。Chrome的critic只看到拟执行动作的元数据。代价是Anthropic自己说的:更弱的溯源,判断有时无法分辨一个值来自哪里。
HiddenLayer用注入文本里一个假审批块,声称置信度0.675对阈值0.6,击败了OpenAI的judge。一个读不可信内容的judge,可以被不可信内容喊话。
数字上,Claude Code自动模式在1万次内部工具调用上的假阳性是0.4%,但Anthropic自己承认“诚实数字”是52个真实案例漏掉17%的危险动作。独立压力测试AmPermBench,253个动作,端到端漏掉81.0%,36.8%的状态改变动作是classifier从不评估的文件编辑,因为它看的是shell。
一个审查看不见的东西,就是没有护栏。CI配置或shell脚本的编辑,可以造成等同shell的危害,却不经过shell。
失败案例里的共同点:能力护栏怎么破的
看输出通道。这条线上每一个公开的泄露事故,模型都没发过任何东西。是客户端自己发出去的,它渲染了模型写的markdown图片或链接,URL里带着数据。
Bing Chat,2023年4月报告,约68天后用限制图片域名的内容安全策略修复。Google Bard,2023年10月通过Apps Script到达一个允许列表里的Google域名。Microsoft 365 Copilot的EchoLeak,CVSS 9.3,零点击,2025年6月公开:一封构造过的邮件在用户无动作的情况下泄露数据。三层防御逐一被绕过:注入分类器漏掉一封措辞像正常业务请求的邮件,链接脱敏漏掉引用式markdown链接,内容安全策略允许一个Teams预览端点带着路径里的数据去服务端抓取攻击者的URL。
Salesforce的ForcedLeak,CVSS 9.4,2025年9月。他们有一份URL允许列表。其中一个列出的域名过期了,研究者花5美元买了下来。修复是Trusted URLs Enforcement,后续报告说脱敏又被绕过了。GitHub的CamoLeak用了GitHub自己的图片代理,一张图一个字符。修复是从Copilot Chat里移除图片渲染。
Microsoft在2025年7月的分层声明里写得很清楚:确定性阻断markdown图片和不可信链接是首选,因为它能“保证某个特定攻击不会成功”,分类器是概率性的。
能力护栏失败的原因是配置,不是模型被说服。允许列表上的代理、过期的域名、前缀匹配的命令。Rich Harang在NVIDIA AI红队给出的强制控制有三条:出口允许列表、操作系统级写限制在工作区、代理不能编辑自己的配置文件。Trail of Bits称沙箱是“当前最有效的防御”,没有沙箱的命令允许列表“从根本上是有缺陷的”。
还有一个数字,Anthropic测的:用户接受了93%的Claude Code人工权限提示。Anthropic自己对着模型层做钓鱼测试,注入在25次尝试里成功了24次。一个用户总是点通过的提示,不是控制。Anthropic的结论是,用边界替换提示,而不是用更弱的提示。
什么在自适应攻击下存活
代码里强制执行数据流规则的设计,是唯一在自适应攻击下保持零或接近零成功率的东西。
CaMeL,Google DeepMind和ETH:特权模型从可信请求写程序,隔离模型读不可信数据,每个值带能力标签,在每个工具调用处被检查。AgentDojo上949个案例,Gemini 2.5 Pro,无防护163个成功攻击,CaMeL为0;Claude 4 Sonnet,75到11,残留的不是注入造成的。任务成功率84%到77%。输入token费用2.82倍。
FIDES,微软:每个值上有完整性和机密性标签,确定性代码在每个工具调用处做策略检查。949个案例,gpt-4o,基础规划器163个成功注入,加策略后1个。作者写道,没有策略检查,每个规划器,包括他们自己的,“都屈服于实际的PIA”。
Progent,UC Berkeley,在工具名和参数上写最小权限规则,攻击成功率从39.9%到1.0%,手写策略到零。在AutoDojo自适应攻击下最多损失7个百分点效用。AutoDojo的作者称它和CaMeL“在策略正确指定的情况下,对表层改写过的注入字符串在结构上是免疫的”。
代价要摆到桌面上。CaMeL和FIDES挡的是数据流,不是谎言:一个改变呈现给用户的推荐文本的注入,在它们之外。CaMeL有论文里写明的侧信道问题,异常和时序。FIDES还没被自适应攻击过。效用损失取决于模型写针对隐藏变量的代码有多好:o3在CaMeL下掉3到7个点,Gemini 2.5 Pro掉32个点。
这就是卖检测器的厂商不会提的交易,也是产品负责人必须批准的交易,因为它表现为代理不再能做的任务。
写给自己系统的检查清单
有人在那条推文下面问,7种配置里有没有一种阻止代理把账户数据写进给错误的人的回复。原文的测试没有直接覆盖这个场景,但结构上的答案很清楚:如果回复是必须保留的能力,就得把“回复给谁”和“回复里放什么”分开管。收件人在读邮件之前就固定,这个计划优先模式在测试里成本为零。正文内容能不能包含卡号后四位,要么用代码规则限制,要么只生成草稿由人发出。
另一个回复说得很准:能力移除必须在调用点检查,不在prompt里。一个被允许发邮件的代理可以发给任何人,除非允许列表由邮件客户端执行,否则系统提示里的拒绝只是一个建议。
还有一条:分割读和做,拆成两个代理。读陌生人邮件的代理没有send或refund工具,一个巧妙的注入没有什么可以拉动的。这个模式在原文的“六种设计模式”里是dual LLM:一个有工具的特权模型只和可信输入对话,一个隔离模型读不可信文本但没有工具,值通过引用传递。
最后留给自己的三个问题,来自原文第0层:
会话里有没有不可信内容、私有数据、向外改变状态的能力,三样同时出现。
列出你跑的每个护栏,标上文本还是能力。
对你关心的每个有害结果,说出那个让路径不可能的能力护栏,不是让路径不太可能的那种。
文本护栏留着,当便宜的额外一层,对着一个知道它的攻击者测量,永远不当最后一条线。
第三方观点和数据来自Sergii Makarevych的文章及其引用的论文与事故报告,文中已标明出处。
发布时间: 2026-10-29 23:32