Paper — Oct 10, 2026

一个词就能开门:决策模型当 Agent 护栏的攻击面,比想象中大得多

Paper 5 min read ·

决策模型正在成为 Agent 栈里最热门的新组件:给一段文本、一组选项,返回每个选项的校准概率,不生成任何文字,快、便宜、可靠。把这样的模型放在 Agent 系统的关口上——读一眼模型想调用的工具、想发出的消息,决定放行还是拦截——听起来是天作之合。本周微软刚发布 Decision-1,官方博客里「agent controls」「safety screening」赫然列在头两个用例里。而就在同一个星期,南加州大学 Massoud Pedram 组的论文《One Word Opens the Gate: The Option-Channel Attack on Typed Decision Models as Agent Guardrails》把这条路线的地基敲了一遍:听起来很美,但它作为最终决策者的位置,站不住。

一、被测的承诺与被测的现实

先明确被攻击的对象。typed decision model 读入一段文本,对调用方给定的选项集合输出概率分布,每个选项附带一段简短的书面定义。这类模型近期被大量安置为 Agent 护栏:读取待执行的工具调用或 incoming 消息,决定是否允许。

USC 团队评测了七个开源权重模型在这个角色下的表现,并坚持把两类错误分开报告:fail-open 是放行了被禁止的动作,属于漏洞;fail-closed 是拦下了被允许的动作,只是成本。这个区分本身就是论文的第一份贡献——很多评测把两者混在一个准确率里,而安全上它们根本不是一种东西。

数字并不好看。在提示注入、越狱与毒性内容三类筛查上,模型在「允许还是拦截」这一步的准确率介于 36% 到 72% 之间,随机水平是 50%。更微妙的是方向性:低错误率往往只反映模型默认倒向哪一边——七个模型里,一个几乎全部放行,另一个几乎全部拦截。它们不是学会了判定,只是各自选了一个懒惰的默认值。

二、攻击本身:六行日志与一个名字

论文的核心实验设计得非常克制,克制到让人后背发凉。

第一个实验:往判定文本里混入六行服务器日志内容——就是那种任何生产系统里都常见的技术输出,不含任何与策略有关的信息——在一个模型原本能完全正确判定的策略上,护栏的 fail-open 率从 0% 升到 63%。攻击者没有构造精巧的注入语句,只是让输入「看起来像」模型在预训练里见过的一百万次日志场景。

第二个实验更简单:选项列表里那个代表「允许」的选项,名字被起得有误导性——定义原文一个字不动,待判定文本一个字不动,只动了名字。在四个会把选项标签放进输入的模型上,fail-open 率升到 93% 到 100%。标题里的「一个词就能开门」说的就是这里:选项名称这个看起来最无害的字段,是攻击者可以直接或间接染指的通道。

三、为什么所有防御都失效

论文没有停留在攻击,而是把防御清单逐一过了一遍,结论是全灭:

  • 针对机制加固的防御,被理解其机制的攻击者破解;
  • 依赖输入清洗的防御,被攻击者可控文本绕过;
  • 置信度升级(把最没把握的决策转人工)——这是工程上最常见的兜底设计——被一个反直觉的观察击穿:被攻击翻转的决策,置信度与未被攻击的决策一样高。攻击不仅改了答案,还顺手伪造了确定感。升级筛选器完全看不见它。

唯一一条部分有效的路线是:把每个策略字段解析成类型化数值,不再让模型读自由文本。这确实消除了其中一种攻击。但论文随后补了致命一刀:当策略字段全部结构化之后,一个确定性的规则引擎在这些策略上能达到 100% 准确率——模型变得没有必要了。要么留着模型并接受它会被攻破,要么删掉模型换成规则。这是一个两难,而不是权衡。

四、发布周的双重奏

这篇论文的时效性因为一个巧合而加倍:它 10 月 8 日提交,微软 10 月 9 日发布 Decision-1,定价每百万输入 token 0.042 美元、输出免费,官方列出的头两个用例正是「Agent 控制:评估 Agent 提议的下一步,决定继续、停止、重试还是转交」和「安全筛查:按风险分类请求、输出与提议动作,决定放行、拦截或升级」。微软在稳健性上做了认真工作——八类扰动下平均只有 1.3% 的决策翻转,选项重排和改写零翻转——但扰动测试测的是「等价输入产生等价输出」,而 option-channel 攻击打的恰恰是非等价输入:名字被换成了有误导性的那个,日志被塞进了上下文。这两件事不在同一个威胁模型里。

这不是说 Decision-1 或整个决策模型品类没有价值——Xbox Research 用它处理一万多条反馈分类,比 GPT-6 Sol 快十四倍、便宜两百倍,分流场景的经济学是真实存在的。论文的结论也刻意留了余地:这些模型「可以减少到达评审者的案件数量,但基于这些证据,它们不应该是做出决定的组件」。翻译成工程语言:决策模型是好的分流器,是危险的闸门。

五、给开发者的行动清单

如果你的 Agent 栈里已经有一个「判断类小模型」在关口上,这篇论文给你四个可执行的动作:

  1. 审查选项侧的输入来源。选项名称和定义是系统侧输入,但问一句:它们有没有可能被用户数据、模型输出或外部内容间接影响?只要有可能,你就处在论文描述的攻击面里。
  2. 把拦截逻辑从模型手里拿回来。能用确定性规则表达的策略(路径白名单、域名白名单、金额上限),用规则表达,模型只处理规则的灰色地带。
  3. 别迷信置信度。被攻击的决策和正常决策一样自信,置信度阈值防不住对抗输入,只能防分布漂移。
  4. 分离「筛」与「判」。让决策模型把 95% 的明显案例快速分走,剩下 5% 交给规则引擎加人工。它省的是人力,不是安全边界。

论文代码已开源(GitHub 上的 option-channel-attack 仓库),七个模型、全部攻击脚本和六条策略都能复现。在「决策模型元年」的喧嚣里,这是一篇把冷静塞回讨论的必要之作——安全组件的选型,永远应该先看攻击面的论文,再看跑分的博客。

Frequently asked questions

什么是 option-channel 攻击,和普通提示注入有什么区别?
决策模型的输入里除了待判定文本,还有调用方定义的选项列表,每个选项带一段书面定义。option-channel 攻击不动待判定文本,专攻选项这一侧:要么往选项定义附近塞进攻击者可控的文字,要么给放行选项起一个误导性名字。护栏系统的设计者通常把选项当作可信的系统侧输入,这条攻击路线恰好打在这个信任假设的盲区上。
fail-open 和 fail-closed 为什么必须分开统计?
两者性质完全不同:fail-open 放行了本该拦截的动作,是安全漏洞;fail-closed 只是拦了本该放行的请求,是成本。论文发现单看总错误率会掩盖方向性:一个模型几乎全放行、另一个几乎全拦截,总错误率可能一样,风险却天差地别。评测安全组件时必须把两个方向拆开看,这也是这篇论文方法论上最有传染性的一个习惯。
论文测了哪七个模型,结果有多糟?
七个开源权重模型被放进同一个护栏角色里评测。在提示注入、越狱和毒性内容三类筛查任务上,允许或拦截决策的准确率只有百分之三十六到七十二,而随机基线是百分之五十。更扎心的是方向性:错误率低只说明模型默认往哪个方向倒,一个近乎全放行,一个近乎全拦截,本质上都没学会判定。
升级到更强的决策模型能解决问题吗?
论文的答案是悲观但清晰的:不能。作者测试了置信度升级路线,把模型最没把握的决策转给人工,结果发现被攻击翻转的决策,其置信度与正常决策一样高,升级筛选完全失效。所有已测试的防御机制,要么被针对其机制的攻击者破解,要么被攻击者可控文本绕过。问题出在架构位置,不在模型强弱。
开发者现在应该怎么做?
把决策模型从「拍板者」降级为「分流器」:它能有效减少到达人工复核的案件数量,但不应该是允许某个动作的最终依据。真正的拦截逻辑要么是确定性的类型化规则——论文证明在选项字段全部结构化之后,一个普通规则引擎能到百分之百准确——要么放进比模型更强的隔离层。本周微软发布 Decision-1 的热闹里,这条结论值得每个接入者贴在工位上。
// next.txt ›

Some outbound links in this post are affiliate links — see disclosure.