这个智能体有个地址
在 DEF CON 34 上,Team Cymru 的 Eli Woodward 展示了一座 AI 蜜罐 48 小时的抓取记录:3,993 次请求、327 个源 IP、344 次凭据探测,目标是没有人对外公布过的端口。针对编码智能体的其他攻击,都需要一条把文本送到它眼前的路。这一种只需要一条通往它的路由。Bromure Agentic Coding 默认让智能体跑在 NAT 后面,于是根本没有路由可找。
针对编码智能体的其他攻击,都需要一条把文本送到它眼前的路。这一种需要的是 一条通往它的路由,而扫描器早就有了。
DEF CON 34 的周六上午,在 Creator Stage 3, Team Cymru 的 Eli Woodward 做了一场半小时的演讲,题目是 MCPwned: How Exposed AI Agents Became the Internet's New Recon Toy。他搭了一座 AI 蜜罐:16 个 LLM 与 AI 基础设施角色分布在 16 个端口上,每一个都返回与框架完全一致的响应、 标头、错误与协议行为,让碰上它的扫描器相信自己找到了真货。
在一段 48 小时的窗口里,这座蜜罐收下了 来自 327 个唯一源 IP 的 3,993 次请求, 其中包括 155 次 MCP 探测和 344 次 AI API 密钥探测。
没有人公布过那些端口,那 327 个地址也没有一个是专门冲着 Woodward 来的。他从 抓取记录里整理出的套路,属于枯燥而工业化的那一类:滥用 LiteLLM 的模型注册、 枚举 MCP 资源、随框架而变的凭据暴力破解,以及对暴露在外的本地推理服务进行 协同扫描。那些花了十年扫遍地址空间、寻找开放 RDP 与免认证 Redis 的团伙,把 同一套机器对准了 AI 开发工具,而且走在威胁模型前面。
没有人需要给你寄任何东西
回头读过去一年针对编码智能体的攻击,它们共用同一个形状。智能体读到的某样 东西里带着指令:一份 缺陷报告、一条 看不见的 PR 评论、一个 智能体抓回来的网页、一份 README、一行 WAF 日志。在上面每一种里,投递都是攻击者 真正困难的部分。他们得找到一条你有意接上的通道,再把自己的文本送进去。
把箭头反过来,这个难题就消失了。扫描器往端口 11434 送一个 SYN,你机器上的 某样东西就应答了。
扫描器找到了什么
Woodward 那份抓取记录背后的总量,是五位数的量级。
Censys 绘制了可从互联网访问的 MCP 服务, 在 2026 年 4 月 28 日找到 12,520 个,分布在 56 个国家、425 个自治系统的 8,758 个唯一 IP 地址上。一周后的 5 月 6 日,数量已超过 21,000。大约每十个里有四个 不做任何凭据检查就接受任何人的请求,因为协议默认并不要求。
Wiz 直接去敲了门。在一份 7 月 28 日发表的调查 里,他们发现 80% 的云环境中都有 MCP,其中约六分之一至少暴露一台服务器。在 暴露的那些之中,约 70% 会把完整的工具目录交给未认证的调用方,约 42% 在研究 人员真正调用工具时返回了真实数据,约 10% 则挡在敏感后端前面。Wiz 把已确认的 一部分指向云元数据端点,换回了临时凭据。
Knostic 从 Shodan 做了同样的练习,对
1,862 台暴露的服务器
取指纹;他们手工验证的 119 台,每一台都在没有认证的情况下回答了 tools/list。
那些服务器都在为一个陌生人,做着它存在的唯一那件事。
本地推理是同一幅画面,只是数字更整。LeakIX 在 2026 年 2 月 23 日数到
12,269 个未认证的 Ollama 实例,
每一个都提供经由 /api/tags 的模型枚举、经由 /api/generate 与 /api/chat
的免费算力、经由 /api/pull 与 /api/push 的模型窃取,其中约一千个还带着
Probllama 的路径穿越链。
你的机器怎么就开始应答了
你并没有决定要把一项服务放上互联网。你设了 OLLAMA_HOST=0.0.0.0,好让沙发上
的笔记本能用台式机上的模型,也基于同样理由把一台 MCP 服务器绑到所有接口上。
你跑了 docker run -p 8080:8080,因为 README 这样写。你为了在手机上调试而开
了一条隧道,然后就一直开着。
接着你把笔记本带去了别的地方。会议 Wi-Fi、联合办公楼层、酒店、一台 UPnP 替你 热心代劳的家用路由器,或是一台安全组被谁匆忙放宽的云端开发机。绑定只是一个 标志位;暴露则属于写下你此刻所在那张路由表的人。你自始至终都没有同意过。
Bromure Agentic Coding 默认就把这道缝隙关上,你什么都不必设置。
这台虚拟机没有地址
Bromure 让编码智能体跑在 Apple Silicon 上的一次性 Linux 虚拟机里,它流量的 每一个字节都要穿过宿主机上的代理, 也就是智能体所在那个盒子的外面。对这一类攻击来说, 这套安排的网络那一侧扛下了主要的分量。
在 资源 → 网络 下面,模式是 NAT,而不做任何选择时你拿到的就是 NAT。
虚拟机通过 Virtualization.framework 内置的 NAT 共享你 Mac 的网络连接:出站
可行,你局域网上的任何东西都到不了这台虚拟机。在那台虚拟机里把服务绑到
0.0.0.0,你绑到的是 NAT 后面一个虚拟机内部的接口。这里没有端口转发表可以
填错,因为这个模式根本不转发端口。
扫描器的 SYN 连任何一个端口都碰不到,无论是被过滤还是关闭的,因为没有路由 通往那里。Woodward 的蜜罐需要 16 个监听进程才收得到东西。Bromure 的配置文件 一个也不提供,那 344 次凭据探测没有地方可以落脚。
桥接 在你需要时就在那里,它会在你指名的物理接口上,通过 DHCP 给虚拟机一个 局域网可路由的地址。这是每个配置文件各自的选项,还配了明确的接口选择器,所以 你只会在你本来就打算上局域网的那一次运行里上局域网。
你的 MCP 服务器不会监听
MCP 面板里的服务器是配置文件设置。Bromure 会把它们转成 Claude Code 的
JSON 或 Codex 的 TOML,并在启动时注入。stdio 服务器是虚拟机内部一个用
管道通信的子进程,因此没有套接字,tools/list 枚举也就无处可达。HTTP
服务器是你指向的一个 URL,可以选择附上 bearer 令牌,这让发出请求的人是你。
那 40% 会应答陌生人的 MCP 服务,是有人亲手架起并绑定的服务器。
本地推理跑在 Mac 上
“对暴露在外的本地推理服务进行协同扫描”是蜜罐自己的说法,而它找到的就是 12,269 个开放的 Ollama。Claude Code 的 本地模型 认证,会把推理导向在 本地模型 面板中选定的设备端 MLX 模型,它跑在 macOS 上,也就是代理的 宿主机那一侧。虚拟机里根本没有端口 11434 可以暴露。Fusion 的设备端 那条腿走的也是同一条路。
真闯进来的探测只会捡到假货
做随框架而变的凭据暴力破解的人都知道该去哪里找:环境变量里的
OPENAI_API_KEY、~/.aws/credentials、~/.docker/config.json、一份
kubeconfig、~/.ssh。Bromure 把这些全放进虚拟机,也把这些全做成假的。你
会拿到 brm_… 与 xai-brm-… 令牌、一份带着一次性客户端证书的合成
kubeconfig、一组假的 base64 镜像仓库认证,以及一旦有什么绕过代理就会返回
InvalidSignatureException 的 AWS 凭据材料。Bromure 把真值留在宿主机上,
只在传输时针对它们该去的目的地替换回去。
破坏性动词在宿主机上裁决
Wiz 发现约 42% 的暴露服务器会返回真实数据,旁边还有一整类写入与删除。 Guardrails 是宿主机代理里的一套策略引擎,覆盖 Kubernetes、AWS、 DigitalOcean、容器镜像仓库、GitHub、GitLab、Bitbucket 以及 HTTPS 的数据库 端点。按资源设置阻止破坏性操作或只读,被挡下的调用就会以一个硬邦邦的 403 回来,智能体则把它当成寻常的 API 失败上报。Bromure 是在 macOS 里下这个 判断的,所以虚拟机里没有东西可以被关掉。
陌生人给的任务,依然是文本
假设你接上一台别人暴露出来的远程 MCP 服务器,而它回给你的不只是数据。一旦 扫描器能够枚举这些服务,找到其中一台的人也就能用它,从正门以内容的形式抵达 你的智能体。
Bromure 会在内容进来时给它打分。一个本地的提示注入模型,会读取智能体吃进去
的文件内容、网页与 tool_result 块,寻找那些冲着“正在读的人”下达的祈使句。
记录但继续 会把每一次命中写进安全日志。问我该怎么办 会暂停外发的
请求,把标记出来的片段摆到你面前。径行阻止 会在模型看到之前就拦下来,并
丢给智能体一个硬邦邦的 451。第二个检测器,是一个微调过的 ModernBERT 分类器,
加上一个针对零宽度、双向与 Unicode 标签载荷的确定性扫描器,覆盖 CLAUDE.md、
AGENTS.md、GROK.md 及其嵌套与全局变体。
两个模型都跑在你的 Mac 上,只需从 bromure.io 下载一次。给第三方 MCP 服务器的 输出打分,并不涉及把那份输出送到任何地方。
那声敲门,就是日志上的一行
虚拟机发出的每一个请求都会穿过宿主机代理,而在 活动 这个跟踪级别上, Bromure 会逐一记下主机、状态、延迟、替换报告,以及任何泄露警告。注入检测会 连同被标记的文本一起落在安全日志里。把级别再往上调,Bromure 连 AI 请求的正文 也会保留,并用与你配置文件密钥相同的钥匙串密钥加密。
一个开始接受外部指令的智能体,总得抵达某个地方才对谁有用,而抵达某个地方, 就是你可以在那次会话所在的机器上读到的一行记录。
而当你希望这台机器消失时,它就会消失。清除主目录 会抹掉 /home/ubuntu,
也就是点文件、.ssh、npm-global、.cargo 与 shell 历史,回到刚克隆完的
状态。重置为基线 则丢弃每一项系统级改动,并从基础镜像重新克隆工作磁盘。
MCP 终究会长出更好的默认值,Ollama 也会长出自己的认证机制,而 Woodward 蜜罐 上的那些端口,到明年八月会换成别的端口。形状不会变。今天要把智能体跑好,就 意味着在它旁边跑一个网关和一小把工具服务器,而每一个都是在一台会旅行的笔记本 上绑住套接字的程序。
这里的其他文章要你别轻信智能体读到的东西。这一篇问的问题更短:陌生人敲门时 是什么在应答,还有,你会不会宁愿什么都不要应答。
安装 Bromure Agentic Coding,给你的智能体一台扫描器看不见 的机器。