AWS - EKS Post Exploitation

हैकट्रिक्स का समर्थन करें

EKS

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

AWS - EKS Enum

AWS कंसोल से क्लस्टर की जाँच करें

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

AWS कुबरनेटीज क्लस्टर से कनेक्ट करें

  • आसान तरीका:

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

अगर आप aws eks get-token --name <cluster_name> के साथ टोकन प्राप्त कर सकते हैं लेकिन आपको क्लस्टर जानकारी प्राप्त करने की अनुमति नहीं है (describeCluster), तो आपको अपना खुद का ~/.kube/config तैयार करना पड़ सकता है। हालांकि, टोकन होने के बावजूद, आपको फिर भी कनेक्ट करने के लिए url एंडपॉइंट की आवश्यकता है (अगर आपने pod से 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 cluster का निर्माता हमेशा kubernetes cluster के समूह system:masters (k8s admin) में पहुंच सकेगा। इस लेख के समय में क्लस्टर को बनाने वाले की पहचान को खोजने का कोई सीधा तरीका नहीं है (आप CloudTrail की जांच कर सकते हैं)। और उस विशेषाधिकार को हटाने का कोई तरीका नहीं है।

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

इसलिए, किसी को भी aws-auth कॉन्फ़िग मैप पर लेखन अधिकार होने पर पूरे क्लस्टर को क्षति पहुंचा सकेगा

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

इस शानदार पोस्ट की जांच करें ताकि आप यह सीख सकें कि प्रमाणीकरण IAM -> Kubernetes कैसे काम करता है

Kubernetes से AWS तक

कुछ OpenID प्रमाणीकरण को कुबरनेटीज सेवा खाता के लिए सक्षम करना संभव है ताकि उन्हें AWS में भूमिकाएँ अस्सुम करने की अनुमति मिले। जानें कैसे यह पृष्ठ में काम करता है

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

JWT टोकन को डिकोड करने पर हम क्लस्टर आईडी और क्षेत्र भी प्राप्त करते हैं। जानते हुए कि EKS url के लिए मानक स्वरूप है

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 क्लाउडट्रेल में लॉग नहीं बनाता क्योंकि यह AWS API के साथ संवाद नहीं करता है (यह केवल टोकन स्थानीय रूप से बनाता है)।

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

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

EKS रैंसम?

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

तो, यदि एक हमलावर fargate का उपयोग करके एक क्लस्टर को कंप्रमाइज़ करता है और सभी अन्य व्यवस्थापकों को हटा देता है और उस AWS उपयोगकर्ता/भूमिका को हटा देता है जिसने क्लस्टर बनाया है, हमलावर क्लस्टर को रैंसम कर सकता था

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

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

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

Last updated