Anthropic의 최신 오픈소스 Sandbox Runtime (srt): 운영체제 네이티브 원시 요소(Containerless OS
요약
Anthropic이 오픈소싱한 Sandbox Runtime (srt)는 운영체제 네이티브 원시 요소를 활용하여 안전하고 경량화된 실행 환경을 제공합니다. 이 아키텍처는 파일 시스템과 네트워크를 동시에 격리하는 '이중 격리 모델'을 채택했습니다. Linux의 bwrap, macOS의 sandbox-exec 등 각 OS별 네이티브 메커니즘에 깊이 맞춰 설계되었습니다.
핵심 포인트
- 파일 시스템은 기본적으로 읽기는 허용하고 쓰기만 화이트리스트로 제한하는 비대칭적 철학을 따릅니다.
- 네트워크는 외부 연결을 차단하며, DNS Rebinding 공격 방어를 위해 커널 레벨 주소를 제거합니다.
- Linux 환경에서는 bwrap과 seccomp-bpf를 사용하여 마운트 및 시스템 호출 격리를 구현했습니다.
- Windows에서는 WFP와 NTFS의 ACE(Access Control Entry)를 결합하여 쓰기 격리 기능을 제공합니다.
Anthropic이 최근 오픈소싱한 Sandbox Runtime (srt) (코드 저장소: anthropics/sandbox-runtime)은 운영체제 네이티브 원시 요소(Containerless OS Primitives)를 활용하여 안전한 경계(security boundary)를 구축하는 경량화된 방법을 보여줍니다.
그 기반이 되는 핵심 아키텍처와 엔지니어링 트레이드오프는 다음과 같습니다:
일, 이중 격리 모델 (Dual-Isolation Architecture)
srt의 보안 모델은 효과적인 샌드박스는 파일 시스템 격리와 네트워크 격리를 동시에 결합해야 함을 명확히 합니다. 단순히 파일만 격리하는 것은 외부 명령어 실행이나 내부망 측면 탐지를 막지 못하며, 단순히 네트워크만 격리하는 것은 로컬 민감 설정 파일을 읽거나 쓰는 것을 방지할 수 없습니다.
- 파일 시스템의 '비대칭적 읽기/쓰기 설계 철학'
- 읽기 전략 (Deny-then-Allow): 기본적으로 전역 읽기를 허용합니다(시스템 라이브러리 /usr, 의존 패키지 및 공통 툴체인이 정상 작동하도록 보장). 개발자는
denyRead를 통해 민감 영역(예: ~/.ssh, ~/.aws, /Users)을 명시적으로 지정하고, 우선순위가 더 높은allowRead를 사용하여 현재 프로젝트 작업 공간만 정밀하게 허용합니다. - 쓰기 전략 (Allow-only): 기본적으로 전체 디스크 쓰기는 금지됩니다. 반드시
allowWrite를 통해 화이트리스트 방식으로 명시 개방해야 합니다(예: . 및 /tmp). 또한, 내부에서는denyWrite를 사용하여 .env 파일이나 버전 관리 잠금 파일 등을 2차로 보호합니다.
- 네트워크 아웃바운드 및 DNS 재바인딩 검증
- 기본적으로 모든 외부 네트워크 연결을 차단하며, 명시적으로 선언된 도메인(예: https://t.co/taH7i8dds6, *.npmjs.org)만 허용합니다.
- Resolved-Address 강제 확인: 전통적인 DNS Rebinding을 통한 SSRF 공격에 대응하기 위해, srt 프록이 실제 TCP 핸드셰이크를 시작하기 전에 대상 도메인을 해석하고, 커널 레벨에서 모든 루프백 주소(127.0.0.0/8), 링크 로컬 주소(169.254.0.0/16), 내부 사설망 주소 및 클라우드 호스트 메타데이터 엔드포인트(예: AWS/Azure 전용 169.254.169.254)를 제거합니다.
이, 세 가지 운영체제의 하위 커널 원시 요소 매칭 (OS Primitives Mapping)
srt는 컨테이너를 재구축하지 않고, 각 운영체제가 이미 갖춘 메커니즘에 깊이 맞춰 설계되었습니다:
- macOS:
sandbox-exec을 활용하고 동적으로 생성된 Seatbelt Profile과 결합합니다. Git 스타일의 glob 경로 와일드카드를 네이티브로 지원하며, 네트워크 계층에서는 로컬 호스트 프록시 포인트를 가리키는 소켓 연결만 허용합니다. - Linux:
bubblewrap (bwrap)에 의존하여 마운트 네임스페이스 격리를 구현합니다. 읽기 거부는tmpfs를 통해 동적으로 덮어쓰고, 쓰기 거부는 읽기 전용 Bind Mount를 통해 구현합니다. 네트워크 계층은 직접 Network Namespace를 분리하고, 오직 Unix Domain Socket을 통해서만 호스트의 socat을 경유하게 합니다. 여기에seccomp-bpf를 추가하여 권한 없는 시스템 호출 및 중첩 네임스페이스 권한 상승을 차단합니다. - Windows (Alpha): 전용 srt-sandbox 로컬 제한 사용자 + WFP (Windows Filtering Platform) 커널 레벨 출구 게이트 필터 드라이버를 채택했습니다. 여기에 NTFS의 명시적 상속 ACE(Access Control Entry)와 Write-Restricted Token을 결합하여 쓰기 격리를 구현합니다.
삼, 에이전트 생태계를 위한 엔지니어링 특성 (Engineering Features for Agent Ecosystem)
- 비침습 강화 MCP 서비스: Model Context Protocol 설정 파일(.mcp.json) 내에서 명령어 앞에 srt 접두사(예: srt npx @modelcontextprotocol/server-filesystem)만 추가하면, MCP 서비스 소스 코드를 수정할 필요 없이 샌드박싱을 완료할 수 있습니다.
- 동적 제어 버스 (--control-fd): 대화형 작업 실행 중 독립적인 파일 디스크립터를 통해 완전한 JSON 구성을 동적으로 푸시합니다. 네트워크 화이트리스트는 다음 연결 시점에 끊김 없이 적용되며, 자식 프로세스를 종료할 필요가 없습니다.
- 민감 자격 증명 마스킹 (Credential Masking): 샌드박스 내부에서 센티넬 플레이스홀더를 주입하는 것을 지원하며, 호스트 프로세스의 TLS 종료 프록시가 상위 신뢰 도메인으로 전달할 때 실시간으로 동적으로 복원합니다.
사, 한계점과 엔지니어링 경계 (Known Limitations)
객관적으로 볼 때, Beta 미리보기 버전으로서 srt는 여전히 특정 시스템 경계를 가집니다:
- macOS에서 allowAppleEvents를 활성화하면 코드 격리가 깨질 수 있습니다(AppleScript를 통해 통제되지 않은 앱 실행 가능).
- Linux에서 환경이 AppArmor에 의해 비특권 userns에 대한 강제 차단이 활성화된 경우, 커널 정책을 함께 조정해야 합니다.
- Windows 버전은 현재 Schannel 네이티브 TLS 스택 클라이언트(예: PowerShell Invoke-WebRequest)를 지원하지 않으며, 시스템 서비스 대리 트래픽(예: SMB)을 가로채지 못합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 X Claude/Anthropic의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기