AWS - EKS Post Exploitation

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

EKS

Vir meer inligting kyk

pageAWS - EKS Enum

Enumerate die groep vanaf die AWS Konsole

As jy die toestemming eks:AccessKubernetesApi het, kan jy Kubernetes voorwerpe sien via die AWS EKS konsole (Leer meer).

Koppel aan AWS Kubernetes Groep

  • Maklike manier:

# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
  • Nie so maklik nie:

As jy 'n token kan kry met aws eks get-token --name <cluster_name> maar jy het nie toestemmings om klasterinligting te kry (describeCluster) nie, kan jy jou eie ~/.kube/config voorberei. Tog, selfs met die token, het jy nog steeds die url eindpunt nodig om mee te verbind (as jy daarin geslaag het om 'n JWT-token van 'n peul te kry, lees hier) en die naam van die klas.

In my geval het ek nie die inligting in CloudWatch-logboeke gevind nie, maar ek het dit in LaunchTemplates userData en ook in EC2-masjiene in userData gevind. Jy kan hierdie inligting in userData maklik sien, byvoorbeeld in die volgende voorbeeld (die klasnaam was 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-config

```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 ```

Van AWS na Kubernetes

Die skepper van die EKS groep sal altyd toegang hê tot die kubernetes groep deel van die system:masters (k8s admin). Op die oomblik van hierdie skrywe is daar geen direkte manier om te vind wie die groep geskep het (jy kan CloudTrail nagaan). En daar is geen manier om daardie voorreg te verwyder nie.

Die manier om toegang tot K8s aan meer AWS IAM-gebruikers of rolle te gee is deur die configmap aws-auth te gebruik.

Daarom sal enige iemand met skryftoegang tot die config map aws-auth in staat wees om die hele groep in gevaar te stel.

Vir meer inligting oor hoe om ekstra voorregte aan IAM-rolle & gebruikers in dieselfde of 'n ander rekening te gee en hoe om dit te misbruik kyk na hierdie bladsy.

Kyk ook na hierdie wonderlike pos om te leer hoe die verifikasie IAM -> Kubernetes werk.

Van Kubernetes na AWS

Dit is moontlik om OpenID-verifikasie vir kubernetes-diensrekening toe te laat om hulle in staat te stel om rolle in AWS aan te neem. Leer hoe dit werk op hierdie bladsy.

Kry Api-bediener-eindpunt van 'n JWT-token

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

Ek het nie enige dokumentasie gevind wat die kriteria vir die 'twee karakters' en die 'getal' verduidelik nie. Maar deur 'n paar toetse aan my kant te doen, sien ek dat hierdie gereeld voorkom:

  • gr7

  • yl4

Hoe dan ook, aangesien dit net 3 karakters is, kan ons hulle kragtig aanval. Gebruik die onderstaande skripsie om die lys te genereer

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))

Dan met wfuzz

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

Onthou om & te vervang.

Om CloudTrail te omseil

Indien 'n aanvaller geloofsbriewe van 'n AWS met toestemming oor 'n EKS bekom. As die aanvaller sy eie kubeconfig configureer (sonder om update-kubeconfig te roep) soos voorheen verduidelik, genereer die get-token nie logboeke in Cloudtrail nie omdat dit nie met die AWS API interaksieer nie (dit skep net die token plaaslik).

Dus wanneer die aanvaller met die EKS-cluster praat, sal cloudtrail niks log nie wat verband hou met die gesteelde gebruiker wat dit benader.

Let daarop dat die EKS-cluster dalk logboeke geaktiveer het wat hierdie toegang sal log (alhoewel dit standaard gedeaktiveer is).

EKS Losgeld?

Standaard sal die gebruiker of rol wat 'n cluster geskep het altyd administratiewe regte oor die cluster hê. En dit is die enigste "veilige" toegang wat AWS oor die Kubernetes-cluster sal hê.

Dus, as 'n aanvaller 'n cluster kompromitteer deur fargate te gebruik en alle ander administrateurs verwyder en die AWS-gebruiker/rol wat die Cluster geskep het, verwyder, kon die aanvaller die cluster gegijzel hetr.

Let daarop dat as die cluster EC2 VM's gebruik het, dit moontlik sou wees om Administratiewe regte van die Node te kry en die cluster te herstel.

Eintlik, as die cluster Fargate gebruik, kan jy EC2-nodes gebruik of alles na EC2 skuif om die cluster te herstel deur toegang tot die tokens in die node te verkry.

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated