Pentesting Kubernetes Services

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

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

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, लेकिन मिनीक्यूब में 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

संवेदनशील डेटा प्राप्त करने और इस सेवा से बात करते हुए संवेदनशील क्रियाएं करने के तरीके जानने के लिए निम्नलिखित पृष्ठ देखें:

pageKubernetes Enumeration

Kubelet API

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

यदि आपको यह सेवा उजागर होती हुई मिलती है, तो आपने एक अप्रमाणित RCE पा सकते हैं।

Kubelet API

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

यदि प्रतिक्रिया Unauthorized है, तो इसे प्रमाणीकरण की आवश्यकता है।

यदि आप नोड्स की सूची बना सकते हैं, तो आप 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

cAdvisor

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

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

NodePort

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

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

संवेदनशील मिसकॉन्फिगरेशन

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

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

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

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

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

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

Kubelet RCE

Kubelet दस्तावेज़ीकरण बताता है कि डिफ़ॉल्ट रूप से गुमनाम पहुँच सेवा को अनुमति है:

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

Kuebelet API के प्रमाणीकरण और अधिकारीकरण कैसे काम करता है इसे समझने के लिए इस पृष्ठ को देखें:

pageKubelet Authentication & Authorization

Kubelet सेवा 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

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

kubeletctl exec [command]

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

Kubelet (Read Only Port) की जानकारी का अनावरण की जाँच

जब kubelet read-only port उजागर होता है, हमलावर API से जानकारी प्राप्त कर सकता है। इससे क्लस्टर कॉन्फ़िगरेशन तत्व, जैसे कि पॉड्स के नाम, आंतरिक फाइलों का स्थान और अन्य कॉन्फ़िगरेशन उजागर होते हैं। यह महत्वपूर्ण जानकारी नहीं है, लेकिन फिर भी इसे इंटरनेट पर उजागर नहीं किया जाना चाहिए।

उदाहरण के लिए, एक दूरस्थ हमलावर इस URL का उपयोग करके इसका दुरुपयोग कर सकता है: http://<external-IP>:10255/pods

संदर्भ

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated