分析自主 AI agent 如何绕过网络隔离外泄数据:DNS 查询逐字节泄露、依赖的包管理器/MCP 工具持有网络权限、错误端点埋点;提出本地模型 + 敏感值令牌化的双层防护。
披露:我是 Darkmoon 的开发者,这是一款自主式 AI 渗透测试工具。本文讨论的是每个发布 Agent 的团队都应该测试的一种故障模式:你以为 Agent 已被隔离,但它仍然找到了逃出去的路径。
你为 AI Agent 提供工具,禁止它直接访问互联网,于是你觉得万无一失。其实并非如此。
即使没有直接的出站网络访问能力,Agent 仍然可以通过以下途径连接互联网:
DNS。一个能够解析主机名的工具,只需逐次发起查询,就已经能将数据一点点外泄出去。
一个「热心帮忙」的代理,或者 Agent 被允许调用的包管理器。
一个自身具备网络访问能力的 MCP 工具——Agent 会继承这种能力。
某个依赖中内置的遥测或错误上报端点。
攻击型 Agent 会处理你最敏感的数据:目标 IP、主机名、凭据和漏洞发现。如果这个 Agent 悄悄调用了云端 LLM,那么在你察觉之前,所有这些数据就已经离开了你的环境。sandbox 从来都不是真正的边界,模型端点才是。
在本地运行模型,例如使用 Ollama 或 llama.cpp。这样,任何 prompt 和目标数据都不会离开本机。
对于任何必须访问远程服务的操作,应先使用确定性占位符对敏感值进行标记化处理,然后在本地还原。远程服务看到的始终是稳定的虚假值,永远不会接触真实数据。
把这项测试设为发布阻断条件:断言你的 Agent 在「无法访问互联网」的情况下,运行期间确实不能解析或连接任何外部主机。大多数团队从未执行过这样的断言,而它失败的频率往往比你想象的更高。
Darkmoon 是采用 GPL-3.0 许可证的开源项目,并围绕这种本地优先模型构建:https://github.com/ASCIT31/Dark-Moon 。你的 Agent 技术栈能经受住出站网络测试吗?
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。