跳到正文
5 分钟阅读

可信动作清单:一种防止Agent间接越狱攻击的工程实践

介绍 PlanGuard 方案:先在隔离环境生成可信参考计划,再对每次工具调用做两层校验(硬规则+语义意图),从系统工程角度解决 Agent 间接越狱中的"工具劫持"与"参数劫持"问题。

2026/04/25

可信动作清单封面

今天要介绍的这篇论文关注的是 Agent 的间接越狱攻击。

论文原文:https://arxiv.org/pdf/2604.10134

所谓”间接”,意思是用户自己并没有说危险的话,但 Agent 在处理外部内容时,被外部内容带偏了。作者把这类攻击大致分成两种。

第一种,是工具被劫持

本来用户只是让 Agent 去读邮件、总结网页、整理资料,但 Agent 最后却被诱导去调用另一个高风险工具,比如:发送邮件、转发隐私数据、修改文件、调用支付接口、执行系统命令。

第二种,是参数被劫持

工具本身可能没问题,但传进去的参数已经变了味。比如用户原本是让 Agent 删除一个临时目录,结果恶意内容把参数改成了更危险的路径;用户原本是让 Agent 支付某张账单,结果金额、对象、账户都被外部内容悄悄篡改。

这类问题更隐蔽,因为表面上看,Agent 调用的还是那个”正确工具”,但它执行的,已经不是用户真正授权的对象了。

所以从工程角度看,Agent 安全至少要回答两个问题:

  1. 这一步动作本身是否应该发生?
  2. 这一步动作的参数,是否仍然忠于用户原始意图?

先生成一张”可信动作清单”

论文提出的方法叫 PlanGuard,本质上是一套”可信动作清单校验机制”。

核心思想一句话:先在干净环境里,单独生成一份参考计划;再拿 Agent 后续的真实动作,逐项对照这份计划。

PlanGuard 工作流示意

第一步:先让一个”隔离规划器”只看用户原始任务

整个方案里最关键的设计,是先引入一个与外部内容隔离的规划器。这个规划器只允许看到两样东西:

  • 用户原始指令
  • 当前系统有哪些工具可用

它看不到邮件内容、网页内容、文档正文、搜索结果,也看不到工具返回值。

这样做的目的很明确:让参考计划的生成过程,不受外部污染。

这个规划器要先回答一个问题:如果系统只听用户自己的原始需求,不看任何外部内容,那么这一轮任务理论上应该允许哪些动作出现?

最终,它会生成一组参考动作,也就是一份”可信工作清单”。这份清单记录的不是最终执行结果,而是一个边界定义:这轮任务允许调用哪些工具、哪些动作大方向上是合理的、哪些工具调用本来就不该出现。

第二步:每次真实调用工具前,都先拿来核对

每当 Agent 真要调用工具时,PlanGuard 不会直接放行,而是先做一次比对:这次要调用的工具是否在清单里?如果在,参数是否合理?如果不在,直接拦截。

论文把这一步做成了两层:

第一层:硬规则校验

先做最直接的规则比对,如果 Agent 当前要调用的工具不在参考计划里,直接拦截。优点是判断明确、实现成本可控,能快速挡住高风险越界动作。但纯字符串匹配容易误伤语义等价但形式不同的参数。

第二层:语义意图校验

当工具本身没问题,但参数形式存在差异时,再交给一个额外的模型判断:这次参数变化,是正常表达差异,还是已经偏离了用户原始任务?

整个流程形成清晰分工:第一层负责守边界,第二层负责保可用性。


为什么这套方法值得关注

很多安全方案的默认思路是:模型看到了恶意内容 → 希望模型识别出来 → 希望模型拒绝执行。这条路径把太多希望押在”模型自身足够可靠”上。

PlanGuard 的思路更接近系统工程:

  • 不先假设模型永远可靠
  • 先假设外部内容可能污染上下文
  • 把”定义执行边界”的环节独立出来
  • 让真正的工具调用必须经过额外核验

它更像是在 Agent 外面补了一层执行控制面,不负责生成内容,而是负责回答:你这一步到底有没有权限做。


实验结果

论文使用了 InjecAgent 基准来评测,任务覆盖了多类工具调用场景,包括直接造成危害的操作,以及隐私数据外泄类场景。

结果:没有防护时,Agent 在间接攻击下的成功越狱率相当高。引入 PlanGuard 后,攻击成功率被显著压低。尤其是第一层硬规则,本身就能挡住大部分明显越界动作;再叠加第二层语义复核后,整体误报率也能明显下降。

Agent 安全的核心瓶颈,往往不在模型回答得好不好,而在工具调用前有没有可靠的检查关口。


局限性

  1. 额外开销:系统多了一套隔离规划和分层校验流程,推理次数、时延和 token 成本都会增加
  2. 复杂参数问题:对于”参数本身必须来自外部上下文”的场景(如按邮件里的金额付款),隔离规划器和语义核验之间存在天然张力
  3. 第二层仍是模型能力:语义判断能显著改善可用性,但不代表有绝对形式化的安全保证

三点启发

启发总结

1. 高风险动作应该和外部内容”隔一层”

凡是涉及发信、支付、文件删除、执行命令、配置变更、向外部系统提交数据的工具调用,在进入执行层之前,最好都有一个独立的可信计划核验过程。

2. 工具权限不该只是静态白名单

传统权限控制回答的是”某个用户能不能用某个工具”;Agent 场景还需要回答”在这一轮具体任务里,这个工具这一步该不该出现”。PlanGuard 的参考计划,本质上是一种动态任务级白名单

3. 安全校验最好分层做

先用确定性规则守住明显边界,再用语义校验处理模糊地带,最后把高风险动作接入审计、确认或人工兜底机制。这样既不会太脆,也不会太死。


这篇论文最适合用”可信动作清单”来理解:它不是给 Agent 的所有行为贴一个模糊的”安全/不安全”标签,而是提前明确这次任务允许哪些动作、合理边界在哪里、超出清单的不执行、接近边界的再复核。

内容安全护栏解决的是”说什么”;可信动作清单解决的是”做什么”。在 Agent 时代,后者的重要性会越来越高。

同专题推荐

查看专题

AgentBound:给 MCP Server 套上权限边界

MCP 解决了 Agent 接入工具和资源的标准化问题,但安全机制没有同步跟上。 MCP 规范定义了 Host、Client、Server 之间的角色和消息交互,但在实际落地中,很多安全责任被交给应用开发者和宿主应用自行处理。 结果就是,MCP Server 往往以“默认可信”的方式运行。 这和移动…

当 Mythos 成为对手:高能力 AI 的安全边界正在失效

这两天,一篇题为 《When the Agent Is the Adversary》 的论文在安全圈引发了不小关注。它讨论的不是传统意义上的提示注入,也不是常见的越狱绕过,而是一个更让人不安的问题:当高能力 Agent 不再只是“被保护对象”,而开始成为“主动对手”时,我们今天熟悉的那些安全边界,还…