Kubernetes Network Attacks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Στο Kubernetes, παρατηρείται ότι μια προεπιλεγμένη συμπεριφορά επιτρέπει την εγκαθίδρυση συνδέσεων μεταξύ όλων των κοντέινερ που βρίσκονται στον ίδιο κόμβο. Αυτό ισχύει ανεξαρτήτως των διακρίσεων ονόματος χώρου. Αυτή η συνδεσιμότητα επεκτείνεται μέχρι το Layer 2 (Ethernet). Ως εκ τούτου, αυτή η ρύθμιση ενδέχεται να εκθέσει το σύστημα σε ευπάθειες. Συγκεκριμένα, ανοίγει τη δυνατότητα για ένα κακόβουλο κοντέινερ να εκτελέσει μια επίθεση spoofing ARP κατά άλλων κοντέινερ που βρίσκονται στον ίδιο κόμβο. Κατά τη διάρκεια μιας τέτοιας επίθεσης, το κακόβουλο κοντέινερ μπορεί να παραπλανήσει και να παρεμποδίσει ή να τροποποιήσει την κυκλοφορία δικτύου που προορίζεται για άλλα κοντέινερ.
Οι επιθέσεις spoofing ARP περιλαμβάνουν τον επιτιθέμενο να στέλνει ψευδείς μηνύματα ARP (Πρωτόκολλο Επίλυσης Διευθύνσεων) μέσω ενός τοπικού δικτύου. Αυτό έχει ως αποτέλεσμα τη σύνδεση της διεύθυνσης MAC του επιτιθέμενου με τη διεύθυνση IP ενός νόμιμου υπολογιστή ή διακομιστή στο δίκτυο. Μετά την επιτυχή εκτέλεση μιας τέτοιας επίθεσης, ο επιτιθέμενος μπορεί να παρεμποδίσει, να τροποποιήσει ή ακόμη και να σταματήσει τα δεδομένα που μεταφέρονται. Η επίθεση εκτελείται στο Layer 2 του μοντέλου OSI, γι' αυτό και η προεπιλεγμένη συνδεσιμότητα στο Kubernetes σε αυτό το επίπεδο εγείρει ανησυχίες ασφαλείας.
Στο σενάριο, θα δημιουργηθούν 4 μηχανές:
ubuntu-pe: Μηχανή με προνόμια για να διαφύγει στον κόμβο και να ελέγξει τις μετρήσεις (δεν είναι απαραίτητη για την επίθεση)
ubuntu-attack: Κακόβουλο κοντέινερ στο προεπιλεγμένο όνομα χώρου
ubuntu-victim: Θύμα μηχανή στο όνομα χώρου kube-system
mysql: Θύμα μηχανή στο προεπιλεγμένο όνομα χώρου
Αν θέλετε περισσότερες λεπτομέρειες σχετικά με τα θέματα δικτύωσης που εισάγονται εδώ, πηγαίνετε στις αναφορές.
Γενικά, η δικτύωση pod-to-pod μέσα στον κόμβο είναι διαθέσιμη μέσω μιας γέφυρας που συνδέει όλα τα pods. Αυτή η γέφυρα ονομάζεται “cbr0”. (Ορισμένα plugins δικτύωσης θα εγκαταστήσουν τη δική τους γέφυρα.) Η cbr0 μπορεί επίσης να χειριστεί ARP (Πρωτόκολλο Επίλυσης Διευθύνσεων). Όταν ένα εισερχόμενο πακέτο φτάνει στο cbr0, μπορεί να επιλύσει τη διεύθυνση MAC προορισμού χρησιμοποιώντας ARP.
Αυτό το γεγονός υποδηλώνει ότι, από προεπιλογή, κάθε pod που εκτελείται στον ίδιο κόμβο θα μπορεί να επικοινωνεί με οποιοδήποτε άλλο pod στον ίδιο κόμβο (ανεξάρτητα από το namespace) σε επίπεδο ethernet (επίπεδο 2).
Επομένως, είναι δυνατό να εκτελούνται επιθέσεις ARP Spoofing μεταξύ pods στον ίδιο κόμβο.
Σε περιβάλλοντα kubernetes, συνήθως θα βρείτε 1 (ή περισσότερες) υπηρεσίες DNS που εκτελούνται συνήθως στο namespace kube-system:
Στις προηγούμενες πληροφορίες μπορείτε να δείτε κάτι ενδιαφέρον, το IP της υπηρεσίας είναι 10.96.0.10 αλλά το IP του pod που εκτελεί την υπηρεσία είναι 172.17.0.2.
Αν ελέγξετε τη διεύθυνση DNS μέσα σε οποιοδήποτε pod θα βρείτε κάτι σαν αυτό:
Ωστόσο, το pod δεν ξέρει πώς να φτάσει σε αυτή τη διεύθυνση επειδή το pod range σε αυτή την περίπτωση είναι 172.17.0.10/26.
Επομένως, το pod θα στείλει τα DNS requests στη διεύθυνση 10.96.0.10 που θα μεταφραστεί από το cbr0 σε 172.17.0.2.
Αυτό σημαίνει ότι ένα DNS request ενός pod θα πηγαίνει πάντα στη γέφυρα για να μεταφράσει το service IP σε endpoint IP, ακόμη και αν ο DNS server είναι στο ίδιο υποδίκτυο με το pod.
Γνωρίζοντας αυτό, και γνωρίζοντας ότι ARP attacks είναι δυνατά, ένα pod σε έναν κόμβο θα είναι σε θέση να παρεμβάλλει την κίνηση μεταξύ κάθε pod στο υποδίκτυο και τη γέφυρα και να τροποποιήσει τις DNS απαντήσεις από τον DNS server (DNS Spoofing).
Επιπλέον, αν ο DNS server είναι στον ίδιο κόμβο με τον επιτιθέμενο, ο επιτιθέμενος μπορεί να παρεμβάλλει όλα τα DNS requests οποιουδήποτε pod στο cluster (μεταξύ του DNS server και της γέφυρας) και να τροποποιήσει τις απαντήσεις.
Στόχος μας είναι να κλέψουμε τουλάχιστον την επικοινωνία από τον ubuntu-victim προς τον mysql.
Όπως αναφέρθηκε ήδη, αν παραβιάσετε ένα pod στον ίδιο κόμβο με το pod του DNS server, μπορείτε να MitM με ARPSpoofing τη γέφυρα και το pod DNS και να τροποποιήσετε όλες τις απαντήσεις DNS.
Έχετε ένα πολύ ωραίο εργαλείο και tutorial για να το δοκιμάσετε στο https://github.com/danielsagi/kube-dnsspoof/
Στο σενάριό μας, κατεβάστε το εργαλείο στο pod του επιτιθέμενου και δημιουργήστε ένα **αρχείο με το όνομα hosts
** με τα domain που θέλετε να spoof όπως:
Εκτελέστε την επίθεση στη μηχανή ubuntu-victim:
Αν προσπαθήσετε να δημιουργήσετε το δικό σας σενάριο DNS spoofing, αν απλώς τροποποιήσετε την DNS απάντηση αυτό δεν θα λειτουργήσει, επειδή η απάντηση θα έχει μια src IP τη διεύθυνση IP του κακόβουλου pod και δεν θα γίνει αποδεκτή. Πρέπει να δημιουργήσετε ένα νέο πακέτο DNS με την src IP του DNS όπου το θύμα στέλνει το αίτημα DNS (που είναι κάτι σαν 172.16.0.2, όχι 10.96.0.10, αυτή είναι η IP υπηρεσίας DNS K8s και όχι η IP του διακομιστή DNS, περισσότερα γι' αυτό στην εισαγωγή).
Το εργαλείο Mizu είναι ένας απλός αλλά ισχυρός API θεατής κίνησης για Kubernetes που σας επιτρέπει να δείτε όλη την API επικοινωνία μεταξύ μικροϋπηρεσιών για να σας βοηθήσει να αποσφαλματώσετε και να επιλύσετε ανατροπές. Θα εγκαταστήσει πράκτορες στα επιλεγμένα pods και θα συγκεντρώσει τις πληροφορίες κίνησής τους και θα σας τις δείξει σε έναν διακομιστή ιστού. Ωστόσο, θα χρειαστείτε υψηλά δικαιώματα K8s για αυτό (και δεν είναι πολύ διακριτικό).
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)