
모든 아이덴티티에서 Kubernetes 클러스터를 스캔하고, 위험한 권한을 표시하며, 이를 다단계 권한 상승 경로로 연결하여 클러스터 장악에 이르게 합니다.
Kubernetes RBAC 공격 경로 매퍼. 귀하의 아이덴티티가 무엇을 할 수 있는지 찾아내고, 위험한 권한을 표시하며, 이를 클러스터 장악으로 이어지는 다단계 경로로 연결합니다.
레드팀과 침투 테스터를 위해 제작되었습니다.
kube-reaper는 모든 아이덴티티(사용자, 서비스 계정, 그룹)에서 Kubernetes 클러스터를 스캔하고 다음을 생성합니다:
Rust 툴체인(rustup + stable)이 필요합니다.
git clone https://github.com/youruser/kube-reaper.git
cd kube-reaper
cargo build --release
바이너리는 target/release/kube-reaper에 있습니다.
musl 빌드는 의존성 없는 완전한 정적 바이너리를 생성합니다. 모든 Linux x86_64 시스템에서 작동합니다.
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
바이너리는 target/x86_64-unknown-linux-musl/release/kube-reaper에 있습니다 (~5.4 MB).
# Copy to a Kubernetes node
scp target/x86_64-unknown-linux-musl/release/kube-reaper user@node:/tmp/
# Copy into a running pod
kubectl cp target/x86_64-unknown-linux-musl/release/kube-reaper mynamespace/mypod:/tmp/kube-reaper
# Scan with current kubeconfig
kube-reaper
# Scan a specific namespace
kube-reaper -n production
# Scan with a stolen SA token
kube-reaper --token <JWT> --server https://10.0.0.1:6443
# Scan as a different user (requires impersonate permissions)
kube-reaper --as-user system:serviceaccount:development:code-server
# Recursive identity pivot (read SA tokens, mint new tokens, map transitive access)
kube-reaper --pivot
# Pivot with custom depth (default: 3)
kube-reaper --pivot --pivot-depth 5
# Show only critical and high findings
kube-reaper -s high
# Output JSON
kube-reaper -o json
# Save JSON report to file
kube-reaper -w results.json
Usage: kube-reaper [OPTIONS]
Options:
-n, --namespace <NAMESPACE> Target namespace (default: all accessible)
-k, --kubeconfig <KUBECONFIG> Path to kubeconfig file
--token <TOKEN> Bearer token (requires --server)
--server <SERVER> API server URL (required with --token)
--as-user <USER> Impersonate a user
--as-group <GROUP> Impersonate a group
--pivot Recursive identity pivot via SA secrets and TokenRequest
--pivot-depth <N> Maximum pivot depth [default: 3]
-o, --output <OUTPUT> Output format [default: terminal] [values: terminal, json]
-w, --write <WRITE> Write JSON results to file
-s, --severity <SEVERITY> Minimum severity [default: low] [values: critical, high, medium, low, info]
--unconventional-only Show only unconventional RBAC abuses
--chains-only Show only attack chains
-h, --help Print help
-V, --version Print version
kube-reaper는 다음 인증 방법을 순서대로 시도합니다:
--token + --server - 직접 베어러 토큰. 탈취한 SA 토큰이나 JWT와 함께 사용합니다. 자체 서명 인증서를 자동으로 수락합니다.--kubeconfig / -k - 명시적 kubeconfig 파일. KUBECONFIG 환경 변수도 읽습니다.~/.kube/config.--as-user와 --as-group은 모든 인증 방법에 임퍼소네이션 헤더를 추가합니다. 이 기능이 작동하려면 귀하의 아이덴티티에 impersonate 동사가 있어야 합니다.
--pivot 플래그는 재귀적 아이덴티티 피벗을 활성화합니다. 이 기능은 서비스 계정 자격 증명을 통해 피벗하여 전이적 공격 경로를 발견합니다.
kubernetes.io/service-account-token 유형)을 읽고 토큰을 추출합니다.serviceaccounts/token을 생성할 수 있는 각 네임스페이스에 대해, TokenRequest API를 통해 단기 토큰을 발급합니다.--pivot-depth(기본값: 3)까지 프로세스가 반복됩니다.스캔은 BFS 순회를 사용하여 최단 피벗 경로를 먼저 찾습니다. 폭주 스캔을 방지하기 위해 50개 아이덴티티에서 중지합니다.
각 피벗된 아이덴티티는 다음을 표시합니다:
피벗 스캐너는 오탐을 방지하기 위해 다음 가드를 적용합니다:
apiGroups: ["*"])의 규칙만 시크릿 읽기 및 토큰 생성 검사에 포함됩니다. 비코어 그룹(예: custom.metrics.k8s.io)의 규칙은 일치하지 않습니다.resourceNames가 설정된 규칙은 토큰 생성에 포함되지 않습니다. 하나의 명명된 서비스 계정에 대한 토큰 생성을 허용하는 규칙은 제한 없는 토큰 생성과 동일하지 않습니다.resources: ["*"]에 대한 임의의 동사가 아니라 verbs: ["*"]를 요구합니다.터미널 출력은 다음 섹션을 표시합니다(각 섹션은 발견 사항이 있을 때만 나타납니다):
| 섹션 | 내용 |
|---|---|
| Pod Context Analysis | 탈출 벡터, 기능, 클라우드 IMDS, 네트워크, SA 토큰, 마운트, 환경 변수 |
| Attack Path Chains | 단계별 지침이 포함된 다단계 공격 경로 |
| Identity Pivot Graph | 방법, 권한, 추가 피벗 가능성이 포함된 재귀적 아이덴티티 피벗 맵 |
| Dangerous Pods | 특권 컨테이너, 호스트 마운트, 런타임 소켓, 노출된 시크릿 |
| Exposed Services | 클러스터 외부에서 접근 가능한 LoadBalancer 및 NodePort 서비스 |
| Sensitive ConfigMaps | 자격 증명이나 시크릿이 포함된 키가 있는 ConfigMap |
| CronJobs | 위험한 서비스 계정 권한이 있는 예약 작업 |
| Secret Triage | 유형 및 공격 가치별로 분류된 접근 가능한 시크릿 |
| CRD Attack Surface | 알려진 위험한 오퍼레이터의 사용자 정의 리소스 |
| DNS Service Discovery | CoreDNS 쿼리를 통해 발견된 서비스 (RBAC 불필요) |
| Admission Controller Probing | 6가지 위험한 파드 구성에 대한 네임스페이스별 드라이런 결과 |
| Other Identities | 피벗 대상인 과도한 권한을 가진 아이덴티티 |
| Namespace Security | 네임스페이스별 PSS 적용 상태 |
| Dangerous Permissions | 심각도별 개별 권한 발견 사항 |
| Summary | 모든 발견 카테고리의 개수 |
selfsubjectrulesreviews에 대한 create 권한이 필요합니다(기본적으로 모든 인증된 사용자에게 부여됨)| 스캔 모듈 | 필요한 권한 |
|---|---|
| 권한 열거 | selfsubjectrulesreviews (기본 부여) |
| 네임스페이스 나열 | list namespaces |
| 파드 열거 | 대상 네임스페이스의 list pods |
| 시크릿 분류 | 대상 네임스페이스의 list secrets |
| RBAC 그래프 | list roles, clusterroles, rolebindings, clusterrolebindings |
| CRD 탐지 | list customresourcedefinitions |
| 아이덴티티 피벗 | 대상 네임스페이스의 list secrets 또는 create serviceaccounts/token |
| 파드 컨텍스트 | API 권한 불필요 (로컬 파일 시스템 및 네트워크 읽기) |
스캔 모듈에 권한이 없으면 이를 보고하고 계속 진행합니다. 어떤 모듈 실패도 스캔을 중단시키지 않습니다.
kube-reaper는 승인된 보안 테스트, 침투 테스트 계약, 방어적 보안 평가 전용입니다. 클러스터를 스캔하기 전에 적절한 승인을 받아야 합니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 저자는 이 도구의 오용에 대해 어떠한 책임도 지지 않습니다.