在 Windows 上構建安全且高效的沙盒以啟用 Codex
OpenAI 為 Windows 上的 Codex 開發了自訂沙盒實作,以消除使用者在低效的手動指令批准與不受限制的「完整存取」模式之間的兩難選擇。此沙盒允許 Codex 廣泛讀取檔案,同時將寫入權限限制於特定工作區,並阻止未授權的網路存取,使 Windows 體驗在安全性與可用性上與 macOS 與 Linux 上的 Codex 相當。
為何現有的 Windows 隔離工具不足
OpenAI 評估了多種原生 Windows 隔離原語,但發現它們與開發者工作流程的開放性(包括 shell、Git、Python 以及各種建置工具)不相容。
- AppContainer:雖然提供了強大的作業系統邊界,但它是為高度受限的應用程式設計,對於程式碼代理需要執行的各種二進位檔而言過於限制。
- Windows Sandbox:此輕量級虛擬機提供強大的隔離,但不適用,因為 Codex 必須在使用者實際的本機檢出與環境中運作,而非一次性客體作業系統。此外,Windows Home 版無法使用此功能。
- Mandatory Integrity Control (MIC):使用低完整性標記被認為風險過高,因為將工作區標記為低完整性會使其成為主機上任何低完整性程序的「匯流」點,而非僅對沙盒授予目標存取權限。
「非提升」沙盒原型
第一個原型專注於在不具備管理員權限(非提升)的情況下執行,利用安全識別碼(SID)與寫入受限的權杖來管理檔案系統存取。
檔案系統寫入限制
為了控制 Codex 可修改檔案的位置,團隊結合了合成 SID 與寫入受限的權杖:
- Synthetic SIDs:建立了自訂的
sandbox-writeSID,以在存取控制清單(ACL)中定義權限,且不會干擾其他系統使用者。 - Write-Restricted Tokens:此類權杖在寫入操作成功前需通過兩項檢查:必須允許一般使用者身分,且權杖受限清單中的至少一個 SID(包括
sandbox-writeSID)也必須被授予存取權限。
這使得 Codex 能取得對目前工作目錄與設定的 writable_roots 的寫入/執行/刪除權限,同時明確拒絕存取如 .git、.codex 與 .agents 等敏感資料夾。
網路存取限制
由於原型是非提升的,無法使用 Windows 防火牆。相反地,它依賴「建議性」限制,例如污染環境變數(HTTPS_PROXY、GIT_HTTPS_PROXY)以及在 PATH 前置 denybin 目錄以攔截 SSH 與 SCP 呼叫。此方法被發現過於薄弱,因為程序可以輕易繞過環境變數或直接開啟 socket。
最終「提升」沙盒架構
為了實現穩健的網路抑制,OpenAI 轉向「提升沙盒」,在設定期間需要管理員權限以實作防火牆規則與專屬系統使用者。
設定與權限
codex-windows-sandbox-setup.exe 可執行檔負責提升的設定:
- User Creation:建立兩個本機使用者:
CodexSandboxOffline(受防火牆規則阻擋)與CodexSandboxOnline(未受阻擋)。 - Credential Management:使用 Windows 資料保護 API(DPAPI)加密使用者憑證。
- Firewall Rules:完全阻止
CodexSandboxOffline使用者的外部網路存取。 - Read ACLs:由於沙盒使用者與真實使用者不同,設定會非同步授予對關鍵目錄(例如
C:\Users\<real-user>、C:\Windows\、C:\Program Files\)的讀取/執行權限,以確保代理仍能讀取必要檔案。
指令執行流程
受限於 Windows 權限邊界,codex.exe 無法直接以不同使用者且帶受限權杖的方式產生程序。因此必須引入 codex-command-runner.exe 來分割執行流程:
- Initiation:
codex.exe使用CreateProcessWithLogonW以指定的沙盒使用者啟動codex-command-runner.exe。 - Restriction:在 runner 內,程序開啟自身的權杖,使用
CreateRestrictedToken建立受限權杖,然後使用CreateProcessAsUserW啟動最終的子程序(例如 Python 腳本或 Git 指令)。
沙盒元件堆疊概覽
最終架構由四個不同層級組成,以在安全性與開發者生產力之間取得平衡:
codex.exe:主要的非提升主控程式。codex-windows-sandbox-setup.exe:負責提升設定、使用者建立與防火牆配置。codex-command-runner.exe:鑄造受限權杖,並以沙盒使用者身分產生最終子程序。- The Child Process:代理在受限權限下執行的實際指令。
SUMMARY: OpenAI 為 Windows 上的 Codex 實作了自訂沙盒,提供安全、受限的程式碼代理執行環境,無需對每個指令持續取得使用者批准。
TITLE: 在 Windows 上構建安全且高效的沙盒以啟用 Codex