
किसी भी पहचान से 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 - प्रत्यक्ष bearer टोकन। चोरी किए गए SA टोकन या JWT के साथ उपयोग करें। स्व-हस्ताक्षरित प्रमाणपत्रों को स्वचालित रूप से स्वीकार करता है।--kubeconfig / -k - स्पष्ट kubeconfig फ़ाइल। KUBECONFIG पर्यावरण चर भी पढ़ता है।~/.kube/config।--as-user और --as-group किसी भी प्रमाणीकरण विधि में impersonation हेडर जोड़ते हैं। इसके काम करने के लिए आपकी पहचान के पास impersonate क्रिया होनी चाहिए।
--pivot फ़्लैग पुनरावर्ती पहचान पिवोटिंग को सक्षम करता है। यह सुविधा सेवा खाता क्रेडेंशियल के माध्यम से पिवोट करके ट्रांज़िटिव आक्रमण पथों की खोज करती है।
kubernetes.io/service-account-token प्रकार) को पढ़ता है और टोकन निकालता है।serviceaccounts/token बना सकती है, यह TokenRequest API के माध्यम से अल्पकालिक टोकन बनाता है।--pivot-depth (डिफ़ॉल्ट: 3) तक दोहराई जाती है।स्कैन सबसे छोटे पिवोट पथों को पहले खोजने के लिए BFS ट्रैवर्सल का उपयोग करता है। यह भगोड़े स्कैन को रोकने के लिए 50 पहचानों पर रुक जाता है।
प्रत्येक पिवोट की गई पहचान दिखाती है:
पिवोट स्कैनर झूठे सकारात्मक को रोकने के लिए इन गार्डों को लागू करता है:
apiGroups: ["*"]) में नियम रहस्य पढ़ने और टोकन निर्माण जाँचों के लिए गिने जाते हैं। गैर-कोर समूहों (जैसे, custom.metrics.k8s.io) में नियम मेल नहीं खाते।resourceNames सेट वाले नियम टोकन निर्माण के लिए नहीं गिने जाते। एक नामित सेवा खाते के लिए टोकन निर्माण की अनुमति देने वाला नियम अप्रतिबंधित टोकन निर्माण के समान नहीं है।verbs: ["*"] की आवश्यकता होती है, न कि केवल resources: ["*"] पर कोई भी क्रिया।टर्मिनल आउटपुट इन अनुभागों को दिखाता है (प्रत्येक केवल तब प्रकट होता है जब उसमें निष्कर्ष हों):
| अनुभाग | सामग्री |
|---|---|
| Pod संदर्भ विश्लेषण | एस्केप वेक्टर, क्षमताएँ, क्लाउड IMDS, नेटवर्क, SA टोकन, माउंट, env वेरिएबल |
| आक्रमण पथ श्रृंखलाएँ | चरण-दर-चरण निर्देशों के साथ बहु-चरणीय आक्रमण पथ |
| पहचान पिवोट ग्राफ | विधियों, अनुमतियों, और आगे पिवोट क्षमता के साथ पुनरावर्ती पहचान पिवोट मैप |
| खतरनाक Pods | विशेषाधिकार प्राप्त कंटेनर, होस्ट माउंट, रनटाइम सॉकेट, उजागर रहस्य |
| उजागर सेवाएँ | क्लस्टर के बाहर से पहुँच योग्य LoadBalancer और NodePort सेवाएँ |
| संवेदनशील ConfigMaps | क्रेडेंशियल या रहस्यों वाली कुंजियों वाले ConfigMaps |
| CronJobs | खतरनाक सेवा खाता अनुमतियों वाले शेड्यूल किए गए कार्य |
| रहस्य ट्राइएज | प्रकार और आक्रमण मूल्य के अनुसार वर्गीकृत सुलभ रहस्य |
| CRD आक्रमण सतह | ज्ञात खतरनाक ऑपरेटरों से कस्टम संसाधन |
| DNS सेवा खोज | CoreDNS क्वेरी के माध्यम से पाई गई सेवाएँ (कोई RBAC आवश्यक नहीं) |
| प्रवेश नियंत्रक प्रोबिंग | 6 खतरनाक pod कॉन्फ़िगरेशन के लिए प्रति-namespace ड्राई-रन परिणाम |
| अन्य पहचानें | अति-विशेषाधिकार प्राप्त पहचानें जो पिवोट लक्ष्य हैं |
| Namespace सुरक्षा | प्रति namespace PSS प्रवर्तन स्थिति |
| खतरनाक अनुमतियाँ | गंभीरता के अनुसार व्यक्तिगत अनुमति निष्कर्ष |
| सारांश | सभी निष्कर्ष श्रेणियों की गणना |