Kubernetes Pivoting to Clouds
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यदि आप GCP के अंदर एक k8s क्लस्टर चला रहे हैं, तो आप शायद चाहेंगे कि क्लस्टर के अंदर चलने वाला कुछ एप्लिकेशन GCP तक कुछ पहुंच प्राप्त करे। ऐसा करने के 2 सामान्य तरीके हैं:
GCP तक एक kubernetes एप्लिकेशन को पहुंच देने का एक सामान्य तरीका है:
एक GCP सेवा खाता बनाएं
उस पर इच्छित अनुमतियों को बांधें
बनाए गए SA की एक json कुंजी डाउनलोड करें
इसे पॉड के अंदर एक गुप्त के रूप में माउंट करें
GOOGLE_APPLICATION_CREDENTIALS पर्यावरण चर को उस पथ की ओर इंगित करें जहां json है।
इसलिए, एक हमलावर के रूप में, यदि आप एक पॉड के अंदर एक कंटेनर से समझौता करते हैं, तो आपको उस env चर और json फाइलों की जांच करनी चाहिए जिनमें GCP क्रेडेंशियल्स हैं।
GKE क्लस्टर को GSA तक पहुंच देने का एक तरीका उन्हें इस तरह से बांधना है:
अपने GKE क्लस्टर के समान namespace में एक Kubernetes सेवा खाता बनाएं, निम्नलिखित कमांड का उपयोग करके:
एक Kubernetes Secret बनाएं जिसमें GCP सेवा खाते के क्रेडेंशियल्स हों, जिसे आप GKE क्लस्टर तक पहुंच प्रदान करना चाहते हैं। आप इसे gcloud
कमांड-लाइन टूल का उपयोग करके कर सकते हैं, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है:
निम्नलिखित कमांड का उपयोग करके Kubernetes सेवा खाते के साथ Kubernetes Secret को बाइंड करें:
दूसरे चरण में, GSA के क्रेडेंशियल्स को KSA के रहस्य के रूप में सेट किया गया। फिर, यदि आप GKE क्लस्टर के अंदर उस रहस्य को पढ़ सकते हैं, तो आप उस GCP सेवा खाते तक उन्नति कर सकते हैं।
वर्कलोड पहचान के साथ, हम एक Kubernetes सेवा खाता को Google सेवा खाता के रूप में कार्य करने के लिए कॉन्फ़िगर कर सकते हैं। Kubernetes सेवा खाते के साथ चलने वाले पॉड Google क्लाउड APIs तक पहुँचते समय स्वचालित रूप से Google सेवा खाते के रूप में प्रमाणित होंगे।
इस व्यवहार को सक्षम करने के लिए पहली श्रृंखला के चरण हैं GCP में वर्कलोड पहचान को सक्षम करना (चरण) और वह GCP SA बनाना जिसे आप k8s के रूप में कार्य करना चाहते हैं।
एक नए क्लस्टर पर वर्कलोड पहचान सक्षम करें
नया नोडपूल बनाएं/अपडेट करें (ऑटोपायलट क्लस्टर को इसकी आवश्यकता नहीं है)
K8s से GCP अनुमतियों के साथ GCP सेवा खाता बनाएं जिसे अनुकरण करना है:
क्लस्टर से जुड़ें और उपयोग के लिए सेवा खाता बनाएँ
GSA को KSA के साथ बाइंड करें
एक पॉड चलाएँ जिसमें KSA हो और GSA तक पहुँच की जाँच करें:
निम्नलिखित कमांड को जांचें ताकि आवश्यकता होने पर प्रमाणीकरण किया जा सके:
एक हमलावर के रूप में K8s के अंदर आपको SAs के लिए iam.gke.io/gcp-service-account
एनोटेशन की खोज करनी चाहिए क्योंकि यह संकेत करता है कि SA GCP में कुछ तक पहुँच सकता है। एक और विकल्प होगा कि क्लस्टर में प्रत्येक KSA का दुरुपयोग करने की कोशिश करें और जांचें कि क्या इसके पास पहुँच है।
GCP से हमेशा बाइंडिंग्स को सूचीबद्ध करना और जानना महत्वपूर्ण है कि आप Kubernetes के अंदर SAs को कौन सा एक्सेस दे रहे हैं।
यह एक स्क्रिप्ट है जो आसानी से सभी पॉड्स परिभाषाओं को खोजने के लिए इटरेट करती है कि एनोटेशन:
Pods को IAM भूमिकाएँ देने का एक (पुराना) तरीका है Kiam या Kube2IAM सर्वर का उपयोग करना। मूल रूप से, आपको अपने क्लस्टर में एक daemonset चलाने की आवश्यकता होगी जिसमें एक प्रिविलेज्ड IAM भूमिका हो। यह daemonset उन pods को IAM भूमिकाओं तक पहुँच प्रदान करेगा जिन्हें इसकी आवश्यकता है।
सबसे पहले, आपको यह कॉन्फ़िगर करने की आवश्यकता है कि कौन सी भूमिकाएँ नामस्थान के अंदर पहुँच योग्य हैं, और आप यह नामस्थान ऑब्जेक्ट के अंदर एक एनोटेशन के साथ करते हैं:
एक बार जब नामस्थान IAM भूमिकाओं के साथ कॉन्फ़िगर हो जाता है, तो Pods आपके पास हो सकते हैं, आप प्रत्येक पॉड परिभाषा में वह भूमिका इंगित कर सकते हैं जो आप चाहते हैं:
एक हमलावर के रूप में, यदि आप इन एनोटेशन को पॉड्स या नेमस्पेस में या एक kiam/kube2iam सर्वर चलाते हुए (संभवतः kube-system में) पाते हैं, तो आप हर उस रोल का प्रतिनिधित्व कर सकते हैं जो पहले से पॉड्स द्वारा उपयोग किया जा रहा है और अधिक (यदि आपके पास AWS खाते तक पहुंच है तो भूमिकाओं की गणना करें)।
IAM भूमिका को इंगित करना चाहिए कि वह उसी AWS खाते में हो जहाँ kiam/kube2iam भूमिका है और वह भूमिका इसे एक्सेस करने में सक्षम होनी चाहिए।
यह AWS द्वारा अनुशंसित तरीका है।
सबसे पहले आपको क्लस्टर के लिए एक OIDC प्रदाता बनाना होगा।
फिर आप एक IAM भूमिका बनाते हैं जिसमें SA को आवश्यक अनुमतियाँ होती हैं।
एक विश्वास संबंध बनाएं IAM भूमिका और SA नाम (या उन namespaces को जो भूमिका को namespace के सभी SAs तक पहुँच प्रदान करते हैं)। विश्वास संबंध मुख्य रूप से OIDC प्रदाता नाम, namespace नाम और SA नाम की जांच करेगा।
अंत में, एक SA बनाएं जिसमें भूमिका के ARN को इंगित करने वाला एक एनोटेशन हो, और उस SA के साथ चलने वाले पॉड्स को भूमिका के टोकन तक पहुँच होगी। टोकन एक फ़ाइल के अंदर लिखा गया है और पथ AWS_WEB_IDENTITY_TOKEN_FILE
में निर्दिष्ट है (डिफ़ॉल्ट: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
)
To get aws using the token from /var/run/secrets/eks.amazonaws.com/serviceaccount/token
run:
एक हमलावर के रूप में, यदि आप एक K8s क्लस्टर को सूचीबद्ध कर सकते हैं, तो AWS में उन्नति के लिए उस एनोटेशन के साथ सेवा खातों की जांच करें। ऐसा करने के लिए, बस एक IAM विशिष्ट सेवा खाते का उपयोग करके exec/create एक पॉड करें और टोकन चुराएं।
इसके अलावा, यदि आप एक पॉड के अंदर हैं, तो AWS_ROLE_ARN और AWS_WEB_IDENTITY_TOKEN जैसे एन्वायरनमेंट वेरिएबल्स की जांच करें।
कभी-कभी एक भूमिका की ट्रस्ट नीति खराब कॉन्फ़िगर की जा सकती है और अपेक्षित सेवा खाते को AssumeRole एक्सेस देने के बजाय, यह सभी सेवा खातों को देती है। इसलिए, यदि आप एक नियंत्रित सेवा खाते पर एक एनोटेशन लिखने में सक्षम हैं, तो आप भूमिका तक पहुंच सकते हैं।
अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जांच करें:
यह सभी पॉड्स और SAs पर आसानी से इटरेट करने के लिए एक स्क्रिप्ट है जो उस एनोटेशन की तलाश कर रही है:
पिछला अनुभाग IAM Roles को pods के साथ चुराने के बारे में था, लेकिन ध्यान दें कि K8s क्लस्टर का एक Node क्लाउड के अंदर एक इंस्टेंस होने वाला है। इसका मतलब है कि Node के पास एक नया IAM रोल हो सकता है जिसे आप चुरा सकते हैं (ध्यान दें कि आमतौर पर K8s क्लस्टर के सभी नोड्स के पास एक ही IAM रोल होगा, इसलिए प्रत्येक नोड पर जांचने की कोशिश करना शायद इसके लायक नहीं है)।
हालांकि, नोड से मेटाडेटा एंडपॉइंट तक पहुंचने के लिए एक महत्वपूर्ण आवश्यकता है, आपको नोड में होना चाहिए (ssh सत्र?) या कम से कम उसी नेटवर्क में होना चाहिए:
पहले हमने चर्चा की है कि Pods के लिए IAM Roles कैसे संलग्न करें या यहां तक कि Node पर कैसे भागें ताकि IAM Role चुराया जा सके जो इंस्टेंस के साथ संलग्न है।
आप अपने नए मेहनत से कमाए गए IAM role credentials को चुराने के लिए निम्नलिखित स्क्रिप्ट का उपयोग कर सकते हैं:
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)