安全与监管已更新 2026-08-25 · 版本 1.1

出口允许列表

限制智能体的流量允许流向何处。数据窃取和注入有效载荷的传递都以出站请求结束,因此默认拒绝的允许目标地址列表是在其他所有控制措施都失效后仍然有效的控制手段。

证据: 行业观察置信度: 来源: 行业观察来源: 个人经验来源: 论文

定义

出口允许列表是一种网络或沙箱级别的策略,它仅允许智能体向明确指定的目的地集合发送出站请求,并默认拒绝其他所有请求,因此即使智能体已被完全劫持,数据也无法流向攻击者选择的端点。

问题

每条外发路径都以出站请求结束。可以访问任意主机的智能体可能会被指示将其读取的任何内容发送到任何地址,而没有任何提示词级别的指令可以阻止这一点。

适用场景

在智能体既处理不可信内容又可以发起网络请求的任何地方使用它——例如获取页面、调用工具、渲染图像、运行生成的代码。该模式在最容易发生注入的地方价值最大。

解决方案

默认拒绝。允许列表是唯一的出口;任何未列出的请求都会被拒绝,并且该拒绝会被记录为信号,而不是作为错误被吞掉。

根据任务列举目的地:智能体必须调用的 API、必须获取的域名、必须从中安装的注册表——每个目的地都应有所有者和书面理由。

在智能体底层进行强制执行。将策略置于沙箱、代理或网络中,绝不要放在模型可以通过辩解绕过的工具代码中。一条智能体可以说服绕过的规则只是文档,而不是控制措施。

关闭隐蔽通道。渲染的图像 URL、链接预览、DNS 查询、webhook、错误报告程序和包安装都属于出站流量,而且它们都会被利用。

仅允许您可以推断其行为的主机。在提供用户生成内容的主机(如原始文件 CDN、剪贴板网站、公共对象存储)上使用通配符,无异于披着白名单外衣的开放通道。

通过实际测量来推导白名单,并在任务改变时重新推导。从智能体实际调用的内容开始,而不是基于某人假设它会调用的内容。

组件

所有流量都必须通过的出站网关或沙箱网络策略。默认拒绝规则,并配有明确且有专人维护的目标地址清单。基于角色的策略,使研究智能体和部署智能体不共享同一个白名单。将拒绝日志与告警关联,因为拒绝事件是高信号强度的事件。在仅靠目标地址还不够时的请求方法和载荷限制(例如:仅限 GET、限制主体大小)。定期审查机制,用于移除从未被使用过的目标地址。

优势

  • 即使在智能体的推理能力被完全攻破后,也能限制数据外泄。
  • 使尝试行为可视化:被拒绝的目标地址是智能体技术栈产生的少数几个明确无误的攻击信号之一。
  • 独立于模型 —— 在更换模型、修改提示词和迁移框架时依然有效。
  • 一旦网关建立,扩展成本极低;每个新智能体都会继承该执行点。

风险

  • 白名单中的中继:允许的主机自身如果转发数据,会使白名单流于形式。
  • 当合法的依赖项迁移主机时会导致服务中断,从而在时间紧迫的情况下产生扩大白名单的压力。
  • 通配符侵蚀:每个“临时”添加的宽泛条目在有人审计之前都会变成永久条目。
  • 在错误的层级进行强制执行 —— 例如生成的代码可以轻易绕过的进程内检查。

不适用场景

  • 完全离线的智能体,此时没有需要限制的出站流量,这种控制措施只是流于形式。
  • 当设计上已经仅允许一个目标地址时,白名单已是架构本身的属性,无需额外添加策略。
  • 当企业代理已经强制执行相同的策略时,设置第二个白名单会在不增加任何限制的情况下分散所有权。

技术

Egress proxiesContainer network policiesService mesh policyDNS filteringDenial logging and alerting

示例

  • 容器中的编码智能体,其出站策略仅指定了包注册表和内部 Git 主机。注入的将代码库 POST 到外部收集器的指令会在网络层失败,并显示为拒绝事件。
  • 允许广泛获取数据但必须通过代理的研究智能体,该代理仅允许 GET 请求并限制出站主体大小 —— 使其能够读取网页,但没有向外写入数据的通道。
  • 为此知识库发布的 stdio 包:其唯一的出站目标是它所代理的公共端点,因此白名单是设计本身的属性,而不是事后叠加的策略。

KPI

被拒绝的出站尝试
该模式旨在产生的信号。持续上升要么意味着遭受攻击,要么意味着任务超出了其白名单范围 —— 这两者都值得关注。
白名单大小
每个智能体角色允许的目标地址数量。只增不减会导致白名单逐渐退化为“允许所有”。
通配符条目
宽泛条目的数量。每一个宽泛条目都是一个您无法推断其行为的通道;目标值应为零。
从拒绝到分类处置的时间
拒绝事件在人工查看前等待了多长时间。未读的拒绝事件等于不存在的告警。

已观测到的失效模式

  • 白名单中的中继:一个被批准的主机会转发接收到的任何内容,从而使目标检查通过,而数据仍然会外泄。
  • 通配符侵蚀:临时的宽泛条目生命周期超出了其添加的初衷。
  • 进程内强制执行:检查存在于生成代码运行的地方,因此代码可以跳过它。
  • 静默拒绝:拒绝被记录为普通的网络错误,导致该模式生成的唯一信号永远无法送达任何人。

经验教训

  • 出站控制是模型被说服后仍然有效的最后一道防线。在需要它之前就构建好它。
  • 通过测量流量而非假设来推导白名单。在针对我们自己的 MCP 端点的入站来源规则进行此操作时,产生了一条与我们默认编写的规则完全不同的规则。
  • 将拒绝事件视为告警,而非错误。它是技术栈中成本最低的攻击信号。
  • 每一个通配符都是一个您无法兑现的承诺。明确指定主机,否则就承认您并没有白名单。

常见问题

对于需要浏览网页的智能体,出站白名单现实吗?
是的,前提是您限制其形式而不是集合。通过禁止请求主体并限制大小的代理来允许广泛的 GET 流量:智能体可以广泛读取,但没有足够宽的通道来写出它所读取的内容。
DNS 需要在白名单中吗?
需要。智能体可以自由查询的解析器是一个数据外泄通道 —— 编码到子域名查询中的数据无需单个 HTTP 请求即可流出。请通过相同的策略路由 DNS。
我们已经有了最小权限工具。这是否多余?
不,它们涵盖了不同的方面。最小权限限制了智能体可以执行的操作,而出站控制限制了它已经读取的内容可以流向何处。一个具有开放出站通道的只读智能体仍然可以泄露它能读取的所有内容。

参考文献