Προγραμματισμός

Κοντέινερ Linux εναντίον VM: Μια σύγκριση ασφαλείας

Οι προγραμματιστές λατρεύουν τα εμπορευματοκιβώτια. Είναι εύκολο στη χρήση και γρήγορη εκκίνηση. Μπορείτε να εκτελέσετε πολλά από αυτά ακόμη και σε απλό υλικό. Το εναρκτήριο ξεκίνημα ήταν πάντοτε όχημα ανάπτυξης και δοκιμών, και αυτό το γενικό κόστος αυξάνεται μόνο με αρχιτεκτονικές μικροϋπηρεσιών. Εάν ένας προγραμματιστής χρειάζεται μισή ντουζίνα υπηρεσίες, μπορεί εύκολα να χάσει μια ή δύο μέρες με τη ρύθμιση - διαμόρφωση υλικού, εκτέλεση προγραμμάτων εγκατάστασης, καταπολέμηση ασυμβατότητας.

Με κοντέινερ, που καταρρέει σε λεπτά ή δευτερόλεπτα και μπορεί να εκτελεστεί σε έναν σταθμό εργασίας ανάπτυξης. Τα εύκολα διαθέσιμα αποθετήρια χρήσιμων εικόνων κοντέινερ πολλαπλασιάζουν την παραγωγικότητα του προγραμματιστή, όπως συμβαίνει με το open source, αλλά χωρίς το πρόβλημα να κάνει μια κατασκευή. Οι ομάδες επιχειρήσεων ήταν πιο αργές να υιοθετήσουν κοντέινερ. Ένας λόγος είναι ότι πολλές εφαρμογές που πρέπει να υποστηρίξουν δεν είναι ακόμη κοντέινερ. Ένας άλλος λόγος είναι η απροθυμία να απομακρυνθούμε από τα VM.

Για ops, η μετάβαση από γυμνό μέταλλο σε VM ήταν φυσική. Τα μεμονωμένα VM εμφανίζονται και μπορούν να διαχειριστούν όπως μεμονωμένα συστήματα, χρησιμοποιώντας τα ίδια εργαλεία και διαδικασίες. Οι πρώτες ανησυχίες σχετικά με την ασφάλεια VM μετριάστηκαν από τη μακρά ιστορία παραγωγής των VM στον κόσμο του κεντρικού πλαισίου, από την ικανότητα εφαρμογής των ίδιων χειριστηρίων με τα συστήματα bare-metal, με υποστήριξη εικονικοποίησης υλικού και από την εξελισσόμενη ωριμότητα των εργαλείων διαχείρισης VM.

Πολλές πρώιμες ανησυχίες για την ασφάλεια κατέληξαν σε μια ερώτηση: Ήταν τα VM τόσο ασφαλή όσο και τα γυμνά μέταλλα; Τώρα παρόμοιες ερωτήσεις τίθενται σχετικά με τα εμπορευματοκιβώτια. Πόσο ασφαλή είναι τα κοντέινερ και πώς συγκρίνονται με τα VM; Σίγουρα, εάν συγκρίνουμε υπηρεσίες που εκτελούνται σε κοντέινερ με τις ίδιες υπηρεσίες που εκτελούνται με ξεχωριστές διαδικασίες στο ίδιο σύστημα, η έκδοση κοντέινερ είναι πιο ασφαλής. Ο διαχωρισμός που παρέχεται από χώρους ονομάτων Linux και cgroups παρέχει εμπόδια που δεν υπάρχουν μεταξύ απλών διαδικασιών. Η σύγκριση με τα VM είναι λιγότερο ξεκάθαρη. Ας ρίξουμε μια ματιά στα VM και τα κοντέινερ από άποψη ασφάλειας.

Σε αυτό το άρθρο, θα ακολουθήσω δύο διαφορετικές προσεγγίσεις για τη σύγκριση της ασφάλειας VM και κοντέινερ. Η πρώτη προσέγγιση θα είναι πιο δομική ή θεωρητική, εξετάζοντας τα χαρακτηριστικά του καθενός από την άποψη της ασφάλειας. Στη συνέχεια, θα εφαρμόσω μια πιο πρακτική ανάλυση κοιτάζοντας τι συμβαίνει σε μια τυπική παραβίαση και πώς μπορεί να επηρεαστεί από τις αρχιτεκτονικές κοντέινερ και VM.

Διαρθρωτική άποψη

Για τη δομική προσέγγιση θα συγκρίνω την επιφάνεια επίθεσης και των δύο συστημάτων. Η επιφάνεια επίθεσης αντιπροσωπεύει τον αριθμό των σημείων στα οποία μπορεί να επιτεθεί ένα σύστημα. Δεν ορίζεται με ακρίβεια (για παράδειγμα ένας αριθμός) αλλά είναι χρήσιμο για συγκρίσεις. Σε έναν διαρρήκτη, ένα σπίτι με 10 πόρτες έχει μεγαλύτερη επιφάνεια επίθεσης από ένα σπίτι με μία πόρτα, ακόμη και αν οι πόρτες είναι ίδιες. Μια πόρτα μπορεί να μείνει ξεκλείδωτη. μία κλειδαριά μπορεί να είναι ελαττωματική. πόρτες σε διαφορετικές τοποθεσίες μπορεί να προσφέρουν περισσότερο εισβολή στον εισβολέα και ούτω καθεξής.

Σε συστήματα υπολογιστών, η επιφάνεια επίθεσης περιλαμβάνει οτιδήποτε ο εισβολέας (ή λογισμικό που ενεργεί για λογαριασμό του) μπορεί να «αγγίξει» το σύστημα στόχου. Οι διεπαφές δικτύου, οι συνδέσεις υλικού και οι κοινόχρηστοι πόροι είναι όλα πιθανά σημεία επίθεσης. Σημειώστε ότι η επιφάνεια επίθεσης δεν σημαίνει ότι υπάρχει πραγματική ευπάθεια. Και οι 10 πόρτες μπορεί να είναι απόλυτα ασφαλείς. Αλλά μια μεγαλύτερη επιφάνεια επίθεσης σημαίνει περισσότερα μέρη για προστασία και όσο μεγαλύτερη πιθανότητα ο επιτιθέμενος θα βρει αδυναμία σε τουλάχιστον μία.

Η συνολική επιφάνεια επίθεσης εξαρτάται από τον αριθμό των διαφορετικών σημείων επαφής και την πολυπλοκότητα του καθενός. Ας δούμε ένα απλό παράδειγμα. Φανταστείτε ένα παλιομοδίτικο σύστημα που εξυπηρετεί τις χρηματιστηριακές τιμές. Έχει μια ενιαία διεπαφή, μια απλή σειριακή γραμμή. Το πρωτόκολλο αυτής της γραμμής είναι επίσης απλό: Ένα διακομιστή σύμβολο σταθερού μήκους, ας πούμε πέντε χαρακτήρες, αποστέλλεται στον διακομιστή, ο οποίος αποκρίνεται με μια προσφορά τιμής σταθερού μήκους - ας πούμε, 10 χαρακτήρες. Δεν υπάρχουν Ethernet, TCP / IP, HTTP και ούτω καθεξής. (Στην πραγματικότητα δούλευα σε τέτοια συστήματα πολύ καιρό σε έναν γαλαξία πολύ μακριά.)

Η επιφάνεια επίθεσης αυτού του συστήματος είναι πολύ μικρή. Ο εισβολέας μπορεί να χειριστεί τα ηλεκτρικά χαρακτηριστικά της σειριακής γραμμής, να στείλει λανθασμένα σύμβολα, να στείλει πάρα πολλά δεδομένα ή διαφορετικά να τροποποιήσει το πρωτόκολλο. Η προστασία του συστήματος συνεπάγεται την εφαρμογή κατάλληλων ελέγχων κατά αυτών των επιθέσεων.

Τώρα φανταστείτε την ίδια υπηρεσία, αλλά σε μια μοντέρνα αρχιτεκτονική. Η υπηρεσία είναι διαθέσιμη στο Διαδίκτυο και εκθέτει ένα RESTful API. Η ηλεκτρική πλευρά της επίθεσης έχει φύγει - το μόνο που θα κάνουμε είναι να τηγανίσουμε τον ίδιο τον δρομολογητή ή τον διακόπτη του εισβολέα. Αλλά το πρωτόκολλο είναι πολύ πιο περίπλοκο. Έχει επίπεδα για IP, TCP, πιθανώς TLS και HTTP, το καθένα προσφέρει τη δυνατότητα αξιοποιήσιμης ευπάθειας. Το σύγχρονο σύστημα έχει πολύ μεγαλύτερη επιφάνεια επίθεσης, αν και εξακολουθεί να μοιάζει με τον εισβολέα σαν ένα μόνο σημείο διασύνδεσης.

Επιφανειακή επίθεση γυμνού μετάλλου

Για έναν εισβολέα που δεν υπάρχει φυσικά στο κέντρο δεδομένων, η αρχική επιφάνεια επίθεσης είναι το δίκτυο στο διακομιστή. Αυτό οδήγησε στην "περιμετρική προβολή" της ασφάλειας: Προστατέψτε τα σημεία εισόδου στο κέντρο δεδομένων και τίποτα δεν μπαίνει. Εάν ο εισβολέας δεν μπορεί να μπει, δεν έχει σημασία τι συμβαίνει μεταξύ των συστημάτων στο εσωτερικό. Λειτουργούσε καλά όταν οι περιμετρικές διεπαφές ήταν απλές (σκεφτείτε dial-up), αλλά προκάλεσαν αδυναμίες στις εσωτερικές διεπαφές. Οι επιτιθέμενοι που βρήκαν μια τρύπα στην περίμετρο θα ανακαλύπτουν συχνά ότι η εσωτερική επιφάνεια επίθεσης του διακομιστή διακομιστή ήταν πολύ μεγαλύτερη από την εξωτερική, και θα μπορούσαν να προκαλέσουν σημαντική ζημιά μία φορά μέσα.

Αυτή η εσωτερική επιφάνεια επίθεσης περιλάμβανε συνδέσεις δικτύου μεταξύ διακομιστών αλλά και αλληλεπιδράσεις μεταξύ διεργασιών σε έναν διακομιστή. Ακόμα χειρότερα, δεδομένου ότι πολλές υπηρεσίες εκτελούνται με αυξημένα δικαιώματα (χρήστης "root"), η επιτυχής είσοδος σε μία θα σήμαινε ουσιαστικά απεριόριστη πρόσβαση σε οτιδήποτε άλλο σε αυτό το σύστημα, χωρίς να χρειαστεί να αναζητήσετε επιπλέον ευπάθειες. Μια ολόκληρη βιομηχανία μεγάλωσε γύρω από την προστασία των διακομιστών - τείχη προστασίας, antimalware, ανίχνευση εισβολής και συνεχώς - με λιγότερο από τέλεια αποτελέσματα.

Υπάρχουν επίσης ενδιαφέρουσες επιθέσεις "side channel" εναντίον διακομιστών. Οι ερευνητές έχουν δείξει παραδείγματα χρήσης κατανάλωσης ενέργειας, θορύβου ή ηλεκτρομαγνητικής ακτινοβολίας από υπολογιστές για εξαγωγή πληροφοριών, μερικές φορές πολύ ευαίσθητων δεδομένων, όπως κρυπτογραφικών κλειδιών. Άλλες επιθέσεις έχουν χρησιμοποιήσει εκτεθειμένες διεπαφές όπως πρωτόκολλα ασύρματου πληκτρολογίου. Σε γενικές γραμμές, ωστόσο, αυτές οι επιθέσεις είναι πιο δύσκολες - μπορεί να απαιτούν εγγύτητα με τον διακομιστή, για παράδειγμα - οπότε ο κύριος δρόμος του "down the wire" είναι πιο κοινός.

Επιφανειακή επίθεση VM

Όταν τα VM χρησιμοποιούνται με τον ίδιο τρόπο όπως το γυμνό μέταλλο, χωρίς καμία διαφορά στην αρχιτεκτονική της εφαρμογής (όπως είναι συχνά), μοιράζονται τα περισσότερα από τα ίδια σημεία επίθεσης. Μία επιπλέον επιφάνεια επίθεσης είναι πιθανή αποτυχία στον υπεύθυνο επίβλεψης, στο λειτουργικό σύστημα ή στο υλικό να απομονώσει σωστά πόρους μεταξύ VM, επιτρέποντας σε έναν VM να διαβάσει κάπως τη μνήμη ενός άλλου VM. Η διασύνδεση μεταξύ του VM και του επόπτη αντιπροσωπεύει επίσης ένα σημείο επίθεσης. Εάν ένα VM μπορεί να διαπεράσει και να εκτελέσει αυθαίρετο κώδικα στον επόπτη, τότε μπορεί να έχει πρόσβαση σε άλλα VM στο ίδιο σύστημα. Ο ίδιος ο επόπτης αντιπροσωπεύει ένα σημείο επίθεσης, καθώς εκθέτει τις διεπαφές διαχείρισης.

Υπάρχουν επιπλέον σημεία επίθεσης ανάλογα με τον τύπο του συστήματος VM. Τα συστήματα τύπου VM τύπου 2 χρησιμοποιούν έναν επόπτη που λειτουργεί ως διαδικασία σε ένα υποκείμενο λειτουργικό σύστημα κεντρικού υπολογιστή. Αυτά τα συστήματα μπορούν να επιτεθούν επιτίθενται στο λειτουργικό σύστημα του κεντρικού υπολογιστή. Εάν ο εισβολέας μπορεί να εκτελέσει κώδικα στο κεντρικό σύστημα, μπορεί ενδεχομένως να επηρεάσει τον επόπτη και τα VM, ειδικά εάν μπορεί να έχει πρόσβαση ως προνομιούχος χρήστης. Η παρουσία ενός ολόκληρου λειτουργικού συστήματος, συμπεριλαμβανομένων βοηθητικών προγραμμάτων, εργαλείων διαχείρισης και πιθανώς άλλων υπηρεσιών και σημείων εισόδου (όπως SSH) παρέχει μια σειρά πιθανών σημείων επίθεσης. Συστήματα VM τύπου 1, όπου ο υπεύθυνος λειτουργίας τρέχει απευθείας στο υποκείμενο υλικό, εξαλείφει αυτά τα σημεία εισόδου και επομένως έχει μια μικρότερη επιφάνεια επίθεσης.

Επιφάνεια επίθεσης κοντέινερ

Όπως με τα VM, τα κοντέινερ μοιράζονται τα θεμελιώδη σημεία εισόδου στο δίκτυο των συστημάτων γυμνού μετάλλου. Επιπλέον, όπως οι εικονικές μηχανές τύπου 2, τα συστήματα κοντέινερ που χρησιμοποιούν ένα "πλήρως φορτωμένο" κεντρικό λειτουργικό σύστημα υπόκεινται σε όλες τις ίδιες επιθέσεις που διατίθενται κατά των βοηθητικών προγραμμάτων και των υπηρεσιών αυτού του κεντρικού λειτουργικού συστήματος. Εάν ο εισβολέας μπορεί να αποκτήσει πρόσβαση σε αυτόν τον κεντρικό υπολογιστή, μπορεί να προσπαθήσει να αποκτήσει πρόσβαση ή να επηρεάσει με άλλο τρόπο τα τρέχοντα κοντέινερ. Εάν αποκτήσει προνομιακή πρόσβαση ("root"), ο εισβολέας θα μπορεί να έχει πρόσβαση ή να ελέγχει οποιοδήποτε κοντέινερ. Ένα «μινιμαλιστικό» λειτουργικό σύστημα (όπως το KurmaOS της Apcera) μπορεί να βοηθήσει στη μείωση αυτής της επιφάνειας επίθεσης, αλλά δεν μπορεί να το εξαλείψει εντελώς, καθώς απαιτείται κάποια πρόσβαση στο κεντρικό λειτουργικό σύστημα για τη διαχείριση κοντέινερ.

Οι βασικοί μηχανισμοί διαχωρισμού εμπορευματοκιβωτίων (χώροι ονομάτων) προσφέρουν επίσης πιθανά σημεία επίθεσης. Επιπλέον, δεν είναι όλες οι πτυχές των διαδικασιών σε συστήματα Linux χωρισμένα σε ονόματα, επομένως ορισμένα στοιχεία κοινοποιούνται σε κοντέινερ. Πρόκειται για φυσικές περιοχές για να διερευνήσουν οι εισβολείς. Τέλος, η διαδικασία διεπαφής πυρήνα (για κλήσεις συστήματος) είναι μεγάλη και εκτεθειμένη σε κάθε κοντέινερ, σε αντίθεση με την πολύ μικρότερη διεπαφή μεταξύ ενός VM και του επόπτη. Οι ευπάθειες στις κλήσεις συστήματος μπορούν να προσφέρουν πιθανή πρόσβαση στον πυρήνα. Ένα παράδειγμα αυτού είναι η ευπάθεια που αναφέρθηκε πρόσφατα στο μπρελόκ του Linux.

Αρχιτεκτονικά θέματα

Και για τα VM και τα κοντέινερ, το μέγεθος της επιφάνειας επίθεσης μπορεί να επηρεαστεί από την αρχιτεκτονική της εφαρμογής και τον τρόπο με τον οποίο χρησιμοποιείται η τεχνολογία.

Πολλές εφαρμογές VM παλαιού τύπου αντιμετωπίζουν τα VM σαν γυμνά μέταλλα. Με άλλα λόγια, δεν έχουν προσαρμόσει τις αρχιτεκτονικές τους ειδικά για VM ή για μοντέλα ασφαλείας που δεν βασίζονται σε περιμετρική ασφάλεια. Ενδέχεται να εγκαταστήσουν πολλές υπηρεσίες στο ίδιο VM, να εκτελέσουν τις υπηρεσίες με δικαιώματα root και να έχουν λίγα ή καθόλου στοιχεία ελέγχου ασφαλείας μεταξύ των υπηρεσιών. Η ανακατασκευή αυτών των εφαρμογών (ή πιθανότατα η αντικατάστασή τους με νεότερες) ενδέχεται να χρησιμοποιεί VM για να παρέχει διαχωρισμό ασφαλείας μεταξύ λειτουργικών μονάδων, και όχι απλώς ως μέσο διαχείρισης μεγαλύτερου αριθμού μηχανημάτων.

Τα κοντέινερ είναι κατάλληλα για αρχιτεκτονικές μικροϋπηρεσιών που «συνδυάζουν» μεγάλο αριθμό (συνήθως) μικρών υπηρεσιών που χρησιμοποιούν τυποποιημένα API. Τέτοιες υπηρεσίες έχουν συχνά μια πολύ μικρή διάρκεια ζωής, όπου μια υπηρεσία εμπορευματοκιβωτίων ξεκινά κατόπιν ζήτησης, ανταποκρίνεται σε ένα αίτημα, και καταστρέφεται, ή όταν οι υπηρεσίες αυξάνονται γρήγορα πάνω-κάτω με βάση τη ζήτηση. Αυτό το μοτίβο χρήσης εξαρτάται από τη γρήγορη εμφάνιση που υποστηρίζουν τα κοντέινερ. Από πλευράς ασφάλειας έχει και οφέλη και μειονεκτήματα.

Ο μεγαλύτερος αριθμός υπηρεσιών σημαίνει μεγαλύτερο αριθμό διεπαφών δικτύου και επομένως μεγαλύτερη επιφάνεια επίθεσης. Ωστόσο, επιτρέπει επίσης περισσότερους ελέγχους στο επίπεδο δικτύου. Για παράδειγμα, στην πλατφόρμα Apcera, όλη η κυκλοφορία εμπορευματοκιβωτίων προς εμπορευματοκιβώτια πρέπει να επιτρέπεται ρητά. Ένας απατεώνας κοντέινερ δεν μπορεί αυθαίρετα να φτάσει σε οποιοδήποτε τελικό σημείο δικτύου.

Η σύντομη διάρκεια ζωής του εμπορευματοκιβωτίου σημαίνει ότι εάν ένας εισβολέας εισέλθει, ο χρόνος που πρέπει να κάνει κάτι είναι περιορισμένος, σε αντίθεση με το παράθυρο ευκαιριών που παρουσιάζεται από μια μακροχρόνια υπηρεσία. Το μειονέκτημα είναι ότι η εγκληματολογία είναι πιο δύσκολη. Μόλις φύγει το κοντέινερ, δεν μπορεί να διερευνηθεί και να εξεταστεί για την εύρεση του κακόβουλου λογισμικού. Αυτές οι αρχιτεκτονικές καθιστούν επίσης πιο δύσκολο για έναν εισβολέα να εγκαταστήσει κακόβουλο λογισμικό που επιβιώνει μετά την καταστροφή εμπορευματοκιβωτίων, καθώς θα μπορούσε σε γυμνό μέταλλο εγκαθιστώντας ένα πρόγραμμα οδήγησης που φορτώνει στην εκκίνηση. Τα κοντέινερ φορτώνονται συνήθως από ένα αξιόπιστο αποθετήριο μόνο για ανάγνωση και μπορούν να ασφαλιστούν περαιτέρω με κρυπτογραφικούς ελέγχους.

Τώρα ας εξετάσουμε τι συμβαίνει κατά τη διάρκεια μιας παραβίασης.

Προστασία από παραβιάσεις

Οι επιτιθέμενοι έχουν συνήθως έναν ή δύο στόχους στην εισβολή σε ένα σύστημα διακομιστή. Θέλουν να πάρουν δεδομένα ή να κάνουν ζημιά.

Αν ακολουθούν δεδομένα, θέλουν να διεισδύσουν όσο το δυνατόν περισσότερα συστήματα, με τα υψηλότερα δυνατά προνόμια και να διατηρήσουν αυτήν την πρόσβαση για όσο το δυνατόν περισσότερο. Η επίτευξή τους τους δίνει χρόνο για να βρουν τα δεδομένα, τα οποία μπορεί να υπάρχουν ήδη - για παράδειγμα, μια ελάχιστα ασφαλή βάση δεδομένων - ή μπορεί να απαιτήσει αργή συλλογή με την πάροδο του χρόνου καθώς μπερδεύεται, όπως η συλλογή συναλλαγών καθώς προέρχονται από χρήστες. Η διατήρηση πρόσβασης για μεγάλο χρονικό διάστημα απαιτεί μυστικότητα. Η επίθεση απαιτεί επίσης έναν τρόπο για να βγάλουμε τα δεδομένα.

Εάν ο εισβολέας προσπαθεί απλά να κάνει ζημιά, ο στόχος και πάλι είναι να έχει πρόσβαση σε όσο το δυνατόν περισσότερα συστήματα και προνόμια. Αλλά υπάρχει μια πράξη εξισορρόπησης: Μόλις ξεκινήσει η ζημιά, πιθανότατα θα παρατηρηθεί, αλλά όσο περισσότερο περιμένει ο εισβολέας να ξεκινήσει (ενώ το κακόβουλο λογισμικό φιλτράρεται από σύστημα σε σύστημα), τόσο μεγαλύτερες είναι οι πιθανότητες εντοπισμού. Η εξαγωγή δεδομένων είναι λιγότερο σημαντική από τον συντονισμένο έλεγχο του κακόβουλου λογισμικού. Η ιδέα είναι να μολύνουμε όσο το δυνατόν περισσότερα συστήματα και, στη συνέχεια, να τα καταστρέψουμε σε ένα συγχρονισμένο σημείο, είτε προκαθορισμένο είτε κατόπιν εντολής.

Οι παραβιάσεις περιλαμβάνουν ορισμένα στοιχεία. Ας δούμε το καθένα και ας δούμε αν οι αρχιτεκτονικές VM και οι κοντέινερ μπορούν να επηρεάσουν την επιφάνεια επίθεσης για καθεμία.

$config[zx-auto] not found$config[zx-overlay] not found