AWS - EKS Post Exploitation
EKS
Dla więcej informacji sprawdź
pageAWS - 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 informacji w logach CloudWatch, ale znalazłem je w danych userData LaunchTemplates oraz również w danych userData EC2 machines. Możesz łatwo zobaczyć te informacje w userData, 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 klastra Kubernetes jako część grupy system:masters
(administrator k8s). W chwili pisania tego tekstu nie ma bezpośredniego sposobu na znalezienie twórcy klastra (można sprawdzić CloudTrail). Nie ma również 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 configmapy aws-auth
.
Dlatego każda osoba mająca dostęp do zapisu w mapie konfiguracyjnej aws-auth
będzie mogła zagrozić całemu klastrze.
Aby uzyskać więcej informacji na temat udzielania dodatkowych uprawnień dla ról i użytkowników IAM w tym samym lub innym koncie oraz jak to wykorzystać, zajrzyj na tę stronę.
Sprawdź również ten świetny post, aby dowiedzieć się, jak działa uwierzytelnianie IAM -> Kubernetes.
Z Kubernetes do AWS
Możliwe jest umożliwienie uwierzytelniania 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
Nie znaleziono dokumentacji wyjaśniającej kryteria dla 'dwóch znaków' i 'liczby'. Ale po przeprowadzeniu testów zauważyłem, że występują często takie kombinacje:
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 swoje własne 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 (tworzy tylko token lokalnie).
Więc 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 klastrem. 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 użyć 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