AWS - EKS Post Exploitation

Support HackTricks

EKS

Kwa habari zaidi angalia

AWS - 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 <jina_la_kikundi> lakini huna ruhusa ya kupata habari za kikundi (describeCluster), unaweza kuandaa ~/.kube/config yako mwenyewe. Walakini, ukiwa na token, bado unahitaji url ya mwisho ya kuunganisha (ikiwa umefanikiwa kupata token ya JWT kutoka kwa podi soma hapa) na jina la kikundi.

Katika kesi yangu, sikupata habari hiyo kwenye magogo ya CloudWatch, lakini nilipata kwenye data ya LaunchTemplates na pia kwenye mashine za EC2 katika data ya userData. 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
Konfigi 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 cha system:masters (k8s admin). Wakati wa kuandika hii, hakuna njia moja kwa moja ya kugundua nani aliyeanzisha kikundi hicho (unaweza kuangalia CloudTrail). Na hakuna njia ya kuondoa hicho haki.

Njia ya kutoa upatikanaji wa K8s kwa watumiaji au majukumu zaidi ya AWS IAM ni kwa 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 ili 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 Token ya JWT

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

Hakupata nyaraka yoyote inayoeleza vigezo vya 'herufi mbili' na 'namba'. Lakini kufanya majaribio yangu mwenyewe nimeona hizi zinajirudia:

  • gr7

  • yl4

Kwa vyovyote vile ni herufi 3 tu tunaweza kuzitafuta kwa nguvu. Tumia script hapa chini kwa kuzalisha 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 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 kwamba kikundi cha EKS kinaweza kuwa na logs zilizowezeshwa ambazo zitaandika ufikiaji huu (ingawa, kwa chaguo-msingi, zimelemazwa).

EKS Malipo ya Kikombozi?

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 wa AWS aliyeanzisha Kikundi, mshambuliaji angeweza kuwa na kikundi cha kikombozir.

Tafadhali kumbuka kwamba 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 kufikia vibali kwenye node.

Support HackTricks

Last updated