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

nmap -n -T4 -p 443,2379,6666,4194,6443,8443,8080,10250,10255,10256,9099,6782-6784,30000-32767,44134 <pod_ipaddress>/16

Kube-apiserver

यह API Kubernetes सेवा है जिससे प्रशासक सामान्यत: उपकरण kubectl का उपयोग करके बातचीत करते हैं।

सामान्य पोर्ट: 6443 और 443, लेकिन minikube में 8443 और असुरक्षित रूप में 8080 भी है।

curl -k https://<IP Address>:(8|6)443/swaggerapi
curl -k https://<IP Address>:(8|6)443/healthz
curl -k https://<IP Address>:(8|6)443/api/v1

निम्नलिखित पृष्ठ की जाँच करें ताकि आप संवेदनशील डेटा प्राप्त करने और इस सेवा के साथ बातचीत करने के लिए संवेदनशील क्रियाएँ कैसे करें, इसका पता लगा सकें:

Kubernetes Enumeration

Kubelet API

यह सेवा क्लस्टर के प्रत्येक नोड में चलती है। यह सेवा वह है जो नोड के अंदर के पॉड को नियंत्रित करेगी। यह kube-apiserver के साथ बातचीत करती है।

यदि आप इस सेवा को अनावृत करते हैं तो आपने एक अप्रमाणित RCE पाया हो सकता है।

Kubelet API

curl -k https://<IP address>:10250/metrics
curl -k https://<IP address>:10250/pods

यदि प्रतिक्रिया अनधिकृत है तो इसे प्रमाणीकरण की आवश्यकता है।

यदि आप नोड्स की सूची बना सकते हैं तो आप निम्नलिखित के साथ kubelets एंडपॉइंट्स की सूची प्राप्त कर सकते हैं:

kubectl get nodes -o custom-columns='IP:.status.addresses[0].address,KUBELET_PORT:.status.daemonEndpoints.kubeletEndpoint.Port' | grep -v KUBELET_PORT | while IFS='' read -r node; do
ip=$(echo $node | awk '{print $1}')
port=$(echo $node | awk '{print $2}')
echo "curl -k --max-time 30 https://$ip:$port/pods"
echo "curl -k --max-time 30 https://$ip:2379/version" #Check  also for etcd
done

kubelet (केवल पढ़ने योग्य)

curl -k https://<IP Address>:10255
http://<external-IP>:10255/pods

etcd API

curl -k https://<IP address>:2379
curl -k https://<IP address>:2379/version
etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

टिलर

helm --host tiller-deploy.kube-system:44134 version

आप इस सेवा का दुरुपयोग करके Kubernetes के अंदर विशेषाधिकारों को बढ़ा सकते हैं:

cAdvisor

मैट्रिक्स जुटाने के लिए उपयोगी सेवा।

curl -k https://<IP Address>:4194

नोडपोर्ट

जब एक पोर्ट को सभी नोड्स के माध्यम से नोडपोर्ट के रूप में उजागर किया जाता है, तो घोषित सेवा में ट्रैफिक को प्रोक्सी करने के लिए सभी नोड्स में एक ही पोर्ट खोला जाता है। डिफ़ॉल्ट रूप से यह पोर्ट 30000-32767 के रेंज में होगा। इसलिए नए जांच न किए गए सेवाओं को उन पोर्टों के माध्यम से पहुंचा जा सकता है।

sudo nmap -sS -p 30000-32767 <IP>

वंशानुक्रमित Misconfigurations

Kube-apiserver अनाम एक्सेस

kube-apiserver API एंडपॉइंट्स का अनाम एक्सेस अनुमति नहीं है। लेकिन आप कुछ एंडपॉइंट्स की जांच कर सकते हैं:

ETCD अनाम एक्सेस की जांच

ETCD क्लस्टर सीक्रेट्स, कॉन्फ़िगरेशन फ़ाइलें और अधिक संवेदनशील डेटा स्टोर करता है। डिफ़ॉल्ट रूप से, ETCD अनाम रूप से एक्सेस नहीं किया जा सकता है, लेकिन इसे जांचना हमेशा अच्छा होता है।

अगर ETCD को अनाम रूप से एक्सेस किया जा सकता है, तो आपको etcdctl टूल का उपयोग करने की आवश्यकता हो सकती है। निम्नलिखित कमांड सभी स्टोर किए गए कुंजियों को प्राप्त करेगा:

etcdctl --endpoints=http://<MASTER-IP>:2379 get / --prefix --keys-only

कुबलेट RCE

कुबलेट दस्तावेज़ीकरण व्याख्या करता है कि डिफ़ॉल्ट अनाम एक्सेस सेवा को अनुमति दी गई है:

कुबलेट सर्वर को अनाम अनुरोधों को सक्षम करता है। अन्य प्रमाणीकरण विधि द्वारा अस्वीकृत न किए गए अनुरोधों को अनाम अनुरोध के रूप में व्यवहारित किया जाता है। अनाम अनुरोधों में एक उपयोक्ता नाम system:anonymous होता है, और एक समूह नाम system:unauthenticated होता है।

कुबलेट API की प्रमाणीकरण और अधिकृति को समझने के लिए इस पृष्ठ की जाँच करें:

Kubelet Authentication & Authorization

कुबलेट सेवा API का दस्तावेज़ीकरण नहीं है, लेकिन स्रोत कोड यहाँ पाया जा सकता है और उजागर किए गए एंडपॉइंट्स का पता लगाना इतना आसान है जितना कि यह चलाना:

curl -s https://raw.githubusercontent.com/kubernetes/kubernetes/master/pkg/kubelet/server/server.go | grep 'Path("/'

Path("/pods").
Path("/run")
Path("/exec")
Path("/attach")
Path("/portForward")
Path("/containerLogs")
Path("/runningpods/").

ये सभी दिलचस्प लग रहे हैं।

आप Kubeletctl टूल का उपयोग कर सकते हैं ताकि आप Kubelets और उनके endpoints के साथ बातचीत कर सकें।

/pods

इस endpoint में pods और उनके containers की सूची होती है:

kubeletctl pods

/exec

यह एंडपॉइंट किसी भी कंटेनर के अंदर कोड को बहुत आसानी से execute करने की अनुमति देता है:

kubeletctl exec [command]

इस हमले से बचने के लिए kubelet सेवा को --anonymous-auth false के साथ चलाया जाना चाहिए और सेवा को नेटवर्क स्तर पर अलग कर देना चाहिए।

कुबलेट (केवल पढ़ने वाला पोर्ट) सूचना उजागरीकरण की जांच

जब एक कुबलेट केवल पढ़ने वाला पोर्ट उजागर होता है, तो अनधिकृत पक्षों द्वारा API से जानकारी प्राप्त करना संभव बन जाता है। इस पोर्ट की उजागरीकरण से विभिन्न क्लस्टर कॉन्फ़िगरेशन तत्वों का खुलासा हो सकता है। हालांकि जानकारी, जिसमें पॉड नाम, आंतरिक फ़ाइलों की स्थितियाँ, और अन्य कॉन्फ़िगरेशन शामिल हो सकती है, महत्वपूर्ण न हो, लेकिन इसका उजागर होना फिर भी एक सुरक्षा जोखिम पैदा करता है और इससे बचा जाना चाहिए।

इस कमजोरी को कैसे शारीरिक किया जा सकता है का एक उदाहरण एक दूरस्थ हमलावर द्वारा विशिष्ट यूआरएल तक पहुंचने में शामिल है। http://<external-IP>:10255/pods पर नेविगेट करके, हमलावर कुबलेट से संवेदनशील जानकारी प्राप्त कर सकता है:

https://www.cyberark.com/wp-content/uploads/2019/09/KUbe-Pen-2-fig-6.png

संदर्भ

हैकट्रिक्स का समर्थन करें

Last updated