代理安全的參考架構,以及 Bromure 如何對應它
來自 Docker、Keycard、Barclays、Socket 和 Secure Theory 的工程師發表了 The Secure Software Factory,一套以 Agent Baseline 控制項為基礎、讓編碼代理安全執行的參考架構。這是一個好的開始,我們也樂見其成。以下說明 Bromure Agentic Coding 如何涵蓋它的四道邊界,以及在觀察與回應上走得更遠的地方。
10 月 13 日,一群工程師發表了 The Secure Software Factory,這是一套參考架構,對象是讓編碼代理撰寫、測試和交付程式碼的組織。起草者包括 Eli Aleyner、Ranti Familusi 和 William Manning(Docker)、Allie Howe 和 Ian Livingstone(Keycard)、Andy McMahon(Barclays)、Ahmad Nassri(Socket),以及 Aaron Stanley(Secure Theory)。它以 Agent Baseline 為基礎,那是一套分成六個成果類別的 35 個控制項,由 Keycard 召集 Docker 和 Snyk 的工程師共同制定。
我們很高興看到它。這是一份公開、有版本編號的草案,控制項識別碼穩定不變,以 CC BY 4.0 授權,在 GitHub 上開放意見,並打算在成熟後捐贈給一個社群組織。廠商和向他們採購的團隊,現在可以指著同一套控制項對話。
這套架構要求什麼
它的核心概念一句話就說得完:「代理提議,政策授權,基礎設施執行。」代理被視為不可信任,不論它是搞混了、被它讀到的內容操弄,還是被人接管,所以它的限制必須在它自己的決定之外執行。這份文件劃出四道邊界:
- 沙箱:代理的程式碼只在一個它無法更改、也無法逃脫的隔離沙箱裡執行。
- 網路:「除了代理無法重新設定或繞過的路徑之外,什麼都進不來,也出不去。」
- 供應鏈:元件只來自核准的來源,進入沙箱的任何東西都不帶憑證。
- 身分與存取:代理只使用為其任務授予的存取權,從不持有憑證,高影響的動作需要一個它自己無法給出的核准。
這些邊界適用於三個自主層級:開發者操控一個代理(第 1 級)、一個工作流程把代理當成共用服務來執行(第 2 級),以及一個協調代理決定下一步要做什麼(第 3 級)。圍繞它們的,是一個能停下任何代理的執行層,以及一份任何代理都碰不到的稽核紀錄。
它以真實事件為根據。其中一起,一個執行預備環境任務的編碼代理在一個無關的檔案裡找到一個 API 權杖,並在九秒內用它刪除了一個正式環境的資料庫。在 Shai-Hulud 蠕蟲事件中,惡意套件蒐集了安裝它們的機器上找得到的所有憑證。
Bromure 如何涵蓋四道邊界
Bromure Agentic Coding 在你的 Mac 上執行,把每個代理工作區放進各自的 Linux VM。以下是兩者的對應。
| 邊界 | 架構的要求 | Bromure |
|---|---|---|
| 沙箱 | 依風險調整隔離程度,最高到擁有自己核心的 microVM;不能存取主機;測試在同樣的隔離中執行;可隨時停止,並保留狀態作為證據 | 每個工作區一台完整的 Linux VM,有自己的核心,也有自己用來跑測試的 Docker。搭配 OpenShell 政策時,Landlock 和 seccomp 會在 VM 裡限制代理。機器可以暫停,儲存以供調查會在清除之前匯出它的磁碟 |
| 網路 | 所有流量都經過一個在網路層強制執行、而非靠代理伺服器設定的對外代理伺服器;逐一操作執行 | Mac 的虛擬交換器檢查每一條連線,即使某個工具忽略代理伺服器設定,也會把網頁流量導入 Bromure 的代理伺服器。規則可以限制 HTTP 方法;搭配 OpenShell 政策時,還能限制路徑,以及 MCP、GraphQL 和 WebSocket 操作 |
| 供應鏈 | 套件只經由單一准入點取得;新版本必須等過冷卻期;進入沙箱的任何東西都不帶憑證 | 來自八個生態系的安裝都經過 Bromure 的檢查:新版本預設有兩天的版本年齡門檻,另可選用 OSV 和 socket.dev 查詢。沒有判定結果的套件會被暫緩,等你決定 |
| 身分與存取 | 代理從不持有憑證;憑證在代理伺服器才附加上去;高影響的動作需要核准 | VM 裡永遠只有替身權杖;代理伺服器會為正確的主機換上真正的權杖。SSH 金鑰留在 Mac 上,AWS 請求在 VM 外重新簽章。像 git push 這樣的寫入可以要求按一下確認,代理的分支也只有在你核准後才會合併 |
對這類事件來說,憑證邊界最為關鍵。一個 Shai-Hulud 套件在 Bromure VM 裡蒐集憑證,只會找到替身權杖,而它們在 Bromure 的代理伺服器之外毫無用處。(其中一位作者任職的 Socket,也是 Bromure 可以使用的套件檢查之一。)
自主層級也對應得上。開發者在工作階段中執行代理,屬於第 1 級。自動化依排程啟動代理,或在 GitHub 拉取請求、Linear 議題出現時啟動代理,每一次都在全新的 git worktree 裡、也可以選擇在機器的一份可拋棄複製中執行,這屬於第 2 級。代理把工作委派給其他代理,每一則訊息都由主機轉送、篩檢提示注入並記錄下來,這是第 3 級的起點。
Bromure 走得更遠的地方
這份草案對自己的弱點相當坦白。它的來源聲明指出,在六個成果類別中,Discover、Observe 和 Respond「不是任何一個召集組織所販售的」,因此「相應地發展較不成熟」,並稱這種不對稱是「一個缺陷」。它也指出,以這套基準自己的標準來看,三家召集公司沒有一家是完整的實作。把這種話白紙黑字寫下來,是少見的誠實。
Observe 和 Respond 正是我們投入最多心力的地方:
- 從核心內部監看。架構要求沙箱執行環境記錄處理程序、檔案和網路活動。Bromure 的核心哨兵在客體核心內部做這件事,並透過一個 VM 裡的 root 關不掉的通道串流到 Mac。任何讓它噤聲的企圖都算竄改。
- 從意圖到結果。Agent Baseline 的控制項 OBS-05 要求提供證據,把代理想做的事和它實際做的事連起來。Bromure 的溯源鏈把每一條連線,經由開啟它的處理程序,一路追溯到代理的工具呼叫,以及模型為那次呼叫給出的推理。當某個相依套件的安裝腳本試圖把資料送出去,你會看到執行它的那次安裝,以及代理為什麼執行那次安裝。
- 篩檢輸入。架構把代理讀到的一切都視為不可信任。Bromure 可以在你的 Mac 上掃描工具結果和
CLAUDE.md這類規則檔是否有提示注入、篩檢代理之間的每一則訊息,而且在自動化採取行動之前,一律篩檢 GitHub 或 Linear 事件的文字。 - 送去推論的資料。Bromure 的個人資料保護會在請求抵達雲端模型之前,把姓名、電子郵件、帳號和類似的資料換成替身,並在回應中還原。
- 保留證據的回應。當 Bromure 發現憑證流向不該去的地方,它會暫停 VM。你可以把它關機,或儲存它的磁碟以供調查;之後這台機器在被清除之前會拒絕開機。搭配 OpenShell 政策時,一連串被拒絕的操作會隔離工作區:切斷網路、暫停 VM。
- 碰不到的追蹤紀錄。每台機器的模型請求、工具呼叫、命令和檔案活動的追蹤紀錄,都加密儲存在 Mac 上,位於 VM 之外。
還有一個差別在於執行的地方。這套架構是為工廠而寫的,而第 1 級,也就是開發者搭配本機代理的情境,只占了幾段篇幅。但如今大多數代理正是在那裡執行。Bromure 把四道邊界放到那位開發者的 Mac 上,不需要架設任何基礎設施,而且免費、開源。
一個好的開始
The Secure Software Factory 是第 1 版,開放意見:對自己的主張謹慎,對哪些公司的產品塑造了它也很誠實。它的議題追蹤器對任何人開放,而我們認為,關於觀察與回應的章節,是最有待補寫的部分。
有更多公司公開投入代理安全,並使用穩定的控制項識別碼,對每一個執行代理的人都是好事。