Anthropic이 Claude Code의 샌드박스 bash 도구에 쓰는 운영체제 수준 샌드박스 런타임을 오픈소스로 공개했다. 이름은 sandbox-runtime(srt)이다. 컨테이너를 띄우지 않고도 프로세스가 건드릴 수 있는 디렉터리와 접속할 수 있는 네트워크 호스트를 정해 둘 수 있으며, 임의의 프로세스와 에이전트, MCP 서버를 가둘 수 있다고 Anthropic은 설명했다. 이 런타임은 베타 연구 프리뷰 단계다.1
Claude Code 안에서는 터미널에서 /sandbox를 실행해 쓴다. 매체 MarkTechPost에 따르면 srt는 npm 패키지 @anthropic-ai/sandbox-runtime(v0.0.81)로 배포되며 라이선스는 Apache-2.0, 실행에는 Node.js 22.12 이상이 필요하다. 설치는 npm install -g @anthropic-ai/sandbox-runtime으로 하고, 실행할 명령 앞에 srt를 붙이면 된다. 명령줄 도구로도, TypeScript 라이브러리로도 쓸 수 있다. Anthropic은 이 코드를 다른 팀이 더 안전한 에이전트를 만드는 데 쓰라고 오픈소스로 냈다고 밝혔다.1,2
승인 피로를 줄이려는 구조
Claude Code는 기본적으로 읽기 전용이라 파일을 고치거나 명령을 실행하기 전에 사용자의 허락을 구한다. echo나 cat 같은 안전한 명령은 자동 허용하지만 대부분의 작업은 명시적 승인이 필요하다. Anthropic은 승인을 계속 누르면 개발이 느려질 뿐 아니라, 사용자가 무엇을 승인하는지 꼼꼼히 보지 않게 되는 '승인 피로'가 생겨 오히려 안전성이 떨어진다고 설명했다.1
샌드박스는 미리 정한 경계 안에서는 Claude가 자유롭게 일하도록 하고, 경계 밖으로 나가려 할 때만 사용자에게 알린다. 사용자는 그때 허용 여부를 고른다. 권한 확인 요청이 84% 줄었다는 수치는 MarkTechPost가 Anthropic의 내부 Claude Code 사용 결과로 전한 것이다. 회사가 스스로 보고한 수치이며 외부 벤치마크가 아니라고 이 매체는 짚었다.1,2
파일과 네트워크를 함께 막는 방식
Anthropic은 파일 시스템 격리와 네트워크 격리가 둘 다 있어야 샌드박스가 효과를 낸다고 설명한다. 네트워크 격리가 없으면 탈취된 에이전트가 SSH 키 같은 민감한 파일을 밖으로 빼낼 수 있다. 파일 시스템 격리가 없으면 탈취된 에이전트가 샌드박스를 쉽게 벗어나 네트워크 접근을 얻을 수 있다. 두 경계는 프롬프트 인젝션에 당한 Claude가 시스템 파일을 고치거나 정보를 유출하거나 악성코드를 내려받는 일을 막으려는 장치다.
구현은 Linux의 bubblewrap, macOS의 seatbelt 같은 운영체제 기본 기능 위에 올라간다. 제한은 Claude Code의 직접 동작뿐 아니라 명령이 띄우는 스크립트, 프로그램, 하위 프로세스에도 적용된다. 파일은 현재 작업 디렉터리 안에서 읽기와 쓰기를 허용하고 그 밖의 수정은 막는다. 인터넷은 샌드박스 밖에서 도는 프록시 서버에 연결된 유닉스 도메인 소켓으로만 나갈 수 있다. 프록시는 접속 가능한 도메인을 제한하고 새로 요청된 도메인은 사용자에게 확인을 받는다. 더 강한 보안이 필요하면 프록시를 바꿔 나가는 트래픽에 임의의 규칙을 적용할 수도 있다. 파일 격리와 네트워크 격리 모두 설정할 수 있어서, 특정 파일 경로나 도메인을 골라 허용하거나 금지할 수 있다.1
MarkTechPost가 정리한 운영체제별 구현은 다음과 같다. 기본값은 읽기를 어디서나 허용하되 거부 목록을 두고, 쓰기는 허용한 곳 외에는 모두 막으며, 네트워크는 허용 목록에 오른 도메인만 열어 둔다.2
| 운영체제 | 구현 | 추가 요구 사항 |
|---|---|---|
| macOS | sandbox-exec와 동적으로 만든 Seatbelt 프로파일 | ripgrep |
| Linux | 네트워크 네임스페이스를 제거한 bubblewrap | socat, ripgrep |
| Windows(알파) | 전용 srt-sandbox 계정, Windows Filtering Platform 송신 차단, 명시적 파일 접근 제어 목록 | 해당 없음 |
트래픽은 호스트에서 도는 HTTP와 SOCKS5 프록시로만 나간다. Linux에서는 이 프록시가 샌드박스에 바인드 마운트된 유닉스 소켓 뒤에 있고, macOS에서는 Seatbelt 프로파일이 localhost 포트 하나만 허용한다. 프록시가 사용자의 도메인 허용·거부 목록을 적용한다.2
MCP 서버와 자체 에이전트에 적용하기
MCP 서버에 쓰려면 .mcp.json의 실행 명령을 npx에서 srt로 바꾸고 원래 명령을 인자로 넘긴다. 규칙은 ~/.srt-settings.json에 적는다. MarkTechPost가 소개한 예시는 api.github.com과 *.npmjs.org만 네트워크 허용 도메인으로 두고, ~/.ssh 읽기를 막고, 현재 디렉터리에만 쓰기를 허용하며, .env 쓰기를 막는 설정이다. 자체 에이전트에는 라이브러리의 SandboxManager를 쓴다. initialize(config)로 프록시를 시작하고 wrapWithSandbox()가 돌려주는 명령 문자열을 실행하면 된다.
허용 목록이 너무 엄격하면 npm install이 실패하고, 너무 느슨하면 보호 효과가 거의 없다. MarkTechPost는 srt가 이 중간 지점을 맞추려는 기능을 갖췄다고 소개했다. 와일드카드와 포트 지정(*.npmjs.org, api.example.com:443), 규칙이 없는 호스트를 판단하고 모델이 읽을 사유도 돌려줄 수 있는 확인 콜백, 명령 한 번에만 레지스트리를 여는 명령별 허용 목록, 명령이 도는 중에 --control-fd로 네트워크 목록을 바꾸는 실시간 갱신이 있다. 허용된 이름이 loopback이나 클라우드 메타데이터 IP로 해석되면 막는 검사도 있고, 거부한 도메인에는 HTTPS git 원격 저장소 같은 대안을 에이전트에게 알려 줄 수 있다.2
다른 샌드박스와의 비교, 한계
MarkTechPost의 비교표에 따르면 Codex CLI 샌드박스도 Seatbelt와 bubblewrap, 자체 Windows 샌드박스를 쓰는 로컬 방식이며 컨테이너나 가상 머신이 필요 없다. 다만 Codex의 샌드박스는 Codex CLI에 내장돼 있는 반면, srt는 어떤 프로세스에든 쓸 수 있다. 네트워크 기본값도 다르다. srt는 모두 거부한 뒤 프록시 허용 목록으로 연다. Codex는 workspace-write 모드에서 네트워크가 꺼져 있고 설정으로 켠다. Docker Sandboxes는 샌드박스마다 가상 머신 성격의 microVM을 쓰고, E2B는 세션마다 Firecracker microVM을 쓰며 클라우드나 자체 클라우드 계정에서 돌아간다.2
한계도 있다. Windows 지원은 알파이고 런타임 전체가 베타 연구 프리뷰다. Claude Code 공식 문서에 따르면 기본 프록시는 나가는 트래픽의 TLS를 해독하거나 검사하지 않으므로 암호화된 연결의 내용은 확인하지 않는다. 신뢰할 수 있는 도메인만 정책에 넣는 책임은 사용자에게 있다. MarkTechPost도 허용 목록의 폭이 실질적인 보안 수준을 정하며 넓은 도메인은 데이터를 샐 수 있다고 지적했다.2,3
Claude Code 문서는 Linux 구현이 강한 파일·네트워크 격리를 주지만, Docker 안에서 돌리려고 만든 enableWeakerNestedSandbox 모드는 보안을 크게 약화하므로 다른 격리가 따로 있을 때만 쓰라고 안내한다. Linux와 WSL2에서 allowNestedUserNamespaces를 true로 두면 샌드박스 명령의 코드가 샌드박스 밖에서 실행될 수 있다. macOS에서는 Apple Events가 기본으로 막혀 있는데, allowAppleEvents로 풀면 샌드박스 명령이 승인 없이 다른 앱을 샌드박스 없이 띄울 수 있다. TCP가 아닌 트래픽은 샌드박스를 나갈 수 없다. UDP, QUIC 기반 HTTP/3, ping 같은 ICMP 도구는 샌드박스 안에서 쓸 수 없고, 비HTTP 도구로 허용된 호스트에 접속할 때도 실패할 수 있다.
Linux와 WSL2에서는 bubblewrap과 socat이 필요하고, 설치 전에도 /sandbox 패널에서 빠진 항목을 볼 수 있다. macOS는 내장 Seatbelt를 쓰므로 바로 시작하면 된다. 조직 관리자는 관리형 설정으로 샌드박스를 강제하고 저장소 설정이 정책을 넓히지 못하게 막을 수 있다. 인증 정보는 마스킹도 지원한다. 샌드박스 안 명령에는 대체값만 보이고 프록시가 나가는 요청에서 실제 값으로 바꿔 넣으며, 이 기능에는 실험 단계의 network.tlsTerminate 설정이 필요하다.3
Anthropic은 같은 시기 웹에서 쓰는 Claude Code도 내놨다. 세션마다 클라우드의 격리된 샌드박스에서 실행하고, git 인증 정보나 서명 키 같은 민감한 자격 증명은 샌드박스 안에 두지 않는다. git 통신은 맞춤형 프록시 서비스가 처리한다. 샌드박스 안의 git 클라이언트는 범위가 제한된 자격 증명으로 이 서비스에 인증하고, 프록시가 그 자격 증명과 요청 내용(예: 설정된 브랜치에만 푸시하는지)을 검증한 뒤 실제 인증 토큰을 붙여 GitHub에 보낸다.1
출처
- Making Claude Code safer with sandboxing anthropic.com
- Meet Anthropic’s sandbox-runtime: OS-Level Sandboxing for AI Agents, No Containers marktechpost.com
- Configure the sandboxed Bash tool - Claude Code Docs code.claude.com