Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks στο AWS)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Για περισσότερες πληροφορίες ελέγξτε
{% content-ref url="../aws-services/aws-eks-enum.md" %} aws-eks-enum.md {% endcontent-ref %}
Αν έχετε την άδεια eks:AccessKubernetesApi
μπορείτε να προβάλετε αντικείμενα Kubernetes μέσω της κονσόλας AWS EKS (Μάθετε περισσότερα).
- Εύκολος τρόπος:
# Generate kubeconfig
aws eks update-kubeconfig --name aws-eks-dev
- Δεν είναι τόσο εύκολο:
Αν μπορείτε να αποκτήσετε ένα τεκμήριο με την εντολή aws eks get-token --name <cluster_name>
αλλά δεν έχετε δικαιώματα να λάβετε πληροφορίες για το cluster (describeCluster), μπορείτε να προετοιμάσετε το δικό σας ~/.kube/config
. Ωστόσο, έχοντας το τεκμήριο, χρειάζεστε ακόμα το url endpoint για σύνδεση (αν καταφέρατε να λάβετε ένα JWT τεκμήριο από ένα pod διαβάστε εδώ) και το όνομα του cluster.
Στην περίπτωσή μου, δεν βρήκα τις πληροφορίες στα CloudWatch logs, αλλά τις βρήκα στα userData των LaunchTemplates και επίσης στα EC2 μηχανήματα στα userData επίσης. Μπορείτε να δείτε αυτές τις πληροφορίες στο userData εύκολα, για παράδειγμα στο επόμενο παράδειγμα (το όνομα του cluster ήταν cluster-name):
{% code overflow="wrap" %}
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
{% endcode %}
Διαμόρφωση 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 ```Ο δημιουργός του EKS cluster θα έχει πάντα πρόσβαση στο τμήμα του kubernetes cluster της ομάδας system:masters
(k8s admin). Προς το παρόν δεν υπάρχει άμεσος τρόπος να βρείτε ποιος δημιούργησε το cluster (μπορείτε να ελέγξετε το CloudTrail). Και δεν υπάρχει τρόπος να αφαιρέσετε αυτό το προνόμιο.
Ο τρόπος για να χορηγήσετε πρόσβαση στο K8s σε περισσότερους χρήστες ή ρόλους AWS IAM είναι μέσω του configmap aws-auth
.
{% hint style="warning" %}
Συνεπώς, οποιοσδήποτε με δικαίωμα εγγραφής στο config map aws-auth
θα μπορεί να θέσει σε κίνδυνο ολόκληρο το cluster.
{% endhint %}
Για περισσότερες πληροφορίες σχετικά με το πώς να χορηγήσετε επιπλέον προνόμια σε ρόλους & χρήστες IAM στο ίδιο ή διαφορετικό λογαριασμό και πώς να καταχραστείτε αυτό για έλεγχο προνομίων ελέγξτε αυτήν τη σελίδα.
Ελέγξτε επίσης αυτήν την εκπληκτική ανάρτηση για να μάθετε πώς λειτουργεί η πιστοποίηση IAM -> Kubernetes.
Είναι δυνατόν να επιτραπεί μια ταυτοποίηση OpenID για λογαριασμό υπηρεσίας Kubernetes ώστε να τους επιτραπεί να υιοθετήσουν ρόλους στο AWS. Μάθετε πώς λειτουργεί αυτό σε αυτήν τη σελίδα.
Αποκωδικοποιώντας το διακριτικό JWT λαμβάνουμε το αναγνωριστικό του cluster και επίσης την περιοχή. Γνωρίζοντας ότι η τυπική μορφή για το URL του EKS είναι
https://<cluster-id>.<two-random-chars><number>.<region>.eks.amazonaws.com
Δεν βρέθηκε κάποια τεκμηρίωση που εξηγεί τα κριτήρια για τα 'two chars' και το 'number'. Ωστόσο, κάνοντας μερικές δοκιμές μόνος μου, βλέπω να επαναλαμβάνονται τα παρακάτω:
- gr7
- yl4
Πάντως, είναι μόνο 3 χαρακτήρες και μπορούμε να τους αναζητήσουμε με βία. Χρησιμοποιήστε το παρακάτω script για τη δημιουργία της λίστας.
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
{% hint style="warning" %} Να θυμάστε να αντικαταστήσετε τα & . {% endhint %}
Εάν ένας εισβολέας αποκτήσει διαπιστευτήρια ενός AWS με άδειες πάνω σε ένα EKS. Εάν ο εισβολέας διαμορφώσει το δικό του kubeconfig
(χωρίς να καλέσει το update-kubeconfig
) όπως εξηγήθηκε προηγουμένως, το get-token
δεν δημιουργεί καταγραφές στο CloudTrail επειδή δεν αλληλεπιδρά με το AWS API (απλά δημιουργεί το token τοπικά).
Έτσι, όταν ο εισβολέας επικοινωνεί με το EKS cluster, το cloudtrail δεν καταγράφει τίποτα σχετικά με τον χρήστη που έχει κλαπεί και έχει πρόσβαση σε αυτό.
Να σημειωθεί ότι το EKS cluster μπορεί να έχει ενεργοποιημένα logs που θα καταγράφουν αυτήν την πρόσβαση (αν και, από προεπιλογή, είναι απενεργοποιημένα).
Από προεπιλογή, ο χρήστης ή ρόλος που δημιούργησε ένα cluster θα έχει πάντα δικαιώματα διαχειριστή πάνω στο cluster. Και αυτή είναι η μοναδική "ασφαλής" πρόσβαση που θα έχει το AWS στο Kubernetes cluster.
Έτσι, εάν ένας εισβολέας διακινδυνεύει ένα cluster χρησιμοποιώντας fargate και αφαιρεί όλους τους άλλους διαχειριστές και διαγράφει τον AWS χρήστη/ρόλο που δημιούργησε το Cluster, ο εισβολέας θα μπορούσε να έχει ζητήσει λύτρα για το clusterr.
{% hint style="success" %} Να σημειωθεί ότι εάν το cluster χρησιμοποιούσε EC2 VMs, θα μπορούσε να είναι δυνατή η απόκτηση δικαιωμάτων διαχειριστή από τον Node και η ανάκτηση του cluster.
Πράγματι, εάν το cluster χρησιμοποιεί Fargate, θα μπορούσατε να χρησιμοποιήσετε τους κόμβους EC2 ή να μεταφέρετε τα πάντα σε EC2 στο cluster και να το ανακτήσετε έχοντας πρόσβαση στα τοκεν στον κόμβο. {% endhint %}
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε Την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε 💬 Στην ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.