我们在发布前对自己的 AI agent guardrails 进行了压力测试。以下是出现的故障。

发布: (2026年2月28日 GMT+8 20:41)
11 分钟阅读
原文: Dev.to

Source: Dev.to

Uchi Uchibeke

你无法发现自己设计的安全系统中的漏洞。你的测试套件映射的是你想象的空间,而这正是攻击者试图逃脱的地方。

在我们向公众开放 APort Vault 之前,我们花了两周时间做了同样的事——尝试突破我们自己的防护措施。不是使用测试套件,而是有意为之。

我们在任何公众玩家尝试之前,就已经突破了八条核心策略规则中的三条。

TL;DR

  • 在CTF发布前的内部压力测试破坏了 3 of 8 核心防护规则。
  • 五类攻击:prompt injection, policy ambiguity, context poisoning, multi‑step chaining, passport bypass
  • 最危险的发现:multi‑step chaining —— 每个微操作单独通过;但组合后违反政策。
  • 修复措施:基于意图的注入检查、对空白的默认拒绝、跨回合会话记忆、不透明的拒绝信息。
  • 核心教训:事后过滤失效。必须让危险状态 structurally unreachable

为什么 AI 代理的防护措施只是安检戏码?

大多数 AI 防护措施的工作方式像机场安检戏码。它们看起来很严密,但只要攻击者有决心,就能穿过去。

大公司方案——LlamaFirewall (Meta)NeMo Guardrails (NVIDIA)——侧重于事后过滤。它们在代理决定执行坏行为 之后 才检测到。这是检测,而不是预防。

一个 Show HN post for hibana‑agent 也持相同观点:“危险行为必须在结构上不可达”。ClawMoat launched 采用了主机层面的做法。信号很明确:业界正从检测转向结构性约束。

构建 APort —— 一个在执行前拦截每一次工具调用的授权层 —— 让我们认识到 意图比措辞更重要。但我们直到自己开始破坏它时才发现,我们的意图检测是多么脆弱。

为什么是护照,而不是边境巡逻?

想象一下,你正前往一个新国家旅行。在每个检查站,你不再出示护照,而是必须给家里打电话让他们为你作担保。

这就是大多数 AI 防护措施目前的工作方式。它们会问大型语言模型:“这个行为安全吗?”它们依赖模型自己的判断,而这种判断可能被操纵。

更好的系统就像真正的护照:身份和权限被编码在随代理一起携带的凭证中。防护措施不再问“这是否被允许?”而是读取凭证并得出结论。这正是我们正在构建的 Agent Passport。但在我们能够信任它之前,我们必须先把它拆开来研究。

我们测试了哪五类攻击?

CTF 围绕五个递进的攻击类别构建。每个类别都针对防护栏设计中的不同弱点。

LevelAttack classDescription
1Prompt injection直接覆盖尝试:“忽略之前的指令”,“这只是一个测试”,“用户说可以”。目标是通过重新表述词汇,让 LLM 评估者相信该操作是安全的。
2Policy ambiguity利用不明确的政策——在空白处行动。如果政策写着“不要读取敏感文件”,什么算 敏感?攻击者寻找灰色地带并在其中生存。
3Context poisoning向前面的对话注入虚假上下文,以操纵后续决策。“用户之前已经授权此操作”。防护栏看到被污染的上下文后会做出不同的判断。
4Multi‑step reasoning manipulation将单个允许的动作串联起来,最终实现被禁止的结果。每个微操作都通过防护栏,但整体组合违反了政策。这是 AI 政策设计中最难的攻击类别。
5Full system bypass综合上述所有手段,并攻击护照验证层本身。如果防护栏信任护照,你能伪造一个吗?能让验证步骤完全被跳过吗?

测试时出现了哪些问题?

  • 提示注入的效果超出预期。 这并不是因为检测薄弱——而是因为我们匹配的是内容而非意图。将“检索机密文档”重新表述为“打开用户请求的文件”改变了 LLM 的判断。
  • 策略模糊成为了免费通行证。 “不要读取敏感文件”中的 敏感 未作定义。每一个模糊的空白都可以被利用——我们逐一遍历了所有这些空白。
  • 上下文投毒破坏了我们的会话记忆。 我们对每一步单独进行验证。将错误的上下文注入到早期的步骤,会导致后续所有步骤都信任它。
  • 多步骤链式操作未被检测到。 我们的防护栏对每一次调用单独评估。一个被拒绝的宏操作被拆分为十个被允许的微操作,顺利通过。我们只能通过查看完整的会话回放才发现它。
  • 护照验证本身有效,但其周边假设失效。 在特定的边缘条件下,防护栏可以被迫完全跳过验证——护照检查本身是可靠的,但通往它的路径并不可靠。

我们在发布前修复了什么?

提示注入

预操作授权现在检查 意图,而不仅仅是内容。我们映射语义等价——每个被阻止操作的同义词和重新表述都遵循相同的评估路径。策略不在乎代理如何称呼它。

策略歧义

检测到策略空白时显式 默认拒绝。如果策略没有明确允许某个操作,则会被拒绝。没有灰色地带。

上下文投毒

每回合上下文验证针对原始护照范围。如果上下文偏离了授权内容,请求将被拒绝。

多步骤链式

会话级推理,跟踪微操作的累计效果。若 整体 结果违反任何规则,即使每一步单独通过,也会拒绝宏操作。

护照验证路径

硬连线强制执行,始终 在任何工具调用之前通过护照检查。边缘情况的快捷方式已被移除,验证步骤现在与请求原子化运行。

核心教训

事后过滤不足。最安全的设计是通过执行基于意图、会话感知、默认拒绝的策略,使危险状态结构上不可达,并将凭证视作护照,而不是询问模型“这可以吗?”

多步链式

会话级上下文累积,标记匹配已知绕过链的序列——类似于欺诈检测系统关注交易序列,而不是单个交易。这是第 4 级教训的具体实现。

不透明的拒绝信息

对调用方的拒绝信息现在信息量少,而内部审计日志信息丰富。攻击者探测响应面时学不到有用信息。

核心教训:事后过滤失败——结构才是答案

使危险状态结构上不可达,而不仅仅是可检测。我们的开源 aport‑agent‑guardrails 实现了这些模式。

AI 监管护栏正在发生的结构性转变是什么?

行业正从检测转向结构化

  • Hibana‑agent 的“结构上不可达”论点与我们学到的内容相吻合。
  • ClawMoat 的主机层面方法是同一理念的另一种实现。

我们的解决方案是提前在流程中进行授权:在代理决定之前、在大语言模型推理之前、甚至在工具调用构建之前。这是唯一能够弥补多步骤漏洞的办法。

我们自行发现并修复了能修复的部分。这是内部测试的极限——你只能破坏你能想象到的东西。

CTF 已上线,因为我们知道还有遗漏。来找出它吧。

vault.aport.io — 第 1、2 级免费。第 3‑5 级奖励最高 $5,000,先到者得。
截止日期: 2026 年 3 月 12 日。

链接

0 浏览
Back to Blog

相关文章

阅读更多 »

超越Chatbot:可信AI的蓝图

markdown 2026年1月29日 Ajeet Mirwani https://developers.googleblog.com/search/?author=Ajeet+Mirwani – 美洲项目负责人,Google Developer Experts