返回所有文章
發佈於 · 作者 Renaud Deraison

他們把你的代理加進了名單

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 個。BeeStealerSTG StealerHydraStealerAPEX StealerOtter Stealer 都在做同一件事的某個版本。 在 macOS 上這個變種叫 Djinn Stealer,它的清單最長:Claude、Codex、Gemini、 Cline、OpenCode、Kilo。

Rubín 對自己在描述什麼很謹慎。「這些活動並不指向 Claude、Cursor 或 Codex 中新發現的 瑕疵,」他寫道,「它顯示的是犯罪分子在改造既有的竊取木馬,去蒐集那些放在可預測的 本機資料夾裡的有價值檔案。」

名單長了一行

這次改動幾乎沒讓作者付出什麼。

現代的竊取木馬不會把拿什麼寫死在程式碼裡。它們隨身帶著遠端管理的蒐集規則:一份 設定資料區塊,列出資料夾、檔名、資料庫檔案、副檔名與搜尋上限,從營運者的基礎設施 取回。加一個新目標,按照 Cyber Press 的整理, 就是營運者「透過更新路徑、檔名或資料庫規則,把新近流行的 AI 工具加進惡意軟體的 蒐集清單,而不必重新建置惡意軟體」。

這是一個產品決策。有人看了看現在哪些資料夾裡裝著值錢的東西,往設定裡寫了幾條路徑, 於是那些本來就在跑這些家族之一的機器,在下一次回連時開始上傳代理的資料。營運者 沒有重新感染任何東西。磁碟上的二進位檔沒變,偵測特徵碼也就沒變。

Gen 記錄到,2026 年上半年有 330 萬名不重複的受保護使用者被偵測到資訊竊取木馬, 每月總量超過 50 萬。光是 Amatera 和 Remus 兩家,三個月裡就出現在數萬名使用者身上。 那就是營運者把新規則推送過去的人群。

一次設定推送,不是一場行動營運者 — 蒐集規則瀏覽器、Cookie、錢包Slack、Discord、VPN 設定檔ssh 金鑰、雲端儲存路徑+ AI 編碼代理目錄九月,附加的一行下次回連已經被感染的機器330 萬名使用者,2026 上半年每月 50 萬次以上偵測磁碟上的二進位檔沒變不需要重新感染沒有新特徵碼可抓離開這台筆電的東西存取權杖 + 更新權杖MCP 伺服器憑證對話資料庫提示詞歷史專案名稱、快取的原始碼帳號與訂閱細節八個家族,一個季度Amatera · Remus · CallbackBeaver · BeeStealer · STG · Hydra · APEX · Otter — macOS 上還有 Djinn
把 AI 編碼代理加進戰利品清單,沒讓營運者多做一次建置。常見的竊取木馬會從營運者那裡取回遠端管理的蒐集規則(資料夾、檔名、資料庫檔案、副檔名)。營運者附加上代理的目錄,每一台早已被感染的機器就在下一次回連時開始蒐集它們。磁碟上的二進位檔沒有改動,所以這台機器看上去沒有任何不同。

那個資料夾裡有什麼

Gen 對規則蒐集內容的盤點很具體:「存取權杖與更新權杖、存放在 MCP 設定裡的憑證、 提示詞歷史、對話資料庫、帳號細節,以及一名開發者一直在做的那些專案的痕跡。」

這份清單把兩種性質不同的損失放在了同一個名字底下。

第一種是存取權。一個存取權杖買到一次工作階段。一個更新權杖買到多次工作階段, 只要它還有效就一直買得到,因為有人就是把它設計成比它出身的那次工作階段活得更久。 正是這個性質讓它值得被偷,也正因如此,撤銷一次工作階段並不能把竊賊從原地趕走。就在 同一個資料夾裡緊挨著它的,是你 MCP 設定裡的憑證,而它們打開的是另一樣東西:一個 內部服務、一套工單系統、一個藏在 HTTP MCP 伺服器背後的資料庫。

第二種損失是情報,而且更新鮮。你的提示詞歷史,是一趟關於你雇主基礎設施的導覽。 Cyber Press 說得很直白:被偷走的提示詞歷史會揭露「儲存庫名稱、內部主機名稱、基礎 設施細節、安全控制措施、API 機密與商業計畫」。某個週二,你敲進服務的名字、叢集的 名字、遷移卡住的原因,然後貼上那段帶著連線字串的片段,問它為什麼老是失敗。你從來 沒有為自己的聊天記錄寫過一份威脅模型。

它是從一條搜尋結果裡來的

把竊取木馬放上機器同樣不需要零日漏洞。五月,EclecticIQ 記錄了一場 把假冒安裝頁面排到真頁面之上 的行動:claudecode.co.comgeminicli.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 自己的持久家目錄裡,一個工作區 一份,在 hypervisor 的另一邊,而不在蒐集規則點名的那個 macOS 家目錄裡。一條寫著 「從使用者設定檔裡複製代理的設定目錄」的規則,找到的是一個裡面沒有代理的使用者 設定檔。

主機自己的儲存。 主機保存的東西,用每次安裝獨有的 256 位元主金鑰以 AES-GCM 靜態加密,那把金鑰存放在 macOS 的 Data Protection 鑰匙圈裡,限定於應用程式的簽章 身分,並關閉了 iCloud 同步。這個應用程式不上傳也不同步任何東西。把 Application Support 資料夾整個複製走,或者還原它的一份 Time Machine 備份,沒有 這台 Mac 的鑰匙圈項目,你拿到的只是密文。

在工作區裡跑一遍蒐集規則規則要什麼它找到什麼存取權杖 + 更新權杖一把假金鑰;VM 裡根本沒有更新權杖主機在到期前約 5 分鐘,為所有 VM 一次更新MCP 設定brm-mcp_…真正的 bearer 在線路上換進,只限那台主機API 金鑰、雲端憑證sk-ant-api03-brm-… · brm-k8s-… · brm-db-…形狀對、值不對,出了範圍就是死的對話資料庫、提示詞歷史真實、持久 — 但在 VM 的家目錄裡,不是你的規則裡的那條路徑,指向一個你的 Mac 沒有的資料夾
把 Gen Digital 的蒐集清單一項一項,對著一個 Bromure Agentic Coding 工作區跑一遍。訂閱權杖在主機一側,更新也在主機一側完成,所以客體永遠不持有更新權杖。代理設定裡的 MCP bearer 是一個 brm-mcp 佔位值。API 金鑰是保持結構的假貨。對話資料庫與提示詞歷史是真的,而它們放在 VM 的持久家目錄裡,不在規則所指的那個 macOS 家目錄裡。

當清掃發生在 VM 內部

竊取木馬也可以從另一頭進來:由代理自己拉進來,經由一個相依套件或者一段被下毒的 指令,然後在工作區內部執行。那樣清掃就成功了,而它蒐集到的是假貨。真正翻車的是 上傳那一步。

每一個假貨都只有一個合法的目的地家族,也就是它被鑄造時對應的主機範圍,所以代理 伺服器會掃描每一個外送請求的標頭與內文,用一個便宜到可以對所有流量都跑的 Aho-Corasick 自動機,尋找跑向不屬於自己的地方的假貨。一旦命中,它就以 HTTP 451 拒絕該請求,一個位元組也不轉發,當場把 VM 暫停,並拋出一則警示,提供關機保留以供調查(先把磁碟、家目錄與共用資料夾匯出以便鑑識)或者自負風險的 繼續。這個事件會作為一列紅色的 Credential brokering 記錄落在 Security Timeline 裡,應用程式把該工作區標記為已受損,下一次啟動需要抹除並啟動

代理伺服器還會標記外送流量裡未被替換、看起來像真的機密:帶有 sk-ant-ghp_AKIA 這類已知前綴的 Bearerx-api-key 值,以及二十個字元以上的不透明權杖。 它們會出現在 Trace Inspector 和 bromure-cli trace leaks 裡。它們通常意味著有人手動 把一份真正的機密貼進了 VM,而那是唯一能從內部拆掉這條邊界的辦法。

可達性是第三道檢查。每個工作區都帶著一份有序的出口防火牆,涵蓋動作、通訊協定、 主機或 CIDR、連接埠,對於 web 流量還涵蓋到個別 HTTP 動詞,並為未匹配的流量提供一個 分段控制項。新工作區會放行所有沒被規則匹配到的流量。把它設為拒絕,列出工作 真正需要的東西,竊取木馬的 C2 主機就不在這份清單上。客體之外的兩個元件負責執行: 虛擬網路交換器依目的 IP 與從 DNS 裡竊聽到的主機名稱比對每一條流,代理伺服器再依 TLS 伺服器名稱比對一次。你對規則的修改無需重開就能到達執行中的工作階段。

狀態就在你的家目錄裡一條可預測的路徑,任何以你的身分執行的東西都能讀代理的目錄存取權杖 · 更新權杖MCP bearer 權杖對話資料庫提示詞歷史 · 專案名稱常駐的竊取木馬讀規則、複製資料夾二進位檔從沒變過;變的只是那份路徑清單已上傳可續期的存取,外加一張資產地圖狀態在一台 VM 裡,而且是誘餌你的 macOS 家目錄裡沒有代理目錄可點名工作區 VM — 持久家目錄假金鑰 · 沒有更新權杖brm-mcp_… · brm-k8s-… · brm-db-…對話資料庫與歷史,在 hypervisor 的另一邊真值在主機上加密,AES-GCM,鑰匙圈金鑰vsock 8443 — 唯一的出口主機代理伺服器 — 每個請求都要問過出口防火牆 · 主機、連接埠、HTTP 動詞替換 · 真值只注入給一台主機每個請求一列追蹤,就在你的機器上假貨跑出範圍 → HTTP 451、VM 暫停、時間軸一列
放置代理狀態的兩個地方。在一台普通的 Mac 上,權杖、MCP 憑證與對話歷史都在使用者設定檔裡一個可預測的資料夾中,那正是蒐集規則點名的地方,任何以你的身分執行的東西都能讀到它。在 Bromure Agentic Coding 的工作區裡,同樣的狀態放在一台 VM 的持久家目錄裡,裡面的憑證是 brm- 假貨,而唯一的對外路徑是通往主機代理伺服器的 vsock 連接埠 8443,那個代理伺服器會核對防火牆、替換憑證,並拒絕任何跑出自己範圍的假貨。

如果你是靠複製貼上裝代理

查一查你是從哪裡拿到的。EclecticIQ 追蹤的那場行動把 claudecode.co.comgeminicli.co.com 排到了真頁面之上,遞給訪客一行 PowerShell,它一邊裝上正版 工具,一邊把竊取木馬拉進記憶體。如果這描述的正是你做過的某次安裝,就把整台機器 當作已經暴露:撤銷訂閱的工作階段,而不是只輪替一把金鑰;把 MCP 設定裡的權杖 全部輪替;再用攻擊者的眼光重讀一遍自己的提示詞歷史。裡面的主機名稱與儲存庫 名稱,是你輪替不掉的那部分。

縮小標的的兩個設定

透過工作區編輯器註冊你的 Claude 或 ChatGPT 訂閱,這樣 OAuth 權杖會在主機上被 捕獲,客體跑的是一把假金鑰。然後打開 Guardrails,把未匹配的流量設為 拒絕,並列出工作真正需要的東西:allow web api.github.comallow web registry.npmjs.orgdefault deny。一次工作階段之後執行 bromure-cli trace hostnames my-workspace,就能看到代理接觸過的每一個主機 以及次數。

戰利品跟著普及走

竊取木馬學習資料夾的順序是可以預料的。先是瀏覽器設定檔,然後是加密貨幣錢包, 然後是 Discord 與 Slack 的權杖,然後是 VPN 設定檔。每一樣都是在它所屬的那個東西 變得稀鬆平常之後一兩年,才進入蒐集規則的。這段落差,就是要等到足夠多的機器都有 那個資料夾,寫下那一行設定才划算所需的時間。

編碼代理今年越過了那道門檻,入場價是一次設定更新,橫跨八個家族,就在一個季度 之內。沒有修補程式能補上這件事,因為什麼都沒壞。資料夾就在它該在的地方,裝著它 該裝的東西,而那台機器上同時還跑著你的瀏覽器與你的郵件。

能改變結局的,是讓那個資料夾不值得別人費力去複製。把代理的狀態放到 hypervisor 的 另一邊,用形狀正確、數值錯誤的值填滿它的憑證檔案,把真的留在主機上,讓更新在那裡 發生。

你的編碼代理是一個普通的應用程式,把普通的檔案放在普通的地方,而這正是它被加進 名單的原因。在下一個家族更新它的設定之前,先決定這些檔案被允許值多少錢。 安裝 Bromure Agentic Coding,讓他們去複製誘餌吧。