
오픈소스 샌드박스형 AI 에이전트 런타임 — gVisor/Docker 격리, 자격 증명 금고, 불변 감사 로그. CVE-2026-25253 이후 구축됨.
AI 에이전트를 위한 오픈소스 샌드박스 런타임
AI 에이전트를 안심하고 실행하세요. 모든 에이전트는 자체 권한 범위, 자격 증명 금고, 감사 추적, 킬 스위치를 갖습니다.
2026년 1월 27일, CVE-2026-25253은 에이전틱 AI 시스템에 부여된 최초의 CVE가 되었습니다. OpenClaw의 치명적인 WebSocket 하이재킹 취약점으로 인해 노출된 모든 인스턴스 — localhost에만 바인딩된 인스턴스까지 포함 — 에 대해 원클릭 원격 코드 실행이 가능해졌습니다.
같은 주, ClawHavoc 캠페인은 OpenClaw의 마켓플레이스에 341개 이상의 악성 스킬을 침투시켰습니다. ClawHub에서 설치된 모든 스킬은 OpenClaw 자체와 동일한 권한 — 전체 디스크 접근, OAuth 토큰, API 키 — 으로 실행되었습니다. 샌드박스도, 감사 추적도, 킬 스위치도 없었습니다.
"ClawHub에서 스킬을 설치하면 OpenClaw 자체와 동일한 리소스에 접근할 수 있습니다. 기본적으로 스킬 간 샌드박스 격리가 없습니다." — DEV Community 보안 분석, 2026년 4월
수치로 보는 현황:
AgentBox는 구조적 해결책입니다. 패치가 아니라 런타임입니다.
실행하는 모든 에이전트는 다음을 얻습니다:
AgentBox 이전 AgentBox 이후
───────────────── ──────────────
에이전트 → 전체 디스크 ❌ 에이전트 → 허용된 경로만 ✅
에이전트 → 전체 네트워크 ❌ 에이전트 → 허용된 호스트만 ✅
에이전트 → 원시 비밀값 ❌ 에이전트 → 범위 제한 토큰 ✅
감사 추적 없음 ❌ 모든 작업 기록 ✅
킬 스위치 없음 ❌ <100ms 내 종료 ✅
스킬이 root로 실행됨 ❌ 커널 격리 샌드박스 ✅
# 설치
go install github.com/siyad01/agentbox/cmd/agentbox@latest
# 실행 전 매니페스트 검증
agentbox validate manifests/email-sorter.yaml
# 샌드박스에서 에이전트 실행
agentbox run --manifest manifests/email-sorter.yaml python agent.py
# 에이전트가 수행한 작업 확인
agentbox audit --log logs/email-sorter-audit.log
# 로그가 변조되지 않았는지 검증
agentbox verify logs/email-sorter-audit.log
# 비밀값 관리
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
모든 에이전트는 정확히 필요한 것만 선언합니다. 목록에 없는 것은 접근할 수 없습니다.
name: "email-sorter"
version: "1.0.0"
description: "받은 편지함을 읽고, 이메일을 분류하고, 정리된 폴더에 씁니다"
runtime: docker # 또는: gvisor (커널 수준), firecracker (MicroVM)
permissions:
filesystem:
read:
- "~/Documents/inbox"
write:
- "~/Documents/sorted"
deny: # 항상 차단 — 읽기 목록에 있어도
- "~/.ssh"
- "~/.aws"
- "~/.config"
- "/etc"
network:
allow:
- "api.anthropic.com"
- "gmail.googleapis.com"
deny:
- "*" # 그 외 모든 것 차단
tools:
allow:
- "read_file"
- "write_file"
- "list_*"
deny:
- "execute_shell" # 셸 접근 금지, 절대
- "*_delete" # 삭제 도구 금지
credentials:
- ANTHROPIC_API_KEY # 런타임에 금고에서 주입
- GMAIL_TOKEN # 에이전트는 원시 값을 절대 볼 수 없음
limits:
max_tokens: 50000 # LLM 토큰 예산
max_duration: "30m" # 30분 후 종료
max_memory_mb: 256 # RAM 상한
max_requests: 500 # 최대 도구 호출 수
audit:
log_level: full
alert_on:
- filesystem_deny
- network_deny
- token_budget_80pct
log_path: "logs/email-sorter-audit.log"
agentbox run --manifest agent.yaml python agent.py
│
▼
┌─────────────────────────────────────────────────────┐
│ 정책 엔진 │
│ 매니페스트 파싱 → 허용/거부 목록 생성 │
│ 서명 검증 → 서명되지 않은 스킬 거부 │
│ 금고에서 자격 증명 주입 │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ 격리 계층 │
│ │
│ Docker → 컨테이너 + seccomp + cap-drop │
│ gVisor → 사용자 공간 커널, 시스템 콜 가로채기 │
│ Firecracker → 에이전트별 전용 MicroVM 커널 │
│ │
│ 파일시스템: 선언된 경로만 마운트 │
│ 네트워크: 선언된 호스트만 연결 가능 │
│ Capabilities: 모두 제거, 추가 없음 │
└──────────────────────┬──────────────────────────────┘
│
┌────────────┼────────────┐
▼ ▼ ▼
감사 로거 자격 증명 리소스
(해시 체인) 금고 모니터
모든 작업 AES-256-GCM 한도 초과 시
기록 범위 제한 토큰 자동 종료
다른 모든 샌드박스는 컨테이너 경계에서 멈춥니다. 커널 취약점을 악용하는 에이전트는 탈출할 수 있습니다.
gVisor는 호스트 커널에 도달하기 전에 모든 시스템 콜을 가로챕니다:
에이전트 시도: write("/home/user/.ssh/id_rsa")
│
▼
gVisor 사용자 공간 커널
│
거부 목록에 있는 경로? → 예
│
▼
EPERM 즉시 반환
호스트 커널은 이 시스템 콜을 볼 수 없음
프롬프트 인젝션은 이 계층을 넘을 수 없음
agentbox <command> [options]
명령어:
run 샌드박스에서 에이전트 실행
validate 매니페스트 파일 검증
kill 실행 중인 에이전트 종료
audit 에이전트 감사 로그 보기
verify 감사 로그 무결성 검증
vault 암호화된 자격 증명 관리
serve REST API 서버 시작
version 버전 표시
예시:
agentbox validate manifests/email-sorter.yaml
agentbox run --manifest manifests/email-sorter.yaml python agent.py
agentbox kill agent-abc123
agentbox audit --log logs/email-sorter.log --deny
agentbox audit --log logs/email-sorter.log --last 1h
agentbox verify logs/email-sorter.log
agentbox vault add ANTHROPIC_API_KEY
agentbox vault list
agentbox vault delete OLD_KEY
agentbox serve :8081
agentbox serve로 시작합니다 (기본값: :8081).
# 실행 중인 에이전트 목록
curl http://localhost:8081/api/agents
# 에이전트 시작
curl -X POST http://localhost:8081/api/agents \
-H "Content-Type: application/json" \
-d '{"manifest":"manifests/email-sorter.yaml","command":["python","agent.py"]}'
# 에이전트 종료
curl -X DELETE http://localhost:8081/api/agents/abc123
# 감사 로그 조회
curl "http://localhost:8081/api/audit?deny=true&agent=email-sorter"
모든 에이전트 작업은 추가 전용, 해시 체인 방식의 JSON Lines 파일에 기록됩니다:
{"id":1,"hash":"a3f2...","prev_hash":"genesis","timestamp":"2026-05-05T09:00:00Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"agent_start","allowed":true,"resource":"manifests/email-sorter.yaml"}
{"id":2,"hash":"b7c1...","prev_hash":"a3f2...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_allow","allowed":true,"resource":"read:/home/user/Documents/inbox/mail.txt","rule":"filesystem.read: ~/Documents/inbox"}
{"id":3,"hash":"d9e4...","prev_hash":"b7c1...","timestamp":"2026-05-05T09:00:01Z","agent_id":"abc123","agent_name":"email-sorter","event_type":"filesystem_deny","allowed":false,"resource":"read:/home/user/.ssh/id_rsa","rule":"filesystem.deny: ~/.ssh","reason":"path is explicitly denied"}
변조 감지:
agentbox verify logs/email-sorter-audit.log
✅ 감사 로그가 온전합니다
항목: 47 (ID 1–47)
해시 체인: 끊김 없음
항목의 문자 하나라도 변경하면 검증이 즉시 실패합니다 — 체인이 끊어집니다.
# 비밀값 저장 (절대 기록되지 않으며, 환경 변수에 평문으로 존재하지 않음)
agentbox vault add ANTHROPIC_API_KEY
# 저장된 자격 증명 이름 목록 (값은 절대 표시되지 않음)
agentbox vault list
# 자격 증명이 복호화 가능한지 확인
agentbox vault test ANTHROPIC_API_KEY
# 자격 증명 교체
agentbox vault add ANTHROPIC_API_KEY # add는 기존 항목을 업데이트
자격 증명은 AES-256-GCM으로 암호화됩니다. 마스터 키는 금고 비밀번호에서 파생되며 디스크에 절대 저장되지 않습니다. 에이전트 시작 시 AgentBox는 자격 증명을 범위가 제한된 환경 변수로 주입합니다. 에이전트는 일반적으로 os.getenv("ANTHROPIC_API_KEY")를 호출합니다 — 금고에 직접 접근하지 않습니다.
AgentBox는 선언된 한도를 초과하는 에이전트를 종료합니다:
# 이 에이전트는 max_duration: 5s로 구성됨
agentbox run --manifest manifests/timeout-test.yaml python long_running_agent.py
Agent started
tick 1
tick 2
tick 3
tick 4
tick 5
🛑 Killing agent timeout-test: duration limit exceeded: 5s
⚠️ Agent timeout-test exited code 137 in 5.2s
종료 코드 137 = SIGKILL. 정상 종료, 최종 감사 항목이 기록됩니다.
# 클론
git clone https://github.com/siyad01/agentbox
cd agentbox
# 빌드
go build -o agentbox ./cmd/agentbox/
# 테스트 실행 (27개 테스트, 모두 통과)
go test ./...
# 전역 설치
go install ./cmd/agentbox/
요구 사항:
agentbox/
├── cmd/agentbox/main.go ← CLI 진입점
├── internal/
│ ├── policy/
│ │ ├── manifest.go ← YAML 매니페스트 스키마
│ │ ├── parser.go ← 검증 + 기본값
│ │ └── engine.go ← 거부 우선 결정 엔진 (20개 테스트)
│ ├── audit/
│ │ ├── logger.go ← 추가 전용 SHA-256 해시 체인 로그
│ │ ├── verifier.go ← 변조 감지
│ │ └── reader.go ← 조회 + 필터
│ ├── vault/
│ │ ├── store.go ← AES-256-GCM 암호화 자격 증명 저장소
│ │ └── injector.go ← 런타임 주입 (7개 테스트)
│ ├── sandbox/
│ │ ├── sandbox.go ← Sandbox 인터페이스
│ │ ├── docker.go ← Docker 백엔드
│ │ ├── gvisor.go ← gVisor 백엔드 (커널 수준)
│ │ ├── manager.go ← 에이전트 수명 주기 관리
│ │ └── util.go ← WSL2 감지, 경로 헬퍼
│ ├── monitor/
│ │ └── enforcer.go ← 리소스 한도 + 자동 종료
│ └── api/
│ └── server.go ← :8081의 REST API
└── manifests/
├── email-sorter.yaml ← 프로덕션 예시
└── timeout-test.yaml ← 한도 강제 예시
기본적으로 거부 우선. 에이전트는 권한이 0인 상태로 시작합니다. 모든 기능은 명시적으로 선언되어야 합니다.
거부 목록이 항상 우선. 경로가 읽기 목록과 거부 목록 모두에 있어도 거부 목록이 우선합니다. 예외는 없습니다.
gVisor를 통한 커널 수준 강제. seccomp 필터와 capability 제거는 시스템 콜 경계에서 작동합니다. 공격자가 제어할 수 있는 모델 출력은 사용자 공간에서 실행되며 커널 수준 정책을 수정할 수 없습니다.
자격 증명 격리. 금고 마스터 키는 디스크에 절대 저장되지 않습니다. 자격 증명은 샌드박스 시작 시 수명이 짧은 범위 제한 토큰으로 주입되고 종료 시 폐기됩니다. 에이전트 프로세스가 손상되어도 자격 증명 금고는 손상되지 않습니다.
변조 불가 감사 추적. SHA-256 해시 체인은 사후 로그 수정을 감지할 수 있게 합니다. 항목 하나의 변경은 그 시점부터 체인을 끊습니다.
취약점 보고는 SECURITY.md를 참조하세요.
CONTRIBUTING.md를 참조하세요.
Apache 2.0 — 자유롭게 사용, 수정, 배포할 수 있습니다. LICENSE를 참조하세요.
Go로 제작 · 핵심 보안 기능에 외부 종속성 0 · 한 명령으로 자체 호스팅
CVE-2026-25253이 우려되었다면, 이것이 해결책입니다. ⭐를 남겨주세요
| 보호 기능 | 방법 |
|---|
| 제로 트러스트 권한 | 에이전트는 정확히 필요한 것만 선언합니다. 그 외에는 접근할 수 없습니다. |
| 커널 수준 격리 | gVisor가 모든 시스템 콜을 가로챕니다. 프롬프트 인젝션은 이 경계를 넘을 수 없습니다. |
| 자격 증명 금고 | AES-256-GCM 암호화. 에이전트는 원시 비밀값을 절대 볼 수 없습니다 — 범위가 제한된 토큰만 볼 수 있습니다. |
| 변조 불가 감사 로그 | SHA-256 해시 체인. 모든 작업이 기록됩니다. 변조 감지 가능. |
| 킬 스위치 | 100ms 이내에 모든 에이전트를 종료합니다. 한도 위반 시 자동 종료. |
| 리소스 한도 | 시간, 메모리, 요청 수 — 구성이 아닌 런타임에서 강제됩니다. |
| 메서드 | 엔드포인트 | 설명 |
|---|
| GET | /health | 상태 확인 |
| GET | /dashboard | 웹 대시보드 |
| GET | /api/agents | 모든 에이전트 목록 |
| POST | /api/agents | 새 에이전트 시작 |
| DELETE | /api/agents/:id | 에이전트 종료 |
| GET | /api/audit | 감사 로그 조회 |
| 기능 | AgentBox | OpenClaw 샌드박스 | Docker만 | AccuKnox |
|---|
| 오픈소스 (Apache 2.0) | ✅ | ✅ | ✅ | ❌ |
| 자체 호스팅 가능 | ✅ | ✅ | ✅ | K8s 전용 |
| gVisor / 커널 격리 | ✅ | ❌ | ❌ | ✅ |
| 자격 증명 금고 | ✅ | ❌ | ❌ | ✅ |
| 변조 불가 감사 로그 | ✅ | ❌ | ❌ | ✅ |
| 한도 위반 시 자동 종료 | ✅ | ❌ | ❌ | ✅ |
| 프레임워크 무관 | ✅ | ❌ (OpenClaw 전용) | ✅ | ✅ |
| 단일 바이너리 배포 | ✅ | ❌ | ✅ | ❌ |