
Sicherheitsschwachstellen in Kubernetes-Clustern aufspüren
kube-hunter wird nicht mehr aktiv weiterentwickelt. Wenn Sie Kubernetes-Cluster auf bekannte Schwachstellen scannen möchten, empfehlen wir die Verwendung von Trivy. Insbesondere Trivys Kubernetes-Fehlkonfigurationsscan und KBOM-Schwachstellenscan. Erfahren Sie mehr in der Trivy-Dokumentation.
kube-hunter jagt nach Sicherheitslücken in Kubernetes-Clustern. Das Tool wurde entwickelt, um das Bewusstsein und die Sichtbarkeit für Sicherheitsprobleme in Kubernetes-Umgebungen zu erhöhen. Sie sollten kube-hunter NICHT auf einem Kubernetes-Cluster ausführen, der Ihnen nicht gehört!
kube-hunter ausführen: kube-hunter ist als Container verfügbar (aquasec/kube-hunter), und wir bieten auch eine Website unter kube-hunter.aquasec.com an, auf der Sie sich online registrieren können, um einen Token zu erhalten, mit dem Sie die Ergebnisse online einsehen und teilen können. Sie können den Python-Code auch selbst ausführen, wie unten beschrieben.
Schwachstellen erkunden: Die Wissensdatenbank von kube-hunter enthält Artikel über erkennbare Schwachstellen und Probleme. Wenn kube-hunter ein Problem meldet, zeigt es seine VID (Vulnerability ID) an, sodass Sie es in der KB unter https://aquasecurity.github.io/kube-hunter/ nachschlagen können.
Wenn Sie an der Integration von kube-hunter mit der Kubernetes ATT&CK Matrix interessiert sind, lesen Sie weiter hier
kube-hunter unterstützt nun das neue Format der Kubernetes ATT&CK-Matrix. Während die Schwachstellen von kube-hunter eine Sammlung kreativer Techniken sind, die einen Angreifer im Cluster (oder außerhalb) nachahmen sollen, definiert Mitres ATT&CK eine allgemeinere standardisierte Kategorisierung von Techniken.
Man kann sich die Schwachstellen von kube-hunter als kleine Schritte eines Angreifers vorstellen, die dem Pfad einer allgemeineren Technik folgen, auf die er abzielt. Die meisten Jäger und Schwachstellen von kube-hunter lassen sich eng unter diese Techniken einordnen. Daher sind wir dazu übergegangen, dem Matrix-Standard zu folgen.
Einige Schwachstellen von kube-hunter, die wir keiner Mitre-Technik zuordnen konnten, sind mit dem Schlüsselwort General gekennzeichnet.

Es gibt drei verschiedene Möglichkeiten, kube-hunter auszuführen, die jeweils einen anderen Ansatz zur Erkennung von Schwachstellen in Ihrem Cluster bieten:
Führen Sie kube-hunter auf einem beliebigen Rechner (einschließlich Ihres Laptops) aus, wählen Sie die Remote-Scanning-Option und geben Sie die IP-Adresse oder den Domainnamen Ihres Kubernetes-Clusters an. Dies gibt Ihnen die Sicht eines Angreifers auf Ihre Kubernetes-Einrichtung.
Sie können kube-hunter direkt auf einem Rechner im Cluster ausführen und die Option wählen, alle lokalen Netzwerkschnittstellen zu scannen.
Sie können kube-hunter auch in einem Pod innerhalb des Clusters ausführen. Dies zeigt, wie exponiert Ihr Cluster wäre, wenn einer Ihrer Anwendungs-Pods kompromittiert wird (z. B. durch eine Software-Sicherheitslücke). (--pod Flag)
Überprüfen Sie zunächst diese Voraussetzungen.
Standardmäßig öffnet kube-hunter eine interaktive Sitzung, in der Sie eine der folgenden Scan-Optionen auswählen können. Sie können die Scan-Option auch manuell über die Befehlszeile angeben. Ihre Optionen:
Um entfernte Rechner zum Jagen anzugeben, wählen Sie Option 1 oder verwenden Sie die Option --remote. Beispiel:
kube-hunter --remote some.node.com
Um das Scannen von Schnittstellen anzugeben, können Sie die Option --interface verwenden (dadurch werden alle Netzwerkschnittstellen des Rechners gescannt). Beispiel:
kube-hunter --interface
Um ein bestimmtes CIDR zu scannen, verwenden Sie die Option --cidr. Beispiel:
kube-hunter --cidr 192.168.0.0/24
Setzen Sie das Flag --k8s-auto-discover-nodes, um Kubernetes nach allen Knoten im Cluster abzufragen und dann zu versuchen, alle zu scannen. Standardmäßig wird die In-Cluster-Konfiguration verwendet, um eine Verbindung zur Kubernetes-API herzustellen. Wenn Sie eine explizite kubeconfig-Datei verwenden möchten, setzen Sie --kubeconfig /pfad/zur/kubeconfig/datei.
Beachten Sie auch, dass dies immer im --pod-Modus durchgeführt wird.
Um einen Angreifer in seinen frühen Phasen nachzuahmen, benötigt kube-hunter keine Authentifizierung für die Jagd.
Impersonate - Sie können kube-hunter ein bestimmtes Service-Account-Token zur Verwendung während der Jagd bereitstellen, indem Sie das JWT-Bearer-Token des Service-Account-Secrets manuell mit dem Flag --service-account-token übergeben.
Beispiel:
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
Bei Verwendung des --pod-Flags verwendet kube-hunter das Service-Account-Token, das innerhalb des Pods eingebunden ist, um sich bei Diensten zu authentifizieren, die während der Jagd gefunden werden.
--service-account-token Priorität, wenn als Pod ausgeführt wird.Aktives Jagen ist eine Option, bei der kube-hunter gefundene Schwachstellen ausnutzt, um nach weiteren Schwachstellen zu suchen. Der Hauptunterschied zwischen normalem und aktivem Jagen besteht darin, dass ein normales Jagen niemals den Zustand des Clusters ändert, während aktives Jagen potenziell zustandsändernde Operationen am Cluster durchführen kann, die schädlich sein können.
Standardmäßig führt kube-hunter kein aktives Jagen durch. Verwenden Sie das Flag --active, um einen Cluster aktiv zu jagen. Beispiel:
kube-hunter --remote some.domain.com --active
Sie können die Liste der Tests mit der Option --list einsehen. Beispiel:
kube-hunter --list
Um sowohl aktive als auch passive Jagd-Tests zu sehen:
kube-hunter --list --active
Um nur eine Abbildung Ihres Knotennetzwerks zu sehen, führen Sie mit der Option --mapping aus. Beispiel:
kube-hunter --cidr 192.168.0.0/24 --mapping
Dies gibt alle Kubernetes-Knoten aus, die kube-hunter gefunden hat.
Um die Protokollierung zu steuern, können Sie eine Protokollebene mit der Option --log angeben. Beispiel:
kube-hunter --active --log WARNING
Verfügbare Protokollebenen sind:
Standardmäßig wird der Bericht an stdout gesendet, aber Sie können andere Methoden mit der Option --dispatch angeben. Beispiel:
kube-hunter --report json --dispatch http
Verfügbare Versandmethoden sind:
Bei der Ausführung als Pod in einer Azure- oder AWS-Umgebung ruft kube-hunter Subnetze vom Instance Metadata Service ab. Dies macht den Erkennungsprozess natürlich länger.
Um das Subnetz-Scannen auf ein /24-CIDR zu begrenzen, verwenden Sie die Option --quick.
Benutzerdefiniertes Jagen ermöglicht fortgeschrittenen Benutzern die Kontrolle darüber, welche Jäger zu Beginn einer Jagd registriert werden. Wenn Sie wissen, was Sie tun, kann dies helfen, das Jagen und den Erkennungsprozess von kube-hunter an Ihre Bedürfnisse anzupassen.
Beispiel:
kube-hunter --custom <JägerName1> <JägerName2>
Durch Aktivieren des benutzerdefinierten Jagens werden alle Jäger aus dem Jagdprozess entfernt, mit Ausnahme der angegebenen freigegebenen Jäger.
Das --custom-Flag liest eine Liste von Jäger-Klassennamen. Um alle Klassennamen von kube-hunter anzuzeigen, können Sie das Flag --raw-hunter-names mit dem --list-Flag kombinieren.
Beispiel:
kube-hunter --active --list --raw-hunter-names
Hinweis: Aufgrund der Architektur von kube-hunter werden die folgenden "Kernjäger/Klassen" immer registriert (auch bei Verwendung von benutzerdefiniertem Jagen):
Es gibt drei Methoden zur Bereitstellung von kube-hunter:
Sie können kube-hunter direkt auf Ihrem Rechner ausführen.
Sie benötigen Folgendes installiert:
Installieren:
pip install kube-hunter
Ausführen:
kube-hunter
Klonen Sie das Repository:
git clone https://github.com/aquasecurity/kube-hunter.git
Installieren Sie die Modulabhängigkeiten. (Sie können dies vorzugsweise in einer virtuellen Umgebung tun.)
cd ./kube-hunter
pip install -r requirements.txt
Ausführen:
python3 kube_hunter
Wenn Sie pyinstaller/py2exe verwenden möchten, müssen Sie zuerst das Skript install_imports.py ausführen.
Aqua Security unterhält eine containerisierte Version von kube-hunter unter aquasec/kube-hunter:aqua. Dieser Container enthält diesen Quellcode sowie ein zusätzliches (Closed-Source-)Berichts-Plugin zum Hochladen von Ergebnissen in einen Bericht, der unter kube-hunter.aquasec.com eingesehen werden kann. Bitte beachten Sie, dass die Ausführung des aquasec/kube-hunter-Containers und das Hochladen von Berichtsdaten zusätzlichen Geschäftsbedingungen unterliegen.
Das Dockerfile in diesem Repository ermöglicht es Ihnen, eine containerisierte Version ohne das Berichts-Plugin zu erstellen.
Wenn Sie den kube-hunter-Container mit dem Host-Netzwerk ausführen, kann er alle Schnittstellen des Hosts scannen:
docker run -it --rm --network host aquasec/kube-hunter
Hinweis für Docker für Mac/Windows: Beachten Sie, dass der "Host" für Docker für Mac oder Windows die VM ist, in der Docker Container ausführt. Daher ermöglicht die Angabe von --network host kube-hunter den Zugriff auf die Netzwerkschnittstellen dieser VM, nicht auf die Ihres Rechners.
Standardmäßig läuft kube-hunter im interaktiven Modus. Sie können die Scan-Option auch mit den oben beschriebenen Parametern angeben, z.B.
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
Diese Option ermöglicht es Ihnen herauszufinden, was ein bösartiger Container in Ihrem Cluster tun/entdecken kann. Dies gibt eine Perspektive darauf, was ein Angreifer tun könnte, wenn er in der Lage wäre, einen Pod zu kompromittieren, vielleicht durch eine Software-Sicherheitslücke. Dies kann deutlich mehr Schwachstellen aufdecken.
Die Beispiel-Job-Definition job.yaml definiert einen Job, der kube-hunter in einem Pod ausführt, unter Verwendung der standardmäßigen Kubernetes-Pod-Zugriffseinstellungen. (Sie können diese Definition ändern, z.B. um als Nicht-Root-Benutzer auszuführen oder in einem anderen Namespace.)
kubectl create -f ./job.yaml auskubectl describe job kube-hunterkubectl logs <Pod-Name> anUm die Richtlinien für Beiträge zu lesen, klicken Sie hier
Dieses Repository ist unter der Apache License 2.0 verfügbar.