文章指出出站网络是 Agent 泄露数据和下载恶意载荷的关键通道,主张默认断网后按任务开放必要目标。具体措施包括无默认网关的网络命名空间、域名白名单代理,以及将隔离与出站控制组合使用。
转载。原文:stellarbytecapital.com/blog/ai-agent-network-egress-control
大多数真正有用的 AI Agent 都需要访问网络。它们要获取市场数据、调用 API、访问数据库。但当你的 sandbox 能够连接开放互联网时,也就等于为攻击者搭建了一条现成的通道,用来窃取数据或下载恶意 payload。网络出口(egress)正是让受控范围内的入侵演变成真实安全事故的关键——而它也是团队最常忽略的控制措施。
想想一个被攻陷的 Agent 真正需要什么才能造成破坏。没错,它可以读取 sandbox 中的数据。但要把数据窃取出去,它必须拥有一条通往机器外部的网络路径。切断这条路径,即便攻击者“成功”攻陷了 Agent,也无处发送任何东西。
一个逃逸但没有 egress 权限的 Agent,基本不会造成什么危害。隔离机制用于阻止代码突破边界;egress 控制则用于阻止数据流出。两者缺一不可。
sandbox 在启动时不具备任何出站网络访问能力。你只开放任务真正需要访问的特定目标,除此之外一律禁止。你不可能枚举所有恶意目标,但完全可以列出一项任务实际需要访问的少数合法目标。
从无路由开始。为 sandbox 分配一个没有默认网关的 network namespace。
通过代理按域名设置 allowlist。让所有出站流量经过 egress proxy,并由代理仅放行明确列出的目标。allowlist 应基于域名,而不是 IP——IP 会不断变化,而且共享 CDN 意味着一个 IP 可能同时服务数千个主机。
控制 DNS。为 sandbox 提供一个由你掌控的 resolver。DNS 本身也可以成为数据窃取通道——攻击者可以把数据藏在 DNS 查询名称中传输出去。
按任务划定范围,而不是按系统划定范围。某项任务需要访问 Bitget 的 API,就只为它开放 Bitget 的 API——而不是把所有任务曾经需要过的每个 endpoint 都开放给它。一次性 sandbox 天然适合这种模式:容器销毁时,allowlist 也随之消失。
记录每一次出站调用。包括目标、数据大小和调用时间。异常的 egress 流量是一种实时信号,说明系统可能出了问题。
“任务也许会用到”,所以干脆全部开放。正确做法是默认拒绝,再根据实际报错逐项开放。
按 IP 设置 allowlist。共享 CDN 和动态变化的 IP 会让这种方式既过于宽松,又非常脆弱。
忘记限制 DNS。即使 sandbox 的其他网络路径都已锁死,只要 DNS 仍然开放,它就依旧拥有一条数据窃取通道。
没有日志。如果你看不到哪些数据离开了 sandbox,就无法调查问题,也无法检测滥用行为。
使用永久性的全局 allowlist。它只会不断膨胀,而其中的每一个条目,都会成为所有任务共同面对的攻击面。
限制 egress 并不能取代隔离机制——两者是互补的。各种控制措施需要层层叠加:每次运行都使用一次性隔离环境、遵循最小权限原则、不在 sandbox 中存放 secrets,以及采用默认拒绝的 egress 策略。每一层都会封住其他措施无法覆盖的一扇门。
只为 Agent 提供完成当前任务所需的网络访问权限——一个多余的目标都不要开放。
我们是 Xingyao Byte——致力于构建安全的 AI 执行层、量化交易系统和支付平台。远程办公,async-first → stellarbytecapital.com
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。