Pentesting Kubernetes Services
Kubernetes कई विशिष्ट नेटवर्क सेवाओं का उपयोग करता है जिन्हें आप इंटरनेट पर उजागर या आंतरिक नेटवर्क पर पाया जा सकता है एक बार जब आपने एक पॉड को समझौता किया हो.
OSINT के साथ उजागर पॉड्स का पता लगाना
एक तरीका हो सकता है crt.sh में Identity LIKE "k8s.%.com"
के लिए खोज करना ताकि kubernetes से संबंधित उपडोमेन्स का पता लगाया जा सके। एक और तरीका हो सकता है github में "k8s.%.com"
के लिए खोज करना और YAML फाइलों के लिए खोज करना जिसमें यह स्ट्रिंग होती है।
Kubernetes सेवाओं को कैसे उजागर करता है
यह आपके लिए उपयोगी हो सकता है कि आप समझें कि Kubernetes कैसे सेवाओं को सार्वजनिक रूप से उजागर कर सकता है ताकि आप उन्हें ढूंढ सकें:
pageExposing Services in Kubernetesपोर्ट स्कैनिंग के माध्यम से उजागर पॉड्स का पता लगाना
निम्नलिखित पोर्ट्स Kubernetes क्लस्टर में खुले हो सकते हैं:
पोर्ट | प्रक्रिया | विवरण |
---|---|---|
443/TCP | kube-apiserver | Kubernetes API पोर्ट |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | कंटेनर मेट्रिक्स |
6443/TCP | kube-apiserver | Kubernetes 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 | Kube Proxy स्वास्थ्य जांच सर्वर |
9099/TCP | calico-felix | Calico के लिए स्वास्थ्य जांच सर्वर |
6782-4/TCP | weave | मेट्रिक्स और एंडपॉइंट्स |
30000-32767/TCP | NodePort | सेवाओं के लिए प्रॉक्सी |
44134/TCP | Tiller | Helm सेवा सुनना |
Nmap
Kube-apiserver
यह API Kubernetes सेवा है जिससे प्रशासक आमतौर पर kubectl
टूल का उपयोग करके बात करते हैं।
सामान्य पोर्ट्स: 6443 और 443, लेकिन मिनीक्यूब में 8443 और असुरक्षित के लिए 8080 भी।
संवेदनशील डेटा प्राप्त करने और इस सेवा से बात करते हुए संवेदनशील क्रियाएं करने के तरीके जानने के लिए निम्नलिखित पृष्ठ देखें:
pageKubernetes EnumerationKubelet API
यह सेवा क्लस्टर के प्रत्येक नोड में चलती है। यह वह सेवा है जो नोड के अंदर पॉड्स को नियंत्रित करेगी। यह kube-apiserver से बात करती है।
यदि आपको यह सेवा उजागर होती हुई मिलती है, तो आपने एक अप्रमाणित RCE पा सकते हैं।
Kubelet API
यदि प्रतिक्रिया Unauthorized
है, तो इसे प्रमाणीकरण की आवश्यकता है।
यदि आप नोड्स की सूची बना सकते हैं, तो आप kubelets एंडपॉइंट्स की सूची इस प्रकार प्राप्त कर सकते हैं:
kubelet (केवल पढ़ने के लिए)
etcd API
टिलर
cAdvisor
मेट्रिक्स एकत्रित करने के लिए उपयोगी सेवा।
NodePort
जब कोई पोर्ट सभी नोड्स में एक NodePort के माध्यम से उजागर किया जाता है, तो वही पोर्ट सभी नोड्स में खुल जाता है जो ट्रैफिक को घोषित Service में प्रॉक्सीफाई करता है। डिफ़ॉल्ट रूप से यह पोर्ट रेंज 30000-32767 में होगा। इसलिए नई अनचेक्ड सर्विसेज उन पोर्ट्स के माध्यम से सुलभ हो सकती हैं।
संवेदनशील मिसकॉन्फिगरेशन
Kube-apiserver अनाम एक्सेस
kube-apiserver API एंडपॉइंट्स पर अनाम एक्सेस की अनुमति नहीं है। लेकिन आप कुछ एंडपॉइंट्स की जांच कर सकते हैं:
ETCD अनाम एक्सेस की जांच
ETCD क्लस्टर के सीक्रेट्स, कॉन्फिगरेशन फाइल्स और अधिक संवेदनशील डेटा स्टोर करता है। डिफ़ॉल्ट रूप से, ETCD को अनाम रूप से एक्सेस नहीं किया जा सकता है, लेकिन इसकी जांच करना हमेशा अच्छा होता है।
यदि ETCD को अनाम रूप से एक्सेस किया जा सकता है, तो आपको etcdctl टूल का उपयोग करना पड़ सकता है। निम्नलिखित कमांड से सभी कीज़ प्राप्त की जा सकती हैं:
Kubelet RCE
Kubelet दस्तावेज़ीकरण बताता है कि डिफ़ॉल्ट रूप से गुमनाम पहुँच सेवा को अनुमति है:
Kubelet सर्वर के लिए गुमनाम अनुरोधों को सक्षम करता है। जो अनुरोध अन्य प्रमाणीकरण विधि द्वारा अस्वीकृत नहीं किए जाते हैं, उन्हें गुमनाम अनुरोधों के रूप में माना जाता है। गुमनाम अनुरोधों का एक उपयोगकर्ता नाम
system:anonymous
होता है, और एक समूह नामsystem:unauthenticated
होता है
Kuebelet API के प्रमाणीकरण और अधिकारीकरण कैसे काम करता है इसे समझने के लिए इस पृष्ठ को देखें:
pageKubelet Authentication & AuthorizationKubelet सेवा API दस्तावेज़ीकृत नहीं है, लेकिन स्रोत कोड यहाँ पाया जा सकता है और उजागर एंडपॉइंट्स को ढूँढना चलाने जितना आसान है:
सभी दिलचस्प लगते हैं।
आप Kubeletctl टूल का उपयोग Kubelets और उनके endpoints से इंटरैक्ट करने के लिए कर सकते हैं।
/pods
यह endpoint pods और उनके containers की सूची दिखाता है:
/exec
यह एंडपॉइंट किसी भी कंटेनर के अंदर बहुत आसानी से कोड निष्पादित करने की अनुमति देता है:
इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false
के साथ चलाना चाहिए और सेवा को नेटवर्क स्तर पर अलग कर देना चाहिए।
Kubelet (Read Only Port) की जानकारी का अनावरण की जाँच
जब kubelet read-only port उजागर होता है, हमलावर API से जानकारी प्राप्त कर सकता है। इससे क्लस्टर कॉन्फ़िगरेशन तत्व, जैसे कि पॉड्स के नाम, आंतरिक फाइलों का स्थान और अन्य कॉन्फ़िगरेशन उजागर होते हैं। यह महत्वपूर्ण जानकारी नहीं है, लेकिन फिर भी इसे इंटरनेट पर उजागर नहीं किया जाना चाहिए।
उदाहरण के लिए, एक दूरस्थ हमलावर इस URL का उपयोग करके इसका दुरुपयोग कर सकता है: http://<external-IP>:10255/pods
संदर्भ
Last updated