보안
2025년 2월, LayerX Security Research는 Anthropic의 Claude Desktop Extensions(DXT) 프레임워크에서 치명적인 제로클릭 원격 코드 실행 취약점을 공개했습니다. 확장 프로그램은 샌드박스 없이 전체 시스템 권한으로 실행되며, 언어 모델과 로컬 운영 체제 간의 실행 브리지 역할을 합니다.
현재 많은 기업 보안 팀에서는 AI 코딩 도구를 기업 엔드포인트에서 직접 실행하지 않고, 전용 가상 머신, 컨테이너 또는 일회용 환경 내에서만 실행하도록 요구하고 있습니다.
이 devcontainer는 해당 요구 사항을 충족합니다.
격리 모델
섹션 제목: “격리 모델”+------------------------------------------------+| 호스트 머신 (기업 엔드포인트) || || - AI 도구 바이너리 미설치 || - AI 도구 확장 프로그램 또는 플러그인 없음 || - Docker만 필요 || || +------------------------------------------+ || | Docker 컨테이너 (격리됨) | || | | || | AI 도구가 여기서 실행됨: | || | - Claude Code CLI | || | - Codex | || | | || | 접근 불가 항목: | || | x 호스트 파일시스템 | || | x 호스트 키체인 / 자격 증명 저장소 | || | x 호스트 클립보드 | || | x 호스트 네트워크 인터페이스 | || | x 기타 호스트 애플리케이션 | || +------------------------------------------+ |+------------------------------------------------+보안 제어
섹션 제목: “보안 제어”호스트 볼륨 마운트 없음
섹션 제목: “호스트 볼륨 마운트 없음”모든 데이터는 호스트 디렉터리를 바인드 마운트하지 않고 Docker 명명된 볼륨에 저장됩니다. 컨테이너 내부가 손상되더라도 호스트 머신의 파일에 접근할 수 없습니다. 볼륨 세부 사항은 구성 — 데이터 영속성을 참조하세요.
공유 자격 증명 저장소 없음
섹션 제목: “공유 자격 증명 저장소 없음”컨테이너는 macOS 키체인, Windows 자격 증명 관리자, 브라우저 프로필 또는 호스트 SSH 에이전트에 접근할 수 없습니다. SSH 키는 base64로 인코딩된 환경 변수를 통해 시작 시 주입되며 컨테이너 내부에만 존재합니다.
클립보드 동기화 없음
섹션 제목: “클립보드 동기화 없음”Docker 컨테이너는 호스트와 클립보드 상태를 공유하지 않습니다. 복사/붙여넣기를 통한 데이터 유출이 불가능합니다.
네트워크 격리
섹션 제목: “네트워크 격리”컨테이너는 두 가지 지원되는 인증 모드 중 하나로 외부와 통신합니다:
- LiteLLM 프록시 모드 — Docker의 NAT를 통해 LiteLLM 프록시로의 아웃바운드 HTTPS.
- OAuth 모드 — Docker의 NAT를 통해 Anthropic으로의 직접 아웃바운드 HTTPS.
컨테이너는 VPN 터널, 기업 네트워크 인터페이스 또는 호스트의 다른 서비스에 접근할 수 없습니다.
설계상 일회용
섹션 제목: “설계상 일회용”전체 환경을 몇 초 안에 삭제하고 다시 생성할 수 있습니다. 컨테이너를 일회용으로 취급하세요.
docker compose down -vdocker compose pull && docker compose up -dpodman-compose down -vpodman-compose pull && podman-compose up -dCLI 전용 도구
섹션 제목: “CLI 전용 도구”이 환경은 AI 도구를 커맨드라인 인터페이스로만 실행합니다. 데스크톱 애플리케이션, 브라우저 확장 프로그램, DXT 프레임워크가 없습니다. 이 격리 모델을 필요하게 한 취약점은 컨테이너 내부의 CLI 사용에는 적용되지 않습니다.
컨테이너 강화
섹션 제목: “컨테이너 강화”docker-compose.yml은 여러 심층 방어 조치를 적용합니다:
- 권한 제거 — 모든 Linux 권한이 제거되고(
cap_drop: ALL), 최소한의 세트만 다시 추가됩니다:CHOWN,DAC_OVERRIDE,FOWNER(엔트리포인트에서 볼륨 권한 수정용),SETUID/SETGID(sudo용),NET_RAW(ping/tcpdump용),NET_ADMIN(Wireshark 및 bettercap과 같은 패킷 캡처 도구용). - 리소스 제한 — CPU(4코어), 메모리(8 GB), PID 수(4096)가
mem_limit,cpus,pids_limit을 통해 제한되어 리소스 고갈 공격을 방지합니다. /tmp용 tmpfs —/tmp디렉터리는 256 MB tmpfs로 마운트되어 임시 파일을 메모리에 유지하고 컨테이너의 쓰기 가능 레이어에 영속되는 것을 방지합니다.- 기본적으로 TLS 검증 활성화 —
NODE_TLS_REJECT_UNAUTHORIZED가 설정되지 않으므로 Node.js는 기본적으로 TLS 인증서를 검증합니다. 자체 서명된 인증서를 수락해야 하는 사용자(예: 내부 프록시용)는.env파일에NODE_TLS_REJECT_UNAUTHORIZED=0을 추가하여 옵트인할 수 있습니다. - SSH 키 umask — SSH 개인 키는
umask 077로 작성되므로 파일이 생성과chmod호출 사이에 잠시라도 전체 읽기 가능 상태가 되지 않습니다.
보안 및 침투 테스트 도구
섹션 제목: “보안 및 침투 테스트 도구”컨테이너에는 승인된 테스트 시나리오를 위해 약 80개의 사전 설치된 보안 및 침투 테스트 도구가 포함되어 있습니다. 도구는 카테고리별로 구성되어 있습니다:
| 카테고리 | 도구 (예시) |
|---|---|
| 네트워크 분석 | tshark, wireshark, masscan, hping3, bettercap (amd64), netdiscover |
| 웹 스캐너 | nikto, sqlmap, dirb, whatweb, sslscan, OWASP ZAP, dalfox, feroxbuster |
| 비밀번호 및 인증 | hydra, john, hashcat, medusa, ncrack |
| 리버스 엔지니어링 | radare2, Ghidra, gdb, binwalk, strace, ltrace |
| 정찰 | subfinder, amass, httpx, nuclei, gau, waybackurls, recon-ng, spiderfoot |
| 퍼징 및 열거 | ffuf, gobuster, SecLists |
| 공급망 및 시크릿 | trufflehog, grype, syft, gitleaks, trivy |
| 익스플로잇 프레임워크 | Metasploit (amd64), searchsploit (ExploitDB) |
일부 도구(bettercap, Metasploit)는 업스트림 패키징 제약으로 인해 amd64에서만 사용할 수 있습니다. 패킷 캡처 도구(tshark, bettercap)는 기본 docker-compose.yml에 포함된 NET_ADMIN 권한이 필요합니다.
전체 목록은 컨테이너 내부에서 claude-self-test를 실행하세요(섹션 7에서 모든 보안 도구를 확인합니다).
규정 준수 체크리스트
섹션 제목: “규정 준수 체크리스트”| 요구 사항 | 상태 |
|---|---|
| 호스트 엔드포인트에 AI 도구 미설치 | 예 |
| 격리된 VM 또는 컨테이너에서 실행 | 예 |
| 호스트 파일 공유에 대한 접근 없음 | 예 |
| 클립보드 동기화 없음 | 예 |
| 공유 자격 증명 저장소 없음 | 예 |
| 프로덕션 네트워크로의 VPN 스플릿 터널링 없음 | 예 |
| 환경은 일회용 | 예 |
| 데스크톱 확장 프로그램 또는 플러그인 없음 | 예 |
| Linux 권한 제거 (최소 권한) | 예 |
| 리소스 제한 적용 (CPU/메모리/PID) | 예 |
| 기본적으로 TLS 인증서 검증 활성화 | 예 |
| 내부 서비스는 localhost에만 바인딩 | 예 |
모범 사례
섹션 제목: “모범 사례”- 호스트 머신에 AI 코딩 도구를 설치하지 마세요. 대신 이 컨테이너를 사용하세요.
docker-compose.yml에 바인드 마운트를 추가하지 마세요. 명명된 볼륨 구성은 의도적입니다.- 컨테이너 내부에서 사용하는 SSH 키를 주기적으로 교체하세요.
- 공유하기 전에
.env를 검토하세요. API 키가 포함되어 있으며 SSH 개인 키가 포함될 수 있습니다. - 주기적으로 업데이트하여 보안 패치를 적용하세요:
docker compose pull && docker compose up -dpodman-compose pull && podman-compose up -d