Docker Security
Χρησιμοποιήστε το Trickest για να δημιουργήσετε εύκολα και να αυτοματοποιήσετε ροές εργασίας με τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Βασική Ασφάλεια της Μηχανής Docker
Η μηχανή Docker χρησιμοποιεί τα Namespaces και Cgroups του πυρήνα του Linux για την απομόνωση των containers, προσφέροντας ένα βασικό επίπεδο ασφάλειας. Επιπλέον προστασία παρέχεται μέσω της πτώσης των Δυνατοτήτων (Capabilities), του Seccomp, και του SELinux/AppArmor, ενισχύοντας την απομόνωση των containers. Ένα πρόσθετο πρόσβασης (auth plugin) μπορεί να περιορίσει περαιτέρω τις ενέργειες του χρήστη.
Ασφαλής Πρόσβαση στη Μηχανή Docker
Η μηχανή Docker μπορεί να προσπελαστεί είτε τοπικά μέσω ενός Unix socket είτε απομακρυσμένα χρησιμοποιώντας HTTP. Για την απομακρυσμένη πρόσβαση, είναι απαραίτητο να χρησιμοποιηθεί το HTTPS και το TLS για να διασφαλιστεί η εμπιστευτικότητα, η ακεραιότητα και η ταυτοποίηση.
Η μηχανή Docker, από προεπιλογή, ακούει στο Unix socket στη διεύθυνση unix:///var/run/docker.sock
. Στα συστήματα Ubuntu, οι επιλογές εκκίνησης του Docker ορίζονται στο /etc/default/docker
. Για να επιτρέψετε την απομακρυσμένη πρόσβαση στο API και τον πελάτη του Docker, εκθέστε τον δαίμονα του Docker μέσω ενός socket HTTP προσθέτοντας τις παρακάτω ρυθμίσεις:
Ωστόσο, δεν συνιστάται η εκθεση του Docker daemon μέσω HTTP λόγω ανησυχιών ασφαλείας. Συνιστάται να ασφαλίζονται οι συνδέσεις χρησιμοποιώντας HTTPS. Υπάρχουν δύο κύριες προσεγγίσεις για την ασφάλιση της σύνδεσης:
Ο πελάτης επαληθεύει την ταυτότητα του διακομιστή.
Τόσο ο πελάτης όσο και ο διακομιστής αυθεντικοποιούν αμοιβαία την ταυτότητα τους.
Τα πιστοποιητικά χρησιμοποιούνται για την επιβεβαίωση της ταυτότητας ενός διακομιστή. Για λεπτομερείς παραδείγματα και των δύο μεθόδων, ανατρέξτε στο αυτό τον οδηγό.
Ασφάλεια των Εικόνων Εμφάνισης
Οι εικόνες εμφάνισης μπορούν να αποθηκευτούν είτε σε ιδιωτικούς είτε σε δημόσιους αποθετηρίους. Το Docker προσφέρει αρκετές επιλογές αποθήκευσης για εικόνες εμφάνισης:
Docker Hub: Ένα δημόσιο υπηρεσία αποθετηρίου από το Docker.
Docker Registry: Ένα έργο ανοικτού κώδικα που επιτρέπει στους χρήστες να φιλοξενούν το δικό τους αποθετήριο.
Docker Trusted Registry: Η εμπορική προσφορά του Docker για αποθετήριο, παρέχοντας αυθεντικοποίηση χρηστών με βάση τον ρόλο και ολοκλήρωση με υπηρεσίες καταλόγου LDAP.
Σάρωση Εικόνων
Οι εμφάνισης μπορεί να έχουν ευπάθειες ασφάλειας είτε λόγω της βασικής εικόνας είτε λόγω του λογισμικού που είναι εγκατεστημένο πάνω στη βασική εικόνα. Το Docker εργάζεται σε ένα έργο που ονομάζεται Nautilus που κάνει σάρωση ασφάλειας των Εμφάνισης και καταγράφει τις ευπάθειες. Το Nautilus λειτουργεί συγκρίνοντας κάθε επίπεδο εικόνας Εμφάνισης με το αποθετήριο ευπαθειών για την αναγνώριση των κενών ασφαλείας.
Για περισσότερες πληροφορίες διαβάστε αυτό.
docker scan
Η εντολή docker scan
σάρωσης σάς επιτρέπει να σαρώσετε υπάρχουσες εικόνες Docker χρησιμοποιώντας το όνομα ή το ID της εικόνας. Για παράδειγμα, εκτελέστε την ακόλουθη εντολή για να σαρώσετε την εικόνα hello-world:
Υπογραφή Εικόνας Docker
Η υπογραφή εικόνας Docker εξασφαλίζει την ασφάλεια και ακεραιότητα των εικόνων που χρησιμοποιούνται σε containers. Εδώ υπάρχει μια συνοπτική εξήγηση:
Για να ενεργοποιήσετε την εμπιστοσύνη περιεχομένου Docker, ορίστε
export DOCKER_CONTENT_TRUST=1
. Αυτή η λειτουργία είναι απενεργοποιημένη από προεπιλογή στην έκδοση Docker 1.10 και μετά.Με αυτήν τη λειτουργία ενεργοποιημένη, μόνο υπογεγραμμένες εικόνες μπορούν να ληφθούν. Η αρχική αποστολή εικόνας απαιτεί την ορισμό κωδικών πρόσβασης για τα κλειδιά ρίζας και ετικέτας, με την Docker να υποστηρίζει επίσης το Yubikey για ενισχυμένη ασφάλεια. Περισσότερες λεπτομέρειες μποροών να βρεθούν εδώ.
Η προσπάθεια να γίνει λήψη μιας μη υπογεγραμμένης εικόνας με την εμπιστοσύνη περιεχομένου ενεργοποιημένη οδηγεί σε σφάλμα "Δεν υπάρχουν δεδομένα εμπιστοσύνης για το τελευταίο".
Για αποστολές εικόνων μετά την πρώτη, η Docker ζητά τον κωδικό πρόσβασης του κλειδιού αποθηκευτηρίου για να υπογράψει την εικόνα.
Για να δημιουργήσετε αντίγραφο ασφαλείας των ιδιωτικών κλειδιών σας, χρησιμοποιήστε την εντολή:
Όταν γίνεται μετάβαση σε νέους Docker hosts, είναι απαραίτητο να μεταφερθούν τα κλειδιά ρίζας και αποθετηρίου για τη διατήρηση των λειτουργιών.
Χρησιμοποιήστε το Trickest για εύκολη δημιουργία και αυτοματοποίηση ροών εργασίας με τα πιο προηγμένα εργαλεία της κοινότητας. Αποκτήστε πρόσβαση σήμερα:
Χαρακτηριστικά Ασφάλειας Εμπορευμάτων
Namespaces
Τα Namespaces είναι μια λειτουργία του πυρήνα του Linux που διαχωρίζει τους πόρους του πυρήνα έτσι ώστε ένα σύνολο διεργασιών να βλέπει ένα σύνολο πόρων ενώ ένα άλλο σύνολο διεργασιών βλέπει ένα διαφορετικό σύνολο πόρων. Η λειτουργία λειτουργεί με το να έχει το ίδιο namespace για ένα σύνολο πόρων και διεργασιών, αλλά αυτά τα namespaces αναφέρονται σε διακριτούς πόρους. Οι πόροι μπορεί να υπάρχουν σε πολλούς χώρους.
Το Docker χρησιμοποιεί τα ακόλουθα Namespaces του πυρήνα του Linux για να επιτύχει την απομόνωση των Containers:
pid namespace
mount namespace
network namespace
ipc namespace
UTS namespace
Για περισσότερες πληροφορίες σχετικά με τα namespaces ελέγξτε την ακόλουθη σελίδα:
pageNamespacescgroups
Η λειτουργία του πυρήνα του Linux με την ονομασία cgroups παρέχει τη δυνατότητα να περιορίζει πόρους όπως cpu, μνήμη, io, εύρος ζώνης δικτύου μεταξύ ενός συνόλου διεργασιών. Το Docker επιτρέπει τη δημιουργία Containers χρησιμοποιώντας τη δυνατότητα cgroup που επιτρέπει τον έλεγχο πόρων για το συγκεκριμένο Container. Ακολουθεί ένα Container που δημιουργήθηκε με περιορισμό μνήμης χώρου χρήστη σε 500m, περιορισμό μνήμης πυρήνα σε 50m, μοίρα cpu σε 512, blkioweight σε 400. Η μοίρα cpu είναι ένας λόγος που ελέγχει τη χρήση CPU του Container. Έχει μια προεπιλεγμένη τιμή των 1024 και εύρος μεταξύ 0 και 1024. Αν τρία Containers έχουν την ίδια μοίρα cpu των 1024, κάθε Container μπορεί να πάρει μέχρι 33% της CPU σε περίπτωση ανταγωνισμού πόρων CPU. Το blkio-weight είναι ένας λόγος που ελέγχει το IO του Container. Έχει μια προεπιλεγμένη τιμή των 500 και εύρος μεταξύ 10 και 1000.
Για να πάρετε το cgroup ενός container μπορείτε να κάνετε:
Για περισσότερες πληροφορίες ελέγξτε:
pageCGroupsΔυνατότητες
Οι δυνατότητες επιτρέπουν πιο λεπτό έλεγχο για τις δυνατότητες που μπορούν να επιτραπούν για το χρήστη root. Το Docker χρησιμοποιεί το χαρακτηριστικό δυνατοτήτων του πυρήνα Linux για να περιορίσει τις λειτουργίες που μπορούν να γίνουν μέσα σε ένα Container ανεξαρτήτως του τύπου του χρήστη.
Όταν τρέχει ένας Docker container, η διαδικασία απορρίπτει ευαίσθητες δυνατότητες που θα μπορούσε να χρησιμοποιήσει η διαδικασία για να δραπετεύσει από την απομόνωση. Αυτό προσπαθεί να διασφαλίσει ότι η διαδικασία δεν θα μπορεί να εκτελέσει ευαίσθητες ενέργειες και να δραπετεύσει:
pageLinux CapabilitiesSeccomp στο Docker
Αυτό είναι ένα χαρακτηριστικό ασφαλείας που επιτρέπει στο Docker να περιορίσει τις κλήσεις συστήματος που μπορούν να χρησιμοποιηθούν μέσα στο container:
pageSeccompAppArmor στο Docker
AppArmor είναι μια βελτίωση πυρήνα για να περιορίσει τα containers σε ένα περιορισμένο σύνολο πόρων με προφίλ ανά πρόγραμμα.:
pageAppArmorSELinux στο Docker
Σύστημα Ετικετών: Το SELinux αναθέτει μια μοναδική ετικέτα σε κάθε διεργασία και αντικείμενο συστήματος αρχείων.
Επιβολή Πολιτικής: Επιβάλλει πολιτικές ασφαλείας που ορίζουν ποιες ενέργειες μπορεί να εκτελέσει μια ετικέτα διεργασίας σε άλλες ετικέτες εντός του συστήματος.
Ετικέτες Διεργασίας Εμπορίου: Όταν οι μηχανές container εκκινούν διεργασίες container, συνήθως τους ανατίθεται μια περιορισμένη ετικέτα SELinux, συνήθως
container_t
.Ετικέτες Αρχείων εντός των Containers: Τα αρχεία μέσα στο container συνήθως επισημαίνονται ως
container_file_t
.Κανόνες Πολιτικής: Η πολιτική SELinux κυρίως εξασφαλίζει ότι οι διεργασίες με ετικέτα
container_t
μπορούν να αλληλεπιδρούν μόνο (ανάγνωση, εγγραφή, εκτέλεση) με αρχεία που έχουν επισημανθεί ωςcontainer_file_t
.
Αυτός ο μηχανισμός εξασφαλίζει ότι ακόμη και αν μια διαδικασία μέσα σε ένα container είναι υπό κατάληψη, περιορίζεται στην αλληλεπίδραση μόνο με αντικείμενα που έχουν τις αντίστοιχες ετικέτες, περιορίζοντας σημαντικά την πιθανή ζημιά από τέτοιες καταστροφές.
pageSELinuxAuthZ & AuthN
Στο Docker, ένα πρόσθετο εξουσιοδότησης παίζει έναν κρίσιμο ρόλο στην ασφάλεια αποφασίζοντας εάν θα επιτρέψει ή θα αποκλείσει αιτήσεις προς τον δαίμονα του Docker. Αυτή η απόφαση λαμβάνεται εξετάζοντας δύο βασικά πλαίσια:
Πλαίσιο Ταυτοποίησης: Αυτό περιλαμβάνει πλήρεις πληροφορίες σχετικά με τον χρήστη, όπως ποιος είναι και πώς έχει ταυτοποιηθεί.
Πλαίσιο Εντολής: Αυτό περιλαμβάνει όλα τα σχετικά δεδομένα που σχετίζονται με το αίτημα που γίνεται.
Αυτά τα πλαίσια βοηθούν στη διασφάλιση ότι επεξεργάζονται μόνο νόμιμα αιτήματα από τους ταυτοποιημένους χρήστες, ενισχύοντας την ασφάλεια των λειτουργιών του Docker.
pageAuthZ& AuthN - Docker Access Authorization PluginDoS από ένα container
Αν δεν περιορίζετε σωστά τους πόρους που μπορεί να χρησιμοποιήσει ένα container, ένας χειρισμένος container μπορεί να προκαλέσει DoS στον υπολογιστή όπου τρέχει.
CPU DoS
Bandwidth DoS
Ενδιαφέροντα Σημαιάκια του Docker
Σημαία --privileged
Στην παρακάτω σελίδα μπορείτε να μάθετε τι σημαίνει η σημαία --privileged
:
--security-opt
no-new-privileges
Εάν εκτελείτε ένα container όπου ένας εισβολέας καταφέρνει να αποκτήσει πρόσβαση ως χρήστης με χαμηλά προνόμια. Εάν έχετε ένα κακώς διαμορφωμένο suid binary, ο εισβολέας μπορεί να το εκμεταλλευτεί και να αναβαθμίσει τα προνόμιά του μέσα στο container. Αυτό, μπορεί να του επιτρέψει να δραπετεύσει από αυτό.
Η εκτέλεση του container με την επιλογή no-new-privileges
ενεργοποιημένη θα εμποδίσει αυτό το είδος αναβάθμισης προνομίων.
Άλλα
Για περισσότερες επιλογές --security-opt
ελέγξτε: https://docs.docker.com/engine/reference/run/#security-configuration
Άλλες Αναλυτικές Εξετάσεις Ασφάλειας
Διαχείριση Μυστικών: Καλύτερες Πρακτικές
Είναι κρίσιμο να αποφεύγετε την ενσωμάτωση μυστικών απευθείας στις εικόνες Docker ή τη χρήση μεταβλητών περιβάλλοντος, καθώς αυτές οι μέθοδοι εκθέτουν τις ευαίσθητες πληροφορίες σας σε οποιονδήποτε έχει πρόσβαση στο container μέσω εντολών όπως docker inspect
ή exec
.
Τα Docker volumes αποτελούν μια ασφαλέστερη εναλλακτική λύση, συνιστώμενη για την πρόσβαση σε ευαίσθητες πληροφορίες. Μπορούν να χρησιμοποιηθούν ως προσωρινό σύστημα αρχείων στη μνήμη, μειώνοντας τους κινδύνους που σχετίζονται με το docker inspect
και την καταγραφή. Ωστόσο, οι χρήστες ριζικού και εκείνοι με πρόσβαση exec
στο container ενδέχεται να έχουν πρόσβαση στα μυστικά.
Τα Docker secrets προσφέρουν μια ακόμη πιο ασφαλή μέθοδο για τη διαχείριση ευαίσθητων πληροφοριών. Για περιπτώσεις που απαιτούν μυστικά κατά τη φάση κατασκευής της εικόνας, το BuildKit παρουσιάζει μια αποτελεσματική λύση με υποστήριξη για μυστικά κατά την κατασκευή, βελτιώνοντας την ταχύτητα κατασκευής και παρέχοντας επιπλέον χαρακτηριστικά.
Για να εκμεταλλευτείτε το BuildKit, μπορεί να ενεργοποιηθεί με τρεις τρόπους:
Μέσω μεταβλητής περιβάλλοντος:
export DOCKER_BUILDKIT=1
Με προθέματα εντολών:
DOCKER_BUILDKIT=1 docker build .
Ενεργοποιώντας το από προεπιλογή στη διαμόρφωση του Docker:
{ "features": { "buildkit": true } }
, ακολουθούμενο από επανεκκίνηση του Docker.
Το BuildKit επιτρέπει τη χρήση μυστικών κατά την κατασκευή με την επιλογή --secret
, εξασφαλίζοντας ότι αυτά τα μυστικά δεν περιλαμβάνονται στην προσωρινή μνήμη κατασκευής της εικόνας ή στην τελική εικόνα, χρησιμοποιώντας μια εντολή όπως:
Για τα μυστικά που χρειάζονται σε ένα τρέχον container, το Docker Compose και το Kubernetes προσφέρουν αξιόπιστες λύσεις. Το Docker Compose χρησιμοποιεί ένα κλειδί secrets
στον ορισμό της υπηρεσίας για την καθορισμό μυστικών αρχείων, όπως φαίνεται σε ένα παράδειγμα docker-compose.yml
:
Αυτή η διαμόρφωση επιτρέπει τη χρήση μυστικών κατά την εκκίνηση υπηρεσιών με το Docker Compose.
Σε περιβάλλοντα Kubernetes, τα μυστικά υποστηρίζονται φυσικά και μπορούν να διαχειριστούν περαιτέρω με εργαλεία όπως το Helm-Secrets. Τα Role Based Access Controls (RBAC) του Kubernetes βελτιώνουν την ασφάλεια διαχείρισης μυστικών, παρόμοια με το Docker Enterprise.
gVisor
gVisor είναι ένα πυρήνας εφαρμογής, γραμμένος σε Go, που υλοποιεί ένα σημαντικό μέρος της επιφάνειας συστήματος Linux. Περιλαμβάνει ένα Open Container Initiative (OCI) runtime με το όνομα runsc
που παρέχει μια οριοθετημένη περιοχή μεταξύ της εφαρμογής και του πυρήνα του υπολογιστή. Το runtime runsc
ενσωματώνεται με το Docker και το Kubernetes, κάνοντας εύκολη την εκτέλεση container σε αμμόλοφο.
Kata Containers
Kata Containers είναι μια κοινότητα ανοιχτού κώδικα που εργάζεται για τη δημιουργία ενός ασφαλούς runtime container με ελαφριές εικονικές μηχανές που αισθάνονται και λειτουργούν όπως τα containers, αλλά παρέχουν ισχυρότερη απομόνωση φορτίου εργασίας χρησιμοποιώντας τεχνολογία εικονικοποίησης υλικού ως δεύτερο επίπεδο άμυνας.
Συμβουλές Περίληψης
Μην χρησιμοποιείτε τη σημαία
--privileged
ή προσαρτήστε ένα Docker socket μέσα στο container. Το docker socket επιτρέπει τη δημιουργία containers, είναι ένα εύκολος τρόπος να αναλάβετε πλήρη έλεγχο του υπολογιστή φιλοξενίας, για παράδειγμα, με την εκτέλεση ενός άλλου container με τη σημαία--privileged
.Μην τρέχετε ως root μέσα στο container. Χρησιμοποιήστε έναν διαφορετικό χρήστη και user namespaces. Το root στο container είναι το ίδιο με αυτόν στον υπολογιστή φιλοξενίας εκτός αν γίνει αντιστοίχιση με user namespaces. Περιορίζεται ελαφρά κυρίως από Linux namespaces, δυνατότητες και cgroups.
Απορρίψτε όλες τις δυνατότητες (
--cap-drop=all
) και ενεργοποιήστε μόνο αυτές που απαιτούνται (--cap-add=...
). Πολλά φορτία εργασίας δεν χρειάζονται καμία δυνατότητα και η προσθήκη τους αυξάνει το πεδίο μιας πιθανής επίθεσης.Χρησιμοποιήστε την επιλογή ασφάλειας “no-new-privileges” για να εμποδίσετε τις διεργασίες από το να αποκτήσουν περισσότερα προνόμια, για παράδειγμα μέσω suid δυαδικών.
Περιορίστε τους διαθέσιμους πόρους στο container. Οι περιορισμοί πόρων μπορούν να προστατεύσουν τον υπολογιστή από επιθέσεις αρνησης υπηρεσίας.
Χρησιμοποιήστε επίσημες εικόνες docker και απαιτήστε υπογραφές ή δημιουργήστε τις δικές σας βασισμένες σε αυτές. Μην κληρονομείτε ή χρησιμοποιείτε εικόνες με παρασκευασμένες πόρτες. Αποθηκεύστε επίσης τα κλειδιά ρίζας, τον κωδικό πρόσβασης σε ασφαλές μέρος. Το Docker έχει σχέδια για τη διαχείριση των κλειδιών με το UCP.
Αναδημιουργήστε τακτικά τις εικόνες σας για να εφαρμόσετε περιορισμούς ασφαλείας στον υπολογιστή και τις εικόνες.
Διαχειριστείτε τα μυστικά σας με σύνεση ώστε να είναι δύσκολο για τον επιτιθέμενο να τα αποκτήσει.
Αν εκθέτετε τον δαίμονα του docker χρησιμοποιήστε HTTPS με πιστοποίηση πελάτη και εξυπηρετητή.
Στο Dockerfile σας, προτιμήστε την ΑΝΤΙΓΡΑΦΗ αντί του ΠΡΟΣΘΗΚΗ. Η ΠΡΟΣΘΗΚΗ εξάγει αυτόματα συμπιεσμένα αρχεία και μπορεί να αντιγράψει αρχεία από διευθύνσεις URL. Η ΑΝΤΙΓΡΑΦΗ δεν έχει αυτές τις δυνατότητες. Όποτε είναι δυνατόν, αποφύγετε τη χρήση της ΠΡΟΣΘΗΚΗ για να μην είστε ευάλωτοι σε επιθέσεις μέσω απομακρυσμένων διευθύνσεων URL και αρχείων Zip.
Έχετε ξεχωριστά containers για κάθε μικρο-υπηρεσία
Μην τοποθετείτε το ssh μέσα στο container, το “docker exec” μπορεί να χρησιμοποιηθεί για να συνδεθείτε με ssh στο Container.
Έχετε μικρότερες εικόνες containers
Διαρροή / Ανόρθωση Προνομίων στο Docker
Αν βρίσκεστε μέσα σε ένα container docker ή έχετε πρόσβαση σε έναν χρήστη στη ομάδα docker, μπορείτε να προσπαθήσετε να δραπετεύσετε και να αναβαθμίσετε προνόμια:
pageDocker Breakout / Privilege EscalationΠαράκαμψη Προσθετικού Πιστοποίησης Docker
Αν έχετε πρόσβαση στο socket του docker ή έχετε πρόσβαση σε έναν χρήστη στη ομάδα docker αλλά οι ενέργειές σας περιορίζονται από ένα πρόσθετο πιστοποίησης docker, ελέγξτε αν μπορείτε να το παρακάμψετε:
pageAuthZ& AuthN - Docker Access Authorization PluginΕνίσχυση Docker
Το εργαλείο docker-bench-security είναι ένα σενάριο που ελέγχει δεκάδες κοινές βέλτιστες πρακτικές γύρω από την ανάπτυξη containers Docker σε παραγωγή. Οι έλεγχοι είναι όλοι αυτοματοποιημένοι και βασίζονται στο CIS Docker Benchmark v1.3.1. Πρέπει να εκτελέσετε το εργαλείο από τον υπολογιστή που εκτελεί το docker ή από ένα container με αρκετά προνόμια. Βρείτε πώς να το εκτελέσετε στο README: https://github.com/docker/docker-bench-security.
Αναφορές
[https://sreeninet.wordpress.com/2016/03/06/docker-security-part-2docker-engine/](https://
Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
Αποκτήστε το επίσημο PEASS & HackTricks swag
Ανακαλύψτε Την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Last updated