Pentesting Kubernetes Services
कुबरनेटीस कई विशिष्ट नेटवर्क सेवाएं का उपयोग करता है जिन्हें आप इंटरनेट को उजागर पा सकते हैं या एक पॉड को कंप्रोमाइज़ करने के बाद आंतरिक नेटवर्क में पा सकते हैं।
OSINT के साथ उजागर पॉड्स खोजना
एक तरीका Identity LIKE "k8s.%.com"
की खोज crt.sh में करना हो सकता है कुबरनेटीस से संबंधित सबडोमेन्स खोजने के लिए। एक और तरीका "k8s.%.com"
को github में खोजना हो सकता है और YAML फ़ाइल्स खोजने के लिए जिसमें यह स्ट्रिंग हो।
कुबरनेटीस कैसे सेवाएं उजागर करता है
यह आपके लिए उपयोगी हो सकता है कुबरनेटीस कैसे सेवाएं सार्वजनिक रूप से उजागर कर सकता है इन्हें खोजने के लिए:
Exposing Services in Kubernetesपोर्ट स्कैनिंग के माध्यम से उजागर पॉड्स खोजना
निम्नलिखित पोर्ट्स एक कुबरनेटीस क्लस्टर में खुले हो सकते हैं:
पोर्ट | प्रक्रिया | विवरण |
---|---|---|
443/TCP | kube-apiserver | कुबरनेटीस API पोर्ट |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | कंटेनर मीट्रिक्स |
6443/TCP | kube-apiserver | कुबरनेटीस API पोर्ट |
8443/TCP | kube-apiserver | Minikube API पोर्ट |
8080/TCP | kube-apiserver | असुरक्षित API पोर्ट |
10250/TCP | kubelet | HTTPS API जो पूर्ण मोड एक्सेस स्वीकार करता है |
10255/TCP | kubelet | अप्रमाणित केवल पढ़ने वाला HTTP पोर्ट: पॉड, चल रहे पॉड्स और नोड स्थिति |
10256/TCP | kube-proxy | क्यूब प्रॉक्सी हेल्थ चेक सर्वर |
9099/TCP | calico-felix | Calico के लिए हेल्थ चेक सर्वर |
6782-4/TCP | weave | मीट्रिक्स और एंडपॉइंट्स |
30000-32767/TCP | NodePort | सेवाओं के लिए प्रॉक्सी |
44134/TCP | Tiller | हेल्म सेवा सुन रही है |
Nmap
Kube-apiserver
यह API Kubernetes सेवा है जिससे प्रशासक सामान्यत: उपकरण kubectl
का उपयोग करके बातचीत करते हैं।
सामान्य पोर्ट: 6443 और 443, लेकिन minikube में 8443 और असुरक्षित रूप में 8080 भी है।
निम्नलिखित पृष्ठ की जाँच करें ताकि आप संवेदनशील डेटा प्राप्त करने और इस सेवा के साथ बातचीत करने के लिए संवेदनशील क्रियाएँ कैसे करें, इसका पता लगा सकें:
Kubernetes EnumerationKubelet API
यह सेवा क्लस्टर के प्रत्येक नोड में चलती है। यह सेवा वह है जो नोड के अंदर के पॉड को नियंत्रित करेगी। यह kube-apiserver के साथ बातचीत करती है।
यदि आप इस सेवा को अनावृत करते हैं तो आपने एक अप्रमाणित RCE पाया हो सकता है।
Kubelet API
यदि प्रतिक्रिया अनधिकृत
है तो इसे प्रमाणीकरण की आवश्यकता है।
यदि आप नोड्स की सूची बना सकते हैं तो आप निम्नलिखित के साथ kubelets एंडपॉइंट्स की सूची प्राप्त कर सकते हैं:
kubelet (केवल पढ़ने योग्य)
etcd API
टिलर
आप इस सेवा का दुरुपयोग करके Kubernetes के अंदर विशेषाधिकारों को बढ़ा सकते हैं:
cAdvisor
मैट्रिक्स जुटाने के लिए उपयोगी सेवा।
नोडपोर्ट
जब एक पोर्ट को सभी नोड्स के माध्यम से नोडपोर्ट के रूप में उजागर किया जाता है, तो घोषित सेवा में ट्रैफिक को प्रोक्सी करने के लिए सभी नोड्स में एक ही पोर्ट खोला जाता है। डिफ़ॉल्ट रूप से यह पोर्ट 30000-32767 के रेंज में होगा। इसलिए नए जांच न किए गए सेवाओं को उन पोर्टों के माध्यम से पहुंचा जा सकता है।
वंशानुक्रमित Misconfigurations
Kube-apiserver अनाम एक्सेस
kube-apiserver API एंडपॉइंट्स का अनाम एक्सेस अनुमति नहीं है। लेकिन आप कुछ एंडपॉइंट्स की जांच कर सकते हैं:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2019%2F09%2FKube-Pen-2-fig-5.png&width=768&dpr=4&quality=100&sign=ff25c70&sv=1)
ETCD अनाम एक्सेस की जांच
ETCD क्लस्टर सीक्रेट्स, कॉन्फ़िगरेशन फ़ाइलें और अधिक संवेदनशील डेटा स्टोर करता है। डिफ़ॉल्ट रूप से, ETCD अनाम रूप से एक्सेस नहीं किया जा सकता है, लेकिन इसे जांचना हमेशा अच्छा होता है।
अगर ETCD को अनाम रूप से एक्सेस किया जा सकता है, तो आपको etcdctl टूल का उपयोग करने की आवश्यकता हो सकती है। निम्नलिखित कमांड सभी स्टोर किए गए कुंजियों को प्राप्त करेगा:
कुबलेट RCE
कुबलेट दस्तावेज़ीकरण व्याख्या करता है कि डिफ़ॉल्ट अनाम एक्सेस सेवा को अनुमति दी गई है:
कुबलेट सर्वर को अनाम अनुरोधों को सक्षम करता है। अन्य प्रमाणीकरण विधि द्वारा अस्वीकृत न किए गए अनुरोधों को अनाम अनुरोध के रूप में व्यवहारित किया जाता है। अनाम अनुरोधों में एक उपयोक्ता नाम
system:anonymous
होता है, और एक समूह नामsystem:unauthenticated
होता है।
कुबलेट API की प्रमाणीकरण और अधिकृति को समझने के लिए इस पृष्ठ की जाँच करें:
Kubelet Authentication & Authorizationकुबलेट सेवा API का दस्तावेज़ीकरण नहीं है, लेकिन स्रोत कोड यहाँ पाया जा सकता है और उजागर किए गए एंडपॉइंट्स का पता लगाना इतना आसान है जितना कि यह चलाना:
ये सभी दिलचस्प लग रहे हैं।
आप Kubeletctl टूल का उपयोग कर सकते हैं ताकि आप Kubelets और उनके endpoints के साथ बातचीत कर सकें।
/pods
इस endpoint में pods और उनके containers की सूची होती है:
/exec
यह एंडपॉइंट किसी भी कंटेनर के अंदर कोड को बहुत आसानी से execute करने की अनुमति देता है:
इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false
के साथ चलाया जाना चाहिए और सेवा को नेटवर्क स्तर पर अलग कर देना चाहिए।
कुबलेट (केवल पढ़ने वाला पोर्ट) सूचना उजागरीकरण की जांच
जब एक कुबलेट केवल पढ़ने वाला पोर्ट उजागर होता है, तो अनधिकृत पक्षों द्वारा API से जानकारी प्राप्त करना संभव बन जाता है। इस पोर्ट की उजागरीकरण से विभिन्न क्लस्टर कॉन्फ़िगरेशन तत्वों का खुलासा हो सकता है। हालांकि जानकारी, जिसमें पॉड नाम, आंतरिक फ़ाइलों की स्थितियाँ, और अन्य कॉन्फ़िगरेशन शामिल हो सकती है, महत्वपूर्ण न हो, लेकिन इसका उजागर होना फिर भी एक सुरक्षा जोखिम पैदा करता है और इससे बचा जाना चाहिए।
इस कमजोरी को कैसे शारीरिक किया जा सकता है का एक उदाहरण एक दूरस्थ हमलावर द्वारा विशिष्ट यूआरएल तक पहुंचने में शामिल है। http://<external-IP>:10255/pods
पर नेविगेट करके, हमलावर कुबलेट से संवेदनशील जानकारी प्राप्त कर सकता है:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Fwww.cyberark.com%2Fwp-content%2Fuploads%2F2019%2F09%2FKUbe-Pen-2-fig-6.png&width=768&dpr=4&quality=100&sign=66aa23e7&sv=1)
संदर्भ
Last updated