AWS - EKS Post Exploitation

Support HackTricks

EKS

Kwa maelezo zaidi angalia

Enumerate the cluster from the AWS Console

Ikiwa una ruhusa eks:AccessKubernetesApi unaweza kuangalia vitu vya Kubernetes kupitia AWS EKS console (Learn more).

Connect to AWS Kubernetes Cluster

  • Njia rahisi:

# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
  • Si njia rahisi:

Ikiwa unaweza kupata token kwa aws eks get-token --name <cluster_name> lakini huna ruhusa ya kupata taarifa za klasta (describeCluster), unaweza kuandaa ~/.kube/config yako mwenyewe. Hata hivyo, ukiwa na token, bado unahitaji url endpoint ya kuungana (ikiwa umeweza kupata token ya JWT kutoka kwa pod soma hapa) na jina la klasta.

Katika kesi yangu, sikuweza kupata taarifa katika CloudWatch logs, lakini nilipata katika LaunchTemplates userData na katika mashine za EC2 katika userData pia. Unaweza kuona taarifa hii katika userData kwa urahisi, kwa mfano katika mfano ufuatao (jina la klasta lilikuwa 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 ```

Kutoka AWS hadi Kubernetes

Mwandishi wa EKS cluster daima atakuwa na uwezo wa kuingia kwenye sehemu ya kundi la kubernetes system:masters (k8s admin). Wakati wa kuandika hii, hakuna njia ya moja kwa moja ya kubaini nani aliumba kundi hilo (unaweza kuangalia CloudTrail). Na hakuna njia ya kuondoa hiyo haki.

Njia ya kutoa ufikiaji kwa K8s kwa watumiaji au majukumu mengine ya AWS IAM ni kutumia configmap aws-auth.

Hivyo, mtu yeyote mwenye ufikiaji wa kuandika kwenye ramani ya config aws-auth ataweza kuathiri kundi zima.

Kwa maelezo zaidi kuhusu jinsi ya kutoa haki za ziada kwa majukumu na watumiaji wa IAM katika akaunti sawa au tofauti na jinsi ya kudhulumu hii privesc angalia ukurasa huu.

Angalia pia hii nzuri post ili kujifunza jinsi uthibitishaji IAM -> Kubernetes unavyofanya kazi.

Kutoka Kubernetes hadi AWS

Inawezekana kuruhusu uthibitishaji wa OpenID kwa akaunti ya huduma ya kubernetes ili kuwapa uwezo wa kuchukua majukumu katika AWS. Jifunze jinsi hii inavyofanya kazi katika ukurasa huu.

PATA Api Server Endpoint kutoka kwa JWT Token

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

Haukuweza kupata hati yoyote inayofafanua vigezo vya 'herufi mbili' na 'nambari'. Lakini kwa kufanya majaribio kwa niaba yangu, naona haya yanajirudia:

  • gr7

  • yl4

Hata hivyo, ni herufi 3 tu tunaweza kuzishambulia. Tumia script iliyo hapa chini kwa ajili ya kuunda orodha

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

Kisha na wfuzz

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

Kumbuka kubadilisha & .

Kupita CloudTrail

Ikiwa mshambuliaji anapata akreditivu za AWS zenye ruhusa juu ya EKS. Ikiwa mshambuliaji anapanga kubeconfig yake mwenyewe (bila kuita update-kubeconfig) kama ilivyoelezwa hapo awali, get-token haitengenezi kumbukumbu katika Cloudtrail kwa sababu haiingiliani na API ya AWS (inaunda tu token hiyo kwa ndani).

Hivyo, wakati mshambuliaji anazungumza na klasta ya EKS, cloudtrail haitarekodi chochote kinachohusiana na mtumiaji anayeporwa na kuingia.

Kumbuka kwamba klasta ya EKS inaweza kuwa na kumbukumbu zilizowezeshwa ambazo zitaandika ufikiaji huu (ingawa, kwa kawaida, zimezimwa).

EKS Ransom?

Kwa kawaida, mtumiaji au jukumu lililounda klasta lina DAIMA kuwa na mamlaka ya usimamizi juu ya klasta hiyo. Na kwamba ufikiaji pekee "salama" ambao AWS itakuwa nao juu ya klasta ya Kubernetes.

Hivyo, ikiwa mshambuliaji anaharibu klasta kwa kutumia fargate na kuondoa wasimamizi wengine wote na kufuta mtumiaji/jukumu la AWS lililounda Klasta, mshambuliaji anaweza kuwa amefanya nyara klastar.

Kumbuka kwamba ikiwa klasta ilikuwa inatumia EC2 VMs, inaweza kuwa inawezekana kupata mamlaka ya Usimamizi kutoka kwa Node na kurejesha klasta hiyo.

Kwa kweli, ikiwa klasta inatumia Fargate unaweza EC2 nodes au kuhamasisha kila kitu kwenda EC2 kwenye klasta na kuirejesha kwa kufikia token katika node.

Support HackTricks

Last updated