跳到主要內容

透過沙箱技術讓 Claude Code 更安全自主

Claude Code 的新沙箱功能——一個 bash 工具和網頁版 Claude Code——透過啟用檔案系統和網路隔離這兩大邊界,減少了權限提示並提升了使用者安全。

在 Claude Code 中,Claude 會與您一起編寫、測試和偵錯程式碼,瀏覽您的程式碼庫、編輯多個檔案,並執行指令來驗證其工作。給予 Claude 如此多對您的程式碼庫和檔案的存取權限可能會帶來風險,尤其是在提示注入(prompt injection)的情況下。

為了解決這個問題,我們在 Claude Code 中引入了兩項基於沙箱技術的新功能,兩者都旨在為開發者提供一個更安全的工作環境,同時也讓 Claude 能夠更自主地運行,並減少權限提示。在我們的內部使用中,我們發現沙箱技術安全地減少了 84% 的權限提示。透過定義 Claude 可以自由工作的既定邊界,它們提升了安全性與自主性。

確保 Claude Code 使用者的安全

Claude Code 在一個基於權限的模型上運行:預設情況下,它是唯讀的,這意味著它在進行修改或執行任何指令之前都會請求許可。但也有一些例外:我們會自動允許像 echocat 這樣的安全指令,但大多數操作仍需要明確批准。

不斷點擊「批准」會減慢開發週期,並可能導致「批准疲勞」(approval fatigue),使得使用者可能不會密切注意他們批准的內容,進而降低了開發的安全性。

為了解決這個問題,我們為 Claude Code 推出了沙箱技術。

沙箱技術:一個更安全、更自主的方法

沙箱技術創造了預先定義的邊界,Claude 可以在其中更自由地工作,而不需要為每個動作都請求許可。啟用沙箱後,您會收到大幅減少的權限提示,並獲得更高的安全性。

我們的沙箱方法建立在作業系統層級的功能之上,以啟用兩個邊界:

  1. 檔案系統隔離:確保 Claude 只能存取或修改特定的目錄。這在防止被提示注入的 Claude 修改敏感的系統檔案方面尤為重要。

  2. 網路隔離:確保 Claude 只能連接到經批准的伺服器。這可以防止被提示注入的 Claude 洩露敏感資訊或下載惡意軟體。

值得注意的是,有效的沙箱技術需要同時具備檔案系統和網路隔離。如果沒有網路隔離,一個被入侵的代理(agent)可能會竊取像 SSH 金鑰這樣的敏感檔案;如果沒有檔案系統隔離,被入侵的代理可能輕易逃離沙箱並取得網路存取權限。正是透過同時使用這兩種技術,我們才能為 Claude Code 使用者提供更安全、更快速的代理體驗。

Claude Code 中的兩項新沙箱功能

沙箱化的 Bash 工具:無需權限提示的安全 bash 執行

我們正在引入一個新的沙箱執行環境(runtime),目前作為研究預覽版(beta)提供,它讓您可以精確定義您的代理可以存取哪些目錄和網路主機,而無需啟動和管理容器的開銷。這可以用於沙箱化任意進程、代理和 MCP 伺服器。它也作為一個開源研究預覽版提供。

在 Claude Code 中,我們使用這個執行環境來沙箱化 bash 工具,這允許 Claude 在您設定的定義限制內執行指令。在安全的沙箱內部,Claude 可以更自主地運行,並安全地執行指令,而無需權限提示。如果 Claude 試圖存取沙箱之外的內容,您會立即收到通知,並可以選擇是否允許。

我們將此功能建立在作業系統層級的原生功能之上,例如 Linux 的 bubblewrap 和 MacOS 的 seatbelt,以在作業系統層級強制執行這些限制。它們不僅涵蓋了 Claude Code 的直接互動,還包括由該指令產生的任何腳本、程式或子進程。如上所述,這個沙箱同時強制執行:

  • 檔案系統隔離:允許對當前工作目錄的讀取和寫入存取,但阻止修改其之外的任何檔案。

  • 網路隔離:僅允許透過連接到沙箱外部運行的代理伺服器的 unix 網域通訊端(socket)進行網路存取。此代理伺服器會強制執行對進程可以連接的網域的限制,並處理使用者對新請求網域的確認。如果您希望進一步提高安全性,我們還支援自訂此代理以對傳出的流量強制執行任意規則。

這兩個組件都是可配置的:您可以輕鬆選擇允許或不允許特定的檔案路徑或網域。

[圖片說明] 這張圖示說明了 Claude Code 中的沙箱如何運作。Claude Code 的沙箱架構透過檔案系統和網路控制來隔離程式碼執行,自動允許安全操作,阻止惡意操作,並僅在需要時才請求權限。

沙箱技術確保了即使是成功的提示注入也會被完全隔離,無法影響使用者的整體安全。這樣一來,一個被入侵的 Claude Code 也無法竊取您的 SSH 金鑰,或「打電話回家」給攻擊者的伺服器。

要開始使用此功能,請在 Claude Code 中運行 /sandbox,並查看有關我們安全模型的更多技術細節。

為了讓其他團隊更容易地建立更安全的代理,我們已經將此功能開源。我們相信其他人也應該考慮為他們自己的代理採用這項技術,以增強其代理的安全態勢。

在雲端安全運行 Claude Code

今天,我們也發布了網頁版 Claude Code(Claude Code on the web),讓使用者可以在雲端的隔離沙箱中運行 Claude Code。網頁版 Claude Code 會在一個隔離的沙箱中執行每個 Claude Code 會話(session),使其能夠以安全可靠的方式完全存取其伺服器。我們設計這個沙箱是為了確保敏感的憑證(例如 git 憑證或簽署金鑰)永遠不會與 Claude Code 一起出現在沙箱內部。這樣,即使在沙箱中運行的程式碼遭到入侵,使用者也能免受進一步的傷害。

網頁版 Claude Code 使用一個自訂的代理服務,該服務透明地處理所有 git 互動。在沙箱內部,git 客戶端使用一個特製的、範圍受限的憑證向該服務進行身份驗證。代理會驗證此憑證和 git 互動的內容(例如,確保它只推送到配置的分支),然後在將請求發送到 GitHub 之前附加正確的身份驗證權杖。

[圖片說明] 這張圖示描繪了網頁版 Claude Code 如何使用自訂代理來處理所有 Claude Code 的 Git 整合,透過一個安全代理來路由指令,該代理會驗證身份驗證權杖、分支名稱和儲存庫目的地——在允許安全的版本控制工作流程的同時,防止未經授權的推送。

開始使用

我們新的沙箱化 bash 工具和網頁版 Claude Code,為使用 Claude 進行工程工作的開發者在安全性和生產力方面提供了實質性的改進。

要開始使用这些工具:

  1. 在 Claude 中運行 /sandbox 並查看我們的文件,了解如何配置此沙箱。

  2. 前往 claude.com/code 試用網頁版 Claude Code。

  3. 或者,如果您正在建立自己的代理,請查看我們開源的沙箱程式碼,並考慮將其整合到您的工作中。我們期待看到您的成果。

Source: 

https://www.anthropic.com/engineering/claude-code-sandboxing

留言

這個網誌中的熱門文章

[CSS] z-index 在不同瀏覽器繼承問題

今天會討論到這個課題,是因為要實做一個Popup dialog,所以我們希望的結果如下圖。 可是在IE7 卻發生了這樣的情況。 Popup不論怎麼設定z-index都無法浮在最上層,我們看一下html架構發生什麼事情。

[教學] 快快樂樂刪除CodeIgniter index.php

預設的CI網址預設都設定為index.php同一層級,因此所有的程式都必須指定index.php導向才能開始,例如 http://localhost/ci/index.php/welcome/test http://localhost/ci/welcome/test 本文將說明如何將惱人的index.php消除,還你一個漂亮的URL。 設定開始: 接下來說明如何使用rewrite方式將惱人的index.php去除。 rewrite不清楚的人,煩請先自行google 首先要先確定Apache的 mod_rewrite 有 開啟 ,如果沒有開啟請設定好之後重新啟動apache。 接著,在根目錄底下建立一個新檔案,檔名為 .htaccess ,裡面程式碼如下: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] </IfModule> 接著到 application/config/config.php ,開啟檔案修改 $config['index_page'] = ""; 注意: /index.php/$1 要根據你目錄,例如 http://localhost/index.php ,網站根目錄為 /ci/index.php 則要寫成 /ci/index.php/$1 接著至CI目錄下,尋找 config\config.php , 修改一下裡面的檔案,修改如下: $config['index_page'] = ""; 存檔後,如此一來大功告成。 參考資料 官方網站說明

[教學] Mojito 安裝與入門,install mojito for beginner.

mojito ,最近終於從 YDN 對外公開此專案,這個套件主要用於解決前端多重裝置及瀏覽器端的問題,後端服務採取 node.js ,因此使用上必定要先準備以下幾個元素 準備素材 c++ complier git Node.js > 0.4.x NPM > 1.0.x 安裝方式 git clone git://github.com/yahoo/mojito.git cd mojito/source sudo npm install -g . npm install . 以上四個簡單的步驟,就可以把 mojito module 完整安裝到服務器上,接著就可以開始進入 mojito 的世界 使用方式 mojito 提供了完整的 command line 給開發者使用,接著先建立一個基本 hello world 專案,跟著以下步驟完成第一個專案。首先建立一個 mojito application, mojito create app hello cd hello 切換到目錄之後,再接著建立自己的 mojit,這邊的 mojit 就像是一個應用(application)可能會包含許多個獨立網站體,擁有獨立架構的 MVC ,包含內部設定等,詳細資料可以參考官方的 說明 ,建立 mojit mojito create mojit HelloMojit 輸入指令後,會看到顯示結果如下, creating mojit called 'HelloMojit' (using "default" archetype) ✔ mojit: HelloMojit created! ✔ mojito done. 接著修改 application.json 這個 mojit 設定檔案,讓剛才新建立的 hellp application 指定底下有一個 mojit -> HelloMojit ,讓應用可以去執行 mojit controller ,修改如下, [ { "settings": [ "master" ], "appPort": 8666, "specs": { ...