업데이트로 돌아가기
New releaseAug 16, 2026

k8scout v0.1.2

단일 바이너리를 손상된 Kubernetes 파드에 드롭하고 클러스터 관리자, 노드 이스케이프, 시크릿 도난, 클라우드 IAM 탈취로 이어지는 모든 현실적인 공격 경로를 즉시 매핑하세요.

공유

k8scout 로고

GitHub stars GitHub forks GitHub issues GitHub license

k8scout

베타 — 승인된 보안 평가를 위한 단일 바이너리 Kubernetes 공격 경로 엔진입니다.

침해된 파드에 넣고 실행하면, 현재 거점에서 cluster-admin, 노드 접근, 시크릿 탈취, 클라우드 IAM 역할에 이르기까지 모든 현실적인 권한 상승 경로를 지도로 보여줍니다.


아이디어

Kubernetes 파드에서 RCE를 확보했습니다. 이제 무엇을 할까요?

k8scout이 그 질문에 답합니다. 침해된 파드의 서비스 어카운트가 무엇을 할 수 있는지 자동으로 탐색하고, RBAC 그래프를 매핑하며, 정확한 거점에서 고가치 대상까지의 다단계 공격 경로를 추적합니다.

세 가지 모드로 동작합니다:

  • 공격 모드 (기본값) — 침해된 파드 내부에서 실행합니다. 현재 위치에서 자신의 신원, 권한, 도달 가능한 모든 권한 상승 경로를 탐색합니다.
  • 리뷰어 모드 (--reviewer-mode) — 읽기 전용 SA로 실행하여 모든 신원에 대한 전체 클러스터 공격 표면을 감사합니다.
  • 정찰 모드 (--recon) — 자신의 신원, 유효 권한, 접근 가능한 리소스만 빠르고 흔적 없이 살펴봅니다. 그래프나 경로 탐색은 없습니다. 클러스터 전체에서 나열할 수 없는 네임스페이스를 탐색하려면 --bruteforce-ns를 추가하세요.

데모

k8scout 데모


무엇을 찾아내는가

k8scout은 가중치가 부여된 권한 그래프를 구축하고 Dijkstra 기반 경로 탐색을 실행하여 현실적인 다단계 공격 체인을 발견합니다:

  • 파드에서 cluster-admin까지 — RBAC 바인딩, 워크로드 변조, 또는 CRB 생성을 통한 경로
  • 컨테이너 탈출에서 노드까지 — 특권 컨테이너, hostPID, hostNetwork, 위험한 capability, 또는 hostPath 마운트를 통한 경로
  • 측면 이동 — 다른 파드로 exec, 해당 파드의 SA 토큰 탈취, 그 권한을 통한 피벗
  • 시크릿 및 자격 증명 탈취 — 마운트된 SA 토큰, 시크릿, 자격 증명이 유출된 configmap, 고아 토큰
  • 클라우드 IAM 권한 상승 — IRSA (AWS), GKE Workload Identity, Azure Workload Identity, 프로젝티드 토큰 audience 악용
  • 임퍼소네이션 체인 — 임퍼소네이션 권한을 통한 SA 간 탈취
  • 워크로드 변조 — 디플로이먼트를 패치하여 SA를 변경한 뒤 해당 SA의 권한 상속
  • 웹훅 주입 — mutating 웹훅을 제어하여 향후 워크로드에 주입
  • GitOps 오퍼레이터 악용 — ArgoCD, Flux, External Secrets, Vault 오퍼레이터 권한 상승
  • 잘못된 구성 탐지 — 끊어진 바인딩, 와일드카드 verb, 자동 마운트된 토큰, 환경 변수 내 평문 시크릿

모든 발견 사항에는 MITRE ATT&CK 기법 ID, 위험 점수, 그리고 실제 그래프 노드가 포함된 단계별 공격 경로가 함께 제공됩니다. 총 50개의 탐지 규칙이 있습니다.


빠른 시작

침해된 파드에서 (주요 사용 사례)

# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout

# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json

# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json

# This flow works exactly like this in you're revshell!

바이너리는 클러스터 내부에서 실행 중임을 자동으로 감지하고, 파드와 SA를 식별한 뒤, 정확한 거점에서 경로 탐색을 시작합니다.

사용 목적: 침투 테스트, 레드팀 작전, 내부 보안 검토, 클러스터 강화 감사. 어떤 클러스터에 대해서든 실행하기 전에 반드시 적절한 승인을 받으세요.

로컬 머신에서

# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json

# Target a single namespace
k8scout --namespace production --out result.json

정찰 모드 (빠른 권한 및 리소스 확인)

# Who am I, what can I do, and what resources can I access?
k8scout --recon

# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns

# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt

정찰은 그래프 구축, 추론, AI를 건너뜁니다 — "이 토큰이 실제로 무엇을 가졌는가?"에 답하는 가장 빠른 방법입니다. 현재 신원, 유효 권한(SelfSubjectRulesReview), 그리고 리소스별 capability 매트릭스(SelfSubjectAccessReview)를 보고합니다. --bruteforce-ns는 모든 네임스페이스가 가진 잘 알려진 객체(네임스페이스 객체, 해당 default ServiceAccount, 또는 kube-root-ca.crt ConfigMap)를 읽어 네임스페이스 존재를 확인합니다 — 신원이 네임스페이스를 나열할 수 없지만 특정 네임스페이스에는 여전히 접근할 수 있을 때 유용합니다.

리뷰어 모드 (전체 클러스터 감사)

# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml

# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json

AI 내러티브와 함께

export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json

설치

사전 빌드된 바이너리

Releases 페이지에서 다운로드하세요. 모든 바이너리는 의존성 없이 정적으로 링크되어 있습니다.

바이너리플랫폼
k8scout-linux-amd64Linux x86-64
k8scout-linux-arm64Linux ARM64
k8scout-darwin-amd64macOS Intel
k8scout-darwin-arm64macOS Apple Silicon

소스에서 빌드

Go 1.22+가 필요합니다.

git clone https://github.com/hac01/k8scout
cd k8scout
make build          # native binary
make build-linux    # static Linux amd64 binary
make build-all      # all four release targets

동작 방식

k8scout (running inside compromised pod)
 |
 ├── 1. Detect foothold
 │     Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
 │
 ├── 2. Discover permissions
 │     SSRR per namespace + ~30 concurrent SSAR spot-checks
 │     (always permitted, no RBAC needed)
 │
 ├── 3. Enumerate cluster objects (graceful degradation if denied)
 │     Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
 │
 ├── 4. Build attack graph
 │     Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
 │     Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
 │            can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
 │
 ├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
 │     Weighted by attacker effort — cheapest (most realistic) paths first
 │     Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
 │
 ├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
 │
 ├── 7. Optional: AI risk narrative (GPT-4o)
 │
 └── 8. Output: text summary + JSON report

파드를 나열할 수 없는 최소한의 SA나 RBAC 객체만으로도, 이 도구는 신원 데이터만으로 거점 그래프를 합성하고 SSRR/SSAR 권한을 통해 도달 가능한 것을 발견합니다.


공격 그래프 시각화

JSON 보고서를 아무 브라우저에서 web/graph.html에 로드하세요 (드래그 앤 드롭, 서버 불필요).

  • Attack Paths 탭 — 위험 점수순으로 정렬되며, 각 항목은 거점에서 대상까지의 전체 다중 홉 체인을 보여줍니다
  • Multi-chain 뷰 — 겹치는 공격 경로를 단일 그래프에서 동시에 시각화합니다
  • Force-directed 그래프 — 색상으로 구분된 카테고리와 위험 점수 링을 가진 모든 노드와 엣지
  • Focus 모드 — 구조적 노이즈를 흐리게 하여 공격 관련 노드를 강조합니다
  • RBAC 토글 — RBAC 노드를 숨기지만 활성 공격 경로의 일부일 때는 자동으로 표시합니다
  • 미니맵 — 컨텍스트를 잃지 않고 대규모 그래프를 탐색합니다
  • 노드 상세 — 아무 노드나 클릭하면 메타데이터, 연결, 관련 발견 사항을 볼 수 있습니다
  • 내보내기 — 자체 포함 HTML 침투 테스트 보고서를 다운로드합니다

CLI 레퍼런스

k8scout [flags]

Flags:
  --out string            Output JSON file path (default "k8scout-result.json")
  --namespace string      Enumerate a single namespace
  --all-namespaces        Enumerate all accessible namespaces (default true)
  --format string         Output format: text | json (default "text")
  --timeout int           Per-request timeout in seconds (default 60)
  --log-level string      debug | info | warn | error (default "info")
  --kubeconfig string     Path to kubeconfig (auto-detected if not set)
  --reviewer-mode         Full cluster RBAC audit for all identities
  --recon                 Quick recon: identity, permissions (SSRR), accessible resources (SSAR)
  --bruteforce-ns         Bruteforce namespace names to find ones you can't list (use with --recon)
  --ns-wordlist string    Custom namespace wordlist for --bruteforce-ns (defaults to a built-in list)
  --stealth               Skip SSRR/SSAR to reduce audit log footprint
  --skip-ssar             Skip SSAR spot-checks only
  --openai-key string     OpenAI API key (or OPENAI_API_KEY env var)
  --openai-model string   OpenAI model (default "gpt-4o")
  --skip-ai               Skip AI narrative generation

RBAC 요구 사항

침해된 파드에서 실행할 때: 특별한 RBAC이 필요하지 않습니다. SSRR과 SSAR은 항상 허용됩니다. SA가 클러스터 객체를 나열할 수 없으면 도구는 우아하게 성능이 저하됩니다 — 그래도 권한을 발견하고 사용 가능한 정보로부터 발견 사항을 생성합니다.

전체 열거를 위해서는 (k8scout SA에 권장): deploy/rbac.yaml에 정의된 읽기 전용 접근:

카테고리