AWS - EKS Post Exploitation
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
EKS
Daha fazla bilgi için bakınız
AWS Console üzerinden kümeyi listeleme
Eğer eks:AccessKubernetesApi iznine sahipseniz, AWS EKS console üzerinden view Kubernetes objects gerçekleştirebilirsiniz. (Learn more).
AWS Kubernetes Cluster’a Bağlanma
- Kolay yol:
# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
- O kadar kolay olmayan yol:
Eğer get a token’ı aws eks get-token --name <cluster_name> ile alabiliyorsanız ama cluster bilgilerini almak için (describeCluster) izniniz yoksa, kendi ~/.kube/config dosyanızı hazırlayabilirsiniz. Ancak tokena sahip olsanız bile bağlanmak için hâlâ url endpoint to connect to (eğer bir poddan JWT token almayı başardıysanız here okuyun) ve name of the cluster’a ihtiyacınız var.
Benim durumumda bilgiyi CloudWatch loglarında bulamadım, fakat found it in LaunchTemaplates userData ve in EC2 machines in userData also içinde buldum. Bu bilgiyi userData içinde kolayca görebilirsiniz, örneğin aşağıdaki örnekte (cluster adı cluster-name idi):
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 yapılandırması
```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:AWS’den Kubernetes’e
Bir EKS cluster’ı oluşturan kişi, Kubernetes kümesinin system:masters (k8s admin) grubuna HER ZAMAN erişebilecektir. Bu yazının yazıldığı tarihte kümeyi kim oluşturduğunu bulmak için doğrudan bir yol yoktur (kontrol için CloudTrail’e bakabilirsiniz). Ve bu ayrcalığı kaldırmanın bir yolu yoktur.
K8s’e daha fazla AWS IAM users or roles için erişim vermenin yolu configmap aws-auth’ı kullanmaktır.
Warning
Bu nedenle, config map
aws-authüzerinde yazma erişimine sahip olan herkes tüm kümeyi ele geçirebilir.
Daha fazla bilgi için, aynı veya farklı hesapta IAM roles & users’a ekstra ayrıcalıkların nasıl verileceği ve bunun nasıl suistimal edileceği hakkında privesc check this page.
Ayrıca this awesome gönderisini, IAM -> Kubernetes kimlik doğrulamasının nasıl çalıştığını öğrenmek için inceleyin.
Kubernetes’ten AWS’e
OpenID authentication for kubernetes service account’a izin vererek onların AWS rollerini üstlenmelerini sağlamak mümkündür. Nasıl çalıştığını öğrenmek için this work in this page.
JWT Token’dan Api Server Endpoint Alma
JWT token’ı decode ettiğimizde cluster id ve ayrıca bölge bilgisi elde ederiz. EKS URL’inin standart formatı şu şekildedir
https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com
‘Two chars’ ve ‘number’ için kriterleri açıklayan herhangi bir dokümantasyon bulamadım. Ancak kendi yaptığım bazı testlerde şu tekrarları görüyorum:
- gr7
- yl4
Her neyse, bunlar sadece 3 karakter; bunları bruteforce edebiliriz. Listeyi oluşturmak için aşağıdaki script’i kullanın
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))
Sonra wfuzz ile
wfuzz -Z -z file,out.txt --hw 0 https://<cluster-id>.FUZZ.<region>.eks.amazonaws.com
Warning
Yerine & koymayı unutmayın .
CloudTrail’ı Atlatma
Eğer bir attacker, permission over an EKS olan bir AWS kimlik bilgilerini elde ederse. Attacker daha önce açıklandığı gibi kendi kubeconfig’ini (update-kubeconfig çağırmadan) yapılandırırsa, get-token Cloudtrail’da log oluşturmaz çünkü AWS API ile etkileşime girmez (sadece token’ı yerel olarak oluşturur).
Bu nedenle attacker EKS cluster ile iletişim kurduğunda, cloudtrail çalınan kullanıcı ve erişimiyle ilgili hiçbir şeyi loglamayacaktır.
Not: EKS cluster’ın bu erişimi loglayacak şekilde logları etkinleştirilmiş olabilir (varsayılan olarak devre dışı olmalarına rağmen).
EKS Ransom?
Varsayılan olarak bir cluster’ı oluşturan user or role her zaman cluster üzerinde ALWAYS going to have admin privileges olacaktır. Ve bu, AWS’nin Kubernetes cluster’ı üzerinde sahip olduğu tek “secure” erişimdir.
Yani, eğer bir attacker fargate kullanarak bir cluster’ı compromises eder ve diğer tüm adminsleri kaldırır ve Cluster’ı oluşturan AWS user/role’u silerse, attacker cluster’ı ransom etmiş olabilir.
Tip
Dikkat: Eğer cluster EC2 VMs kullanıyorsa, Node’dan Admin ayrıcalıkları elde etmek ve cluster’ı kurtarmak mümkün olabilir.
Aslında, eğer cluster Fargate kullanıyorsa EC2 node’ları oluşturabilir veya her şeyi EC2’ye taşıyarak node içindeki tokens’a erişip kurtarabilirsiniz.
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

