AWS - EKS Post Exploitation

Support HackTricks

EKS

अधिक जानकारी के लिए देखें

AWS - EKS Enum

AWS कंसोल से क्लस्टर की गणना करें

यदि आपके पास अनुमति eks:AccessKubernetesApi है, तो आप AWS EKS कंसोल के माध्यम से Kubernetes ऑब्जेक्ट्स को देख सकते हैं (Learn more).

AWS Kubernetes क्लस्टर से कनेक्ट करें

  • आसान तरीका:

# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
  • इतना आसान तरीका नहीं है:

यदि आप aws eks get-token --name <cluster_name> के साथ एक टोकन प्राप्त कर सकते हैं लेकिन आपके पास क्लस्टर जानकारी (describeCluster) प्राप्त करने की अनुमति नहीं है, तो आप अपना खुद का ~/.kube/config तैयार कर सकते हैं। हालांकि, टोकन होने पर, आपको जुड़ने के लिए url endpoint की आवश्यकता है (यदि आप एक पॉड से JWT टोकन प्राप्त करने में सफल रहे हैं तो यहाँ पढ़ें) और क्लस्टर का नाम

मेरे मामले में, मैंने CloudWatch लॉग में जानकारी नहीं पाई, लेकिन मैंने LaunchTemplates userData में और EC2 मशीनों में userData में भी इसे पाया। आप इस जानकारी को userData में आसानी से देख सकते हैं, उदाहरण के लिए अगले उदाहरण में (क्लस्टर का नाम 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
क्यूब कॉन्फ़िग

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

AWS से Kubernetes तक

EKS क्लस्टर का निर्माता हमेशा समूह system:masters (k8s प्रशासन) के kubernetes क्लस्टर भाग में प्रवेश प्राप्त कर सकेगा। इस लेख के समय क्लस्टर को बनाने वाले कोई सीधा तरीका नहीं है (आप CloudTrail की जांच कर सकते हैं)। और उस अधिकार को हटाने का कोई तरीका नहीं है।

AWS IAM उपयोगकर्ताओं या भूमिकाओं को K8s पर अधिक पहुंच देने का तरीका configmap aws-auth का उपयोग करना है।

इसलिए, config map aws-auth पर लिखने की पहुंच रखने वाला कोई भी व्यक्ति पूरे क्लस्टर को समझौता कर सकेगा।

IAM भूमिकाओं और उपयोगकर्ताओं को एक ही या विभिन्न खाते में अतिरिक्त अधिकार देने के बारे में अधिक जानकारी के लिए और इसे दुरुपयोग करने के लिए privesc इस पृष्ठ की जांच करें

यहां भी यह अद्भुत पोस्ट देखें कि IAM -> Kubernetes प्रमाणीकरण कैसे काम करता है

Kubernetes से AWS तक

यह संभव है कि kubernetes सेवा खाते के लिए OpenID प्रमाणीकरण की अनुमति दी जाए ताकि वे AWS में भूमिकाएँ ग्रहण कर सकें। जानें कि यह इस पृष्ठ पर कैसे काम करता है

JWT टोकन से GET Api सर्वर एंडपॉइंट

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

नहीं मिला कोई दस्तावेज़ जो 'दो अक्षरों' और 'संख्या' के लिए मानदंडों को समझाए। लेकिन अपनी ओर से कुछ परीक्षण करते समय मैंने इनमें से कुछ को बार-बार देखा:

  • gr7

  • yl4

वैसे भी, ये सिर्फ 3 अक्षर हैं, हम इन्हें ब्रूटफोर्स कर सकते हैं। सूची उत्पन्न करने के लिए नीचे दिए गए स्क्रिप्ट का उपयोग करें।

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

फिर wfuzz के साथ

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

याद रखें कि & को बदलें।

CloudTrail को बायपास करें

यदि एक हमलावर को EKS पर अनुमति के साथ AWS के क्रेडेंशियल मिलते हैं। यदि हमलावर अपने kubeconfig को कॉन्फ़िगर करता है (बिना update-kubeconfig को कॉल किए) जैसा कि पहले समझाया गया है, तो get-token Cloudtrail में लॉग उत्पन्न नहीं करता है क्योंकि यह AWS API के साथ इंटरैक्ट नहीं करता (यह बस स्थानीय रूप से टोकन बनाता है)।

तो जब हमलावर EKS क्लस्टर के साथ बात करता है, cloudtrail उपयोगकर्ता के चोरी होने और इसे एक्सेस करने से संबंधित कुछ भी लॉग नहीं करेगा

ध्यान दें कि EKS क्लस्टर में लॉग सक्षम हो सकते हैं जो इस एक्सेस को लॉग करेंगे (हालांकि, डिफ़ॉल्ट रूप से, वे अक्षम होते हैं)।

EKS फिरौती?

डिफ़ॉल्ट रूप से, उपयोगकर्ता या भूमिका जिसने एक क्लस्टर बनाया है, हमेशा क्लस्टर पर प्रशासनिक विशेषाधिकार रखने वाला होगा। और यही एकमात्र "सुरक्षित" एक्सेस है जो AWS Kubernetes क्लस्टर पर होगा।

तो, यदि एक हमलावर फर्गेट का उपयोग करके एक क्लस्टर से समझौता करता है और सभी अन्य प्रशासकों को हटा देता है और क्लस्टर को बनाने वाले AWS उपयोगकर्ता/भूमिका को हटा देता है, हमलावर ने क्लस्टर को फिरौती पर रखा हो सकता है

ध्यान दें कि यदि क्लस्टर EC2 VMs का उपयोग कर रहा था, तो नोड से प्रशासनिक विशेषाधिकार प्राप्त करना और क्लस्टर को पुनर्प्राप्त करना संभव हो सकता है।

वास्तव में, यदि क्लस्टर फर्गेट का उपयोग कर रहा है तो आप EC2 नोड्स प्राप्त कर सकते हैं या क्लस्टर में सब कुछ EC2 पर ले जा सकते हैं और नोड में टोकन को एक्सेस करके इसे पुनर्प्राप्त कर सकते हैं।

HackTricks का समर्थन करें

Last updated