AWS - EKS Post Exploitation
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aby uzyskać więcej informacji, sprawdź
Jeśli masz uprawnienia eks:AccessKubernetesApi
, możesz wyświetlać obiekty Kubernetes za pośrednictwem konsoli AWS EKS (Dowiedz się więcej).
Łatwy sposób:
Nie tak łatwy sposób:
Jeśli możesz uzyskać token za pomocą aws eks get-token --name <cluster_name>
, ale nie masz uprawnień do uzyskania informacji o klastrze (describeCluster), możesz przygotować własny ~/.kube/config
. Jednak mając token, nadal potrzebujesz adresu URL punktu końcowego, aby się połączyć (jeśli udało ci się uzyskać token JWT z poda, przeczytaj tutaj) oraz nazwy klastra.
W moim przypadku nie znalazłem informacji w logach CloudWatch, ale znalazłem je w LaunchTemplates userData oraz w maszynach EC2 w userData również. Możesz łatwo zobaczyć te informacje w userData, na przykład w następnym przykładzie (nazwa klastra to cluster-name):
Twórca klastra EKS ZAWSZE będzie mógł uzyskać dostęp do części klastra kubernetes w grupie system:masters
(administrator k8s). W momencie pisania tego tekstu nie ma bezpośredniego sposobu na ustalenie kto stworzył klaster (możesz sprawdzić CloudTrail). I nie ma sposobu na usunięcie tego przywileju.
Sposobem na przyznanie dostępu do K8s dla większej liczby użytkowników lub ról AWS IAM jest użycie configmap aws-auth
.
Dlatego każdy, kto ma dostęp do zapisu w mapie konfiguracyjnej aws-auth
, będzie mógł skompromentować cały klaster.
Aby uzyskać więcej informacji na temat tego, jak przyznać dodatkowe przywileje rolom i użytkownikom IAM w tym samym lub innym koncie oraz jak to wykorzystać do privesc sprawdź tę stronę.
Sprawdź również ten niesamowity post, aby dowiedzieć się, jak działa uwierzytelnianie IAM -> Kubernetes.
Możliwe jest zezwolenie na uwierzytelnianie OpenID dla konta usługi kubernetes, aby mogły one przyjmować role w AWS. Dowiedz się, jak to działa na tej stronie.
Nie znalazłem żadnej dokumentacji, która wyjaśniałaby kryteria dla 'dwóch znaków' i 'liczby'. Ale robiąc kilka testów na własną rękę, zauważyłem, że te się powtarzają:
gr7
yl4
W każdym razie to tylko 3 znaki, możemy je bruteforce'ować. Użyj poniższego skryptu do generowania listy.
Potem z wfuzz
Pamiętaj, aby zastąpić & .
Jeśli atakujący uzyska dane uwierzytelniające AWS z uprawnieniami do EKS. Jeśli atakujący skonfiguruje własny kubeconfig
(bez wywoływania update-kubeconfig
) jak wyjaśniono wcześniej, get-token
nie generuje logów w CloudTrail, ponieważ nie wchodzi w interakcję z API AWS (po prostu tworzy token lokalnie).
Więc kiedy atakujący rozmawia z klastrem EKS, cloudtrail nie zarejestruje nic związanego z użytkownikiem, który został skradziony i uzyskuje do niego dostęp.
Zauważ, że klaster EKS może mieć włączone logi, które zarejestrują ten dostęp (chociaż domyślnie są one wyłączone).
Domyślnie użytkownik lub rola, która utworzyła klaster ZAWSZE będzie miała uprawnienia administratora do klastra. I że jedynym "bezpiecznym" dostępem, jaki AWS będzie miał do klastra Kubernetes.
Więc, jeśli atakujący przejmie kontrolę nad klastrem używając Fargate i usunie wszystkich innych administratorów oraz usunie użytkownika/rolę AWS, która utworzyła klaster, atakujący mógłby zażądać okupu za klaster.
Zauważ, że jeśli klaster używał maszyn EC2, możliwe byłoby uzyskanie uprawnień administratora z Węzła i odzyskanie klastra.
W rzeczywistości, jeśli klaster używa Fargate, możesz uzyskać węzły EC2 lub przenieść wszystko do EC2 w klastrze i odzyskać go, uzyskując dostęp do tokenów w węźle.
Dekodując token JWT, uzyskujemy identyfikator klastra oraz region. Wiedząc, że standardowy format dla adresu URL EKS to
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)