LLM 보안 에이전트(Claude, Codex, Gemini, OpenCode)의 사이버 공격 수행 능력과 편향성을 비교 분석하는 자동화 실험 프레임워크.
| 시나리오 | 목적 | 변수 |
|---|---|---|
| Scenario 1 | 프롬프트 유형에 따른 공격 행동 비교 | Guidance(2) x Structure(2) x Victim(3) x 반복(3) = 36 세션 |
| Scenario 2 | 공격 기법별 성공률 비교 | 공격기법(10) x Victim(3) x 반복(3) = 90 세션 |
각 세션에서 1개 에이전트가 격리된 Docker 네트워크에서 실행됩니다. 병렬 비교는 별도 터미널에서 동시 실행합니다.
1 run.sh 실행 = 1 세션 (완전 격리)
┌─────────────────────────────────────┐
│ net-{session_id} (격리 네트워크) │
│ │
│ ┌──────────────┐ │
│ │ metrics-proxy│ ◄── LiteLLM │
│ │ (port 4000) │ 토큰/비용 추적│
│ └──────┬───────┘ │
│ │ │
│ ┌──────┴───────┐ │
│ │ victim │ ◄── 취약 서버 │
│ └──────┬───────┘ │
│ ┌──────┴───────┐ │
│ │ http-logger │ ◄── mitmproxy │
│ └──────┬───────┘ │
│ ┌──────┴───────┐ │
│ │ agent │ ◄── CLI 에이전트 │
│ └──────────────┘ │
└─────────────────────────────────────┘
- 1 run.sh = 1 agent: 각 실행이 고유한 Docker 네트워크에서 격리
- 병렬 실행: 별도 터미널에서
run.sh를 동시 실행 (세션별 고유 이름으로 충돌 없음) - 동적 compose: 실행 시
.compose-{session_id}.yml자동 생성 - metrics-proxy: API 호출을 중계하여 토큰/비용 메트릭 수집
- http-logger: mitmproxy 기반 HTTP 트래픽 로깅 (에이전트 ↔ victim)
# 1. 환경 설정
cp .env.example .env # API 키 입력
# 2. 단일 에이전트 실행
./run.sh --prompt prompts/guided.txt --claude --mode struct \
--output-format output_formats/guided_structured.txt
# 3. 병렬 실행 (별도 터미널에서)
./run.sh --prompt prompts/guided.txt --claude --mode struct &
./run.sh --prompt prompts/guided.txt --codex --mode struct &
./run.sh --prompt prompts/guided.txt --gemini --mode struct &
# 4. OpenCode + Ollama (폐쇄망/로컬 모델)
./run.sh --prompt prompts/guided.txt --opencode --opencode-model "openai/gpt-4o" \
--mode struct --output-format output_formats/guided_structured.txt
# 5. Scenario 2 일괄 실행 (에이전트별)
./run_scen2.sh --agent claude
./run_scen2.sh --agent codex
./run_scen2.sh --agent gemini| 옵션 | 설명 | 기본값 |
|---|---|---|
--prompt <file> |
프롬프트 파일 (필수) | - |
--agent <type> |
에이전트 타입 | - |
--claude/--codex/--gemini/--opencode |
에이전트 숏핸드 | - |
--victim <type|image> |
프리셋 또는 Docker 이미지 | juice-shop |
--victim-port <port> |
커스텀 이미지의 포트 | 3000 |
--mode <report|struct> |
출력 형식 | report |
--output-format <file> |
커스텀 출력 형식 템플릿 | 기본 템플릿 |
--keep |
실행 후 컨테이너 유지 | 삭제 |
--build |
Docker 이미지 강제 재빌드 | - |
--rerun <session_id> |
기존 세션 재실행 | - |
--token-limit <n> |
최대 토큰 수 | 무제한 |
--call-limit <n> |
최대 API 호출 수 | 무제한 |
--cost-limit <n> |
최대 비용 (USD) | 무제한 |
--claude-model <model> |
Claude 모델 | claude-opus-4-5-20251101 |
--codex-model <model> |
Codex 모델 | gpt-5.2-codex |
--gemini-model <model> |
Gemini 모델 | gemini-3-pro-preview |
--opencode-model <model> |
OpenCode 모델 | - |
--export-images <file> |
Docker 이미지 tar 내보내기 | - |
--import-images <file> |
Docker 이미지 tar 불러오기 | - |
| Agent | 기본 모델 | CLI | 비고 |
|---|---|---|---|
| Claude | claude-opus-4-5-20251101 |
Claude Code CLI | - |
| Codex | gpt-5.2-codex |
OpenAI Codex CLI | - |
| Gemini | gemini-3-pro-preview |
Gemini CLI | - |
| OpenCode | (지정 필수) | OpenCode v1.x | Ollama, DeepSeek, Mistral 등 |
모든 에이전트는 Kali Linux 기반 이미지에서 실행되며 nmap, sqlmap, nikto, dirb, curl 등 보안 도구가 포함되어 있습니다.
OpenCode는 로컬 LLM(Ollama)을 포함한 다양한 프로바이더를 지원하는 범용 에이전트입니다.
# .env에 Ollama 서버 주소 설정
OLLAMA_API_BASE=http://192.168.0.57:11434
# 실행 (LiteLLM 프록시가 gpt-4o 요청을 Ollama로 라우팅)
./run.sh --prompt prompts/guided.txt --opencode --opencode-model "openai/gpt-4o" --mode struct
# 이미지 내보내기 (소스 머신)
./run.sh --export-images images.tar
# 이미지 불러오기 (폐쇄망 머신)
./run.sh --import-images images.tar| Type | 이미지 | 포트 | 주요 취약점 |
|---|---|---|---|
juice-shop |
bkimminich/juice-shop |
3000 | OWASP Top 10 |
mlflow |
mlflow-vulnerable:2.9.2 (로컬 빌드) |
5000 | RCE, Path Traversal, SSRF |
vuln-shop |
vuln-shop:latest (로컬 빌드) |
3000 | 커스텀 취약점 |
bentoml |
bentoml-vulnerable:1.4.2 (로컬 빌드) |
3000 | RCE, SSRF |
gradio |
gradio-vulnerable:4.19.0 (로컬 빌드) |
7860 | Path Traversal, File Access |
- Scenario 1:
{victim}_{agent}_{guidance}_{structure}_{NN}(예:juice-shop_claude_guided_structured_01) - Scenario 2:
{victim}_{agent}_scen2_{technique}_{NN}(예:mlflow_gemini_scen2_sqli_01)
results/<session_id>/
├── session.json # 세션 메타데이터 (에이전트, victim, 모델 등)
├── output/ # 에이전트 결과 (JSONL/Markdown)
├── api-logs/ # API 호출 메트릭 + 대화 로그
│ ├── usage.jsonl # 전체 API 호출 메트릭
│ └── proxy.log # LiteLLM 프록시 디버그 로그
├── http-logs/ # 에이전트 ↔ victim HTTP 트래픽
└── analysis/ # 공격 분류, ASR 검증, 메트릭 요약
실험 실행 후 자동 수행:
- 공격 분류 — OWASP CRS 패턴으로 HTTP 요청 분류 (
classify_attacks.py) - 성공 검증 — HTTP 응답 기반 ASR 산출 (
verify_success.py) - 메트릭 집계 — 토큰/비용/레이턴시 요약 (
aggregate_metrics.py)
# 세션 재실행 (에이전트 자동 감지)
./run.sh --rerun juice-shop_claude_guided_structured_01
# 다른 모델로 재실행
./run.sh --rerun juice-shop_codex_guided_structured_01 --codex-model gpt-4o# 특정 에이전트로 전체 실행
./run_scen2.sh --agent claude
# 필터링
./run_scen2.sh --agent codex --technique sqli --victim juice-shop
# 미리보기
./run_scen2.sh --agent gemini --dry-run- 이 도구는 교육 및 연구 목적으로만 사용
- 승인된 환경에서만 보안 테스트 수행
- 실제 시스템에 대한 무단 공격은 불법