AWS - EKS Post Exploitation

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

EKS

Za više informacija pogledajte

AWS - EKS Enum

Nabrojavanje klastera iz AWS konzole

Ako imate dozvolu eks:AccessKubernetesApi možete videti Kubernetes objekte putem AWS EKS konzole (Saznajte više).

Povezivanje sa AWS Kubernetes klasterom

  • Jednostavan način:

# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
  • Nije tako jednostavan način:

Ako možete dobiti token sa aws eks get-token --name <ime_klastera> ali nemate dozvole da dobijete informacije o klasteru (describeCluster), možete pripremiti svoj ~/.kube/config. Međutim, imajući token, i dalje vam je potreban URL endpoint za povezivanje (ako ste uspeli da dobijete JWT token iz poda pročitajte ovde) i ime klastera.

U mom slučaju, nisam pronašao informacije u CloudWatch zapisima, ali sam pronašao ih u userData LaunchTemaplates i u EC2 mašinama takođe. Možete lako videti ove informacije u userData, na primer u sledećem primeru (ime klastera je bilo cluster-name):

API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com

/etc/eks/bootstrap.sh cluster-name --kubelet-extra-args '--node-labels=eks.amazonaws.com/sourceLaunchTemplateVersion=1,alpha.eksctl.io/cluster-name=cluster-name,alpha.eksctl.io/nodegroup-name=prd-ondemand-us-west-2b,role=worker,eks.amazonaws.com/nodegroup-image=ami-002539dd2c532d0a5,eks.amazonaws.com/capacityType=ON_DEMAND,eks.amazonaws.com/nodegroup=prd-ondemand-us-west-2b,type=ondemand,eks.amazonaws.com/sourceLaunchTemplateId=lt-0f0f0ba62bef782e5 --max-pods=58' --b64-cluster-ca $B64_CLUSTER_CA --apiserver-endpoint $API_SERVER_URL --dns-cluster-ip $K8S_CLUSTER_DNS_IP --use-max-pods false
kube konfiguracija

```yaml describe-cache-parametersapiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMvakNDQWVhZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1USXlPREUyTWpjek1Wb1hEVE15TVRJeU5URTJNamN6TVZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTDlXCk9OS0ZqeXZoRUxDZGhMNnFwWkMwa1d0UURSRVF1UzVpRDcwK2pjbjFKWXZ4a3FsV1ZpbmtwOUt5N2x2ME5mUW8KYkNqREFLQWZmMEtlNlFUWVVvOC9jQXJ4K0RzWVlKV3dzcEZGbWlsY1lFWFZHMG5RV1VoMVQ3VWhOanc0MllMRQpkcVpzTGg4OTlzTXRLT1JtVE5sN1V6a05pTlUzSytueTZSRysvVzZmbFNYYnRiT2kwcXJSeFVpcDhMdWl4WGRVCnk4QTg3VjRjbllsMXo2MUt3NllIV3hhSm11eWI5enRtbCtBRHQ5RVhOUXhDMExrdWcxSDBqdTl1MDlkU09YYlkKMHJxY2lINjYvSTh0MjlPZ3JwNkY0dit5eUNJUjZFQURRaktHTFVEWUlVSkZ4WXA0Y1pGcVA1aVJteGJ5Nkh3UwpDSE52TWNJZFZRRUNQMlg5R2c4Q0F3RUFBYU5aTUZjd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZQVXFsekhWZmlDd0xqalhPRmJJUUc3L0VxZ1hNQlVHQTFVZEVRUU8KTUF5Q0NtdDFZbVZ5Ym1WMFpYTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBS1o4c0l4aXpsemx0aXRPcGcySgpYV0VUSThoeWxYNWx6cW1mV0dpZkdFVVduUDU3UEVtWW55eWJHbnZ5RlVDbnczTldMRTNrbEVMQVE4d0tLSG8rCnBZdXAzQlNYamdiWFovdWVJc2RhWlNucmVqNU1USlJ3SVFod250ZUtpU0J4MWFRVU01ZGdZc2c4SlpJY3I2WC8KRG5POGlHOGxmMXVxend1dUdHSHM2R1lNR0Mvd1V0czVvcm1GS291SmtSUWhBZElMVkNuaStYNCtmcHUzT21UNwprS3VmR0tyRVlKT09VL1c2YTB3OTRycU9iSS9Mem1GSWxJQnVNcXZWVDBwOGtlcTc1eklpdGNzaUJmYVVidng3Ci9sMGhvS1RqM0IrOGlwbktIWW4wNGZ1R2F2YVJRbEhWcldDVlZ4c3ZyYWpxOUdJNWJUUlJ6TnpTbzFlcTVZNisKRzVBPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== server: https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-west-2.eks.amazonaws.com name: arn:aws:eks:us-east-1::cluster/ contexts: - context: cluster: arn:aws:eks:us-east-1::cluster/ user: arn:aws:eks:us-east-1::cluster/ name: arn:aws:eks:us-east-1::cluster/ current-context: arn:aws:eks:us-east-1::cluster/ kind: Config preferences: {} users: - name: arn:aws:eks:us-east-1::cluster/ user: exec: apiVersion: client.authentication.k8s.io/v1beta1 args: - --region - us-west-2 - --profile - - eks - get-token - --cluster-name - command: aws env: null interactiveMode: IfAvailable provideClusterInfo: false ```

Od AWS-a do Kubernetesa

Kreator EKS klastera uvek će moći da pristupi delu kubernetes klastera grupe system:masters (k8s admin). U trenutku pisanja ovog teksta, ne postoji direktan način da se sazna ko je kreirao klaster (možete proveriti CloudTrail). Takođe, ne postoji način da se ukloni ta privilegija.

Način da se omogući pristup nad K8s više AWS IAM korisnicima ili ulogama je korišćenjem configmap aws-auth.

Stoga, svako ko ima pristup za pisanje nad config mapom aws-auth će moći da ugrozi ceo klaster.

Za više informacija o tome kako dodeliti dodatne privilegije IAM ulogama i korisnicima u istom ili drugom nalogu i kako to zloupotrebiti pogledajte ovu stranicu.

Pogledajte takođe ovaj sjajan post da saznate kako autentikacija IAM -> Kubernetes funkcioniše.

Od Kubernetesa do AWS-a

Moguće je omogućiti OpenID autentikaciju za kubernetes servisni nalog kako bi im se dozvolilo da preuzmu uloge u AWS-u. Saznajte kako ovo funkcioniše na ovoj stranici.

DOBIJANJE Api Server Endpoint-a iz JWT Tokena

Dekodiranjem JWT tokena dobijamo ID klastera i takođe region. Znajući da je standardni format za EKS URL

https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com

Nisam pronašao nikakvu dokumentaciju koja objašnjava kriterijume za 'dva znaka' i 'broj'. Međutim, praveći neke testove sam primetio da se često pojavljuju sledeći:

  • gr7

  • yl4

U svakom slučaju, pošto su samo 3 znaka, možemo ih probati silom. Koristite sledeći skript za generisanje liste

from itertools import product
from string import ascii_lowercase

letter_combinations = product('abcdefghijklmnopqrstuvwxyz', repeat = 2)
number_combinations = product('0123456789', repeat = 1)

result = [
f'{''.join(comb[0])}{comb[1][0]}'
for comb in product(letter_combinations, number_combinations)
]

with open('out.txt', 'w') as f:
f.write('\n'.join(result))

Zatim sa wfuzzom

wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws.com

Zamenite & .

Zaobilaženje CloudTrail-a

Ako napadač dobije akreditive za AWS sa dozvolom nad EKS-om. Ako napadač konfiguriše svoj kubeconfig (bez pozivanja update-kubeconfig) kako je objašnjeno ranije, get-token ne generiše zapise u CloudTrail-u jer ne interaguje sa AWS API-jem (samo kreira token lokalno).

Dakle, kada napadač komunicira sa EKS klasterom, cloudtrail neće zabeležiti ništa što se odnosi na korisnika koji je ukraden i pristupio mu.

Imajte na umu da bi EKS klaster mogao imati omogućene zapise koji će zabeležiti ovaj pristup (mada su podrazumevano onemogućeni).

EKS Otkup?

Podrazumevano, korisnik ili uloga koja je kreirala klaster uvek će imati administratorske privilegije nad klasterom. I to je jedini "siguran" pristup koji će AWS imati nad Kubernetes klasterom.

Dakle, ako napadač kompromituje klaster koristeći fargate i ukloni sve ostale admine i obriše AWS korisnika/rolu koja je kreirala klaster, napadač bi mogao oteti klasterr.

Imajte na umu da ako klaster koristi EC2 VM-ove, moguće je dobiti administratorske privilegije sa Node i povratiti klaster.

Zapravo, ako klaster koristi Fargate, mogli biste EC2 čvorove ili premestiti sve na EC2 do klastera i povratiti ga pristupajući tokenima na čvoru.

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated