Kubernetes Network Attacks
Εισαγωγή
Στο Kubernetes, παρατηρείται ότι η προεπιλεγμένη συμπεριφορά επιτρέπει την εγκαθίδρυση συνδέσεων μεταξύ όλων των containers που βρίσκονται στον ίδιο κόμβο. Αυτό ισχύει ανεξάρτητα από τις διακρίσεις των namespaces. Αυτή η συνδεσιμότητα επεκτείνεται μέχρι το Layer 2 (Ethernet). Ως εκ τούτου, αυτή η διαμόρφωση εκθέτει δυνητικά το σύστημα σε ευπάθειες. Συγκεκριμένα, ανοίγει τη δυνατότητα για ένα κακόβουλο container να εκτελέσει μια επίθεση ARP spoofing εναντίον άλλων containers που βρίσκονται στον ίδιο κόμβο. Κατά τη διάρκεια μιας τέτοιας επίθεσης, το κακόβουλο container μπορεί να παραπλανήσειτα ή να τροποποιήσει την κίνηση δεδομένων που προορίζεται για άλλα containers.
Οι επιθέσεις ARP spoofing περιλαμβάνουν την αποστολή πλαστοπροσωπευτικών μηνυμάτων ARP (Address Resolution Protocol) σε ένα τοπικό δίκτυο. Αυτό έχει ως αποτέλεσμα τη σύνδεση της MAC διεύθυνσης του επιτιθέμενου με την IP διεύθυνση ενός νόμιμου υπολογιστή ή διακομιστή στο δίκτυο. Μετά την επιτυχή εκτέλεση μιας τέτοιας επίθεσης, ο επιτιθέμενος μπορεί να παρακολουθεί, να τροποποιεί ή ακόμα και να διακόπτει τα δεδομένα που μεταφέρονται. Η επίθεση εκτελείται στο Layer 2 του μοντέλου OSI, για αυτό και η προεπιλεγμένη συνδεσιμότητα στο Kubernetes σε αυτό το επίπεδο προκαλεί ανησυχίες ασφαλείας.
Στη συγκεκριμένη περίπτωση, θα δημιουργηθούν 4 μηχανές:
ubuntu-pe: Προνομιούχο μηχάνημα για να δραπετεύσει στον κόμβο και να ελέγξει τις μετρήσεις (δεν απαιτείται για την επίθεση)
ubuntu-attack: Κακόβουλο container στο default namespace
ubuntu-victim: Μηχάνημα θύμα στο kube-system namespace
mysql: Μηχάνημα θύμα στο default namespace
Βασική Δικτύωση Kubernetes
Εάν θέλετε περισσότερες λεπτομέρειες για τα θέματα δικτύωσης που παρουσιάζονται εδώ, ανατρέξτε στις αναφορές.
ARP
Γενικά, η δικτύωση από pod σε pod μέσα στον κόμβο είναι διαθέσιμη μέσω ενός γέφυρας που συνδέει όλα τα pods. Αυτή η γέφυρα ονομάζεται "cbr0". (Ορισμένα πρόσθετα δικτύου θα εγκαταστήσουν τη δική τους γέφυρα.) Η cbr0 μπορεί επίσης να χειριστεί την ανάλυση ARP (Address Resolution Protocol). Όταν ένα εισερχόμενο πακέτο φτάνει στη cbr0, μπορεί να αναλύσει τη διεύθυνση MAC προορισμού χρησιμοποιώντας το ARP.
Αυτό το γεγονός σημαίνει ότι, από προεπιλογή, κάθε pod που εκτελείται στον ίδιο κόμβο θα μπορεί να επικοινωνεί με οποιοδήποτε άλλο pod στον ίδιο κόμβο (ανεξάρτητα από το namespace) σε επίπεδο ethernet (επίπεδο 2).
Επομένως, είναι δυνατή η πραγματοποίηση επιθέσεων ARP Spoofing μεταξύ pods στον ίδιο κόμβο.
DNS
Στο περιβάλλον του Kubernetes, συνήθως θα βρείτε 1 (ή περισσότερες) υπηρεσίες DNS που εκτελούνται συνήθως στο namespace kube-system:
Στις προηγούμενες πληροφορίες μπορείτε να δείτε κάτι ενδιαφέρον, το IP της υπηρεσίας είναι 10.96.0.10 αλλά το IP του pod που εκτελεί την υπηρεσία είναι 172.17.0.2.
Εάν ελέγξετε τη διεύθυνση DNS μέσα σε οποιοδήποτε pod, θα βρείτε κάτι τέτοιο:
Ωστόσο, το pod δεν γνωρίζει πώς να φτάσει σε αυτήν την διεύθυνση επειδή το εύρος του pod σε αυτήν την περίπτωση είναι 172.17.0.10/26.
Επομένως, το pod θα στείλει τα αιτήματα DNS στη διεύθυνση 10.96.0.10 τα οποία θα μεταφραστούν από το cbr0 σε 172.17.0.2.
Αυτό σημαίνει ότι ένα αιτήματα DNS ενός pod θα πάνε πάντα στη γέφυρα για να μεταφραστεί η διεύθυνση IP της υπηρεσίας σε διεύθυνση IP τερματικού, ακόμα κι αν ο διακομιστής DNS βρίσκεται στον ίδιο υποδίκτυο με το pod.
Γνωρίζοντας αυτό και γνωρίζοντας ότι επιθέσεις ARP είναι δυνατές, ένα pod σε έναν κόμβο θα μπορεί να παρεμβάλει την κίνηση μεταξύ κάθε pod στο υποδίκτυο και της γέφυρας και να τροποποιήσει τις απαντήσεις DNS από τον διακομιστή DNS (DNS Spoofing).
Επιπλέον, αν ο διακομιστής DNS βρίσκεται στον ίδιο κόμβο με τον επιτιθέμενο, ο επιτιθέμενος μπορεί να παρεμβάλει όλα τα αιτήματα DNS οποιουδήποτε pod στο cluster (μεταξύ του διακομιστή DNS και της γέφυρας) και να τροποποιήσει τις απαντήσεις.
ARP Spoofing σε pods στον ίδιο κόμβο
Ο στόχος μας είναι να κλέψουμε τουλάχιστον την επικοινωνία από το ubuntu-victim προς το mysql.
Scapy
ARPSpoof
Η τεχνική ARPSpoof εκμεταλλεύεται το πρωτόκολλο ARP (Address Resolution Protocol) για να παραπλανήσει το δίκτυο και να προωθήσει την κυκλοφορία δεδομένων μέσω του επιθετικού μηχανήματος. Αυτό επιτρέπει στον επιτιθέμενο να παρακολουθεί, να καταγράφει ή ακόμα και να τροποποιεί την κυκλοφορία δεδομένων μεταξύ των θυμάτων στο δίκτυο.
Για να εκτελέσετε την επίθεση ARPSpoof, ακολουθήστε τα παρακάτω βήματα:
Ενεργοποιήστε την IP forwarding στο επιθετικό μηχάνημα.
Χρησιμοποιήστε το εργαλείο
arpspoof
για να παραπλανήσετε το δίκτυο και να ανακατευθύνετε την κυκλοφορία δεδομένων.
Επαναδρομολογήστε την κυκλοφορία δεδομένων από το επιθετικό μηχάνημα προς τον προορισμό.
Με αυτόν τον τρόπο, ο επιτιθέμενος μπορεί να παρακολουθήσει ή να τροποποιήσει την κυκλοφορία δεδομένων μεταξύ των θυμάτων στο δίκτυο.
DNS Spoofing
Όπως ήδη αναφέρθηκε, αν καταλάβετε ένα pod στον ίδιο κόμβο του pod του DNS server, μπορείτε να κάνετε MitM με το ARPSpoofing στη γέφυρα και το pod του DNS και να τροποποιήσετε όλες τις απαντήσεις DNS.
Έχετε ένα πολύ καλό εργαλείο και οδηγίες για να δοκιμάσετε αυτό στο https://github.com/danielsagi/kube-dnsspoof/
Στο σενάριό μας, κατεβάστε το εργαλείο στο pod του επιτιθέμενου και δημιουργήστε ένα αρχείο με όνομα hosts
με τους τομείς που θέλετε να παραπλανήσετε, όπως:
Εκτελέστε την επίθεση στη μηχανή ubuntu-victim:
Εάν προσπαθήσετε να δημιουργήσετε το δικό σας σενάριο DNS spoofing, αν απλά τροποποιήσετε την απάντηση DNS, αυτό δεν θα λειτουργήσει, επειδή η απάντηση θα έχει μια διεύθυνση IP προέλευσης του κακόβουλου pod και δεν θα γίνει αποδεκτή. Θα πρέπει να δημιουργήσετε ένα νέο πακέτο DNS με τη διεύθυνση IP προέλευσης του DNS όπου ο θύτης αποστέλλει το αίτημα DNS (που είναι κάτι σαν 172.16.0.2, όχι 10.96.0.10, αυτή είναι η IP υπηρεσίας DNS του K8s και όχι η IP του διακομιστή DNS, περισσότερα για αυτό στην εισαγωγή).
Καταγραφή Κίνησης
Το εργαλείο Mizu είναι ένα απλό αλλά ισχυρό πρόγραμμα προβολής κίνησης API για το Kubernetes που σας επιτρέπει να προβάλετε όλη την επικοινωνία API μεταξύ των μικρουπηρεσιών για να σας βοηθήσει να εντοπίσετε σφάλματα και να επιλύσετε προβλήματα. Θα εγκαταστήσει πράκτορες στα επιλεγμένα pods και θα συγκεντρώσει τις πληροφορίες κίνησής τους και θα σας τις εμφανίσει σε έναν διακομιστή ιστού. Ωστόσο, θα χρειαστείτε υψηλά δικαιώματα K8s για αυτό (και δεν είναι πολύ αόρατο).
Αναφορές
Last updated