AWS - EKS Post Exploitation
EKS
Aby uzyskać więcej informacji, sprawdź
AWS - EKS EnumWylicz klaster z konsoli AWS
Jeśli masz uprawnienie eks:AccessKubernetesApi
, możesz wyświetlać obiekty Kubernetes za pośrednictwem konsoli AWS EKS (Dowiedz się więcej).
Połącz się z klastrą AWS Kubernetes
Łatwy sposób:
Nie takie proste rozwiązanie:
Jeśli możesz uzyskać token za pomocą aws eks get-token --name <nazwa_klastra>
ale nie masz uprawnień do uzyskania informacji o klastrze (describeCluster), możesz przygotować swój własny plik ~/.kube/config
. Mimo posiadania tokenu, nadal potrzebujesz adresu URL punktu końcowego do połączenia (jeśli udało ci się uzyskać token JWT z poda, przeczytaj tutaj) oraz nazwy klastra.
W moim przypadku nie znalazłem tych informacji w logach CloudWatch, ale znalazłem je w danych uruchomieniowych LaunchTemplates oraz również w danych uruchomieniowych EC2. Możesz łatwo zobaczyć te informacje w danych uruchomieniowych, na przykład w poniższym przykładzie (nazwa klastra to cluster-name):
Z AWS do Kubernetes
Twórca klastra EKS zawsze będzie mógł uzyskać dostęp do części klastra kubernetes w grupie system:masters
(k8s admin). W chwili pisania tego nie ma bezpośredniego sposobu na znalezienie kto utworzył klaster (możesz sprawdzić CloudTrail). I nie ma sposobu na usunięcie tego uprawnienia.
Sposobem na udzielenie 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 z uprawnieniem do zapisu w mapie konfiguracyjnej aws-auth
będzie mógł zagrozić całemu klastrze.
Aby uzyskać więcej informacji na temat tego, jak udzielić dodatkowych uprawnień rolom i użytkownikom IAM w tym samym lub innym koncie oraz jak to wykorzystać, zajrzyj na tę stronę.
Sprawdź również ten fantastyczny post, aby dowiedzieć się, jak działa uwierzytelnianie IAM -> Kubernetes.
Z Kubernetes do AWS
Możliwe jest zezwolenie na uwierzytelnianie OpenID dla konta usługi kubernetes, aby umożliwić im przejmowanie ról w AWS. Dowiedz się, jak to działa na tej stronie.
Pobierz punkt końcowy serwera Api z tokena JWT
Dekodując token JWT, otrzymujemy identyfikator klastra oraz region. Wiedząc, że standardowy format adresu URL EKS to
Nie znaleziono żadnej dokumentacji wyjaśniającej kryteria dla 'dwóch znaków' i 'liczby'. Ale po przeprowadzeniu testów zauważyłem, że pojawiają się one często:
gr7
yl4
W każdym razie, skoro są to tylko 3 znaki, możemy je przetestować metodą bruteforce. Użyj poniższego skryptu do wygenerowania listy
Następnie z wfuzz
Pamiętaj, aby zastąpić & .
Ominięcie CloudTrail
Jeśli atakujący uzyska poświadczenia AWS z uprawnieniami do EKS. Jeśli atakujący skonfiguruje swój własny kubeconfig
(bez wywoływania update-kubeconfig
) jak wyjaśniono wcześniej, polecenie get-token
nie generuje logów w CloudTrail, ponieważ nie komunikuje się z interfejsem API AWS (tylko tworzy token lokalnie).
Dlatego gdy atakujący rozmawia z klastrą EKS, cloudtrail nie zarejestruje niczego związanego z użytkownikiem, który został skradziony i uzyskał do niego dostęp.
Zauważ, że klastr EKS może mieć włączone logi, które zarejestrują ten dostęp (choć domyślnie są one wyłączone).
Ransom EKS?
Domyślnie użytkownik lub rola, która utworzyła klaster zawsze będzie miała uprawnienia administratora nad klasterem. I to jedyny "bezpieczny" dostęp, jaki AWS będzie miał do klastra Kubernetes.
Więc jeśli atakujący przejmuje klaster za pomocą fargate i usunie wszystkich innych administratorów oraz usunie użytkownika/rolę AWS, który utworzył klaster, atakujący mógłby wymusić okup na klastrzer.
Zauważ, że jeśli klaster korzystał z maszyn wirtualnych EC2, byłoby możliwe uzyskanie uprawnień administratora z Node i odzyskanie klastra.
Tak naprawdę, jeśli klaster korzysta z Fargate, można uzyskać dostęp do węzłów EC2 lub przenieść wszystko do EC2 do klastra i odzyskać go uzyskując dostęp do tokenów w węźle.
Last updated