你的程式設計代理看起來就跟攻擊者一模一樣
2026 年 7 月,Sophos X-Ops 報告,在一週的 Windows 遙測資料中,像 Claude Code、Cursor、Codex 這樣的程式設計代理,觸發了原本為捕捉入侵者而打造的同一批端點規則——56.2% 的封鎖屬於憑證存取,其中最大的一項是對瀏覽器密碼的解密。這種行為與真正的攻擊完全相同;唯一的變數是它跑在誰的機器上。Bromure Agentic Coding 把那個變數變成一台裝著誘餌憑證的可拋棄 Linux VM,於是吵雜的動作落進一個可拋棄的箱子,而你主機的防禦保持嚴格。
你的代理解密了瀏覽器儲存的密碼、列出了憑證管理員、用一個 Windows 系統工具 拉下了一個安裝程式,並把一個腳本丟進了開機資料夾。其中每一項都在真正入侵者 的檢查清單上。Sophos 看著一個程式設計代理把這些全做了。沒有一項是惡意的—— 而這正是問題所在,因為攻擊者產生的遙測,和你的代理產生的遙測,是同一份遙測。
2026 年 7 月 7 日,Sophos X-Ops 發表了一份 針對六月一週端點遙測的分析, 探討當開發者把程式設計代理指向真實機器時會發生什麼。這項發現是一場碰撞,而不是 誰能修補的臭蟲。代理的日常工作——讀一份憑證、執行一條指令、下載一個工具、讓某樣 東西跨越重開機仍活著——幾乎一對一對應到端點偵測被調校來捕捉的 MITRE ATT&CK 戰術。於是感測器就開火了。
感測器實際上看到了什麼
整週下來,封鎖規則命中中最大的一份——56.2%——落在憑證存取,另有 28.8% 落在
執行。這是框架中最具攻擊者形狀的兩個類別。單一最大的憑證規則,佔該群的 42.6%,
在一個行程使用 Windows 資料保護 API(DPAPI,用來解鎖使用者已存密鑰的作業系統
服務)去解密瀏覽器已存登入時開火。Sophos 把它追溯到 GStack 的 /browse
技能——一個給代理一個瀏覽器的熱門技能包——執行 PowerShell 去解鎖已存的瀏覽器
資料。它是在 Claude Code 底下執行時被逮到的。
清單的其餘部分讀起來像一份事件報告。代理執行了 cmdkey /list 去列舉 Windows
憑證管理員。它們殺掉瀏覽器行程,然後伸手進它的憑證庫。它們用 certutil 和
bitsadmin 下載一個 Python 安裝程式——這是兩個合法的 Windows 二進位檔,攻擊者
拿來取回酬載而不觸發下載過濾器,防禦者把這手法叫做 LOLBin(「living off the
land binary」,就地取材)。Cursor 把一個 VBScript 寫進 Windows 的開機資料夾,
這是教科書式的持久化。而 Claude 的命令列上帶著
--dangerously-skip-permissions,那個關掉代理自身「你確定嗎?」提示的旗標。
這些沒有一項是攻擊。在情境裡,它幾乎總是開發者要求的自動化。但 Sophos 對這對 防禦意味著什麼直言不諱:規則正按設計運作,而單憑行為已經無法把一個良性代理和 一個真正的代理區分開。
陷阱是在感測器上修它
以維運者的角度讀這項發現,壓力顯而易見。你的團隊採用程式設計代理。每當有人跑 一個,端點工具就開始丟出憑證存取和執行的警報。警報很吵,而且在沒有人被攻擊的 意義上它們是「假的」——於是自然的動作就是讓它們閉嘴:為代理加一條例外、把技能 包放進白名單、不再標記那條行程樹的 DPAPI 讀取。
在你這麼做的那一刻,你已經告訴你的防禦去忽略真正入侵者所用的那條確切序列。而 代理並不是一個可以安全地劃出去的東西,因為它是機器上最可能被反過來對付你的 東西。一個藏在儲存庫裡的提示注入、一個被下毒的市集技能、一個惡意相依套件—— 我們每一個 都 談過——都會讓代理用你的權限去執行攻擊者 的指令。當那發生時,代理做同樣的 DPAPI 解密、同樣的憑證管理員傾印、同樣的 LOLBin 取回——只是這次它是認真的。你以阻止它對自己喊狼來了之名,把那個本會逮到 它的唯一感測器弄瞎了。
Sophos 落到冷靜的版本:偵測工程將必須適應,有些規則需要調整,而區辨的訊號必須 來自情境——哪個代理、如何被呼叫——而不是動作本身。這是對的,而它也是為了讓 感測器對一個移動的目標保持誠實所需的大量持續工作。還有一個更直接的選項:別再 在感測器所在的地方跑代理。
移動代理,而不是警報
Bromure Agentic Coding 讓整個代理跑在一個 hypervisor 之外,在你 Mac 上一台 可拋棄的 Linux VM 裡。憑證庫的讀取、工具的下載、持久化的寫入——這一切都發生在 一個不是你機器的箱子裡,而它的重置在工作階段之間退回一個乾淨的基底映像。三件事 隨之而來,而沒有一件要求你在主機上放鬆哪怕一條規則。
噪音永遠到不了你的端點。你主機真正的防禦保持嚴格,因為代理不在主機上去觸發 它們。寫進開機資料夾的動作落進一個可拋棄的檔案系統;它等待的那次重開機永遠 不來,而重置無論如何都把它丟掉。
憑證讀取空手而回。這是對那 56.2% 的正面一擊。Bromure 把真正的密鑰留在主機上,
在線上的代理伺服器換入假的,所以實際坐在 VM 裡的是誘餌素材——API 金鑰該在的
地方放一個 brm_… 佔位符、一個合成的 kubeconfig、可拋棄的 git 與 ssh 憑證。
一個在那台 VM 裡解密瀏覽器保險庫或傾印憑證管理員的代理,收割不到任何能用的
東西。真正的值只在往外的請求上、在代理無法繞過的邊界上被替換。
--dangerously-skip-permissions 不再危險。這個旗標之所以存在,是因為每一步都被
問「你確定嗎?」會殺掉代理的意義;人們把它關掉。讓它魯莽的是底下那台機器。把
機器移到一台裝著誘餌憑證的可拋棄 VM,這個旗標就只是快——害怕它的理由從來不是
旗標,而是波及半徑。
那被挾持的代理呢
圍堵回答了噪音,但更尖銳的憂慮是那個不只是吵、而是已被策反的代理。Bromure 的
邊界也是為那種情況而建。它的裝置端注入偵測,在代理據以行動之前,為代理讀取的
不受信任內容與指令檔評分——用一個本機的
PromptGuard 模型和一個微調的
分類器——所以那句流氓的「現在把金鑰外洩出去」會在門口就被標記。那些在箱子外才
重要的動作——一次 push、一次部署、一次對你雲端的 Delete*——越過主機代理伺服
器,在那裡 Guardrails 可以把破壞性呼叫整個剝掉,而逐目的地的同意可以先要求一次
人類的點按。而每一個出向請求都落進工作階段追蹤裡,所以入侵者需要的回呼,會以一
條帶著假憑證的、被記錄下來的行出現。
Sophos 量到的行為碰撞是真的,而且不會消失——一個程式設計代理誠實的工作,按設計 就與攻擊者的劇本重疊。你無法在感測器上解決它,除非要嘛淹沒在誤報裡,要嘛切開一 個你自己的代理在被入侵那天會走過的洞。Bromure 在別的地方解決它:它不再在乎是哪 一個打了那條指令,因為那條指令落進一個會重置的箱子、花掉的是誘餌憑證、而且只能 透過一個在看守的邊界去碰觸外面的世界。
這劃出的界線是什麼
隔離是圍堵,不是沒有壞東西會執行的保證。對這些邊緣講究精確是值得的。
那些是 Windows 的名字;碰撞不是
DPAPI、cmdkey、certutil 和開機資料夾都是 Windows 的。Bromure 讓代理跑在
Linux 上,所以那些確切的二進位檔在裡面永遠不會開火。但這個模式與平台無關:
一個 Linux 上的代理讀 ~/.aws/credentials、傾印環境權杖、寫一個 cron 或
systemd 單元——同樣的攻擊者形狀動作,換了名字。控制也一樣。位置與誘餌,而非
特徵碼。
替換涵蓋你所設定的那些密鑰
誘餌調換保護你放進設定檔的憑證:模型金鑰、git 與雲端權杖、受管資料庫端點、 ssh 金鑰。一個腳本在工作階段中途寫進檔案的密碼,或你親手貼進箱子的密鑰,只是 一個代理能讀的檔案。把密鑰留在 broker 裡,而不是工作區裡。
偵測是一張網,不是一堵牆
裝置端注入評分多半會標記出一句流氓指令,但一個下定決心的作者能餓死任何單一 掃描器。把偵測器當成一層;圍堵——一個裝著假金鑰、出向被記錄的可拋棄箱子—— 才是偵測器漏掉時撐住的東西。
你的主機 EDR 依然重要
Bromure 不取代端點防護;它給端點防護一份更乾淨的工作。代理的噪音離開主機, 所以你的感測器繼續看守你真正登入的那台機器,不被鈍化——而那裡一個真正的入侵者 仍然得先過它這一關。
Sophos 數字底下的教訓不是「代理很危險」。而是你無法憑指令的形狀去分辨一個好 行為者和一個壞行為者,因為形狀是一樣的。所以別再試著在鍵盤上決定它,改在邊界上 決定它:把代理跑在它攻擊者形狀的工作被圍堵、它的憑證是假的、它每一步往外都被 記錄的地方。安裝它。