他们把你的智能体加进了名单
Gen Digital 在 9 月 8 日公布的研究显示,八个常见的信息窃取木马家族如今开始收集 AI 编码智能体的本地数据:访问令牌与刷新令牌、MCP 配置、会话数据库、提示词历史、项目痕迹。这与 Claude、Cursor 或 Codex 的任何缺陷都无关。窃取木马带着远程管理的收集规则,所以把你智能体的文件夹加进去,只是向那些早已被感染的机器推送了一次配置更新。Bromure Agentic Coding 把那个文件夹搬进 VM,用 brm- 假货把它填满,并把刷新令牌留在宿主机上,客户机永远拿不到它。
你的编码智能体没有任何等着被人发现的漏洞。有人注意到它把文件放在哪里,然后向 几十万台早已被攻陷的机器推送了一行新的配置。
9 月 8 日,带领 Gen Digital 威胁研究团队的 Jan Rubín 发表了一篇短文, 讲了一个毫不炫目的发现。八个不同的常见信息窃取恶意软件家族,如今开始收集 AI 编码 智能体的本地数据。它们复制文件。整套手法就这些。
被点名的目标读起来像一份关于开发者今年装了什么的问卷:Claude、Cline、Codex、 Continue、Cursor、OpenCode、Kilo。Amatera 冲着 Cline 和 Continue 去。Remus 冲着 Claude、Cursor 和 OpenCode 去。CallbackBeaver 加上了 Cursor 和 Claude, Gen 在三十天的窗口里数到它的样本超过 5,000 个。BeeStealer、STG Stealer、 HydraStealer、APEX Stealer 和 Otter Stealer 都在做同一件事的某个版本。 在 macOS 上这个变种叫 Djinn Stealer,它的清单最长:Claude、Codex、Gemini、 Cline、OpenCode、Kilo。
Rubín 对自己在描述什么很谨慎。“这些活动并不指向 Claude、Cursor 或 Codex 中新发现的 缺陷,”他写道,“它显示的是犯罪分子在改造已有的窃取木马,去收集那些放在可预测的本地 文件夹里的有价值文件。”
名单长了一行
这次改动几乎没让作者付出什么。
现代的窃取木马不会把拿什么写死在代码里。它们随身带着远程管理的收集规则:一份 配置数据块,列出文件夹、文件名、数据库文件、扩展名和搜索上限,从运营者的基础设施 取回。加一个新目标,按照 Cyber Press 的总结, 就是运营者“通过更新路径、文件名或数据库规则,把新近流行的 AI 工具加进恶意软件的 收集清单,而不必重新构建恶意软件”。
这是一个产品决策。有人看了看现在哪些文件夹里装着值钱的东西,往配置里写了几条路径, 于是那些本来就在跑这些家族之一的机器,在下一次回连时开始上传智能体的数据。运营者 没有重新感染任何东西。磁盘上的二进制没变,检测特征也就没变。
Gen 记录到,2026 年上半年有 330 万名独立的受保护用户被检出信息窃取木马,月度 总量超过 50 万。仅 Amatera 和 Remus 两家,在三个月里就出现在数万名用户身上。那就是 运营者把新规则推送过去的人群。
那个文件夹里有什么
Gen 对规则收集内容的清点很具体:“访问令牌与刷新令牌、存放在 MCP 配置里的凭据、 提示词历史、会话数据库、账户详情,以及一个开发者一直在做的那些项目的痕迹。”
这份清单把两种性质不同的损失放在了同一个名字底下。
第一种是访问权。一个访问令牌买到一次会话。一个刷新令牌买到多次会话,只要它还 有效就一直买得到,因为有人就是把它设计成比它出身的那次会话活得更久。正是这个性质 让它值得被偷,也正因如此,吊销一次会话并不能把窃贼从原地赶走。就在同一个文件夹里 紧挨着它的,是你 MCP 配置里的凭据,而它们打开的是另一样东西:一个内部服务、一套 工单系统、一个藏在 HTTP MCP 服务器背后的数据库。
第二种损失是情报,而且更新鲜。你的提示词历史,是一趟关于你雇主基础设施的导览。 Cyber Press 说得很直白:被偷走的提示词历史会暴露“仓库名、内部主机名、基础设施细节、 安全控制措施、API 机密和业务计划”。某个周二,你敲进服务的名字、集群的名字、迁移 卡住的原因,然后粘上那段带着连接串的片段,问它为什么老是失败。你从来没有为自己的 聊天记录写过一份威胁模型。
它是从一条搜索结果里来的
把窃取木马放上机器同样不需要零日漏洞。五月,EclecticIQ 记录了一场
把假冒安装页面排到真页面之上
的活动:claudecode.co.com 和 geminicli.co.com,模仿厂商文档模仿得足够像,一眼
扫过去看不出来。页面递给你一行 PowerShell 让你复制。你一执行,就拿到了想要的工具,
明明白白装好,同时第二条藏起来的命令把一个无文件的窃取木马直接拉进内存。它进来的
路上关掉 ETW 和 AMSI,然后收割浏览器、Slack、Teams、Discord、VPN 客户端、SSH 密钥
和云存储路径。同一个团伙对 Node.js、Chocolatey、KeePassXC 和 Monero 用过同样的招。
于是受害者,就是那个搜索编码智能体并点了第一条结果的开发者。四个月之后,这位开发者 连智能体的令牌和会话历史也一并交了出去,因为收集规则长了一行。
同一次清扫,发生在 Bromure 工作区里
Bromure Agentic Coding 把每一个编码智能体都放进你 Mac 上一台硬件虚拟化的 Linux VM 里跑,并把每一份真正的机密都留在这条边界的宿主机一侧。把 Gen 的收集清单一项一项拿 出来,对着一个工作区跑一遍。假设窃取木马在宿主机上赢了,读到了规则,然后挨个去取。
访问令牌与刷新令牌。 如果你用的是 Claude 或 ChatGPT 的订阅而不是 API 密钥,
登录根本不会发生在你的工作 VM 里。Bromure 会启动一台一次性的注册 VM,不挂载任何
工作区文件夹,也不带凭据替换表,在里面运行真正的 claude login,在宿主机上捕获
拿到的 OAuth 令牌,加密保存,然后销毁这台 VM。从那以后,客户机在 API 密钥模式下
运行,手里拿的是一份确定性的假凭据:给 Claude 的是假的 ANTHROPIC_API_KEY,给
Codex 的是一个 ~/.codex/auth.json,里面种着一个到期时间远在未来的假 JWT,好让
客户端永远不会自己去刷新。刷新是宿主机做的,大约在到期前五分钟,为每一台运行中的
VM 各做一次。手册把结果说得很直白:客户机永远不持有刷新令牌。
存放在 MCP 配置里的凭据。 MCP 的 bearer 得到同样的待遇,设置面板上就这么写着。
HTTP 传输的 MCP 服务器,真正的令牌留在宿主机上,智能体读到的配置里是一个
brm-mcp_… 占位值,代理在线路上把真值换进去,范围严格限定为该服务器主机的完全
匹配或子域匹配,别处一概不行。MCP 面板里的这个字段带着说明
绝不发送进 VM——由代理替换。
其他所有看起来像密钥的东西。 你配置的每一份凭据,在 VM 内部都会被一个保持结构的
假货替换掉,它由真值加上每次安装独有的盐派生而来,因此保留着校验器期待的形状,并在
不同会话之间保持稳定:sk-ant-api03-brm-…、sk-brm-…、xai-brm-…、brm-k8s-…、
brm-docker-…、brm-db-…。替换通道只朝一个方向流动。宿主机可以把假货写进客户机;
不存在任何让客户机反过来索要真值的调用,而 VM 内的智能体会拒绝写入任何不带 brm-
前缀的凭据。
会话数据库、提示词历史、项目引用、缓存的源码。 这些都是真的,而且是持久的, 因为写代码这件事需要持久状态。它们住在工作区 VM 自己的持久家目录里,一个工作区一份, 在虚拟化层的另一边,而不在收集规则点名的那个 macOS 家目录里。一条写着“从用户配置 文件里复制智能体的配置目录”的规则,找到的是一个里面没有智能体的用户配置文件。
宿主机自己的存储。 宿主机保存的东西,用每次安装独有的 256 位主密钥以 AES-GCM
静态加密,那把密钥存放在 macOS 的 Data Protection 钥匙串里,限定于应用的签名身份,
并关闭了 iCloud 同步。这个应用不上传也不同步任何东西。把 Application Support
文件夹整个复制走,或者恢复它的一份 Time Machine 备份,没有这台 Mac 的钥匙串条目,
你拿到的只是密文。
当清扫发生在 VM 内部
窃取木马也可以从另一头进来:由智能体自己拉进来,经由一个依赖或者一段被投毒的指令, 然后在工作区内部运行。那样清扫就成功了,而它收集到的是假货。真正翻车的是上传那一步。
每一个假货都只有一个合法的目的地家族,也就是它被铸造时对应的主机范围,所以代理会 扫描每一个外发请求的头部和正文,用一个便宜到可以对所有流量都跑的 Aho-Corasick 自动机,寻找跑向不属于自己的地方的假货。一旦命中,它就以 HTTP 451 拒绝该请求, 一个字节也不转发,当场把 VM 暂停,并抛出一条告警,提供关机、保留以供调查 (先把磁盘、家目录与共享文件夹导出以便取证)或者自担风险的继续。这个事件会作为 一条红色的 Credential brokering 记录落在 Security Timeline 里,应用把该工作区 标记为已受损,下一次启动需要擦除并启动。
代理还会标记外发流量里未被替换、看起来像真的机密:带有 sk-ant-、ghp_ 或 AKIA
这类已知前缀的 Bearer 和 x-api-key 值,以及二十个字符以上的不透明令牌。它们会
出现在 Trace Inspector 和 bromure-cli trace leaks 里。它们通常意味着有人手工把一份
真正的机密粘进了 VM,而那是唯一能从内部拆掉这条边界的办法。
可达性是第三道检查。每个工作区都带着一份有序的出口防火墙,覆盖动作、协议、主机或 CIDR、端口,对于 web 流量还覆盖到单个 HTTP 动词,并为未匹配的流量提供一个分段控件。 新工作区放行所有没被规则匹配到的流量。把它设为拒绝,列出工作真正需要的东西, 窃取木马的 C2 主机就不在这份清单上。客户机之外的两个部件负责执行:虚拟网络交换机按 目的 IP 和从 DNS 里嗅到的主机名匹配每一条流,代理再按 TLS 服务器名匹配一次。你对 规则的修改无需重启就能到达正在运行的会话。
如果你是靠复制粘贴装智能体
查一查你是从哪儿拿到的。EclecticIQ 追踪的那场活动把 claudecode.co.com 和
geminicli.co.com 排到了真页面之上,递给访客一行 PowerShell,它一边装上正版
工具,一边把窃取木马拉进内存。如果这描述的正是你做过的某次安装,就把整台机器
当作已经暴露:吊销订阅会话,而不是只轮换一把密钥;把 MCP 配置里的令牌全部轮换;
再用攻击者的眼光重读一遍自己的提示词历史。里面的主机名和仓库名,是你轮换不掉
的那部分。
缩小靶面的两个设置
通过工作区编辑器注册你的 Claude 或 ChatGPT 订阅,这样 OAuth 令牌会在宿主机上
被捕获,客户机跑的是一把假密钥。然后打开 Guardrails,把未匹配的流量设为
拒绝,并列出工作真正需要的东西:allow web api.github.com、
allow web registry.npmjs.org、default deny。一次会话之后运行
bromure-cli trace hostnames my-workspace,就能看到智能体接触过的每一个主机
以及次数。
战利品跟着普及走
窃取木马学习文件夹的顺序是可以预料的。先是浏览器配置文件,然后是加密货币钱包, 然后是 Discord 和 Slack 的令牌,然后是 VPN 配置。每一样都是在它所属的那个东西变得 稀松平常之后一两年,才进入收集规则的。这段滞后,就是要等到足够多的机器都有那个 文件夹,写下那一行配置才划算所需的时间。
编码智能体今年越过了那道门槛,入场价是一次配置更新,横跨八个家族,就在一个季度 之内。没有补丁能补上这件事,因为什么都没坏。文件夹就在它该在的地方,装着它该装的 东西,而那台机器上同时还跑着你的浏览器和你的邮件。
能改变结局的,是让那个文件夹不值得别人费力去复制。把智能体的状态放到虚拟化层的 另一边,用形状正确、数值错误的值填满它的凭据文件,把真的留在宿主机上,让刷新在那里 发生。
你的编码智能体是一个普通的应用程序,把普通的文件放在普通的地方,而这正是它被加进 名单的原因。在下一个家族更新它的配置之前,先决定这些文件被允许值多少钱。 安装 Bromure Agentic Coding,让他们去复制诱饵吧。