Pentesting Kubernetes Services
Το Kubernetes χρησιμοποιεί αρκετές συγκεκριμένες υπηρεσίες δικτύου που μπορεί να βρείτε εκτεθειμένες στο Διαδίκτυο ή σε ένα εσωτερικό δίκτυο αφού έχετε παραβιάσει ένα pod.
Εύρεση εκτεθειμένων pods με OSINT
Ένας τρόπος θα μπορούσε να είναι η αναζήτηση για Identity LIKE "k8s.%.com"
στο crt.sh για να βρείτε υποτομείς που σχετίζονται με το kubernetes. Ένας άλλος τρόπος θα μπορούσε να είναι η αναζήτηση "k8s.%.com"
στο github και η αναζήτηση για αρχεία YAML που περιέχουν το συγκεκριμένο string.
Πώς εκθέτει ο Kubernetes τις υπηρεσίες
Μπορεί να σας φανεί χρήσιμο να κατανοήσετε πώς μπορεί το Kubernetes να εκθέσει δημόσια τις υπηρεσίες για να τις βρείτε:
Exposing Services in KubernetesΕύρεση εκτεθειμένων pods μέσω ανίχνευσης θυρών
Οι παρακάτω θύρες μπορεί να είναι ανοιχτές σε ένα cluster Kubernetes:
Θύρα | Διεργασία | Περιγραφή |
---|---|---|
443/TCP | kube-apiserver | Θύρα API του Kubernetes |
2379/TCP | etcd | |
6666/TCP | etcd | etcd |
4194/TCP | cAdvisor | Μετρήσεις των containers |
6443/TCP | kube-apiserver | Θύρα API του Kubernetes |
8443/TCP | kube-apiserver | Θύρα API του Minikube |
8080/TCP | kube-apiserver | Μη ασφαλής θύρα API |
10250/TCP | kubelet | HTTPS API που επιτρέπει πλήρη πρόσβαση σε λειτουργία |
10255/TCP | kubelet | Μη εξουσιοδοτημένη θύρα HTTP μόνο για ανάγνωση: pods, εκτελούμενα pods και κατάσταση κόμβου |
10256/TCP | kube-proxy | Εξυπηρετητής ελέγχου υγείας του Kube Proxy |
9099/TCP | calico-felix | Εξυπηρετητής ελέγχου υγείας για το Calico |
6782-4/TCP | weave | Μετρήσεις και σημεία έναρξης |
30000-32767/TCP | NodePort | Προϊστάμενος προς τις υπηρεσίες |
44134/TCP | Tiller | Υπηρεσία Helm που ακούει |
Nmap
Kube-apiserver
Αυτή είναι η υπηρεσία API του Kubernetes με την οποία οι διαχειριστές συνομιλούν συνήθως χρησιμοποιώντας το εργαλείο kubectl
.
Συνήθεις θύρες: 6443 και 443, αλλά επίσης 8443 στο minikube και 8080 ως μη ασφαλής.
Ελέγξτε την παρακάτω σελίδα για να μάθετε πώς να αποκτήσετε ευαίσθητα δεδομένα και να εκτελέσετε ευαίσθητες ενέργειες μιλώντας με αυτήν την υπηρεσία:
Kubernetes EnumerationKubelet API
Αυτή η υπηρεσία τρέχει σε κάθε κόμβο του cluster. Είναι η υπηρεσία που θα ελέγχει τα pods μέσα στον κόμβο. Μιλά με τον kube-apiserver.
Εάν βρείτε αυτήν την υπηρεσία που εκτίθεται, μπορεί να έχετε βρει ένα μη εξουσιοδοτημένο RCE.
Kubelet API
Εάν η απόκριση είναι Unauthorized
, τότε απαιτείται πιστοποίηση.
Εάν μπορείτε να καταλογίσετε τους κόμβους, μπορείτε να λάβετε μια λίστα με τα σημεία πρόσβασης των kubelets με:
kubelet (Μόνο για ανάγνωση)
The kubelet is the primary node agent that runs on each node in a Kubernetes cluster. It is responsible for managing the containers running on the node and ensuring their health and resource allocation.
Το kubelet είναι ο κύριος πράκτορας κόμβου που εκτελείται σε κάθε κόμβο ενός Kubernetes cluster. Είναι υπεύθυνο για τη διαχείριση των εκτελούμενων εμπορευμάτων στον κόμβο και για τη διασφάλιση της υγείας και της διάθεσης των πόρων τους.
etcd API
Η etcd API είναι μια διεπαφή προγραμματισμού εφαρμογών που χρησιμοποιείται για την αλληλεπίδραση με το etcd, ένα κλειδοθηκευτή κατανεμημένων συστημάτων. Το etcd χρησιμοποιείται συχνά σε περιβάλλοντα Kubernetes για την αποθήκευση και τον συγχρονισμό των δεδομένων ρυθμίσεων.
Με τη χρήση της etcd API, μπορείτε να διαχειριστείτε τα κλειδιά και τις τιμές του etcd, να δημιουργήσετε, να ενημερώσετε και να διαγράψετε δεδομένα. Επίσης, μπορείτε να παρακολουθείτε τις αλλαγές στα δεδομένα και να εκτελείτε διάφορες ενέργειες όπως ανάγνωση, εγγραφή και διαγραφή.
Η etcd API παρέχει επίσης ασφαλή μέσα επικοινωνίας με τη χρήση κρυπτογραφίας TLS. Αυτό εξασφαλίζει την ασφάλεια των δεδομένων που αποθηκεύονται και μεταδίδονται μέσω του etcd.
Για να χρησιμοποιήσετε την etcd API, μπορείτε να χρησιμοποιήσετε διάφορες βιβλιοθήκες προγραμματισμού, όπως η etcd-client για τη γλώσσα προγραμματισμού της επιλογής σας.
Είναι σημαντικό να είστε προσεκτικοί κατά τη χρήση της etcd API και να εφαρμόζετε τις κατάλληλες πρακτικές ασφαλείας, καθώς η κακή διαχείριση μπορεί να οδηγήσει σε διαρροή δεδομένων ή ευπάθειες ασφαλείας.
Tiller
Ο Tiller είναι ο διακομιστής του Helm, του εργαλείου διαχείρισης πακέτων για το Kubernetes. Ο Tiller είναι υπεύθυνος για την εγκατάσταση και τη διαχείριση των charts (πακέτων) στο Kubernetes cluster. Είναι σημαντικό να γίνει σωστή ρύθμιση και προστασία του Tiller για να αποφευχθούν πιθανές ευπάθειες ασφαλείας.
Ο Tiller χρησιμοποιεί το gRPC πρωτόκολλο για την επικοινωνία με τον Helm client. Αυτό σημαίνει ότι ο Tiller ακούει σε έναν προκαθορισμένο θύρα στο Kubernetes cluster και ανταλλάσσει μηνύματα με τον client. Είναι σημαντικό να προστατεύσετε τη θύρα αυτή και να περιορίσετε την πρόσβαση μόνο σε αξιόπιστους χρήστες.
Επιπλέον, ο Tiller χρησιμοποιεί έναν service account για να αλληλεπιδρά με το Kubernetes API. Αυτό το service account πρέπει να έχει τις ελάχιστες απαιτούμενες άδειες για να εκτελεί τις λειτουργίες που απαιτούνται από τον Tiller. Είναι σημαντικό να περιορίσετε τα προνόμια αυτού του service account και να μην του δώσετε περισσότερες απολύτως απαραίτητες δυνατότητες.
Τέλος, είναι σημαντικό να ελέγχετε την έκδοση του Tiller που χρησιμοποιείτε και να ενημερώνετε τακτικά σε νεότερες εκδόσεις που περιέχουν διορθώσεις ασφαλείας. Οι παλαιότερες εκδόσεις του Tiller μπορεί να έχουν γνωστές ευπάθειες που μπορούν να εκμεταλλευτούν οι επιτιθέμενοι.
Μπορείτε να καταχραστείτε αυτήν την υπηρεσία για να αναβαθμίσετε τα δικαιώματα μέσα στο Kubernetes:
cAdvisor
Υπηρεσία χρήσιμη για τη συλλογή μετρήσεων.
NodePort
Όταν ένας θύρα εκτίθεται σε όλους τους κόμβους μέσω ενός NodePort, η ίδια θύρα ανοίγεται σε όλους τους κόμβους προωθώντας την κίνηση στην δηλωμένη Υπηρεσία. Από προεπιλογή, αυτή η θύρα θα είναι στο εύρος 30000-32767. Έτσι, νέες μη ελεγχόμενες υπηρεσίες μπορεί να είναι προσβάσιμες μέσω αυτών των θυρών.
Ευάλωτες Λανθασμένες Ρυθμίσεις
Ανώνυμη Πρόσβαση στο Kube-apiserver
Η ανώνυμη πρόσβαση στα API endpoints του kube-apiserver δεν επιτρέπεται. Ωστόσο, μπορείτε να ελέγξετε ορισμένα endpoints:
Έλεγχος για Ανώνυμη Πρόσβαση στο ETCD
Το ETCD αποθηκεύει τα μυστικά του cluster, τα αρχεία ρυθμίσεων και άλλα ευαίσθητα δεδομένα. Από προεπιλογή, το ETCD δεν μπορεί να προσπελαστεί ανώνυμα, αλλά είναι πάντα καλό να το ελέγχετε.
Εάν το ETCD μπορεί να προσπελαστεί ανώνυμα, μπορεί να χρειαστεί να χρησιμοποιήσετε το εργαλείο etcdctl. Η παρακάτω εντολή θα επιστρέψει όλα τα αποθηκευμένα κλειδιά:
Kubelet RCE
Η τεκμηρίωση του Kubelet εξηγεί ότι από προεπιλογή επιτρέπεται ο ανώνυμος πρόσβαση στην υπηρεσία:
Επιτρέπει ανώνυμα αιτήματα προς τον διακομιστή Kubelet. Τα αιτήματα που δεν απορρίπτονται από άλλη μέθοδο πιστοποίησης θεωρούνται ως ανώνυμα αιτήματα. Τα ανώνυμα αιτήματα έχουν ως όνομα χρήστη το
system:anonymous
και ως όνομα ομάδας τοsystem:unauthenticated
.
Για να κατανοήσετε καλύτερα πώς λειτουργεί η πιστοποίηση και η εξουσιοδότηση του Kuebelet API, ελέγξτε αυτήν τη σελίδα:
Kubelet Authentication & AuthorizationΗ υπηρεσία Kubelet δεν έχει τεκμηριωθεί, αλλά ο πηγαίος κώδικας μπορεί να βρεθεί εδώ και η εύρεση των εκθέτων σημείων πρόσβασης είναι τόσο εύκολη όσο το εκτέλεση:
Μπορείτε να χρησιμοποιήσετε το εργαλείο Kubeletctl για να αλληλεπιδράσετε με τα Kubelets και τα σημεία τους.
/pods
Αυτό το σημείο ενδιαφέροντος εμφανίζει τα pods και τα containers τους:
/exec
Αυτό το endpoint επιτρέπει την εκτέλεση κώδικα μέσα σε οποιοδήποτε container πολύ εύκολα:
Για να αποφευχθεί αυτή η επίθεση, ο υπηρεσία kubelet πρέπει να εκτελείται με την παράμετρο --anonymous-auth false
και η υπηρεσία πρέπει να είναι απομονωμένη σε επίπεδο δικτύου.
Έλεγχος Αποκάλυψης Πληροφοριών Kubelet (Θύρα Μόνο για Ανάγνωση)
Όταν μια θύρα μόνο για ανάγνωση του kubelet είναι διαθέσιμη, γίνεται δυνατή η ανάκτηση πληροφοριών από το API από μη εξουσιοδοτημένα μέρη. Η αποκάλυψη αυτής της θύρας μπορεί να οδηγήσει στην αποκάλυψη διάφορων στοιχείων ρυθμίσεων του cluster. Αν και οι πληροφορίες, συμπεριλαμβανομένων των ονομάτων των pod, των τοποθεσιών των εσωτερικών αρχείων και άλλων ρυθμίσεων, μπορεί να μην είναι κρίσιμες, η αποκάλυψή τους αποτελεί παρόλα αυτά κίνδυνο για την ασφάλεια και θα πρέπει να αποφεύγεται.
Ένα παράδειγμα πώς μπορεί να εκμεταλλευτεί αυτή η ευπάθεια είναι ένας απομακρυσμένος επιτιθέμενος που έχει πρόσβαση σε ένα συγκεκριμένο URL. Μεταβαίνοντας στη διεύθυνση http://<external-IP>:10255/pods
, ο επιτιθέμενος μπορεί πιθανώς να ανακτήσει ευαίσθητες πληροφορίες από το kubelet:
Αναφορές
Last updated