
k8scout v0.1.2
단일 바이너리를 손상된 Kubernetes 파드에 드롭하고 클러스터 관리자, 노드 이스케이프, 시크릿 도난, 클라우드 IAM 탈취로 이어지는 모든 현실적인 공격 경로를 즉시 매핑하세요.
k8scout
베타 — 승인된 보안 평가를 위한 단일 바이너리 Kubernetes 공격 경로 엔진입니다.
침해된 파드에 넣고 실행하면, 현재 거점에서 cluster-admin, 노드 접근, 시크릿 탈취, 클라우드 IAM 역할에 이르기까지 모든 현실적인 권한 상승 경로를 지도로 보여줍니다.
아이디어
Kubernetes 파드에서 RCE를 확보했습니다. 이제 무엇을 할까요?
k8scout이 그 질문에 답합니다. 침해된 파드의 서비스 어카운트가 무엇을 할 수 있는지 자동으로 탐색하고, RBAC 그래프를 매핑하며, 정확한 거점에서 고가치 대상까지의 다단계 공격 경로를 추적합니다.
세 가지 모드로 동작합니다:
- 공격 모드 (기본값) — 침해된 파드 내부에서 실행합니다. 현재 위치에서 자신의 신원, 권한, 도달 가능한 모든 권한 상승 경로를 탐색합니다.
- 리뷰어 모드 (
--reviewer-mode) — 읽기 전용 SA로 실행하여 모든 신원에 대한 전체 클러스터 공격 표면을 감사합니다. - 정찰 모드 (
--recon) — 자신의 신원, 유효 권한, 접근 가능한 리소스만 빠르고 흔적 없이 살펴봅니다. 그래프나 경로 탐색은 없습니다. 클러스터 전체에서 나열할 수 없는 네임스페이스를 탐색하려면--bruteforce-ns를 추가하세요.
데모
무엇을 찾아내는가
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-amd64 | Linux x86-64 |
k8scout-linux-arm64 | Linux ARM64 |
k8scout-darwin-amd64 | macOS Intel |
k8scout-darwin-arm64 | macOS 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에 정의된 읽기 전용 접근: