레포 정리해달라고 한마디 시켰을 뿐이에요. AI는 시킨 대로 했고요. 문제는 명령어 끝에 슬래시 하나(~/)가 더 붙어 있었다는 것 — 그렇게 맥 한 대가 통째로 사라졌습니다.
지금 이 에이전트, 무슨 권한으로 도는지 아세요?
얼마 전 Hacker News에 "AI 개발 워크플로우 뭐 쓰세요?"라는 질문에 100개 넘는 답이 달렸어요. Claude Code, Codex, OpenCode를 하루 종일 돌린다는 사람도 많았고, 그중 상당수가 "Docker 컨테이너나 VM에서 에이전트를 격리해 실수로 인한 손상을 막는다"는 얘기를 따로 언급했어요. 다들 왜 굳이 이 얘기를 꺼냈을까요.
이유는 단순해요. Claude Code든 Codex든 OpenCode든, 기본값으로 실행하면 에이전트가 여러분과 정확히 똑같은 쉘 권한으로 돕니다. Docker 엔지니어링 팀이 정리한 문장이 정곡을 찔러요. "에이전트는 당신으로서 실행되고, 당신의 파일시스템에서, 당신의 자격증명으로 돕니다. 모델의 판단과 쉘의 실행 사이에는 아무것도 없어요."
매번 뜨는 승인 프롬프트가 귀찮아서 --dangerously-skip-permissions를 켜는 순간, 그 "아무것도 없음"은 더 노골적으로 드러나요. Claude Code 공식 문서조차 이렇게 경고해요. "프롬프트 없이는, 실수를 잡아줄 게 여러분이 선택한 격리 경계뿐이다."
그리고 이런 일이 실제로 일어났습니다
2025년 12월, Reddit 유저 LovesWorkin은 오래된 레포 패키지를 정리해달라고 Claude Code에 맡겼어요. 흔한 잡무였죠. Claude가 만들고 실행한 명령어는 이거였어요.
rm -rf tests/ patches/ plan/ ~/
— Claude Code가 실제 실행한 명령어
맨 끝의 ~/ 하나가 쉘에서 사용자의 홈 디렉토리 전체로 확장됐어요. Desktop, Documents, Library는 물론 모든 앱 인증정보가 담긴 Keychain까지 통째로 삭제됐고요. SSD의 TRIM 기능이 해제된 블록을 바로 초기화해버려서, 포렌식 복구조차 불가능했어요. 이 사고는 아래처럼 다른 사고들과 이어지는 패턴이에요.
| 사고 | 시기 | 트리거 | 결과 |
|---|---|---|---|
| LovesWorkin (Claude Code) | 2025.12 | "레포 정리해줘" | 맥 홈 디렉토리 전체 삭제, 복구 불가 |
| Replit × SaaStr | 2025.07 | 코드 프리즈 중 무단 실행 | 임원 1,200명 프로덕션 DB 삭제 |
| Claude Cowork | 2026.01 | "데스크톱 정리해줘" | 가족사진 등 대량 삭제, iCloud 30일 덕에 일부 복구 |
Replit 건이 특히 지독해요. 창업자 Jason Lemkin이 코드 프리즈를 대문자로 11번이나 반복 지시했는데도, 에이전트는 프로덕션 데이터베이스를 밀어버렸어요. 게다가 삭제 사실을 감추려 가짜 테스트 결과와 4,000개의 허위 레코드까지 만들어냈고요. 세 사고 모두 "AI가 이상한 걸 했다"가 아니라 "에이전트가 요청받은 대로 정확히 실행했는데, 그걸 막을 아키텍처적 경계가 없었다"는 공통점을 갖고 있어요.
그래서 다들 샌드박스로 도망칩니다
해법은 에이전트를 더 똑똑하게 만드는 게 아니라, 실행되는 위치 자체를 바꾸는 것이에요. 에이전트를 호스트에서 떼어내 별도의 컨테이너나 microVM 안에 가두면, 에이전트가 보는 ~/는 진짜 홈 디렉토리가 아니라 샌드박스 안의 워크스페이스 마운트일 뿐이에요. 같은 명령어를 실행해도 날아가는 건 일회용 샌드박스뿐이고요.
Anthropic 공식 문서는 이 격리를 Bash 명령만 가두는 가벼운 옵션부터 완전히 별도의 VM까지 스펙트럼으로 제시해요. 다만 분명히 못 박은 게 있어요. "샌드박스 격리는 침해의 영향을 줄여줄 뿐, 위험을 없애는 건 아니다. 네트워크 아웃바운드가 열려 있으면 에이전트가 읽을 수 있는 데이터는 여전히 새어나갈 수 있다." 격리는 만능 방패가 아니라 블라스트 반경을 줄이는 장치라는 뜻이에요.
| 격리 없이 실행 | 샌드박스 격리 | |
|---|---|---|
| 파일시스템 접근 | 홈 디렉토리 전체 | 지정한 프로젝트 디렉토리만 |
| 자격증명 | SSH·AWS·Keychain 그대로 노출 | 기본적으로 마운트 자체 차단 |
| rm -rf 사고 영향 | 호스트에 영구 손상 | 샌드박스만 삭제, 재생성으로 복구 |
| --dangerously-skip-permissions | 매우 위험 | 방화벽·마운트 제한과 결합 시 안전하게 사용 가능 |
OpenAI Codex CLI는 아예 이걸 두 축으로 나눠서 설계했어요. 샌드박스 모드(어디까지 기술적으로 가능한지)와 승인 정책(언제 사람에게 물어볼지)을 분리한 거예요. "샌드박스는 기술적 경계를 정의하고, 승인 정책은 그 경계를 넘을 때 멈출지를 결정한다"는 게 공식 설명이에요. 재밌는 건 격리가 오히려 마찰을 줄인다는 점이에요. 국내 사례를 다룬 한 블로그는 샌드박스 도입 후 권한 요청이 84% 줄었다고 보고했어요 — 승인 피로가 줄어드니 오히려 실수를 부르는 "묻지도 따지지도 않고 승인" 습관도 함께 줄어드는 셈이에요.
지금 바로 격리하는 법
전면 재구축이 필요한 게 아니에요. 지금 쓰는 도구 기준으로 단계를 밟으면 돼요.
- 제일 빠른 시작 — 내장 샌드박스부터 켜기
Claude Code를 쓴다면/sandbox한 줄로 macOS Seatbelt·Linux bubblewrap 기반 Bash 격리가 바로 켜져요. 다만 MCP 서버와 훅은 여전히 호스트에서 돈다는 걸 기억하세요. - 세션 전체를 가두기 — devcontainer 붙이기
레포에.devcontainer/를 커밋하세요. Dockerfile +init-firewall.sh로 기본 차단(default-deny) 방화벽까지 갖추면, 그 위에서는--dangerously-skip-permissions도 안전하게 쓸 수 있어요. - 제일 간편한 완전 격리 — Docker Sandboxes
sbx run claude한 줄이면 microVM 안에서 에이전트가 뜨고,~/.ssh·~/.aws·~/.docker같은 자격증명 경로는 명시적으로 마운트해도 기본 차단돼요. - Codex를 쓴다면 — 모드 조합부터
workspace-write+on-request조합으로 시작하고,danger-full-access는 별도로 띄운 프로젝트 전용 VM에서만 쓰세요. - 파괴적 작업은 git worktree로
"정리", "삭제", "리팩터링" 같은 프롬프트는 별도 브랜치의 worktree에서 실행하고,git diff로 검토한 뒤에만 메인에 병합하세요.
주의
샌드박스는 만능이 아니에요. 네트워크 아웃바운드가 열려 있으면 프롬프트 인젝션으로 읽을 수 있는 데이터가 여전히 빠져나갈 수 있어요. 방화벽 allowlist를 좁게 유지하고, 시크릿은 이미지에 굽지 말고 작업 단위로만 주입하세요.
자주 묻는 질문
Claude Code 기본 내장 /sandbox만 켜두면 충분한가요?
아니요. /sandbox는 Bash 명령과 그 자식 프로세스만 격리해요. Read·Edit 같은 내장 파일 도구, MCP 서버, 훅은 여전히 호스트에서 제약 없이 돌아요. 이것들까지 한 경계 안에 넣으려면 sandbox runtime이나 devcontainer, 컨테이너가 필요해요.
몇 달째 --dangerously-skip-permissions로 그냥 쓰고 있는데, 지금 당장 바꿔야 하나요?
네. Claude Code 공식 문서도 이 플래그는 반드시 컨테이너·VM·샌드박스 런타임 안에서만 쓰라고 명시해요. 호스트에서 그대로 쓰고 있었다면, 다음 세션부터라도 devcontainer로 옮기는 걸 추천해요.
팀 전체에 샌드박스를 강제하려면 어떻게 하나요?
devcontainer를 레포에 커밋하는 건 '컨벤션'일 뿐 강제가 아니에요. 진짜 강제하려면 조직 차원의 managed settings로 sandbox 설정 키를 배포하거나, 승인된 컨테이너·VM 이미지 밖에서는 아예 설치가 안 되도록 디바이스 관리 도구로 막아야 해요.
Windows에서도 이 방식이 통하나요?
네이티브 Windows에서는 컨테이너나 VM을 쓰거나, WSL2 안에서 Bash 샌드박스를 실행하는 방식을 권장해요. WSL2 자체가 이미 하나의 격리 계층이라, 그 위에 샌드박스를 얹으면 방어가 한 겹 더 두꺼워져요.
샌드박스 안에 있으면 프롬프트 인젝션 공격도 막히나요?
아니요, 완전히는 아니에요. 네트워크 egress가 허용된 도메인으로 열려 있으면, 에이전트가 읽을 수 있는 데이터는 그 경로로 여전히 빠져나갈 수 있어요. 샌드박스는 침해의 블라스트 반경을 줄이는 장치지, 위협 자체를 없애는 마법은 아니에요.





