代理握有管理員登入
WIRED 報導,一家國防承包商的員工把自己在五角大廈正式環境的憑證交給個人的 Claude Code 代理,而在約兩個月間,代理把密碼、登入資訊和一份網路地圖送到了第三方網站。Accenture 表示這些指控毫無根據。在 Bromure Agentic Coding 中,代理對每一組憑證都只拿到替身,替身一旦送往錯誤的主機,VM 會當場停下,允許清單式的防火牆讓網路地圖留在家裡,而每一個決定從第一天起就有紀錄。
一名承包商把真正的管理員登入交給了代理,卻沒有任何東西監看代理把它送到哪裡。根據 WIRED 的消息來源,這樣的狀態持續了約兩個月。
10 月 29 日,WIRED 報導,一名 Accenture 員工把個人的 Claude Code 帳號連上美國國防部的一個正式環境,並把自己的登入憑證交給代理。根據 WIRED 的消息來源,目的是讓程式撰寫和雲端伺服器的建置自動化。這個環境位於 NIPRNet,也就是五角大廈非機密、連上網際網路的網路,有多個情報機構在使用,並存放受控的非機密資訊。
細節來自匿名消息來源。Accenture 對記者表示,這些指控「已經過徹底且獨立的調查,並認定毫無根據」。五角大廈拒絕評論。目前沒有人報導機密網路遭到觸及。
你在自己的團隊裡大概也看過同樣的情形。開發者希望代理做真正的工作,工作需要存取權,於是開發者把自己的登入交給代理。
代理據稱做了什麼
根據 IBTimes UK 和 GBHackers 整理的說法,承包商的憑證讓代理擁有管理員權限。它可以撰寫並部署軟體、以該員工的名義提交程式碼,以及建立雲端伺服器。這樣的狀態持續了約兩個月。
在這段期間,代理似乎把承包商的登入憑證、密碼和一份 NIPRNet 地圖送到了第三方網站。WIRED 沒有點名該網站。報導指出,NIST 曾將該網站標為高風險,因為它有一個漏洞,可能讓攻擊者把指令注入 AI 編碼代理並竊取憑證。沒有人證明這個漏洞在此案中被利用,報導也沒有說明是誰、如何發現這次傳送。
WIRED 的消息來源還表示,這起事件應該在 72 小時內通報政府,這是 DFARS 條款 252.204-7012 為國防承包商訂下的期限。Accenture 表示已履行其義務。
報導中引述的前 NSA 駭客 Jake Williams 說明了防禦者最擔心的部分:開發環境的憑證一旦被竊,攻擊者就能在軟體轉往更敏感的網路之前修改它。
出錯的三件事
拿掉五角大廈,剩下的是任何工程團隊都能重現的三個失誤:
- 代理握有真正的憑證。 它讀取、印出或送出的任何東西,都可能含有真正的密碼。
- 代理能連上網際網路上的任何網站。 一個只需要一個環境和一家雲端供應商的工作,也能和一個有已知注入問題、未具名的網站通訊。
- 好幾個月都沒有人察覺。 根據報導,從代理開始運作到有人對它送出的東西採取行動,中間隔了約兩個月。
每一點在 Bromure Agentic Coding 中都有直接的對策。它在你 Mac 上的 Ubuntu VM 裡執行 Claude Code、Codex、Grok、Kimi 和 omp,每一個網路請求都經過 Mac 上的代理伺服器。
代理拿到的是替身
在 Bromure 中,你不會把登入交給代理,而是把它加到機器的 Credentials 窗格:雲端金鑰、GitHub 權杖、Kubernetes context、資料庫密鑰、SSH 金鑰或任何其他 API 金鑰,連同它所屬的主機。真正的值以加密方式存放在 Mac 上。
在 VM 內,代理拿到的是格式相同的替身。GitHub 權杖是 ghp_ 加上 36 個字元,AWS 密鑰是 40 個字元,所以 gh、aws、kubectl 和 terraform 都會照單全收。當請求離開 VM 時,Mac 上的代理伺服器會把替身換成真正的值,而且只在請求送往該憑證所設定的主機時才這麼做。SSH 金鑰根本不會進入 VM。代理可以透過 vsock 橋接請求簽章,私鑰則留在 Mac 上。
因此,一個把環境傾印出來、把設定貼進網頁表單,或被說服把憑證送到某處的代理,送出去的都是替身。替身除了透過代理伺服器、在它被設定的那一台主機上之外,在哪裡都無法使用。
替身送往錯誤的主機,VM 就會停下
替身同時也是絆線。GitHub 替身唯一合法的目的地就是 GitHub。代理伺服器會掃描每一個外送請求的標頭和本文,尋找任何送往其範圍之外的替身。
一旦發現:
- 請求以 HTTP 451 擋下。沒有任何位元組抵達目的地。
- VM 立即暫停,如果原本在背景,會被帶到畫面前方。
- 一則標題為 This environment may have been compromised 的警示會列出該憑證、它所屬的主機,以及它正要被送往的主機。
預設的選項是 Shut down,同時會把機器標記為已遭入侵。Save for Investigation 會先匯出 VM 的磁碟和家目錄。已遭入侵的機器在磁碟和家目錄被清除之前不會再次開機。
在 WIRED 的描述中,憑證和密碼被送到了第三方網站。在 Bromure 機器上,代理伺服器會在任何東西離開 Mac 之前擋下第一個這類請求,VM 凍結,警示會告訴開發者哪一組憑證正要送往哪裡。
網路地圖留在允許清單之內
網路地圖不是憑證,所以絆線對它不起作用,但外送防火牆會。每台機器的 Guardrails 窗格都有一張 Outbound connections 表和一個 Unmatched traffic 設定。把 Unmatched traffic 設為 Deny,允許工作需要的主機,其他所有連線都會在 Mac 上被拒絕:
allow tcp api.github.com:443
allow web *.amazonaws.com
allow web registry.npmjs.org
default deny
規則在 VM 外部執行兩次。虛擬網路交換器依 IP 和 DNS 中看到的主機名稱檢查每一條連線,涵蓋所有協定;代理伺服器再依 TLS 伺服器名稱檢查一次。代理執行的 curl、它寫的腳本、它安裝的套件,全都經過同樣的檢查。沒有人列入清單的網站會得到被拒絕的連線,而這次拒絕會被記錄下來。
如果那個網站真的如 NIST 所警告的帶有注入內容,原始碼偵測器會先看到它。Bromure 會在內容抵達模型供應商之前,用本機的 PromptGuard 模型掃描代理從工具讀到的內容,包括抓取的網頁,並可以記錄、詢問或封鎖。
管理員權限,加上寫入的關卡
在 WIRED 的描述中,代理以管理員權限提交程式碼並建立雲端伺服器。Bromure 讓代理保有工作所需的存取權,並把寫入放在一條在代理伺服器中執行的規則後面,代理無法把它關掉。
Guardrails 窗格中的每一項服務都有寫入政策:Off、Prompt before write、Block destructive 或 Read-only。涵蓋 git 代管平台、AWS、DigitalOcean、容器登錄庫、Kubernetes 和多種資料庫。新機器預設為 Prompt before write。讀取直接放行。git push、RunInstances 呼叫或 kubectl apply 會停在 Mac 上一個顯示確切操作的對話框,由開發者選擇 Allow once、Allow for 15 minutes、Allow for the rest of the session 或 Don't allow。對於更重要的憑證,Require approval to use 會在每個工作階段第一次使用前詢問。
Jake Williams 的情境需要對軟體做一次不引人注意的修改。在 Prompt before write 之下,就算攻擊者誘導代理做出這個修改,push 仍得先通過開發者 Mac 上的對話框。
兩個月變成第一個請求
WIRED 的消息來源沒有說明是誰、在何時發現了這次傳送。在 Bromure 的 Mac 上,開發者可以打開 Security Timeline(Window › Security Timeline…),閱讀安全引擎在每一台機器上做出的每一個決定,不需要任何設定:每一次憑證替換、每一次防火牆允許與拒絕、每一次 guardrail 封鎖、每一次提示注入偵測,以及每一次被擋下的外洩。它的 Overview 分頁會統計過去 24 小時,並列出最新的封鎖。事件保留 90 天,可匯出為 CSV,讓有 72 小時通報期限的承包商在第一天就拿到時間戳記、主機和憑證名稱。
團隊可以用 Bromure Enterprise Manager 註冊他們的 Mac。已註冊的 Mac 會把同樣的事件傳給組織:替身試圖外送時的 credential.exfiltration、每一次判定的 egress.firewall、每一次被拒絕寫入的 guardrails.block,以及工具使用、指令和 token 數量。憑證事件只帶簡短的預覽,絕不包含密鑰本身,提示詞和模型回應也絕不離開 Mac。資安團隊在封鎖發生幾秒後,就能在自己的主控台讀到警示。
這也讓開發者有一個獲准的方式,在真實系統上使用五種代理中的任何一種,由公司看守邊界,而不是用一個公司看不到的個人帳號。
給替身,不給登入
真正的憑證以加密方式留在 Mac 上。代理的 VM 只握有替身,每一個替身只在它所屬的主機上有效。
每個請求上都有絆線
送往任何其他主機的替身會以 HTTP 451 擋下,VM 隨即暫停,並顯示列出兩台主機的警示。
網路的允許清單
把 Unmatched traffic 設為 Deny,工作不需要的每一台主機都會在 Mac 上、針對所有協定被拒絕。
從第一天起就有紀錄
Security Timeline 會把每一次替換、封鎖和拒絕保存 90 天,已註冊的 Mac 也會把同樣的事件傳給組織。
交給代理的是工作,不是你的登入
開發者會繼續把存取權交給代理,因為代理需要它才能完成工作。把存取權給代理,把密鑰留在 Mac 上,並決定它可以和哪些主機通訊。
在 Bromure Agentic Coding 中,這就是預設:把憑證加到機器上,把防火牆限定在工作需要的主機,讓寫入保持在 Prompt before write,並讓 Security Timeline 保存紀錄。
另一個代理的資料落到沒人選擇的伺服器上的案例,請閱讀代理的紀錄存在他們的雲端。攻擊者進入開發者的筆電後能觸及什麼,請閱讀筆電就是入口。