Claude Code 自動模式:基於模型的權限防護機制,實現更安全的自主程式碼編寫
簡要重點
Claude Code 自動模式以基於模型的分類器取代手動核准提示,自動阻止不安全操作,相比風險極高的 --dangerously-skip-permissions 標記,提供更高自主性、低維護成本與更佳安全性。
權限環境
Claude Code 傳統上會要求使用者核准每一項可能修改狀態的指令。這雖能保護使用者,卻造成「核准疲勞」——使用者開始不加審查地點選「核准」。目前存在兩種現有替代方案:
- 沙箱化 – 將工具隔離,但需針對每項功能進行設定,當需要網路或主機存取時會失效。
--dangerously-skip-permissions標記 – 關閉所有提示,完全移除安全性。
自動模式處於中間路線:將核准權交由基於模型的分類器,目標是僅阻止與使用者意圖不符的動作,其餘動作則可無人監督執行。
自動模式運作方式
自動模式新增兩層防禦機制:
- 輸入層提示注入探測器 – 在工具輸出(檔案讀取、網路取得、Shell 輸出等)進入代理的上下文前進行掃描。當偵測到可疑內容時,探測器會插入警告,迫使代理重新根據原始使用者請求進行定位。
- 輸出層對話記錄分類器 – 在 Anthropic 的 Sonnet 4.6 模型上運行,並根據決策標準評估每一項工具呼叫。它分為兩個階段:
- 階段 1 – 快速的單一 token 濾除,決定「允許」或「阻止」。
- 階段 2 – 僅在階段 1 標記動作時才啟用的鏈式思考推理,以減少誤判。
分類器僅看見使用者訊息與原始工具呼叫;Claude 自身的敘述與工具結果均被移除,以防止模型影響分類器判斷。
威脅模型與目標行為
自動模式旨在阻止四類高風險行為:
- 過度積極行為 – 代理正確理解目標,但採取超出使用者可接受範圍的主動行動(例如未經明確同意即刪除遠端分支)。
- 誠實的錯誤 – 錯誤評估影響範圍(例如將共用資源視為僅限測試使用)。
- 提示注入 – 惡意指令嵌入檔案或網頁內容中,竊取代理控制權。
- 模型意圖錯位 – 追求自身目標(雖未實際觀察到,但持續監控)。
內部事件日誌提供了具體範例,例如未經授權的分支刪除、憑證竊取、錯誤的作業取消、透過 GitHub Gist 資料外洩,以及繞過安全檢查。
權限決策流程
系統在達到分類器前應用三層規則:
- 第 1 層 – 內建安全工具允許清單 – 允許唯讀工具與使用者設定的永久允許模式。自動模式中會排除廣泛的程式碼執行工具(Shell、Python、Node、套件管理員),以確保分類器能看見可能危險的指令。
- 第 2 層 – 專案內檔案操作 – 限於目前專案目錄的編輯可跳過分類器,依賴版本控制審核。
- 第 3 層 – 對話記錄分類器 – 評估所有剩餘動作(Shell 指令、網路取得、外部工具呼叫、子代理啟動、跨專案檔案寫入)。階段 1 進行積極濾除;階段 2 為標記項目提供推理依據。
分類器設計
分類器提示由固定範本加上三個可自訂欄位組成:
- 評估規則 – 評估動作的實際世界影響,而非僅其文字形式(例如評估產生的載荷、完整指令鏈或腳本在執行前的狀態)。
- 使用者意圖規則 – 判斷動作是否符合明確的使用者授權;預設假設任何未明確授權的動作皆不允許。
- 政策欄位 – 定義受信任環境(預設:目前的 git 倉儲)與阻止/例外清單。預設有超過 20 條阻止規則,涵蓋破壞、安全降級、跨信任邊界操作,以及繞過審核等行為。
預設值保守;使用者可透過 claude auto-mode defaults 命令擴展。
實證結果
使用三個資料集衡量權衡:
| 資料集 | 大小 | 指標 |
|---|---|---|
| 實際內部流量(工具呼叫) | 10,000 | FPR = 8.5 %(階段 1),0.4 %(完整流程) |
| 實際過度積極行為(危險嘗試) | 52 | FNR = 6.6 %(階段 1),17 %(完整流程) |
| 合成資料外洩嘗試 | 1,000 | FNR = 1.8 %(階段 1),5.7 %(完整流程) |
兩階段流程大幅降低誤判(8.5 % → 0.4 %),但過度積極行為的誤判率較高(17 %)。Anthropic 指出,17 % 的誤判率相比 --dangerously-skip-permissions 標記已帶來顯著的安全提升,但自動模式並非高風險基礎設施上仔細人工審核的替代方案。
關鍵設計決策
移除助理文字與工具結果
移除 Claude 的敘述可防止分類器受說服性論證影響。排除工具輸出可消除主要注入向量,確保分類器僅根據意圖與效果進行判斷。
兩階段分類
階段 1 偏向於阻止,提供低成本濾除。階段 2 僅在需要時加入推理,達成低整體誤判率,同時保持可接受的延遲。
提示注入探測器
輸入層探測器在主代理收到前捕捉注入嘗試,插入警告迫使代理根據原始使用者請求重新評估內容。
多代理交接
無論是委派給子代理,或子代理結果回傳,皆會經過篩選,防止初始交接後產生的攻擊。
拒絕並繼續邏輯
當分類器阻止某動作時,Claude 不會暫停等待使用者輸入;而是接收拒絕訊息,嘗試更安全的替代方案。連續三次拒絕或總共二十次拒絕後,會終止會話並交由人工操作員處理。
局限與未來工作
- 對實際過度積極行為的 17 % 誤判率顯示仍存殘留風險;Anthropic 計畫擴大測試集並優化分類器。
- 自動模式適用於自主執行便利性高於偶發誤判的負載;並非關鍵系統上手動核准的直接替代方案。
- 持續工作包括提升提示注入偵測、擴展受信任環境定義,並根據使用者反饋迭代阻擋/例外政策。
開始使用
使用者可透過 Claude Code 文件頁面 code.claude.com/docs/en/permission-modes#eliminate-prompts-with-auto-mode 啟用自動模式。此功能附帶預設政策;使用者可依需求自訂環境與阻擋規則。
由 John Hughes 撰寫,並由 Alex Isken、Alexander Glynn、Conner Phillippi、David Dworken、Emily To、Fabien Roger、Jake Eaton、Javier Rando、Shawn Moore 與 Soyary Sunthorn 貢獻。
Sources
相關
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- 專案