GCP - Containers & GKE Enum

Support HackTricks

Containers

GCP कंटेनरों में आप GCP द्वारा प्रदान की जाने वाली अधिकांश कंटेनर आधारित सेवाएँ पा सकते हैं, यहाँ आप सबसे सामान्य सेवाओं को सूचीबद्ध करने का तरीका देख सकते हैं:

gcloud container images list
gcloud container images list --repository us.gcr.io/<project-name> #Search in other subdomains repositories
gcloud container images describe <name>
gcloud container subnets list-usable
gcloud container clusters list
gcloud container clusters describe <name>
gcloud container clusters get-credentials [NAME]

# Run a container locally
docker run --rm -ti gcr.io/<project-name>/secret:v1 sh

# Login & Download
sudo docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) https://HOSTNAME
## where HOSTNAME is gcr.io, us.gcr.io, eu.gcr.io, or asia.gcr.io.
sudo docker pull HOSTNAME/<project-name>/<image-name>

Privesc

इस पृष्ठ पर आप देख सकते हैं कि कंटेनर अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं:

Node Pools

ये मशीनों (नोड्स) का पूल हैं जो कुबेरनेट्स क्लस्टर बनाते हैं।

# Pool of machines used by the cluster
gcloud container node-pools list --zone <zone> --cluster <cluster>
gcloud container node-pools describe --cluster <cluster> --zone <zone> <node-pool>

Kubernetes

Kubernetes क्या है इस बारे में जानकारी के लिए इस पृष्ठ को देखें:

पहले, आप यह जांच सकते हैं कि क्या आपके प्रोजेक्ट में कोई Kubernetes क्लस्टर मौजूद हैं।

gcloud container clusters list

यदि आपके पास एक क्लस्टर है, तो आप gcloud को अपने ~/.kube/config फ़ाइल को स्वचालित रूप से कॉन्फ़िगर करने के लिए कह सकते हैं। यह फ़ाइल आपको प्रमाणित करने के लिए उपयोग की जाती है जब आप kubectl का उपयोग करते हैं, जो K8s क्लस्टरों के साथ बातचीत करने के लिए मूल CLI है। इस कमांड को आजमाएँ।

gcloud container clusters get-credentials [CLUSTER NAME] --region [REGION]

फिर, उत्पन्न किए गए क्रेडेंशियल्स को देखने के लिए ~/.kube/config फ़ाइल पर नज़र डालें। इस फ़ाइल का उपयोग सक्रिय gcloud सत्र द्वारा उपयोग की जा रही समान पहचान के आधार पर स्वचालित रूप से एक्सेस टोकन को ताज़ा करने के लिए किया जाएगा। इसके लिए सही अनुमतियों की आवश्यकता होती है।

एक बार जब यह सेट हो जाए, तो आप क्लस्टर कॉन्फ़िगरेशन प्राप्त करने के लिए निम्नलिखित कमांड आज़मा सकते हैं।

kubectl cluster-info

आप gcloud के बारे में कंटेनरों के लिए यहाँ अधिक पढ़ सकते हैं।

यह GCP में kubernetes को एन्यूमरेट करने के लिए एक सरल स्क्रिप्ट है: https://gitlab.com/gitlab-com/gl-security/security-operations/gl-redteam/gcp_k8s_enum

TLS बूटस्ट्रैप विशेषाधिकार वृद्धि

शुरुआत में, इस विशेषाधिकार वृद्धि तकनीक ने GKE क्लस्टर के अंदर privesc की अनुमति दी, जिससे एक हमलावर को पूर्ण रूप से समझौता करने की अनुमति मिली।

यह इसलिए है क्योंकि GKE TLS बूटस्ट्रैप क्रेडेंशियल्स को मेटाडेटा में प्रदान करता है, जो कि किसी भी व्यक्ति द्वारा केवल एक पोड को समझौता करके प्रवेश योग्य है।

उपयोग की गई तकनीक निम्नलिखित पोस्ट में समझाई गई है:

और इस उपकरण को प्रक्रिया को स्वचालित करने के लिए बनाया गया था: https://github.com/4ARMED/kubeletmein

हालांकि, तकनीक ने इस तथ्य का दुरुपयोग किया कि मेटाडेटा क्रेडेंशियल्स के साथ यह संभव था कि एक CSR (सर्टिफिकेट साइनिंग अनुरोध) नए नोड के लिए जनरेट किया जाए, जिसे स्वचालित रूप से स्वीकृत किया गया। मेरी परीक्षण में मैंने जांचा कि वे अनुरोध अब स्वचालित रूप से स्वीकृत नहीं होते, इसलिए मुझे यकीन नहीं है कि यह तकनीक अभी भी मान्य है।

Kubelet API में रहस्य

इस पोस्ट में यह खोजा गया कि GKE में एक पोड के अंदर से पहुँच योग्य Kubelet API पता है जो चल रहे पोड्स के विवरण देता है:

curl -v -k http://10.124.200.1:10255/pods

यहां तक कि अगर API संसाधनों को संशोधित करने की अनुमति नहीं देती, तो प्रतिक्रिया में संवेदनशील जानकारी मिलना संभव हो सकता है। एंडपॉइंट /pods को Kiterunner का उपयोग करके पाया गया।

HackTricks का समर्थन करें

Last updated