Windows에서 Codex를 지원하는 안전하고 효과적인 sandbox 구축
OpenAI가 Windows용 Codex를 위해 관리자 권한 sandbox를 구축했다.
Windows용 Codex는 처음엔 제대로 된 sandbox가 없어, 사용자가 거의 모든 명령을 승인하거나 Full Access를 켜야 했다. OpenAI는 Windows에서도 안전성과 유용성을 함께 확보하기 위해 자체 sandbox를 설계했다.
먼저 AppContainer, Windows Sandbox, **Mandatory Integrity Control(MIC)**를 검토했지만 모두 맞지 않았다.
- AppContainer는 개방형 개발 워크플로처럼 shell, Git, Python, 패키지 매니저를 두루 다뤄야 하는 Codex에 비해 너무 좁았다.
- Windows Sandbox는 격리 자체는 강했지만, 실제 체크아웃과 로컬 도구를 그대로 써야 하는 Codex와 맞지 않았고 Windows Home SKU에서도 사용할 수 없었다.
- MIC는 워크스페이스를 low-integrity로 바꿔 버려, Codex만이 아니라 다른 low-integrity 프로세스까지 그 공간에 쓸 수 있게 만드는 문제가 있었다.
첫 번째 프로토타입인 unelevated sandbox는 SID와 write-restricted token으로 쓰기 범위를 제어했다. sandbox-write라는 synthetic SID를 만들고, cwd와 추가 writable_roots에는 쓰기·실행·삭제 권한을 줬으며, /.git, /.codex, /.agents 같은 영역은 같은 SID에 대해 쓰기를 막았다. 실행은 Everyone, 현재 로그온 SID, sandbox-write를 restricted SID 목록에 둔 토큰으로 수행했다.
네트워크는 환경변수와 denybin으로 우회 경로를 막는 방식이었다. HTTPS_PROXY, ALL_PROXY, GIT_HTTPS_PROXY, NO_PROXY, GIT_SSH_COMMAND를 조정하고 PATH와 PATHEXT를 손봤지만, 이 방식은 어디까지나 advisory 수준이라 소켓을 직접 여는 프로그램까지 막지는 못했다.
네트워크를 제대로 막으려면 Windows Firewall이 필요했지만, restricted token의 non-principal identity에는 규칙을 붙일 수 없었다. 결국 Codex는 관리자 권한이 필요한 elevated sandbox로 재설계됐다.
최종 설계는 setup과 실행을 분리한다.
- setup binary가 synthetic SID를 만들고,
CodexSandboxOffline과CodexSandboxOnline로컬 사용자를 생성하며, 자격 증명은 DPAPI로 암호화해 sandbox 사용자가 읽을 수 없는 곳에 저장한다. CodexSandboxOffline에는 outbound firewall rule을 걸어 네트워크를 차단하고, 필요하면 규칙이 올바른지 검증한다.- sandbox user는 기본적으로 다른 Windows 사용자 프로필과 시스템 디렉터리를 읽을 수 없으므로,
C:\Users\<real-user>,C:\Windows\,C:\Program Files\,C:\Program Files (x86)\,C:\ProgramData\등에 대한 read ACL을 비동기로 덧댄다.
실행 단계에서는 codex-command-runner.exe가 핵심이다. codex.exe가 CreateProcessWithLogonW(...)로 runner를 sandbox user로 띄우고, runner가 자기 토큰에서 logon SID를 읽어 CreateRestrictedToken(...)을 만든 뒤 CreateProcessAsUserW(...)로 실제 child process를 실행한다. 이때도 restricted SID list는 Everyone, Logon, Synthetic을 유지한다.
결과적으로 최종 구조는 codex.exe, codex-windows-sandbox-setup.exe, codex-command-runner.exe, child process의 4계층으로 정리됐다. OpenAI는 Windows가 안전한 자율 코딩 에이전트를 위한 단일 primitive를 주지 않았기 때문에, 여러 도구와 개념을 조합해 안전성과 실제 사용성을 함께 맞췄다고 결론짓는다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.