← 返回所有文章
发布于 · 作者 Renaud Deraison

代理的日志存在他们的云端

Warp 披露,攻击者入侵 Warp 基础设施中的一家第三方厂商,窃取了约 1% 用户的代理追踪记录和遥测数据;其 CEO 表示,入侵者是用一群 AI 代理做到的。代理追踪记录记下代理读了什么、运行了什么、看到了什么,因此可能包含代码、命令输出和机密。在 Bromure Agentic Coding 中,代理的追踪记录在你的 Mac 上写入并加密,代理经手的每个机密都是替身,哪些主机能收到任何东西,由你决定。

代理追踪记录,记下了代理读过、运行过、看过的一切。Warp 的追踪记录放在一家第三方厂商那里,而 10 月 23 日,有人闯进了那家厂商。

10 月 23 日星期五,Warp 发现了其创始人兼 CEO Zach Lloyd 所说的“针对 Warp 基础设施中一家第三方厂商、范围很窄的主动攻击”。Warp 从一款终端发展成了它所说的代理式开发环境,这次被拿走的是代理追踪记录和用户遥测数据。Lloyd 估计受影响的上限约为 Warp 用户的 1%。该公司网站称至少有 80 万用户,所以 1% 大约是 8,000 名开发者。BleepingComputer 昨天报道了这次披露。

Warp 表示,它在几小时内就发现并控制住了这次行动,已请 CrowdStrike 介入调查、通知了执法部门,并告知了受影响的用户。据 Risky Business 报道,Lloyd 说入侵者是用一群 AI 代理攻破那家供应商的。Warp 没有公布厂商名称,没有说明漏洞,也没有说被盗的追踪记录是否包含源代码、提示词或凭据。它给用户的建议是:关注账户活动,并比平时更谨慎地对待主动找上门的消息。

这是本月第二起从厂商服务器开始的编程代理泄露事件。10 月 16 日,攻击者拿到了约 1.4% 的 OpenCode Console 用户保存的提供商 API 密钥,一些用户发现了最高 1,700 美元、并非自己产生的费用。我们在《密钥就放在他们的控制台里》中讲过这件事。

代理追踪记录里有什么

编程代理以循环的方式工作。它读一个文件、运行一条命令、读取输出,再决定下一步,而追踪记录会记下每一步。其中包括你输入的提示词、代理打开的文件、它写出的 diff、它运行的 shell 命令,以及这些命令打印出的内容。

机密就是从最后这部分混进去的。一个在调试失败部署的代理,会运行 env、打开 .env、打印配置文件,再贴上一段带有连接字符串的 stack trace。在《令牌留在了对话记录里》中,Trellix 展示了编程代理在日常工作中顺手就把机密从钥匙串复制到命令行、shell 历史记录和它们自己的对话记录里。客户数据也以同样的方式进入:代理为了验证修复而打开一个 CSV 或查询一张表,那些数据行就落进了追踪记录。

追踪记录还包含你零散的代码、内部主机的名称,以及你都在做什么的时间线。对攻击者来说,几千份追踪记录就是一份可以网络钓鱼的开发者名单,而且每个人都附带一段关于他那周在做的项目、足以令人信服的故事。Warp 提醒用户警惕主动找上门的消息,背后正是这个风险。

存在云端的代理追踪记录会去哪里1 · 代理开始工作在开发者的笔记本上:读取文件、运行命令、读取输出2 · 追踪记录发给厂商代理决策日志和遥测数据,存放在工具厂商的云端3 · 厂商的厂商Warp 基础设施中的第三方;未具名,漏洞未公开4 · 10 月 23 日遭入侵据 CEO 称是一群AI 代理所为;约 1%用户的记录被盗代理追踪记录可能包含什么提示词 · 代理打开的源文件 · diff · shell 命令及其输出 · 调试时打印的环境变量值查询或 CSV 中的客户数据行 · 内部主机名 · 每位开发者工作内容的时间线
工具把代理追踪记录存在云端时它的去向。代理在笔记本电脑上工作,追踪记录发送给工具厂商,厂商再交由第三方存储或处理。Warp 的攻击者就是从那个第三方进来的。

同一个会话,换到 Bromure 机器上

Bromure Agentic Coding 在你 Mac 上的 Ubuntu VM 中运行 Claude Code、Codex、Grok、Kimi 和 omp。机器发出的每一个请求,包括代理每次调用它的模型,都会经过 Mac 上的代理服务器。Bromure 就在这个代理服务器上记录追踪记录、替换凭据并执行你的网络规则。把上面那个调试会话拿到这里来跑一遍。

追踪记录写在你的 Mac 上

Bromure 的会话追踪记录,回答的是事故之后你会问的那个问题:代理做了什么?新机器会记录 AI request details:每个请求一条元数据记录,另外还有与模型提供商往来的完整请求和响应正文。Trace Inspector(⇧⌘I)把这些正文解析成对话视图,列出每一次工具调用、代理运行的每一条 shell 命令,以及它读写过的每一个文件。bromure-cli trace 则在终端中提供同样的数据。

这些全部存放在你 Mac 上的 ~/Library/Application Support/BromureAC/traces/。捕获的正文用保存在你钥匙串中的密钥进行 AES-GCM 密封,文件权限为 0600。个人安装不会把任何追踪记录、正文或摘要上传到任何地方,代理服务器也没有为个人用户接入任何分析端点。读取同一份流量的提示词注入分类器,同样在 Mac 上运行。

没有任何厂商持有副本,厂商的供应商也没有。闯进某家日志服务的攻击者,在那里找不到你的任何一个会话。

追踪记录里的机密都是替身

回到那个调试会话。代理运行 env、打开 .env,并打印部署配置。在 Bromure 机器上,你配置的每一个凭据在 VM 里都是假的。ANTHROPIC_API_KEY 里是一个以 sk-ant-api03-brm- 开头的值,GH_TOKEN 和 ~/.git-credentials 里是一个 ghp_ 替身,~/.aws/config 指向一个会给出假私密密钥的辅助程序,SSH 密钥则留在主机上,藏在一个 agent socket 后面。你从已有 .env 导入的密钥也会变成替身。代理服务器只会针对该凭据所属的主机,把真实的值放到线路上。

所以,代理打印出来并贴进对话的任何东西都是替身。每一份副本都是如此:模型提供商的日志、代理 CLI 自己的历史文件、崩溃报告、追踪记录。离开这台机器,这些替身在哪里都无法通过认证。如果其中一个被发往并非为它签发的主机,代理服务器会以 HTTP 451 拦下请求、暂停 VM,并显示 This environment may have been compromised,同时列出该凭据、它所属的主机,以及它被发往的主机。

Bromure 自己的追踪记录还更进一步。Authorization、Cookie、api-key 等请求头在写入任何内容之前就会被改写为 <redacted>,每次凭据替换只以首尾几个字符的预览保存,例如 sk-a…f9q3。真实的机密无论是否加密,都不会进入任何一条追踪记录。

客户数据留在 Mac 上

在机器的设置中打开 PII Protection,代理服务器就会在每个请求发往模型提供商之前,找出其中的个人数据:姓名、电子邮件地址、电话号码、银行卡号和银行账号、政府签发的证件号,以及地址。它把每个值换成逼真的替身,例如虚构的姓名或 @example.com 地址,并在回复中把真实的值放回去,工具调用的参数也不例外。检测由内置的 Rampart 模型在 Mac 上完成。

代理处理的是真实的数据行,提供商看到的是替身。同一位客户在每一轮都得到同一个替身,所以提示词缓存照样有效。Security Timeline 会统计每次替换,例如 3 names · 1 phone number → api.anthropic.com,却不记录任何一个值。

对于应该留在 Mac 上的工作,把代理指向端侧模型。MLX 模型在 Mac 的 GPU 上运行,这些轮次不会发往其他任何地方。

谁能收到任何东西,由你决定

代理 CLI 通信的对象不止模型。错误上报、功能开关和使用遥测,各自发往不同的主机。在机器的 Guardrails 面板中,把 Unmatched traffic 设为 Deny,再放行项目需要的主机:模型提供商、你的代码托管平台、你的软件包仓库。其他所有连接都会在 Mac 上被拒绝,每一次拒绝都是 Security Timeline 里的一行。最后你手上会有一份书面清单,列出从那台机器接收数据的公司,而且是你亲手写的。

团队可以监督,而不必收集对话记录

组织仍然需要看到自己的代理在做什么。加入 bromure.io 工作区的 Mac 会把会话元数据流式发送给管理员:用了哪些工具、动了哪些文件、运行了哪些命令、用了多少 token。原始提示词从不发出。完整的对话留在开发者 Mac 上加密的追踪记录里。窗口标题栏上的红点表示机器正在流式发送,Private mode 则可以让某个工作区的活动只留在本地,例如使用个人 API 密钥的工作区。

笔记本电脑代理,追踪记录在云端代理运行 env、打开 .env输出中有真实的 API 密钥和令牌追踪记录由厂商保存并由厂商自己的供应商处理一家供应商遭入侵可用的密钥、代码片段、客户数据行以及每位开发者的钓鱼借口Bromure:追踪记录在你的 Mac 上代理 VM(Ubuntu)env 和 .env 只显示替身;真密钥从不进 VMMac 上的主机代理服务器PII 在到达提供商前替换;未批准主机一律拒绝;替身发错地方:451、暂停 VM追踪记录在 Application Support用钥匙串密钥 AES-GCM 加密;认证请求头隐去,替换只留预览;不上传任何东西
同一个调试会话,一边是追踪记录存在云端的笔记本电脑代理,一边是 Bromure 机器。在笔记本电脑上,追踪记录把真实的机密和客户数据行带到厂商及其供应商那里。在 Bromure 上,追踪记录在 Mac 上加密,其中的机密只是替身或预览,发往提供商的个人数据会被替换,未经批准的主机一律拒绝。

接下来的那一周

受影响的 Warp 用户现在得弄清楚自己的追踪记录里有什么,并轮换其中可能出现过的一切。在装有 Bromure 的 Mac 上,第一部分只要几分钟。打开 Trace Inspector,按工作区筛选,再打开 Conversations only,就能看到代理运行过的每一条命令和读过的每一个文件。Leaks only 会列出所有携带非 Bromure 签发的真实令牌的请求,从中可以看出是否曾有原始机密绕过替身发了出去。

轮换只需在一个地方完成。真实的密钥存放在主机上唯一一个加密保险库里。把新值粘贴到机器的 Credentials 面板,下次启动时就会写入对应的替身。以 1Password 引用方式保存的密钥每两分钟重新解析一次,所以在 1Password 里轮换之后,运行中的机器无需重启就会生效。

追踪记录留在家里

会话追踪记录写在你的 Mac 上,并用钥匙串中的密钥密封。个人安装不上传任何东西。

机密都是替身

代理打印的任何东西都是假的。追踪记录中的认证请求头一律隐去,替换只留下简短预览。

个人数据会被替换

姓名、电子邮件、银行卡号和地址在 Mac 上被检测出来,以替身的形式到达模型提供商。

主机由你挑选

把 Unmatched traffic 设为 Deny,只有你放行的主机才收得到东西,每一次拒绝都有记录。

把记录留在工作发生的地方

代理追踪记录值得保留。你靠它查出代理在凌晨 3 点做了什么,也靠它回答审计人员。问题在于由谁保管。每多一家公司存储你代理的决策日志,就多一家公司的供应商可能把它弄丢;而攻击者如今也跑起了自己的代理,专门去找那个薄弱的供应商。

Bromure Agentic Coding 把完整的记录留在代理工作的那台机器上,用你的钥匙串加密,并用替身代替其中的机密。下一次有厂商披露泄露时,“我们有没有受影响?”这个问题,你可以在自己的 Trace Inspector 里找到答案。

想了解代理如何通过自己的对话记录扩散机密,请阅读《令牌留在了对话记录里》。关于本月早些时候的 OpenCode Console 泄露事件,请阅读《密钥就放在他们的控制台里》。