用出站白名单限制编程智能体联网
文章以 Claude Code 曾遭提示注入、通过 DNS 查询外传密钥的案例,说明秘密访问、不可信输入与外网连接组合的风险。提出将编程智能体放入容器,并限制允许访问的外部地址。
原文暂未完整获取,基于公开信息的快读
一篇 dev.to 文章提出:把能执行命令的编程智能体放进容器,再用出站白名单限制联网。作者以 Claude Code 曾被提示注入诱导、通过 DNS 查询外传密钥的案例说明风险,并给出开发容器配置。关键不只是隔离文件,还要限制智能体能把数据发往哪里。
目前能确认什么
据原文节选,攻击指令藏在源文件中,Claude Code 读取后访问了旁边的 .env,再通过 ping 触发 DNS 查询,把密钥作为子域名发送出去。当时相关命令在自动批准列表内,没有弹出确认。节选援引研究者记录称,Anthropic 已在 v1.0.4 修复该问题。
提示注入,就是不可信内容中的指令影响了智能体行为。这里叠加了三个条件:能读秘密、会接触不可信文本、能够联网。
作者的方案用非 root 用户运行智能体,将防火墙脚本放在工作区外,默认拒绝出站连接,只放行包仓库和模型 API,并配套连通性测试。密钥以只读文件挂载到工作区外。
只读挂载能防止改写密钥文件,不能阻止智能体读取密钥。
我的判断
对会自动执行 shell 命令的智能体,网络权限应该成为独立的控制层。只审核命令名称不够:ping 这样的常见工具,也能携带数据离开环境。
但这段节选还不足以证明方案堵住了开头的攻击路径。已展示的脚本允许向指定解析器发送 DNS 请求,而指定解析器不等于限制查询域名。后续是否限制任意域名查询、测试是否覆盖 DNS 外传,需要完整脚本确认。
另外,放行模型 API 和包仓库后,这些连接仍然存在。判断隔离是否有效,要看允许的通道能传什么,以及智能体到底能读到哪些密钥,不能只看容器启动成功或 curl 被拦住。