Bei der Untersuchung von Cloud-nativen Tools und der Art wie sie Informationen über ein System oder eine Organisation preisgeben können, stießen wir über eine Shodan-Suche auf einige Datensätze zu Kubernetes-Cluster (auch K8s genannt). Konkret fanden wir 243.469 Kubernetes-Cluster, die auf Shodan öffentlich zugänglich und identifiziert waren. Darüber hinaus stellten diese Cluster auch Port 10250 zur Verfügung, der standardmäßig von Kubelet verwendet wird.

<Produkt: "Kubernetes" port:10250>
Diese Daten sind relativ neu (April 2022), und eine Analyse des Zeitschienen-Trends zeigt, dass diese Daten im Juli 2021 hinzugefügt wurden. Wir konnten auch die zehn größten Unternehmen identifizieren, die Kubernetes-Cluster hosten und denselben Kubelet-Port für das Internet freigeben.

Kubelet
Kubelet ist der Agent, der auf jedem Knoten läuft und sicherstellt, dass alle Container in einem Pod laufen. Er ist zudem für alle Konfigurationsänderungen auf den Knoten verantwortlich und hat drei Hauptfunktionen:
- Hilft Knoten, dem Kubernetes-Cluster beizutreten
- Startet und verwaltet den Zustand der auf seinem Knoten laufenden Container
- Hält die Steuerungsebene über den Knotenstatus und andere Informationen auf aktuellem Stand

Die cyberkriminelle Entwicklung bereitet Sorge, denn Angreifer missbrauchen das Kubelet-API als Einstiegspunkt für den Angriff auf Kubernetes-Cluster, um Kryptowährung zu schürfen. Die Methode des Missbrauchs von Container-Verwaltungsservices zur Ausführung von Befehlen innerhalb des Containers ist im MITRE ATT&CK für Container als eine Technik aufgeführt.
Das Kubelet-API
Port 10250 wird standardmäßig von der Kubelet-API verwendet. Er ist auf allen Knoten eines Clusters offen, einschließlich der API-Server-Kontrollebene und der Arbeitsknoten. Normalerweise wird dieser Port nur intern verwendet und ist nicht über externe Dienste zugänglich. Anfragen an den API-Endpunkt des Kubelets, die nicht durch andere Authentifizierungsmethoden blockiert sind, werden standardmäßig als anonyme Anfragen behandelt. Das Kubelet ist nicht dokumentiert. Weitere Informationen zu den Kubelet-API-Endpunkten liefert das Open-Source-Tool kubeletctl .
Analyse der Daten von Shodan
Bei der Anzahl von Kubernetes-Clustern mit ihren Kubelets im Internet stellen sich zwei Fragen: Wie viele dieser Cluster geben Informationen über das Kubelet preis, und wie viele von ihnen könnten für Angriffe anfällig sein? Deshalb luden wir die Daten von Shodan herunter und versuchten die Cluster zu identifizieren, die auf anonyme Anfragen an die Kubelet-API reagieren würden. Mit den bereitgestellten IP-Adressinformationen und einem einfachen Skript, das Anfragen an die Kubelet-API stellt, konnten wir einige interessante Informationen von den offenen Kubernetes-Knoten und Kubelets sammeln.
Die Ergebnisse unserer Analyse von über 240.000 exponierten Kubernetes-Knoten zeigten, dass die meisten der getesteten Cluster anonyme Anfragen blockieren (HTTP „401 Status Code – Unauthorized“) oder während der Zeit unserer Anfragen nicht erreichbar waren.

Auf den ersten Blick mag dies ein gutes Zeichen sein. Wenn jedoch ein Angreifer den Kubelet-Authentifizierungs-Token kompromittieren kann, wären diese Cluster in Gefahr. Außerdem bedeutet diese Information bereits, dass in dieser Umgebung ein Kubernetes-Cluster läuft, was dazu führen kann, dass der Angreifer andere K8s-Exploits und -Schwachstellen ausprobiert, um die Umgebung zu infiltrieren.
Fast 76.000 Anfragen wurden nicht beantwortet, entweder aufgrund von Zeitüberschreitung nach 10 Sekunden oder durch Verweigerung der Verbindung über diesen Port. Wir stellten auch fest, dass fast 3.500 Server eine „403 – Forbidden“-Meldung anstelle der üblichen 401-Antwort zurückgaben. Das bedeutet, dass die Kubelet-API die nicht authentifizierte Anfrage zuließ, aber feststellte, dass der Anfrager nicht über die richtigen Berechtigungen (Autorisierung) für den Zugriff auf diesen spezifischen Endpunkt verfügte.
Einige Knoten, auf denen ein Kubelet läuft, antworteten mit Informationen darüber, welche Pods auf diesem Knoten laufen. Dabei handelt es sich um eine JSON-Antwort mit Informationen über den Namen des Pods, den Namespace, in dem er innerhalb des Clusters läuft, sowie über die Container, die in jedem Pod laufen. Ein Pod kann einen oder mehrere Container enthalten. Weitere Informationen zu den Untersuchungen umfasst der Orginalbeitrag.
Schutz des Kubelets
In den falschen Händen können diese exponierten Knoten (Kubelets), die alle Pods auflisten und mit Informationen über die Endpunkte antworten (Response 200), die Berechtigung haben, bösartige Pods wie Kryptominers unter Verwendung der Kubelet-API einzusetzen. Sie können auch Pods einsetzen, um Geheimnisse und Anmeldeinformationen zu stehlen und vielleicht sogar den gesamten Knoten zu löschen.
Da die betroffenen Organisationen die verwalteten Versionen von Kubernetes verwenden, können Cloud-Service-Provider (CSPs) ihre Dienstleistungen für ihre Kunden verbessern, indem sie deren exponierte und zugängliche Kubelets identifizieren und ihre Kunden darüber informieren. Darüber hinaus ist es wichtig, zwei kritische Faktoren für Kubelet-Sicherheitseinstellungen zu beachten: Authentifizierung und Autorisierung.
- Aktivieren der Kubelet-Authentifizierung. Es ist wichtig, sicherzustellen, dass Sie die Kubelets mit dem Flag <--anonymous-auth=false> starten und den anonymen Zugriff deaktivieren, weil damit auch die „401 – Unauthorized“-Antworten auf alle nicht authentifizierten Anfragen an das Kubelet gesendet werden. Weitere Informationen finden Sie in den offiziellen Kubernetes-Empfehlungen zur Kubelet-Authentifizierung.
- Aktivieren der Kubelet-Autorisierung. Jede erfolgreiche Anfrage, die das Kubelet-API authentifiziert, wird automatisch autorisiert. Durch die richtige Aktivierung der Autorisierung können Benutzer festlegen, welche HTTP-Methoden und Endpunkte von verschiedenen Benutzern oder Dienstkonten verwendet werden dürfen. Wenn der Benutzer nicht berechtigt ist, auf diese spezifische Ressource zuzugreifen, erhält er eine „403 – Forbidden“-Antwort. Weitere Informationen finden Sie in den offiziellen Kubernetes-Empfehlungen zur Kubelet-Autorisierung.
Wir empfehlen außerdem, die Sicherheitseinstellungen wie folgt anzupassen, um die Kubelets zu schützen und die Auswirkungen von Bedrohungen zu mindern:
- Schränken Sie die Kubelet-Berechtigungen ein, um zu verhindern, dass Angreifer die Anmeldeinformationen lesen können, um bösartige Aktionen durchzuführen.
- Rotieren Sie die Kubelet-Zertifikate. Im Falle einer Kompromittierung sind die Zertifikate nur von kurzer Dauer gültig und die potenziellen Auswirkungen auf die Cluster werden reduziert.
Weitere Informationen zum Schutz Ihres Kubernetes-Clusters finden Sie in unserem Artikel „Die Grundlagen der Sicherheit von Kubernetes-Clustern“.