こんにちは!我是哥倫比亞大學博士課程、研究 AI 與資安的 Koukyosyumei。
那麼,我想大多數讀者都是使用 Claude Code 或 Codex 來開發的吧;大家對於「AI agent 在執行 shell 指令或網路存取時,是如何確認安全性」這件事,理解到什麼程度呢?
Agent 雖然能自動完成各種工作,但也可能不小心刪除檔案、把機密資訊傳送到外部,或執行會大量消耗 CPU 資源的低效率程式。
當然,Claude Code 和 Codex 都內建了用來安全執行 agent 的 sandbox 機制。此外,像是 h5i 和 docker-agent 這類更高性能、面向 agent 的 sandbox 也逐漸受到關注。
本文將解說 Claude Code 與 Codex 內建 sandbox 功能的運作方式,並進一步說明更高性能的 sandbox——h5i 的簡單使用方法。
Claude Code 可以將 OS 層級的沙盒功能(Bubblewrap、socat、seccomp 等等)套用到 Bash Tool 上。至於 Read、Write、WebFetch 等其他工具,則透過適時向使用者確認的 permission model 來確保安全性。
這些沙盒設定可以在 settings.json 的 sandbox block 中決定,並能針對各個 Bash Tool 設定允許的指令、排除的指令、是否可存取網路、憑證的處理方式等。
{
"sandbox": {
"enabled": true,
"network": {
"tlsTerminate": {},
"allowedDomains": ["*.github.com", "registry.npmjs.org"]
},
"credentials": {
"envVars": [
{ "name": "GH_TOKEN", "mode": "mask", "injectHosts": ["api.github.com"] },
{ "name": "NPM_TOKEN", "mode": "mask" }
]
}
}
}
另外,也可以在 permissions block 中,針對各工具靜態定義 allow / ask / deny 規則。
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"Bash(git * main)",
"Bash(* --version)",
"Bash(* --help *)"
],
"deny": [
"Bash(git push *)"
]
}
}
在 Codex 中,會結合兩種原則:決定「允許什麼」的 sandbox policy,以及決定「要向誰詢問」的 approval policy,並使用 OS 層級的沙盒來執行所有指令。
sandbox policy 提供以下三種模式:
approval policy 例如有以下三種選項:
h5i 是一套可用更高自由度設定更廣範圍的沙盒工具。Claude Code 和 Codex 基本上是專注於判斷個別指令是否可執行,而 h5i 則是分離工作環境本身。
具體來說,透過 h5i env 指令,可以建立一個在 OS 層級沙盒中隔離的專用 Git worktree。除了 Claude Code 和 Codex 所具備的系統呼叫層級限制與資料夾存取限制之外,還能設定記憶體、程序數量等資源限制。此外,也能彈性設定以網域為單位的存取允許與否,以及憑證在不同環境之間的分離等。
安裝
curl -fsSL https://raw.githubusercontent.com/h5i-dev/h5i/main/install.sh | sh
初始化
h5i init
h5i hook setup --write --wrap-bash
建立沙盒環境
h5i env create claude-env --profile agent-claude
h5i env shell claude-env
box$ claude --dangerously-skip-permissions
box$ exit
h5i env diff claude-env # 檢查環境內的變更
h5i env propose claude-env # 提出環境內的變更
h5i env apply claude-env # 將提議的變更套用回原始分支
h5i env 的預設模式 supervised 模式,不使用像 docker 這類較重的容器,而是透過結合系統呼叫監控與 namespace 設定來實現輕量級的沙盒環境,因此只要約 0.2~3 秒就能進入沙盒內的 shell。
在這個環境中,即使 agent 因為提示注入攻擊、幻覺或其他原因而誤作動,也能避免對原始環境造成破壞性變更,或防止機密資訊外洩等事故。此外,h5i 以「可稽核的工作區」為標語,環境內執行過的指令、其結果、使用者提供的提示等都會被完整記錄,之後也可以加以驗證。
原文出處:https://qiita.com/Koukyosyumei/items/3bd4696237ea64c38971