Skip to main content

c2z 실행 가이드


1. Kubernetes에서 실행하는 방법

1. 자동 설치 (권장)

가장 간단한 방법은 제공된 install.sh 스크립트를 사용하는 것입니다.

# 프로젝트 루트에서 실행
chmod +x install.sh
./install.sh

설치 스크립트가 자동으로 수행하는 작업:

  1. Python 가상환경 설정 (.venv)
    • Python 3 가상환경 생성
    • requirements.txt의 의존성 설치 (click, tabulate, pyyaml)
  2. 시스템 요구사항 검증
    • RAM 16GB 이상 확인
    • Docker 설치 확인 (macOS의 경우 필수)
  3. Kubernetes 클러스터 설치
    • Linux: K3s (네이티브 설치)
    • macOS: k3d (Docker Desktop 기반)
  4. Helm 설치
    • Helm 3 자동 설치
  5. c2z 스택 배포
    • charts/c2z Helm 차트를 c2z-system 네임스페이스에 배포
    • 모든 활성화된 시나리오와 모니터링 스택 설치
  6. CLI 래퍼 스크립트 생성
    • ./c2z 실행 파일 생성 (Python 가상환경 자동 활성화)

2. 수동 설치

각 단계를 개별적으로 실행하고 싶다면:

Step 1: Kubernetes 클러스터 설정

Linux (K3s):

curl -sfL <https://get.k3s.io> | sh -s - \\
--write-kubeconfig-mode 644 \\
--disable traefik \\
--disable servicelb

# kubeconfig 설정
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config

macOS (k3d):

# k3d 설치
curl -s <https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh> | bash

# 클러스터 생성
k3d cluster create c2z \\
--api-port 6443 \\
--port "80:80@server:0" \\
--port "443:443@server:0" \\
--port "3000-3005:3000-3005@server:0" \\
--agents 1 \\
--no-lb \\
--k3s-arg "--disable=traefik@server:0" \\
--k3s-arg "--disable=servicelb@server:0" \\
--wait

# kubeconfig 설정
k3d kubeconfig merge c2z --kubeconfig-switch-context

Step 2: Helm 설치

curl <https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3> | bash

Step 3: c2z 배포

# 로컬 차트로 배포
helm upgrade --install c2z ./charts/c2z \\
--namespace c2z-system \\
--create-namespace \\
--wait \\
--timeout 10m

Step 4: CLI 설정

# Python 가상환경 생성 및 활성화
python3 -m venv .venv
source .venv/bin/activate

# 의존성 설치
pip install -r requirements.txt

# CLI 사용
./c2z list

3. CLI 사용법

설치가 완료되면 c2z CLI를 사용하여 시나리오를 관리할 수 있습니다.

# 사용 가능한 시나리오 목록 확인
./c2z list

# 시나리오 배포 (활성화)
./c2z deploy web-vuln

# 시나리오 삭제 (비활성화)
./c2z delete web-vuln

# 전체 시스템 상태 확인
./c2z status

# 시나리오 로그 확인
./c2z logs web-vuln

4. 배포 확인

# 모든 네임스페이스의 Pod 확인
kubectl get pods -A

# c2z-system 네임스페이스 확인
kubectl get all -n c2z-system

# 시나리오 네임스페이스 확인
kubectl get all -n scenario-web-vuln

5. 서비스 접속

시나리오가 배포되면 다음과 같이 접속할 수 있습니다:

# Port-forward를 통한 접속
kubectl port-forward -n scenario-web-vuln svc/dvwa 8080:80
# 브라우저에서 <http://localhost:8080> 접속

kubectl port-forward -n scenario-web-vuln svc/juice-shop 3000:3000
# 브라우저에서 <http://localhost:3000> 접속

# Kali Linux 공격자 환경 접속
kubectl exec -it -n c2z-system deployment/kali -- /bin/bash


2. 폴더 및 파일 구조 설명

c2z/
├── .github/ # GitHub 설정
│ ├── PULL_REQUEST_TEMPLATE.md # PR 템플릿
│ └── workflows/ # (향후 CI/CD 워크플로우)

├── .venv/ # Python 가상환경 (자동 생성)

├── charts/ # Helm Charts 디렉토리
│ └── c2z/ # 메인 c2z Helm 차트
│ ├── Chart.yaml # 차트 메타데이터
│ ├── values.yaml # 기본 설정 값
│ └── templates/ # Kubernetes 리소스 템플릿
│ ├── namespaces.yaml # 네임스페이스 정의
│ ├── network-policies.yaml # 네트워크 격리 정책
│ ├── resource-quotas.yaml # 리소스 제한 정책
│ ├── attacker-zone/ # 공격자 환경 리소스
│ │ ├── kali-deployment.yaml # Kali Linux Pod
│ │ ├── kali-service.yaml # Kali 서비스
│ │ └── kali-pvc.yaml # 영구 스토리지
│ ├── monitoring/ # 모니터링 스택
│ │ ├── prometheus-deployment.yaml # 메트릭 수집
│ │ ├── grafana-deployment.yaml # 시각화 대시보드
│ │ └── loki-deployment.yaml # 로그 수집
│ └── scenarios/ # 시나리오 정의
│ └── web-vuln/ # Web 취약점 시나리오
│ ├── dvwa-deployment.yaml # DVWA 앱
│ ├── dvwa-service.yaml # DVWA 서비스
│ ├── juiceshop-deployment.yaml # Juice Shop 앱
│ └── juiceshop-service.yaml # Juice Shop 서비스

├── scenarios/ # 시나리오별 문서 및 소스
│ └── web-vuln/
│ └── README.md # Web 취약점 시나리오 설명

├── research/ # 취약점 연구 자료
│ ├── broken-access-control/ # 접근 제어 취약점 연구
│ ├── injection/ # 인젝션 취약점 연구
│ ├── supply-chain/ # 공급망 공격 연구
│ └── template.md # 연구 문서 템플릿

├── install.sh # 원클릭 설치 스크립트
├── c2z-cli.py # CLI 관리 도구 (Python)
├── c2z # CLI 래퍼 스크립트 (자동 생성)
├── requirements.txt # Python 의존성
├── README.md # 프로젝트 문서 (영어/한국어)
├── guide.mdx # 이 가이드 문서
├── LICENSE # Apache 2.0 라이선스
└── .gitignore # Git 제외 파일 목록


3. 주요 컴포넌트 역할

설치 및 설정 파일

install.sh

  • 역할: 전체 c2z 환경을 자동으로 설치하는 메인 스크립트
  • 주요 기능:
    • Python 가상환경 설정
    • 시스템 요구사항 검증 (RAM, Docker)
    • Kubernetes 클러스터 설치 (OS별 분기: K3s/k3d)
    • Helm 설치
    • c2z Helm 차트 배포
    • CLI 래퍼 스크립트 생성
  • 실행 흐름:
    1. setup_venv() - Python 환경 준비
    2. check_requirements() - 시스템 검증
    3. install_k8s() - Kubernetes 설치
    4. install_helm() - Helm 설치
    5. deploy_c2z() - 차트 배포
    6. create_wrapper() - CLI 래퍼 생성

requirements.txt

  • 역할: Python CLI 도구의 의존성 정의
  • 패키지:
    • click: CLI 프레임워크
    • tabulate: 테이블 형식 출력
    • pyyaml: YAML 파싱 (Kubernetes 리소스 처리)

c2z-cli.py

  • 역할: 시나리오 관리를 위한 Python CLI 도구
  • 주요 명령어:
    • list: 사용 가능한 시나리오 목록 표시
    • deploy <scenario-id>: 시나리오 활성화 (Helm values 업데이트)
    • delete <scenario-id>: 시나리오 비활성화
    • status: 전체 시스템 상태 확인
    • logs <scenario-id>: 시나리오 로그 조회
  • 동작 방식:
    • Monolithic Helm 차트 구조 사용
    • helm upgrade --reuse-values --set scenarios.<name>.enabled=true/false 방식으로 시나리오 토글
    • kubectl 명령어를 통한 상태 조회 및 로그 확인

c2z (래퍼 스크립트)

  • 역할: Python 가상환경을 자동으로 활성화하고 c2z-cli.py 실행

  • 생성: install.sh에 의해 자동 생성

  • 내용:

    #!/bin/bash
    source $(dirname "$0")/.venv/bin/activate
    python3 $(dirname "$0")/c2z-cli.py "$@"


Helm Chart 구조

charts/c2z/Chart.yaml

  • 역할: Helm 차트 메타데이터 정의
  • 내용:
    • 차트 이름: c2z
    • 버전: 0.1.0
    • 앱 버전: 1.0.0
    • 타입: application

charts/c2z/values.yaml

  • 역할: 차트의 기본 설정 값 정의
  • 주요 섹션:
    • global: 공통 설정 (이미지 레지스트리, Pull Policy)
    • attacker: Kali Linux 공격자 환경 설정
      • 이미지, 리소스 제한, 영구 스토리지 설정
    • scenarios: 시나리오별 활성화 플래그 및 설정
      • webVuln.enabled: Web 취약점 시나리오 활성화 여부
      • containerEscape.enabled: Container Escape 시나리오
      • networkAttack.enabled: Network Attack 시나리오
    • monitoring: Prometheus, Grafana, Loki 설정
    • networkPolicies: 네트워크 격리 정책 활성화 여부

charts/c2z/templates/namespaces.yaml

  • 역할: Kubernetes 네임스페이스 생성
  • 생성 네임스페이스:
    • c2z-system: 공격자 환경 및 모니터링 스택
    • scenario-web-vuln: Web 취약점 시나리오
    • scenario-container-escape: Container Escape 시나리오
    • scenario-network-attack: Network Attack 시나리오

charts/c2z/templates/network-policies.yaml

  • 역할: 네트워크 격리 정책 정의
  • 보안 기능:
    • 시나리오 간 네트워크 격리
    • 기본 Deny 정책 (명시적 허용만 통신 가능)
    • 공격자 환경에서 시나리오로의 접근 허용

charts/c2z/templates/resource-quotas.yaml

  • 역할: 네임스페이스별 리소스 제한
  • 제한 항목:
    • CPU, 메모리 요청/제한
    • Pod 개수 제한
    • 리소스 남용 방지

공격자 환경 (Attacker Zone)

attacker-zone/kali-deployment.yaml

  • 역할: Kali Linux 공격자 Pod 배포
  • 특징:
    • 이미지: kalilinux/kali-rolling:latest
    • 리소스: 2Gi RAM, 1 vCPU (요청) / 4Gi RAM, 2 vCPU (제한)
    • 영구 스토리지 마운트 (/root)
    • 네트워크 도구 및 침투 테스트 도구 사전 설치

attacker-zone/kali-pvc.yaml

  • 역할: Kali 환경의 영구 스토리지 볼륨 클레임
  • 용량: 20Gi
  • 용도: 공격 스크립트, 결과 저장

attacker-zone/kali-service.yaml

  • 역할: Kali Pod에 대한 서비스 노출
  • 타입: ClusterIP (내부 접근)

📊 모니터링 스택

monitoring/prometheus-deployment.yaml

  • 역할: 메트릭 수집 및 저장
  • 기능:
    • Kubernetes 클러스터 메트릭 수집
    • 시나리오 Pod 메트릭 수집
    • 7일 데이터 보존
    • 10Gi 스토리지

monitoring/grafana-deployment.yaml

  • 역할: 메트릭 시각화 대시보드
  • 기능:
    • Prometheus 데이터 소스 연동
    • 실시간 대시보드
    • 기본 관리자 계정: admin/admin

monitoring/loki-deployment.yaml

  • 역할: 로그 수집 및 저장
  • 기능:
    • 모든 Pod 로그 수집
    • Grafana와 연동하여 로그 조회
    • 공격 패턴 분석 지원

시나리오: Web 취약점 (web-vuln)

scenarios/web-vuln/dvwa-deployment.yaml

  • 역할: DVWA (Damn Vulnerable Web Application) 배포
  • 이미지: vulnerables/web-dvwa:latest
  • 취약점:
    • SQL Injection
    • XSS (Cross-Site Scripting)
    • CSRF (Cross-Site Request Forgery)
    • Command Injection
    • File Upload 취약점
  • 난이도: 초급 ~ 중급

scenarios/web-vuln/dvwa-service.yaml

  • 역할: DVWA 서비스 노출
  • 포트: 80 (HTTP)
  • 접속: Port-forward 또는 NodePort를 통한 접근

scenarios/web-vuln/juiceshop-deployment.yaml

  • 역할: OWASP Juice Shop 배포
  • 이미지: bkimminich/juice-shop:latest
  • 취약점:
    • OWASP Top 10 전체 취약점
    • 100+ 개의 보안 챌린지
    • 실전적인 웹 애플리케이션 보안 학습

scenarios/web-vuln/juiceshop-service.yaml

  • 역할: Juice Shop 서비스 노출
  • 포트: 3000 (HTTP)

📚 문서 및 연구 자료

scenarios/web-vuln/README.md

  • 역할: Web 취약점 시나리오 상세 설명
  • 내용:
    • 환경 스펙 (OS, 언어, 웹서버, DB)
    • 소스 코드 및 재현 방법
    • 배포 구조 설명
    • 향후 커스터마이징 계획

research/ 디렉토리

  • 역할: 취약점 연구 자료 저장소
  • 구조:
    • broken-access-control/: 접근 제어 취약점 연구
    • injection/: 인젝션 공격 연구
    • supply-chain/: 공급망 공격 연구
    • template.md: 연구 문서 작성 템플릿

시스템 동작 흐름

1. 설치 단계

install.sh 실행

Python 가상환경 생성 (.venv)

시스템 요구사항 검증

Kubernetes 클러스터 설치 (K3s/k3d)

Helm 설치

c2z Helm 차트 배포 (c2z-system 네임스페이스)

CLI 래퍼 스크립트 생성 (./c2z)

2. 시나리오 배포 단계

./c2z deploy web-vuln 실행

c2z-cli.py의 deploy() 함수 호출

helm upgrade c2z ./charts/c2z --set scenarios.webVuln.enabled=true

Helm이 values.yaml 업데이트

Kubernetes가 변경사항 감지

scenario-web-vuln 네임스페이스에 Pod 생성

DVWA, Juice Shop 컨테이너 실행

서비스 노출 및 접속 정보 출력

3. 공격 실습 단계

Kali Pod 접속 (kubectl exec)

네트워크 정책에 따라 시나리오 접근 허용

공격 도구 실행 (nmap, sqlmap, burpsuite 등)

취약점 탐지 및 익스플로잇

Prometheus/Loki가 메트릭 및 로그 수집

Grafana 대시보드에서 실시간 모니터링


학습 경로

  1. 초급: Web 취약점 시나리오 (web-vuln)
    • DVWA로 기본 웹 보안 개념 학습
    • Juice Shop으로 실전 웹 애플리케이션 보안 실습
  2. 중급: Container Escape 시나리오 (구현 예정)
    • Privileged Pod 탈출 기법
    • Docker Socket 마운트 조작manipulation
  3. 중급: Network Attack 시나리오 (구현 예정)
    • ARP Spoofing
    • MITM (Man-in-the-Middle) 공격
    • 서비스 거부 공격 (DoS)

트러블슈팅

문제: Pod가 Pending 상태

# 원인 확인
kubectl describe pod <pod-name> -n <namespace>

# 리소스 부족 시 values.yaml에서 리소스 제한 조정
helm upgrade c2z ./charts/c2z --set attacker.kali.resources.requests.memory=1Gi

문제: 서비스 접속 불가

# 서비스 상태 확인
kubectl get svc -n scenario-web-vuln

# Port-forward 설정
kubectl port-forward -n scenario-web-vuln svc/dvwa 8080:80

문제: Helm 배포 실패

# Helm 릴리스 상태 확인
helm list -n c2z-system

# 롤백
helm rollback c2z -n c2z-system

# 완전 재설치
helm uninstall c2z -n c2z-system
./install.sh


추가 정보

  • 라이선스: Apache 2.0
  • 기여 방법: .github/PULL_REQUEST_TEMPLATE.md 참조
  • 이슈 리포트: GitHub Issues 사용