AWS - EKS Post Exploitation

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

EKS

Kwa habari zaidi angalia

pageAWS - EKS Enum

Tathmini kikundi kutoka kwenye Konsoli ya AWS

Ikiwa una ruhusa ya eks:AccessKubernetesApi unaweza kuona vitu vya Kubernetes kupitia konsoli ya AWS EKS (Jifunze zaidi).

Unganisha kwenye Kikundi cha AWS Kubernetes

  • Njia rahisi:

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

Ikiwa unaweza kupata token na aws eks get-token --name <cluster_name> lakini huna ruhusa ya kupata habari za kikundi (describeCluster), unaweza kuandaa ~/.kube/config yako mwenyewe. Walakini, ukiwa na token, bado unahitaji url ya mwisho wa kuunganisha (ikiwa umefanikiwa kupata token ya JWT kutoka kwa pod soma hapa) na jina la kikundi.

Katika kesi yangu, sikupata habari hiyo kwenye magogo ya CloudWatch, lakini nilipata kwenye userData za LaunchTemplates na pia kwenye mashine za EC2 kwenye userData pia. Unaweza kuona habari hii katika userData kwa urahisi, kwa mfano katika mfano ufuatao (jina la kikundi 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
Faili ya kube

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

Mwanzilishi wa kikundi cha EKS cluster daima ataweza kuingia kwenye sehemu ya kikundi cha kubernetes system:masters (k8s admin). Wakati wa kuandika hii, hakuna njia moja kwa moja ya kupata nani aliyeanzisha kikundi hicho (unaweza kuangalia CloudTrail). Na hakuna njia ya kuondoa hicho haki.

Njia ya kutoa upatikanaji wa zaidi wa K8s kwa watumiaji au majukumu zaidi ya AWS IAM ni kutumia configmap aws-auth.

Hivyo, yeyote mwenye upatikanaji wa kuandika kwenye ramani ya config aws-auth ataweza kuathiri kikundi chote.

Kwa habari zaidi kuhusu jinsi ya kutoa haki za ziada kwa majukumu na watumiaji wa IAM katika akaunti ile ile au tofauti na jinsi ya kutumia vibaya hii angalia ukurasa huu.

Angalia pia hii nzuri chapisho kujifunza jinsi uwakilishi wa IAM -> Kubernetes unavyofanya kazi.

Kutoka Kubernetes kwenda AWS

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

Pata Mwisho wa Seva ya API kutoka kwa Tokeni ya JWT

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

Hakupata nyaraka yoyote inayoeleza vigezo vya 'herufi mbili' na 'namba'. Lakini baada ya kufanya majaribio binafsi, nimeona hizi zinajirudia:

  • gr7

  • yl4

Kwa vyovyote vile, kwa kuwa ni herufi 3 tu, tunaweza kuzitafuta kwa nguvu ya kompyuta. Tumia script hapa chini kwa kuzalisha orodha hiyo

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 kwa CloudTrail

Ikiwa mshambuliaji anapata siri za AWS na ruhusa juu ya EKS. Ikiwa mshambuliaji anasanidi kubeconfig yake mwenyewe (bila kuita update-kubeconfig) kama ilivyoelezwa hapo awali, get-token haitoi logs katika Cloudtrail kwa sababu haina mwingiliano na AWS API (inajenga token kwa upande wa mshambuliaji).

Kwa hivyo wakati mshambuliaji anazungumza na kikundi cha EKS, cloudtrail haitaandika chochote kinachohusiana na mtumiaji aliyeibiwa na kufikia.

Tafadhali kumbuka kuwa kikundi cha EKS kinaweza kuwa na logs zilizowezeshwa ambazo zitaandika ufikiaji huu (ingawa, kwa chaguo-msingi, zimelemazwa).

EKS Ransom?

Kwa chaguo-msingi mtumiaji au jukumu lililounda kikundi LINAKUWA na mamlaka ya admin juu ya kikundi. Na hiyo ndiyo njia pekee ya ufikiaji "salama" AWS itakayokuwa nayo juu ya kikundi cha Kubernetes.

Kwa hivyo, ikiwa mshambuliaji anashambulia kikundi kwa kutumia fargate na kuondoa waendeshaji wengine wote na kufuta mtumiaji/jukumu la AWS lililounda Kikundi, mshambuliaji anaweza kuwa ameteka nyara kikundir.

Tafadhali kumbuka kuwa ikiwa kikundi kilikuwa kinatumia EC2 VMs, inaweza kuwa inawezekana kupata mamlaka ya Admin kutoka kwa Node na kurejesha kikundi.

Kwa kweli, Ikiwa kikundi kinatumia Fargate unaweza kutumia vifaa vya EC2 au kuhamisha kila kitu kwa EC2 kwenye kikundi na kukirejesha kwa kupata vibali kwenye kifaa.

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated