AWS - EKS Post Exploitation
Reading time: 6 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
EKS
Kwa maelezo zaidi angalia
Tambua klasta kutoka kwa AWS Console
Ikiwa una ruhusa eks:AccessKubernetesApi
unaweza kuona vitu vya Kubernetes kupitia AWS EKS console (Learn more).
Unganisha na 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
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:<acc-id>:cluster/<cluster-name>
contexts:
- context:
cluster: arn:aws:eks:us-east-1:<acc-id>:cluster/<cluster-name>
user: arn:aws:eks:us-east-1:<acc-id>:cluster/<cluster-name>
name: arn:aws:eks:us-east-1:<acc-id>:cluster/<cluster-name>
current-context: arn:aws:eks:us-east-1:<acc-id>:cluster/<cluster-name>
kind: Config
preferences: {}
users:
- name: arn:aws:eks:us-east-1:<acc-id>:cluster/<cluster-name>
user:
exec:
apiVersion: client.authentication.k8s.io/v1beta1
args:
- --region
- us-west-2
- --profile
- <profile>
- eks
- get-token
- --cluster-name
- <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 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
.
warning
Hivyo, mtu yeyote mwenye ufikiaji wa kuandika kwenye ramani ya config aws-auth
ataweza kuharibu 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 uthibitisho wa IAM -> Kubernetes unavyofanya kazi.
Kutoka Kubernetes hadi AWS
Inawezekana kuruhusu uthibitisho wa OpenID kwa akaunti ya huduma ya kubernetes ili kuwawezesha kuchukua majukumu katika AWS. Jifunze jinsi hii inavyofanya kazi katika ukurasa huu.
PATA Api Server Endpoint kutoka kwa JWT Token
Kwa kufungua token ya JWT tunapata kitambulisho cha kundi & pia eneo. Kujua kwamba muundo wa kawaida wa URL ya EKS ni
https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com
Sijapata hati yoyote inayofafanua vigezo vya 'herufi mbili' na 'nambari'. Lakini nikifanya majaribio kwa niaba yangu, naona hizi zikijirudia:
- gr7
- yl4
Hata hivyo, ni herufi 3 tu tunaweza kuzivunja. Tumia script iliyo hapa chini kutengeneza 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
warning
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 aliyeibiwa na kuingia.
Kumbuka kwamba klasta ya EKS inaweza kuwa na kumbukumbu zilizoanzishwa ambazo zitaandika ufikiaji huu (ingawa, kwa kawaida, zimezimwa).
EKS Ransom?
Kwa kawaida mtumiaji au jukumu lililounda klasta lina DAIMA kuwa na ruhusa za 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 amechukua nyara klastar.
tip
Kumbuka kwamba ikiwa klasta ilikuwa inatumia EC2 VMs, inaweza kuwa inawezekana kupata ruhusa za Usimamizi kutoka kwa Node na kurejesha klasta.
Kwa kweli, ikiwa klasta inatumia Fargate unaweza EC2 nodes au kuhamasisha kila kitu kwenda EC2 kwenye klasta na kuirejesha kwa kufikia token katika node.
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.