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

代理的紀錄存在他們的雲端

Warp 揭露,攻擊者入侵 Warp 基礎架構中的一家協力廠商,竊取了約 1% 使用者的代理追蹤紀錄與遙測資料;其執行長表示,入侵者是用一群 AI 代理辦到的。代理追蹤紀錄記下代理讀了什麼、執行了什麼、看到了什麼,因此可能包含程式碼、指令輸出與機密。在 Bromure Agentic Coding 中,代理的追蹤紀錄在你的 Mac 上寫入並加密,代理經手的每一個機密都是替身,哪些主機能收到任何東西,由你決定。

代理追蹤紀錄,記下了代理讀過、執行過、看過的一切。Warp 的追蹤紀錄放在一家協力廠商那裡,而 10 月 23 日,有人闖進了那家廠商。

10 月 23 日星期五,Warp 察覺到其創辦人兼執行長 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 日遭入侵據執行長說是一群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 外洩事件,請讀〈金鑰就放在他們的主控台裡〉。