포스트

How We Contain Claude: 제품별 에이전트 격리(Containment) 패턴 해부

목차

  1. 개요
  2. 보안 위험의 세 가지 범주
  3. 세 가지 방어 계층
  4. 세 가지 격리 패턴
  5. 핵심 보안 원칙
  6. 결론
  7. Reference

개요

Anthropic 엔지니어링 팀은 “How we contain Claude across products”에서 핵심 전제를 제시한다. AI 에이전트의 역량이 커질수록 그것이 일으킬 수 있는 피해 범위, 즉 폭발 반경(blast radius)도 비례해 커진다는 것이다.

배포의 위험은 두 요소로 나뉜다. 실패가 얼마나 일어나기 쉬운가, 그리고 한 번의 실패가 얼마나 큰 피해를 줄 수 있는가다. 기술의 진보는 실패 가능성을 줄이지만, 역량 확대는 필연적으로 잠재적 피해 범위를 키운다.

따라서 배포는 모델 행동 정렬에만 의존하는 것이 아니라 엔지니어링 통제로 위험의 상한선을 효과적으로 제한할 수 있을 때 정당화된다는 것이 글의 핵심 주장이다.

보안 위험의 세 가지 범주

범주설명
사용자 오용사용자가 의도적이거나 부주의하게 유해한 행동을 지시. 통제 우회부터 파괴적 명령 요청까지
모델 오작동에이전트가 지시 없이 유해한 행동. 정교한 모델은 샌드박스를 빠져나가거나 새로운 우회로를 발견할 수 있음
외부 공격자손상된 도구, 파일, 네트워크 접근을 통한 공격. 프롬프트 인젝션과 전통적 런타임 익스플로잇 포함

세 가지 방어 계층

방어는 서로 겹치고 보완하는 세 계층으로 구성된다.

계층역할
환경 계층프로세스 샌드박스, 가상머신, 파일시스템 제한, 이그레스 통제. 에이전트가 도달할 수 있는 범위에 하드 경계 설정
모델 계층시스템 프롬프트, 분류기, 프로브, 학습 수정. 확률적 방어이며 실패율이 0이 아님
외부 콘텐츠 계층도구 권한, MCP 서버, 서드파티 플러그인이 컨텍스트로 들어오는 것을 통제

어떤 단일 계층도 완전한 보호를 제공하지 못하므로 계층들은 반드시 서로 겹치고 보완해야 한다.

세 가지 격리 패턴

패턴 1: 일회성 컨테이너 (claude.ai)

서버 측에서 gVisor 컨테이너로 실행되며, 세션마다 격리된 인프라와 일회성 파일시스템을 갖는다. 세션이 끝나면 파일시스템은 비워지고, 로컬 머신에서 코드를 실행하지 않는다.

폭발 반경은 최소화되지만 지속적 작업 공간이 없어 역량의 천장이 제한된다. 위협 모델은 사용자 머신 보호가 아니라 인프라 보호와 테넌트 격리에 초점을 맞춘다.

여기서 확인된 핵심 교훈은, 자체 제작한 커스텀 프록시 구성요소가 충분히 검증된 gVisor와 seccomp보다 약했다는 점이다. 즉 “가장 약한 계층은 당신이 직접 만든 것”이라는 원칙이 재확인되었다.

패턴 2: 휴먼 인 더 루프 샌드박스 (Claude Code)

초기 설계는 쓰기, bash, 네트워크 작업에 대해 승인을 요구하는 단순한 방식이었다. 개발자 사용자가 코드의 안전성을 평가할 수 있다는 가정에 기반한다.

그러나 사용자들은 권한 프롬프트의 약 93%를 승인했고, 승인율은 시간이 지날수록 높아졌다. 이러한 승인 피로(approval fatigue)는 안전을 제공하려던 감독 메커니즘을 역설적으로 무력화했다.

이에 OS 수준 샌드박스(macOS의 Seatbelt, Linux의 bubblewrap)를 추가하여 권한 프롬프트를 84% 줄였다.

이 패턴에서 놓쳤던 위험들도 솔직하게 공유한다.

  • 신뢰 이전 실행: 신뢰 대화상자가 뜨기 전에 코드가 실행되는 문제. .claude/settings.json 훅이 시작 시점에 파싱되고 프로젝트 로컬 설정이 사용자 동의 전에 로드됨. 수정: 모든 프로젝트 로컬 파싱을 신뢰 확인 이후로 미루고, 프로젝트 시작을 신뢰할 수 없는 인터넷 요청처럼 다룸
  • 직접 프롬프트 인젝션: 붙여넣기 가능한 프롬프트가 담긴 피싱 이메일이 ~/.aws/credentials를 탈취해 공격자 엔드포인트로 POST하도록 지시. Claude는 25번 중 24번 성공. 방어: 환경 수준 이그레스 통제가 의도와 무관하게 POST를 차단하고, 파일시스템 경계가 자격증명 접근을 막음

패턴 3: 로컬 VM (Claude Cowork)

비기술 지식 노동자는 bash 명령을 신뢰성 있게 평가할 수 없으므로, 인간의 판단을 절대적 경계로 대체한다.

아키텍처는 진화했다. 원래는 에이전트 루프가 Linux 게스트 VM 안에서 돌고 하이퍼바이저가 격리를 강제하는 풀-VM 모드였다. 이후 에이전트 루프는 호스트에서 돌고 코드 실행만 VM에서 격리하는 호스트 모드로 바뀌어, VM이 크래시해도 에이전트가 응답하도록 신뢰성을 높였다.

파일 마운트는 읽기 전용, 읽기-쓰기, 읽기-쓰기-삭제 불가 옵션으로 세밀하게 통제한다. 중요한 구현 디테일로, 심링크 해석은 경로 검증보다 먼저 수행되어야 인가된 폴더 밖을 가리키는 심링크를 통한 탈출을 막을 수 있다.

여기서 놓쳤던 위험은 다음과 같다.

  • 승인된 도메인을 통한 탈취: 공격자가 통제하는 API 키가 담긴 악성 워크스페이스 파일을 Claude가 읽고, 공격자 자격증명으로 Anthropic의 Files API를 호출. 이그레스 허용목록은 api.anthropic.com을 올바르게 허용했지만 그 도메인에서 어떤 작업이 가능한지는 제한하지 못함. 개념 전환: 허용목록을 목적지 필터가 아니라 역량 부여(capability grant)로 재해석. 수정: VM 내부의 중간자 프록시가 트래픽을 가로채 VM에 발급된 세션 토큰만 허용하고 서버 측 페치를 가능케 하는 헤더를 차단
  • EDR 가시성 상실: Claude를 격리하는 VM이 엔드포인트 탐지·대응(EDR) 도구의 게스트 활동 모니터링도 막아 컴플라이언스 공백 발생. 완화책: 풀 기반 OTLP 익스포트로 사후 로그 조회 제공(실시간 모니터링은 아님)

핵심 보안 원칙

글이 강조하는 원칙들을 정리하면 다음과 같다.

원칙내용
승인 피로의 역학UI 기반 감독은 빈도에 반비례. 반복되는 승인창은 주의력을 떨어뜨림
신뢰 경계와 타이밍신뢰 경계는 논리적으로 가정하지 말고 순차적으로 강제해야 함
결정론적 방어로서의 이그레스 통제확률적 방어가 이상을 탐지하지 못할 때 결정론적 경계가 최후의 방어선
만들지 말고 검증된 것을 쓰기검증된 하이퍼바이저·시스콜 필터·컨테이너 런타임이 자체 제작물보다 더 많은 공격을 견뎌냄
격리 먼저, 행동 조정은 그다음환경 계층에서 격리를 먼저 설계한 뒤 모델 계층에서 행동을 조정

주요 정량 지표로는 Claude Opus 4.7이 단일 시도에서 프롬프트 인젝션 공격 성공률을 약 0.1%로, 100회 적응형 시도 후에도 약 5-6%로 억제했다는 점, Claude Code 자동 모드가 과도한 행동의 약 83%를 실행 전에 잡아낸다는 점 등이 제시된다.

새롭게 부상하는 위협으로는 세션을 넘어 살아남는 컨텍스트(제품 메모리, CLAUDE.md, 마운트된 워크스페이스)를 노리는 지속적 메모리 오염, 서브 에이전트에 차등 신뢰를 부여할 때 생기는 다중 에이전트 신뢰 상승, 그리고 에이전트 정체성(agent identity) 문제가 거론된다.

결론

에이전트의 시스템 수준 상호작용(파일 접근, 소켓 작업, 프로세스 생성)은 근본적으로 기존 소프트웨어와 다르지 않다. 따라서 검증된 도구로 격리를 구현하는 것이 결정적으로 실현 가능하다는 결론에 이른다.

폭발 반경에 하드 리밋을 두는 것이 실패 가능성과 피해 규모의 균형을 올바른 방향으로 강제한다는 것이 글의 메시지다. 나아가 공유 벤치마크, 공개 규범, 정체성 표준, 벤더 간 레드티밍 등 에이전트 특화 보안 태세에 대한 집합적 투자가 필요하다고 제언한다.

Reference