Pentesting Kubernetes Services
Kubernetes verwendet mehrere spezifische Netzwerkdienste, die möglicherweise im Internet freigelegt sind oder in einem internen Netzwerk, sobald Sie einen Pod kompromittiert haben.
Auffinden von freigelegten Pods mit OSINT
Eine Möglichkeit könnte sein, nach Identity LIKE "k8s.%.com"
in crt.sh zu suchen, um Subdomains im Zusammenhang mit Kubernetes zu finden. Eine andere Möglichkeit könnte sein, nach "k8s.%.com"
in Github zu suchen und nach YAML-Dateien zu suchen, die den String enthalten.
Wie Kubernetes Dienste freilegt
Es könnte für Sie nützlich sein zu verstehen, wie Kubernetes Dienste öffentlich freilegen kann, um sie zu finden:
Exposing Services in KubernetesAuffinden freigelegter Pods über Portscans
Die folgenden Ports könnten in einem Kubernetes-Cluster geöffnet sein:
Port | Prozess | Beschreibung |
---|---|---|
443/TCP | kube-apiserver | Kubernetes-API-Port |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Container-Metriken |
6443/TCP | kube-apiserver | Kubernetes-API-Port |
8443/TCP | kube-apiserver | Minikube-API-Port |
8080/TCP | kube-apiserver | Unsicherer API-Port |
10250/TCP | kubelet | HTTPS-API, die vollständigen Zugriff ermöglicht |
10255/TCP | kubelet | Nicht authentifizierter schreibgeschützter HTTP-Port: Pods, laufende Pods und Knotenzustand |
10256/TCP | kube-proxy | Kube Proxy Health Check Server |
9099/TCP | calico-felix | Health Check Server für Calico |
6782-4/TCP | weave | Metriken und Endpunkte |
30000-32767/TCP | NodePort | Proxy zu den Diensten |
44134/TCP | Tiller | Helm-Dienst, der zuhört |
Nmap
Kube-apiserver
Dies ist der API Kubernetes-Dienst, mit dem Administratoren normalerweise mit dem Tool kubectl
kommunizieren.
Gängige Ports: 6443 und 443, aber auch 8443 in Minikube und 8080 als unsicher.
Überprüfen Sie die folgende Seite, um zu erfahren, wie Sie sensible Daten erhalten und sensible Aktionen mit diesem Dienst ausführen können:
Kubernetes EnumerationKubelet API
Dieser Dienst läuft auf jedem Knoten des Clusters. Es ist der Dienst, der die Pods innerhalb des Knotens steuert. Er kommuniziert mit dem kube-apiserver.
Wenn Sie feststellen, dass dieser Dienst freigelegt ist, haben Sie möglicherweise eine nicht authentifizierte RCE gefunden.
Kubelet API
Wenn die Antwort Unauthorized
lautet, erfordert dies eine Authentifizierung.
Wenn Sie Knoten auflisten können, können Sie eine Liste der Kubelet-Endpunkte mit erhalten:
kubelet (Nur lesen)
etcd API
Tiller
Tiller ist ein Server, der auf dem Kubernetes-Cluster läuft und die Helm-Client-Anfragen entgegennimmt. Es ist wichtig zu beachten, dass Tiller standardmäßig mit administrativen Berechtigungen konfiguriert ist, was potenzielle Sicherheitsrisiken darstellt. Daher ist es ratsam, die Sicherheit von Tiller während des Pentestings zu überprüfen.
Du könntest diesen Service missbrauchen, um Privilegien innerhalb von Kubernetes zu eskalieren:
cAdvisor
Dienst nützlich zum Sammeln von Metriken.
NodePort
Wenn ein Port über einen NodePort auf allen Nodes freigegeben wird, wird derselbe Port auf allen Nodes geöffnet, um den Datenverkehr zum deklarierten Service zu leiten. Standardmäßig befindet sich dieser Port im Bereich 30000-32767. Daher können neue nicht überprüfte Services über diese Ports erreichbar sein.
Anfällige Fehlkonfigurationen
Anonymer Zugriff auf Kube-apiserver
Der anonyme Zugriff auf kube-apiserver-API-Endpunkte ist nicht erlaubt. Aber Sie könnten einige Endpunkte überprüfen:
![](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)
Überprüfung des ETCD-Anonymen Zugriffs
Der ETCD speichert die Clustergeheimnisse, Konfigurationsdateien und weitere sensible Daten. Standardmäßig kann auf den ETCD nicht anonym zugegriffen werden, aber es ist immer gut zu überprüfen.
Wenn auf den ETCD anonym zugegriffen werden kann, müssen Sie möglicherweise das etcdctl Werkzeug verwenden. Der folgende Befehl ruft alle gespeicherten Schlüssel ab:
Kubelet RCE
Die Kubelet-Dokumentation erklärt, dass standardmäßig anonymer Zugriff auf den Dienst erlaubt ist:
Ermöglicht anonyme Anfragen an den Kubelet-Server. Anfragen, die nicht von einer anderen Authentifizierungsmethode abgelehnt werden, werden als anonyme Anfragen behandelt. Anonyme Anfragen haben einen Benutzernamen von
system:anonymous
und einen Gruppennamen vonsystem:unauthenticated
Um besser zu verstehen, wie die Authentifizierung und Autorisierung der Kubelet-API funktioniert, schauen Sie sich diese Seite an:
Kubelet Authentication & AuthorizationDer Kubelet-Service API ist nicht dokumentiert, aber der Quellcode kann hier gefunden werden und das Auffinden der freigegebenen Endpunkte ist so einfach wie das Ausführen:
Du kannst das Kubeletctl Tool verwenden, um mit Kubelets und ihren Endpunkten zu interagieren.
/pods
Dieser Endpunkt listet Pods und ihre Container auf:
/exec
Dieser Endpunkt ermöglicht es, Code sehr einfach innerhalb eines beliebigen Containers auszuführen:
Um diesen Angriff zu vermeiden, sollte der kubelet Dienst mit --anonymous-auth false
ausgeführt werden und der Dienst sollte auf Netzwerkebene segregiert werden.
Überprüfung der Offenlegung von Kubelet (Nur-Lese-Port) Informationen
Wenn ein kubelet Nur-Lese-Port freigelegt ist, wird es möglich, dass Informationen von Unbefugten aus der API abgerufen werden können. Die Offenlegung dieses Ports kann zur Offenlegung verschiedener Cluster-Konfigurationselemente führen. Obwohl die Informationen, einschließlich Pod-Namen, Speicherorte interner Dateien und anderer Konfigurationen, nicht kritisch sein mögen, stellt ihre Offenlegung dennoch ein Sicherheitsrisiko dar und sollte vermieden werden.
Ein Beispiel, wie diese Schwachstelle ausgenutzt werden kann, beinhaltet einen entfernten Angreifer, der auf eine bestimmte URL zugreift. Indem er zu http://<external-IP>:10255/pods
navigiert, kann der Angreifer potenziell sensible Informationen vom kubelet abrufen:
![](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)
Referenzen
Last updated