Είμαι σίγουρος ότι σας έχει συμβεί αυτό: προσπαθείτε να συναρμολογήσετε ένα δοχείο για προσωπική χρήση, θέλετε να το κάνετε ασφαλέστερο χρησιμοποιώντας μη προνομιούχα κοντέινερ Και ξαφνικά, βρίσκεστε παγιδευμένοι σε έναν λαβύρινθο από σφάλματα δικαιωμάτων. Είναι απογοητευτικό να ξοδεύετε ώρες ρυθμίζοντας φακέλους στον αρχικό κατάλογο του χρήστη μόνο και μόνο για να ανακαλύψετε ότι το κοντέινερ δεν μπορεί να γράψει σε αυτούς ή ότι όταν το κάνει, τα αρχεία που προκύπτουν στον κεντρικό υπολογιστή είναι κατεστραμμένα. αδύνατο να διαχειριστεί επειδή ανήκουν σε έναν φανταστικό χρήστη.
Η πραγματικότητα είναι ότι, ενώ η εμπορευματοποίηση έχει επιταχύνει την παράδοση λογισμικού, έχει ανοίξει την πόρτα σε σημαντικούς κινδύνους. Σύμφωνα με πρόσφατα δεδομένα, η συντριπτική πλειοψηφία των εικόνων παραγωγής φέρουν [ασαφές - πιθανώς «ασαφές» ή «ασαφές»] κρίσιμα τρωτά σημείαΑυτό καθιστά την ασφάλεια έναν αδιαπραγμάτευτο πυλώνα. Δεν πρόκειται μόνο για την αποτροπή των χάκερ από το να μας επιτεθούν, αλλά και για την κατανόηση του τρόπου λειτουργίας του συστήματος. διαδικασία απομόνωσης ώστε οι υποδομές μας να μην γίνουν κόσκινο.
Κατανόηση του οικοσυστήματος ασφάλειας κοντέινερ
Για να σταματήσουμε να μαντεύουμε με τα δικαιώματα, πρέπει πρώτα να γνωρίζουμε τι προστατεύουμε. Η αρχιτεκτονική ενός κοντέινερ χωρίζεται σε πολλά κρίσιμα επίπεδα. Πρώτον, έχουμε το εικόνα του κοντέινερπου είναι το αρχικό σχέδιο. Εάν αυτό είναι ευάλωτο, όλες οι παρουσίες που αναπτύσσετε θα είναι ανασφαλείς. Γι' αυτό είναι ζωτικής σημασίας να το χρησιμοποιήσετε αξιόπιστες εικόνες βάσης και να τα διατηρείτε ενημερωμένα.
Τότε το χρόνος εκτέλεσηςτο οποίο λειτουργεί ως διαιτητής μεταξύ του λειτουργικού συστήματος του κεντρικού υπολογιστή και της εφαρμογής. Εάν ο χρόνος εκτέλεσης είναι παρωχημένος, ο κίνδυνος ενός διαφυγή από κοντέινερ αυξάνεται δραματικά. Σε αυτό πρέπει να προσθέσουμε την ενορχήστρωση, όπως το Kubernetes, όπου το έλεγχος πρόσβασης βάσει ρόλων (RBAC) Είναι το μόνο πραγματικό εμπόδιο κατά της μη εξουσιοδοτημένης πρόσβασης στο API διαχείρισης.
Δεν μπορούμε να ξεχάσουμε το λειτουργικό σύστημα κεντρικού υπολογιστήΕάν ένας εισβολέας καταφέρει να παραβιάσει τον πυρήνα του κεντρικού υπολογιστή, θα κρατήσει τα κλειδιά ολόκληρου του τομέα. Η σύσταση εδώ είναι σαφής: χρησιμοποιήστε ένα ελάχιστο λειτουργικό σύστημα για τη μείωση της επιφάνειας επίθεσης. Τέλος, το δίκτυο είναι το πιο συνηθισμένο σημείο εισόδου. σχεδόν το 30% των παραβιάσεων συμβαίνουν λόγω βλαβών συνδεσιμότητας, επομένως το τμηματοποίηση δικτύου και κρυπτογράφηση TLS/SSL Είναι υποχρεωτικά.
Ο πονοκέφαλος των δικαιωμάτων και του χρήστη root
Το τυπικό πρόβλημα για τους ερασιτέχνες είναι η ροή εργασίας με τους τόμους. Δημιουργείτε έναν φάκελο, τον προσαρτάτε και μετά, μπαμ!, εμφανίζεται ένα σφάλμα. η άδεια απορρίφθηκεΑυτό συμβαίνει επειδή, από προεπιλογή, πολλά κοντέινερ ξεκινούν ως root. Όταν προσπαθείτε να επιβάλετε το UID και GID στο 0 Για να τα κάνετε να ταιριάζουν με τον χρήστη κεντρικού υπολογιστή σας, δημιουργείτε μια επικίνδυνη γέφυρα. Εάν το κοντέινερ δεν σας επιτρέπει να διαμορφώσετε αυτά τα αναγνωριστικά, θα καταλήξετε να σπαταλάτε ένα απόγευμα προσπαθώντας να καταλάβετε ποιον εσωτερικό χρήστη χρησιμοποιεί η εφαρμογή για να εκτελέσει μια chown εγχειρίδιο.
Η αποτελεσματική λύση είναι η εφαρμογή του αρχή του ελάχιστου προνομίουΔεν πρέπει να εκτελείτε τίποτα ως root εκτός αν είναι απολύτως απαραίτητο. Για να λύσετε το πρόβλημα των αρχείων που δημιουργούνται από κοντέινερ και δεν μπορείτε να διαγράψετε στον κεντρικό υπολογιστή, είναι απαραίτητο να ρυθμίσετε το Dockerfile με τις ακόλουθες οδηγίες: ΜΕΤΑΧΕΙΡΙΖΌΜΕΝΟΣ, ορίζοντας έναν χρήστη χωρίς δικαιώματα πριν από την εκκίνηση της εφαρμογής.
Αν χρησιμοποιείτε το Podman, η έννοια του δοχεία χωρίς ρίζες Είναι εγγενές και πολύ χρήσιμο, αλλά απαιτεί να κατανοήσετε πώς οι χρήστες του κεντρικού υπολογιστή αντιστοιχίζονται με χρήστες κοντέινερ. Για να αποτρέψετε την απώλεια ελέγχου των δικαιωμάτων, ιδανικά η εφαρμογή θα πρέπει να έχει σχεδιαστεί για να γράφει σε συγκεκριμένες διαδρομές και ότι χαρτογράφηση όγκου Αυτό γίνεται λαμβάνοντας υπόψη το πραγματικό UID του χρήστη που εκκινεί τη διαδικασία.
Στρατηγικές για την κατασκευή θωρακισμένων εικόνων
Αν θέλεις να σταματήσεις να υποφέρεις, πρέπει να αλλάξεις τον τρόπο που κατασκευάζεις τις εικόνες σου. Μια εξαιρετικά αποτελεσματική τεχνική είναι... πολυβάθμιες κατασκευέςΒασικά, χρησιμοποιείτε μια εικόνα βαρέως τύπου με όλα τα εργαλεία δημιουργίας για να δημιουργήσετε το δυαδικό αρχείο και, στη συνέχεια, αντιγράφετε μόνο αυτό το αρχείο σε μια τελική εικόνα. εξαιρετικά ελαφρύ.
Μπορείτε ακόμη και να προχωρήσετε περισσότερο χρησιμοποιώντας την εικόνα μηδένΑυτό δημιουργεί ένα κοντέινερ που δεν έχει απολύτως τίποτα: ούτε κέλυφος, ούτε διαχειριστή πακέτων, μόνο την εφαρμογή σας. Αυτό καθιστά σχεδόν αδύνατο για έναν εισβολέα να εκτελέσει κακόβουλες εντολές εάν καταφέρει να εισέλθει, αφού Δεν υπάρχει διερμηνέας εντολών διαθέσιμη.
Ένα άλλο μέτρο ασφαλείας είναι ο καθαρισμός της εικόνας οποιουδήποτε δυαδικού αρχείου με δικαιώματα. setuid ή setgidΑυτά τα δικαιώματα επιτρέπουν την εκτέλεση ενός αρχείου με τα δικαιώματα του κατόχου του αρχείου και όχι του χρήστη που το εκκινεί, κάτι που αποτελεί μια λεωφόρο για... κλιμάκωση προνομίωνΜια απλή εντολή για την αναζήτηση και την αφαίρεση αυτών των bits κατά τη δημιουργία εικόνας μπορεί να σας γλιτώσει από πολλά προβλήματα.
Οι κίνδυνοι της προνομιακής λειτουργίας και οι δυνατότητες του Linux
Μερικές φορές, από απελπισία επειδή δεν μπορούμε να λύσουμε ένα πρόβλημα δικαιωμάτων, πέφτουμε στον πειρασμό να χρησιμοποιήσουμε τη σημαία -προνομιούχοςΞεχάστε το. Η λειτουργία προνομίων σπάει την απομόνωση του κοντέινερ και σας δίνει πλήρη πρόσβαση στις συσκευές του οικοδεσπότη. Είναι σαν να δίνετε τα κλειδιά του σπιτιού σας σε έναν άγνωστο μόνο και μόνο επειδή δεν ήξερε πώς να ανοίξει την πύλη του κήπου.
Αντίθετα, θα πρέπει να παίξετε με το Δυνατότητες LinuxΤο Docker εκχωρεί ένα σύνολο προεπιλεγμένων δικαιωμάτων (όπως CAP_CHOWN ή CAP_NET_RAW). Εάν η εφαρμογή σας δεν χρειάζεται να χειραγωγήσει το δίκτυο σε χαμηλό επίπεδο, η πιο έξυπνη προσέγγιση είναι εξάλειψη περιττών δυνατοτήτων και προσθέστε μόνο αυτά που απαιτούνται αυστηρά από --cap-add.
Για όσους διαχειρίζονται πιο σοβαρά περιβάλλοντα, υπάρχουν πρόσθετα εξουσιοδότησης όπως το opa-docker-authz. Αυτά επιτρέπουν την αναχαίτιση κλήσεων προς το API του δαίμονα Docker και τον αποκλεισμό οποιασδήποτε προσπάθειας εκκίνησης ενός κοντέινερ σε προνομιακή λειτουργία, διασφαλίζοντας ότι κανείς, ακόμη και κατά λάθος, δεν αφήνει την πόρτα ανοιχτή στον κεντρικό υπολογιστή.
Βελτιστοποίηση και συντήρηση περιβάλλοντος
Μην κολλάτε στο μέγεθος εικόνας των 5MB όταν χρησιμοποιείτε Alpine Linux, εάν αυτό προκαλεί προβλήματα συμβατότητας με τις βιβλιοθήκες. Μερικές φορές είναι προτιμότερη μια ελαφρώς μεγαλύτερη εικόνα Debian. σταθεροποιημένο και γνωστό από την ομάδα. Αυτό που είναι κρίσιμο είναι η εφαρμογή ενός σάρωση ευπαθειών Αυτοματοποιημένη διοχέτευση CI/CD για την ανίχνευση CVE πριν η εικόνα φτάσει στην παραγωγή.
Όσον αφορά την αποθήκευση, εμποδίζει την εφαρμογή να γράψει στο ριζικό σύστημα αρχείων. Ρυθμίστε τις παραμέτρους του σύστημα αρχείων μόνο για ανάγνωση (rootfs) και ορίζει συγκεκριμένους τόμους μόνο για τα δεδομένα που πρέπει να διατηρηθούν. Αυτό δεν είναι μόνο πιο ασφαλές, αλλά επιβάλλει και μια πιο καθαρή αρχιτεκτονική και άστεγοςδιευκολύνοντας την οριζόντια κλιμάκωση.
Για προγραμματισμένες διεργασίες, μην τοποθετείτε μια εργασία cron μέσα στο κοντέινερ του ιστότοπου. Ο χρυσός κανόνας είναι μία διεργασία ανά κοντέινερΗ πιο καθαρή προσέγγιση είναι να χρησιμοποιήσετε την εικόνα της εφαρμογής σας για να εκκινήσετε ένα εφήμερο κοντέινερ που εκτελεί την εργασία και στη συνέχεια καταστρέφεται μόνο του ή να διαχειριστείτε το cron από τον κεντρικό υπολογιστή καλώντας τη μηχανή κοντέινερ χρησιμοποιώντας εντολές.
Η ασφάλεια των κοντέινερ είναι μια συνεχής διαδικασία που περιλαμβάνει την εξάλειψη της πρόσβασης root, τον περιορισμό των δυνατοτήτων του πυρήνα και την αφαίρεση περιττών εργαλείων από τα είδωλα των κοντέινερ. Συνδυάζοντας χρήστες χωρίς δικαιώματα με την ενίσχυση κατά τον χρόνο εκτέλεσης και τη συνεχή παρακολούθηση, επιτυγχάνεται ένα περιβάλλον όπου η λειτουργικότητα δεν θέτει σε κίνδυνο την ακεραιότητα του συστήματος υποδοχής.
Παθιασμένος συγγραφέας για τον κόσμο των byte και της τεχνολογίας γενικότερα. Μου αρέσει να μοιράζομαι τις γνώσεις μου μέσω της γραφής, και αυτό θα κάνω σε αυτό το blog, θα σας δείξω όλα τα πιο ενδιαφέροντα πράγματα σχετικά με τα gadget, το λογισμικό, το υλικό, τις τεχνολογικές τάσεις και πολλά άλλα. Στόχος μου είναι να σας βοηθήσω να περιηγηθείτε στον ψηφιακό κόσμο με απλό και διασκεδαστικό τρόπο.

