AWS - EKS Post Exploitation
EKS
Für weitere Informationen siehe
Enumerieren Sie den Cluster über die AWS-Konsole
Wenn Sie die Berechtigung eks:AccessKubernetesApi
haben, können Sie Kubernetes-Objekte über die AWS EKS-Konsole anzeigen (Erfahren Sie mehr).
Verbinden Sie sich mit dem AWS Kubernetes-Cluster
Einfache Methode:
Nicht so einfacher Weg:
Wenn Sie ein Token erhalten können mit aws eks get-token --name <cluster_name>
, aber keine Berechtigungen haben, um Cluster-Informationen abzurufen (describeCluster), könnten Sie Ihre eigene ~/.kube/config
vorbereiten. Mit dem Token benötigen Sie jedoch immer noch den URL-Endpunkt, um sich zu verbinden (wenn Sie es geschafft haben, ein JWT-Token von einem Pod zu erhalten, lesen Sie hier) und den Namen des Clusters.
In meinem Fall habe ich die Informationen nicht in den CloudWatch-Protokollen gefunden, aber ich fand sie in den LaunchTemplates userData und in EC2-Maschinen in userData ebenfalls. Sie können diese Informationen in userData leicht sehen, zum Beispiel im nächsten Beispiel (der Clustername war cluster-name):
Von AWS zu Kubernetes
Der Ersteller des EKS-Clusters wird IMMER in der Lage sein, in den Kubernetes-Cluster-Bereich der Gruppe system:masters
(k8s-Admin) zu gelangen. Zum Zeitpunkt dieses Schreibens gibt es keinen direkten Weg, um herauszufinden, wer den Cluster erstellt hat (Sie können CloudTrail überprüfen). Und es gibt keinen Weg, um dieses Privileg zu entfernen.
Der Weg, um Zugriff auf K8s für weitere AWS IAM-Benutzer oder -Rollen zu gewähren, ist die Verwendung des Configmaps aws-auth
.
Daher wird jeder mit Schreibzugriff auf die Config-Map aws-auth
in der Lage sein, den gesamten Cluster zu kompromittieren.
Für weitere Informationen darüber, wie man zusätzliche Berechtigungen für IAM-Rollen & -Benutzer im gleichen oder unterschiedlichen Konto gewährt und wie man dies ausnutzen kann, privesc überprüfen Sie diese Seite.
Überprüfen Sie auch diesen großartigen Beitrag, um zu lernen, wie die Authentifizierung IAM -> Kubernetes funktioniert.
Von Kubernetes zu AWS
Es ist möglich, eine OpenID-Authentifizierung für Kubernetes-Dienstkonten zuzulassen, um ihnen zu ermöglichen, Rollen in AWS zu übernehmen. Erfahren Sie, wie das auf dieser Seite funktioniert.
GET Api Server-Endpunkt aus einem JWT-Token
Dann mit wfuzz
Denken Sie daran, & zu ersetzen.
Umgehung von CloudTrail
Wenn ein Angreifer die Anmeldeinformationen eines AWS mit Berechtigungen über ein EKS erhält. Wenn der Angreifer seine eigene kubeconfig
konfiguriert (ohne update-kubeconfig
aufzurufen), wie zuvor erklärt, generiert get-token
keine Protokolle in Cloudtrail, da es nicht mit der AWS API interagiert (es erstellt das Token nur lokal).
Wenn der Angreifer also mit dem EKS-Cluster kommuniziert, wird Cloudtrail nichts protokollieren, was mit dem gestohlenen Benutzer und dem Zugriff darauf zu tun hat.
Beachten Sie, dass der EKS-Cluster möglicherweise Protokolle aktiviert hat, die diesen Zugriff protokollieren (obwohl sie standardmäßig deaktiviert sind).
EKS Lösegeld?
Standardmäßig hat der Benutzer oder die Rolle, die einen Cluster erstellt hat, IMMER Administratorrechte über den Cluster. Und dass der einzige "sichere" Zugriff, den AWS über den Kubernetes-Cluster haben wird.
Wenn also ein Angreifer einen Cluster mit Fargate kompromittiert und alle anderen Administratoren entfernt und den AWS-Benutzer/die Rolle, die den Cluster erstellt hat, löscht, könnte der Angreifer den Cluster erpresst haben.
Beachten Sie, dass, wenn der Cluster EC2-VMs verwendet hat, es möglich sein könnte, Administratorrechte von dem Knoten zu erhalten und den Cluster wiederherzustellen.
Tatsächlich, wenn der Cluster Fargate verwendet, könnten Sie EC2-Knoten oder alles zu EC2 in den Cluster verschieben und ihn wiederherstellen, indem Sie auf die Tokens im Knoten zugreifen.
Last updated