rm -rf / 的 shell.exec、带超大转账金额的支付 API、
针对生产副本的数据库工具。这就是智能体工具滥用,它是
智能体系统中最严重的风险之一,因为工具调用有往往是不可逆的
真实世界副作用。
智能体防火墙有三层分层防御。你可以独立部署它们,也可以组合
使用。
1. 允许列表:拒绝你未明确允许的一切
最强的控制是允许列表。不是试图列举每个危险工具,而是列举 这个智能体合法需要的工具——并拒绝其他一切。这是零信任基线。 带有default_verdict: deny 和每个批准工具的明确 allow 规则
的策略实现了这一点。示例:只应从 CRM 读取数据的智能体:
shell.exec、db.delete、payment.transfer 的任何调用——
无论是有意发出还是由注入指令触发——都会命中 * 通配符并返回
HTTP 400 firewall_blocked 错误。智能体看到一个结构化的工具错误,
无法重试(拦截被标记为 skip-retry),因此它无法循环绕过拒绝。
将你的策略的
default_verdict 设置为 deny 以进行完整的允许
列表执行。使用默认的 audit 判定时,未匹配的调用被允许和记录
但不被拦截——在推出期间很有用,但本身不是安全控制。| 模式 | 它覆盖什么 |
|---|---|
crm.* | crm 命名空间中的所有工具 |
*.read | 所有服务器上的任何 read 动词工具 |
db.query | 恰好这一个工具 |
* | 一切(用于你的通配符拒绝) |
allow
规则放在低优先级数字上,通配符 deny 放在高优先级数字上。
2. 参数验证:允许工具,拦截危险调用
工具名上的允许列表是粗粒度的——它完全拦截shell.exec。有时
你想允许一个工具,但约束它可以如何被调用。参数子句让你使用
JSONPath 和一组操作符匹配工具调用参数中的特定字段。
示例:允许 shell.exec 但拦截 rm -rf
shell.exec 被调用且 $.command 参数匹配破坏性
命令正则时触发。带有安全命令的普通 shell.exec 调用会落到下一条
规则(或默认判定)。将此规则放在比任何一般 allow shell.exec 规则
更低的优先级数字上,这样它先触发。
完整的参数操作符集合:
| 操作符 | 何时使用 |
|---|---|
eq | 对标量值(字符串或数字)的精确匹配 |
contains | 子串匹配——例如 $.query contains DROP TABLE |
regex | RE2 模式匹配——热路径上安全,无回溯 |
in | 值必须在给定数组中——例如只允许特定环境 |
cidr_match | CIDR 块中的 IP 地址——对出站目的地检查很有用 |
gt / lt | 数字比较——例如支付上限的 $.amount gt 10000 |
args_match 块中的所有子句都是 AND 关系。如果路径在调用参数中
不存在,子句评估为 false,规则不触发——调用落到下一条规则或
默认值。
支付守卫示例——拒绝金额超过阈值的任何支付工具调用:
3. 人工审批(HITL):挂起高风险调用等待审批
对于真正必要但高风险的工具——触发部署、批准退款、发送批量邮件—— 你可以在调用继续之前要求人工签字。pending_approval 判定挂起
调用并向智能体返回 firewall_approval_pending 响应:
pending_approval 与参数子句兼容——你可以只挂起匹配阈值的调用,
让常规调用通过:
4. 被拦截的调用是什么样子
inbound 执行面(请求中声明的工具)上被拒绝的调用返回 HTTP 400,错误码为firewall_blocked。响应包含结构化的
metadata——匹配的规则标签、原因码和风险因子——并被标记为
skip-retry,使循环无法反复撞击同一个被拒绝的调用。
在 response 执行面(模型已经发出 tool_calls)上被拦截的
调用以工具错误(对模型可见)返回,给模型一个机会做出反应——
选择另一个工具、询问用户或停止——而不是崩溃。
5. 首个匹配生效的顺序
优先级顺序很重要。引擎以升序优先级遍历规则,在第一个匹配处停止。 一个常见模式:| 优先级 | 规则 | 判定 |
|---|---|---|
| 5 | shell.exec + 破坏性正则 | deny |
| 10 | shell.*(一般) | allow |
| 20 | crm.* | allow |
| 9999 | *(通配符) | deny |
shell.exec
被拒绝,即使有一般的 allow shell.* 规则。没有低优先级的拒绝,
allow shell.* 规则会先获胜。
6. 使用影子模式安全推出
在将新策略切换为执行之前,开启影子模式。策略评估每一次 工具调用并记录判定,就像在生产中一样,但每个执行性判定 (deny、pending_approval、sanitize)都被降级为 audit——
什么都不会被拦截。事件日志中的原因前缀为 [shadow] would deny,
因此你可以在 Events 和 Runs 视图中衡量影响。
一旦你确认策略在你预期的内容上触发——以及没有你不打算触发的
任何东西——关闭影子模式。下一次调用就会被执行。
tight 自治级别自动应用 block_destructive_shell 预设。如果你
需要一个不用编写规则的快速姿态,从控制台应用 tight,它会在
一步内为破坏性 shell 调用提供拒绝策略。然后你可以在其上叠加
你自己的允许列表规则。参见自治级别。7. 相关威胁
智能体工具滥用很少孤立出现。未授权的工具调用通常是另一个 攻击向量的后果:- 提示注入——攻击者 在检索的内容中嵌入指令,引导智能体调用它本不打算调用的工具。
- 过度代理——智能体 被授予比其任务需要更多的工具访问权,使任何注入或配置错误 立即变得危险。
- 威胁模型——工具滥用如何 适应智能体系统的完整攻击面。
防火墙规则参考
完整匹配语言——工具 glob、参数子句、所有操作符、判定和 API。
防火墙概览
策略、执行面、自治级别、HITL 审批和可观测性。
