Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατόTL? DR. Σε αυτό το άρθρο, εξερευνούμε σχήματα σκλήρυνσης που λειτουργούν ασυνήθιστα σε πέντε δημοφιλείς διανομές Linux. Για καθένα, πήραμε την προεπιλεγμένη διαμόρφωση του πυρήνα, κατεβάσαμε όλα τα πακέτα και αναλύσαμε τα σχήματα ασφαλείας στα ένθετα δυαδικά αρχεία. Οι διανομές που εξετάζονται είναι οι OpenSUSE 12.4, Debian 9, CentOS, RHEL 6.10 και 7, καθώς και Ubuntu 14.04, 12.04 και 18.04 LTS.

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

Η ανασκόπηση έδειξε ότι ο μεγαλύτερος αριθμός μεθόδων προστασίας εφαρμόζεται στο Ubuntu 18.04 σε επίπεδο λειτουργικού συστήματος και εφαρμογών, ακολουθούμενο από το Debian 9. Από την άλλη πλευρά, τα OpenSUSE 12.4, CentOS 7 και RHEL 7 εφαρμόζουν επίσης βασικά συστήματα προστασίας και προστασία από σύγκρουση στοίβας χρησιμοποιείται ακόμη ευρύτερα με ένα πολύ πιο πυκνό σύνολο προεπιλεγμένων πακέτων.

Εισαγωγή

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

Εδώ μπαίνουν στο παιχνίδι μέθοδοι προστασίας ή σκλήρυνσης προγραμμάτων. Δεν μπορούμε να αποτρέψουμε ορισμένους τύπους σφαλμάτων, αλλά μπορούμε να κάνουμε τη ζωή του εισβολέα πιο δύσκολη και να λύσουμε εν μέρει το πρόβλημα αποτρέποντας ή αποτρέποντας εκμετάλλευση αυτά τα λάθη. Αυτή η προστασία χρησιμοποιείται σε όλα τα σύγχρονα λειτουργικά συστήματα, ωστόσο, οι μέθοδοι διαφέρουν πολύ ως προς την πολυπλοκότητα, την αποτελεσματικότητα και την απόδοση: από τα καναρίνια στοίβας (stack canaries) και ASLR σε πλήρη προστασία CFI и ΠΕΠ. Σε αυτό το άρθρο, θα εξετάσουμε ποιες μεθόδους ασφαλείας χρησιμοποιούνται στις πιο δημοφιλείς διανομές Linux στην προεπιλεγμένη διαμόρφωση, καθώς και θα εξετάσουμε τις ιδιότητες των δυαδικών αρχείων που διανέμονται μέσω των συστημάτων διαχείρισης πακέτων κάθε διανομής.

CVE και ασφάλεια

Όλοι έχουμε δει άρθρα με τίτλους όπως «Οι πιο ευάλωτες εφαρμογές της χρονιάς» ή «Τα πιο ευάλωτα λειτουργικά συστήματα». Συνήθως παρέχουν στατιστικά στοιχεία σχετικά με τον συνολικό αριθμό των εγγραφών σχετικά με τρωτά σημεία όπως CVE (Κοινή ευπάθεια και εκθέσεις)που λαμβάνονται από Εθνική βάση δεδομένων ευπάθειας (NVD) από NIST και άλλες πηγές. Στη συνέχεια, αυτές οι εφαρμογές ή ΛΣ κατατάσσονται με βάση τον αριθμό των CVE. Δυστυχώς, ενώ τα CVE είναι πολύ χρήσιμα για την παρακολούθηση ζητημάτων και την ενημέρωση των προμηθευτών και των χρηστών, λένε λίγα για την πραγματική ασφάλεια του λογισμικού.

Ως παράδειγμα, λάβετε υπόψη τον συνολικό αριθμό των CVE τα τελευταία τέσσερα χρόνια για τον πυρήνα Linux και τις πέντε πιο δημοφιλείς διανομές διακομιστή, δηλαδή το Ubuntu, το Debian, το Red Hat Enterprise Linux και το OpenSUSE.

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 1

Τι μας λέει αυτό το γράφημα; Μήπως περισσότερο CVE σημαίνει ότι μια διανομή είναι πιο ευάλωτη από μια άλλη; Καμία απάντηση. Για παράδειγμα, σε αυτό το άρθρο, θα δείτε ότι το Debian εφαρμόζει ισχυρότερους μηχανισμούς ασφαλείας από, ας πούμε, το OpenSUSE ή το RedHat Linux, και ωστόσο το Debian έχει περισσότερα CVE. Ωστόσο, δεν σημαίνουν απαραίτητα εξασθενημένη ασφάλεια: ακόμη και η παρουσία ενός CVE δεν δείχνει εάν μια ευπάθεια είναι εκμεταλλεύονται. Οι βαθμολογίες σοβαρότητας παρέχουν μια ένδειξη για το πώς πιθανώς η εκμετάλλευση μιας ευπάθειας, αλλά τελικά η εκμεταλλευσιμότητα εξαρτάται σε μεγάλο βαθμό από τις προστασίες που υπάρχουν στα επηρεαζόμενα συστήματα και τους πόρους και τις δυνατότητες των εισβολέων. Επιπλέον, η απουσία αναφορών CVE δεν λέει τίποτα για άλλες μη εγγεγραμμένο ή άγνωστο τρωτά σημεία. Η διαφορά στο CVE μπορεί να οφείλεται σε άλλους παράγοντες εκτός από την ποιότητα του λογισμικού, συμπεριλαμβανομένων των πόρων που διατίθενται για τη δοκιμή ή του μεγέθους της βάσης χρηστών. Στο παράδειγμά μας, ο μεγαλύτερος αριθμός CVE του Debian μπορεί απλώς να υποδεικνύει ότι το Debian αποστέλλει περισσότερα πακέτα λογισμικού.

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

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 2

εργασίες

Σε αυτό το άρθρο σκοπεύουμε να απαντήσουμε στις ακόλουθες ερωτήσεις:

  • Ποια είναι η ασφάλεια των διαφορετικών διανομών Linux; Ποιοι μηχανισμοί προστασίας υπάρχουν στον πυρήνα και τις εφαρμογές χώρου χρήστη;
  • Πώς έχει αλλάξει η υιοθέτηση μηχανισμών προστασίας για διαφορετικές διανομές με την πάροδο του χρόνου;
  • Ποιες είναι οι μέσες εξαρτήσεις πακέτου και βιβλιοθήκης για κάθε διανομή;
  • Ποιες προστασίες εφαρμόζονται για κάθε δυαδικό;

Επιλογή διανομών

Αποδεικνύεται ότι είναι δύσκολο να βρεθούν ακριβή στατιστικά στοιχεία για τις εγκαταστάσεις διανομής, καθώς στις περισσότερες περιπτώσεις ο αριθμός των λήψεων δεν υποδεικνύει τον αριθμό των πραγματικών εγκαταστάσεων. Ωστόσο, οι παραλλαγές Unix αποτελούν την πλειοψηφία των συστημάτων διακομιστών (σε διακομιστές ιστού 69,2%, κατά στατιστικά στοιχεία W3techs και άλλες πηγές), και το μερίδιό τους αυξάνεται συνεχώς. Έτσι, για την έρευνά μας εστιάσαμε στις διανομές που είναι διαθέσιμες εκτός συσκευασίας στην πλατφόρμα Google Cloud. Συγκεκριμένα, επιλέξαμε το ακόλουθο ΛΣ:

Διανομή/έκδοση
Ο πυρήνας
Bild

OpenSUSE 12.4
4.12.14-95.3-προεπιλογή
#1 SMP Τετ. 5 Δεκεμβρίου 06:00:48 UTC 2018 (63a8d29)

Debian 9 (stretch)
4.9.0-8-πμ64
#1 SMP Debian 4.9.130-2 (2018-10-27)

6.10 CentOS
2.6.32-754.10.1.el6.x86_64
#1 SMP Τρίτη 15 Ιανουαρίου 17:07:28 UTC 2019

7 CentOS
3.10.0-957.5.1.el7.x86_64
#1 SMP Παρ 1 Φεβ 14:54:57 UTC 2019

Red Hat Enterprise Linux Server 6.10 (Σαντιάγο)
2.6.32-754.9.1.el6.x86_64
#1 SMP Τετ 21 Νοε 15:08:21 EST 2018

Red Hat Enterprise Linux Server 7.6 (Maipo)
3.10.0-957.1.3.el7.x86_64
#1 SMP Πέμ. 15 Νοεμβρίου 17:36:42 UTC 2018

Ubuntu 14.04 (TrustyTahr)
4.4.0–140-γενική

#166~14.04.1-Ubuntu SMP Σαβ 17 Νοεμβρίου 01:52:43 UTC 20…

Ubuntu 16.04 (Xenial Xerus)
4.15.0–1026-gcp
#27~16.04.1-Ubuntu SMP Παρ 7 Δεκ 09:59:47 UTC 2018

Ubuntu 18.04 (Bionic Beaver)
4.15.0–1026-gcp
#27-Ubuntu SMP Πέμ. 6 Δεκεμβρίου 18:27:01 UTC 2018

Πίνακας 1

Ανάλυση

Ας μελετήσουμε την προεπιλεγμένη διαμόρφωση του πυρήνα, καθώς και τις ιδιότητες των πακέτων που διατίθενται μέσω του διαχειριστή πακέτων κάθε διανομής out of the box. Επομένως, εξετάζουμε μόνο πακέτα από τους προεπιλεγμένους καθρέφτες κάθε διανομής, αγνοώντας πακέτα από ασταθείς αποθήκες (όπως οι καθρέφτες «δοκιμών» του Debian) και πακέτα τρίτων (όπως πακέτα Nvidia από τυπικούς καθρέφτες). Επιπλέον, δεν λαμβάνουμε υπόψη προσαρμοσμένες μεταγλωττίσεις πυρήνα ή διαμορφώσεις σκληρυμένες για ασφάλεια.

Ανάλυση διαμόρφωσης πυρήνα

Εφαρμόσαμε ένα σενάριο ανάλυσης με βάση δωρεάν έλεγχος kconfig. Ας δούμε τις εκτός συσκευασίας παραμέτρους προστασίας των ονομαζόμενων διανομών και ας τις συγκρίνουμε με τη λίστα από Βασικό Έργο Αυτοάμυνας (ΚΣΠΠ). Για κάθε επιλογή διαμόρφωσης, ο Πίνακας 2 περιγράφει την επιθυμητή ρύθμιση: το πλαίσιο ελέγχου αφορά διανομές που συμμορφώνονται με τις οδηγίες του KSSP (δείτε παρακάτω για επεξήγηση των όρων). εδώ; Σε μελλοντικά άρθρα θα εξηγήσουμε πόσες από αυτές τις μεθόδους ασφαλείας δημιουργήθηκαν και πώς να χακάρετε ένα σύστημα εν απουσία τους).

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό

Γενικά, οι νεότεροι πυρήνες έχουν αυστηρότερες ρυθμίσεις εκτός κουτιού. Για παράδειγμα, το CentOS 6.10 και το RHEL 6.10 στον πυρήνα 2.6.32 δεν έχουν τα περισσότερα από τα κρίσιμα χαρακτηριστικά που εφαρμόζονται σε νεότερους πυρήνες, όπως π.χ. SMAP, αυστηρά δικαιώματα RWX, τυχαιοποίηση διευθύνσεων ή προστασία copy2usr. Θα πρέπει να σημειωθεί ότι πολλές από τις επιλογές διαμόρφωσης στον πίνακα δεν είναι διαθέσιμες σε παλαιότερες εκδόσεις του πυρήνα και δεν ισχύουν στην πραγματικότητα - αυτό εξακολουθεί να υποδεικνύεται στον πίνακα ως έλλειψη κατάλληλης προστασίας. Ομοίως, εάν μια επιλογή διαμόρφωσης δεν υπάρχει σε μια δεδομένη έκδοση και η ασφάλεια απαιτεί την απενεργοποίηση αυτής της επιλογής, αυτή θεωρείται λογική διαμόρφωση.

Ένα άλλο σημείο που πρέπει να λάβετε υπόψη κατά την ερμηνεία των αποτελεσμάτων: ορισμένες διαμορφώσεις πυρήνα που αυξάνουν την επιφάνεια επίθεσης μπορούν επίσης να χρησιμοποιηθούν για ασφάλεια. Τέτοια παραδείγματα περιλαμβάνουν uprobes και kprobes, μονάδες πυρήνα και BPF/eBPF. Η σύστασή μας είναι να χρησιμοποιήσετε τους παραπάνω μηχανισμούς για την παροχή πραγματικής προστασίας, καθώς η χρήση τους δεν είναι ασήμαντη και η εκμετάλλευσή τους προϋποθέτει ότι κακόβουλοι παράγοντες έχουν ήδη δημιουργήσει μια βάση στο σύστημα. Αλλά εάν αυτές οι επιλογές είναι ενεργοποιημένες, ο διαχειριστής του συστήματος πρέπει να παρακολουθεί ενεργά για κατάχρηση.

Εξετάζοντας περαιτέρω τις εγγραφές στον Πίνακα 2, βλέπουμε ότι οι σύγχρονοι πυρήνες παρέχουν πολλές επιλογές για προστασία από την εκμετάλλευση τρωτών σημείων, όπως η διαρροή πληροφοριών και οι υπερχειλίσεις στοίβας/σωρού. Ωστόσο, παρατηρούμε ότι ακόμη και οι πιο πρόσφατες δημοφιλείς διανομές δεν έχουν ακόμη εφαρμόσει πιο περίπλοκη προστασία (για παράδειγμα, με patches grsecurity) ή σύγχρονη προστασία από επιθέσεις επαναχρησιμοποίησης κώδικα (π.χ. συνδυασμός τυχαιοποίησης με σχήματα όπως το R^X για τον κώδικα). Για να γίνουν τα πράγματα χειρότερα, ακόμη και αυτές οι πιο προηγμένες άμυνες δεν προστατεύουν από όλο το φάσμα των επιθέσεων. Ως εκ τούτου, είναι σημαντικό για τους διαχειριστές συστήματος να συμπληρώνουν τις έξυπνες διαμορφώσεις με λύσεις που προσφέρουν εντοπισμό και πρόληψη εκμετάλλευσης χρόνου εκτέλεσης.

Ανάλυση Εφαρμογών

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

Διανομές

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

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 3

Ίσως παρατηρήσετε ότι όσο πιο μοντέρνα είναι η διανομή, τόσο περισσότερα πακέτα και δυαδικά περιέχει, κάτι που είναι λογικό. Ωστόσο, τα πακέτα Ubuntu και Debian περιλαμβάνουν πολύ περισσότερα δυαδικά αρχεία (τόσο εκτελέσιμα, όσο και δυναμικές μονάδες και βιβλιοθήκες) από τα CentOS, SUSE και RHEL, τα οποία ενδεχομένως επηρεάζουν την επιφάνεια επίθεσης του Ubuntu και του Debian (θα πρέπει να σημειωθεί ότι οι αριθμοί αντικατοπτρίζουν όλα τα δυαδικά αρχεία όλων των εκδόσεων πακέτο, δηλαδή ορισμένα αρχεία αναλύονται πολλές φορές). Αυτό είναι ιδιαίτερα σημαντικό όταν εξετάζουμε τις εξαρτήσεις μεταξύ των πακέτων. Έτσι, μια ευπάθεια σε ένα δυαδικό πακέτο μπορεί να επηρεάσει πολλά μέρη του οικοσυστήματος, όπως μια ευάλωτη βιβλιοθήκη μπορεί να επηρεάσει όλα τα δυαδικά αρχεία που την εισάγουν. Ως σημείο εκκίνησης, ας δούμε την κατανομή του αριθμού των εξαρτήσεων μεταξύ των πακέτων σε διαφορετικά λειτουργικά συστήματα:

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 4

Σχεδόν σε όλες τις διανομές, το 60% των πακέτων έχει τουλάχιστον 10 εξαρτήσεις. Επιπλέον, ορισμένα πακέτα έχουν σημαντικά μεγαλύτερο αριθμό εξαρτήσεων (πάνω από 100). Το ίδιο ισχύει και για τις αντίστροφες εξαρτήσεις πακέτων: όπως αναμενόταν, μερικά πακέτα χρησιμοποιούνται από πολλά άλλα πακέτα στη διανομή, επομένως τα τρωτά σημεία σε αυτά τα λίγα επιλεγμένα είναι υψηλού κινδύνου. Για παράδειγμα, ο παρακάτω πίνακας παραθέτει τα 20 πακέτα με τον μέγιστο αριθμό αντίστροφων εξαρτήσεων σε SLES, Centos 7, Debian 9 και Ubuntu 18.04 (κάθε κελί υποδεικνύει το πακέτο και τον αριθμό των αντίστροφων εξαρτήσεων).

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Πίνακας 3

Ενδιαφέρον γεγονός. Παρόλο που όλα τα λειτουργικά συστήματα που αναλύθηκαν έχουν κατασκευαστεί για την αρχιτεκτονική x86_64 και τα περισσότερα πακέτα έχουν την αρχιτεκτονική που ορίζεται ως x86_64 και x86, τα πακέτα περιέχουν συχνά δυαδικά αρχεία για άλλες αρχιτεκτονικές, όπως φαίνεται στο Σχήμα 5. XNUMX.

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 5

Στην επόμενη ενότητα, θα εμβαθύνουμε στα χαρακτηριστικά των αναλυόμενων δυαδικών.

Στατιστικά στοιχεία προστασίας δυαδικών αρχείων

Ως απόλυτο ελάχιστο, πρέπει να μάθετε ένα βασικό σύνολο επιλογών προστασίας για τα διαθέσιμα δυαδικά αρχεία. Αρκετές διανομές Linux συνοδεύονται από σενάρια που εκτελούν τέτοιους ελέγχους. Για παράδειγμα, το Debian/Ubuntu έχει ένα τέτοιο σενάριο. Ακολουθεί ένα παράδειγμα της δουλειάς του:

$ hardening-check $(which docker)
/usr/bin/docker:
 Position Independent Executable: yes
 Stack protected: yes
 Fortify Source functions: no, only unprotected functions found!
 Read-only relocations: yes
 Immediate binding: yes

Το σενάριο ελέγχει πέντε λειτουργίες προστασίας:

  • Position Independent Executable (PIE): Υποδεικνύει εάν ένα τμήμα κειμένου ενός προγράμματος μπορεί να μεταφερθεί στη μνήμη για να επιτευχθεί τυχαιοποίηση εάν το ASLR είναι ενεργοποιημένο στον πυρήνα.
  • Stack Protected: Εάν τα καναρίνια στοίβας είναι ενεργοποιημένα για προστασία από επιθέσεις σύγκρουσης στοίβας.
  • Fortify Source: εάν οι μη ασφαλείς συναρτήσεις (όπως το strcpy) αντικαθίστανται από τις ασφαλέστερες αντίστοιχές τους και οι κλήσεις που έχουν ελεγχθεί σε χρόνο εκτέλεσης αντικαθίστανται από τις μη επιλεγμένες αντίστοιχες (όπως το memcpy αντί για __memcpy_chk).
  • Μετεγκαταστάσεις μόνο για ανάγνωση (RELRO): Εάν οι εγγραφές στον πίνακα μετεγκατάστασης επισημαίνονται μόνο για ανάγνωση εάν ενεργοποιούνται πριν από την έναρξη της εκτέλεσης.
  • Άμεση σύνδεση: Εάν ο σύνδεσμος χρόνου εκτέλεσης επιτρέπει όλες τις κινήσεις πριν ξεκινήσει η εκτέλεση του προγράμματος (αυτό ισοδυναμεί με ένα πλήρες RELRO).

Είναι επαρκείς οι παραπάνω μηχανισμοί; Δυστυχώς όχι. Υπάρχουν γνωστοί τρόποι για να παρακάμψετε όλες τις παραπάνω άμυνες, αλλά όσο πιο σκληρή είναι η άμυνα, τόσο πιο ψηλά είναι ο πήχης για τον επιθετικό. Για παράδειγμα, Μέθοδοι παράκαμψης RELRO πιο δύσκολο να εφαρμοστεί εάν ισχύουν PIE και άμεση δέσμευση. Ομοίως, η πλήρης ASLR απαιτεί πρόσθετη εργασία για τη δημιουργία ενός λειτουργικού exploit. Ωστόσο, οι εξελιγμένοι εισβολείς είναι ήδη έτοιμοι να ανταποκριθούν σε τέτοιες προστασίες: η απουσία τους ουσιαστικά θα επιταχύνει το hack. Ως εκ τούτου, είναι σημαντικό τα μέτρα αυτά να θεωρούνται απαραίτητα ελάχιστο.

Θέλαμε να μελετήσουμε πόσα δυαδικά αρχεία στις εν λόγω διανομές προστατεύονται με αυτές και τρεις άλλες μεθόδους:

  • Μη εκτελέσιμο bit (NX) αποτρέπει την εκτέλεση σε οποιαδήποτε περιοχή που δεν θα έπρεπε να είναι εκτελέσιμη, όπως ο σωρός στοίβας κ.λπ.
  • RPATH/RUNPATH υποδηλώνει τη διαδρομή εκτέλεσης που χρησιμοποιείται από τον δυναμικό φορτωτή για την εύρεση αντίστοιχων βιβλιοθηκών. Το πρώτο είναι υποχρεωτική για οποιοδήποτε σύγχρονο σύστημα: η απουσία του επιτρέπει στους εισβολείς να γράφουν αυθαίρετα το ωφέλιμο φορτίο στη μνήμη και να το εκτελούν ως έχει. Για το δεύτερο, οι εσφαλμένες διαμορφώσεις διαδρομής εκτέλεσης βοηθούν στην εισαγωγή αναξιόπιστου κώδικα που μπορεί να οδηγήσει σε μια σειρά προβλημάτων (π. κλιμάκωση προνομίωνΚαι άλλα προβλήματα).
  • Η προστασία από σύγκρουση στοίβας παρέχει προστασία από επιθέσεις που προκαλούν την επικάλυψη της στοίβας με άλλες περιοχές της μνήμης (όπως το σωρό). Δεδομένων των πρόσφατων εκμεταλλεύσεων κατάχρησης ευπάθειες συστημικής σύγκρουσης σωρού, θεωρήσαμε σκόπιμο να συμπεριλάβουμε αυτόν τον μηχανισμό στο σύνολο δεδομένων μας.

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

  • Όπως μπορείτε να δείτε, η προστασία NX εφαρμόζεται παντού, με σπάνιες εξαιρέσεις. Συγκεκριμένα, μπορεί να σημειωθεί η ελαφρώς χαμηλότερη χρήση του σε διανομές Ubuntu και Debian σε σύγκριση με τα CentOS, RHEL και OpenSUSE.
  • Τα στοιβαγμένα καναρίνια λείπουν σε πολλά σημεία, ειδικά σε διανομές με παλαιότερους πυρήνες. Σημειώθηκε κάποια πρόοδος στις τελευταίες διανομές των Centos, RHEL, Debian και Ubuntu.
  • Με εξαίρεση το Debian και το Ubuntu 18.04, οι περισσότερες διανομές έχουν κακή υποστήριξη PIE.
  • Η προστασία από σύγκρουση στοίβας εφαρμόζεται ανεπαρκώς στο OpenSUSE, Centos 7 και RHEL 7, και σχεδόν ανύπαρκτη στα υπόλοιπα.
  • Όλες οι διανομές με σύγχρονους πυρήνες έχουν κάποια υποστήριξη RELRO, με το Ubuntu 18.04 να πρωτοπορεί και το Debian να έρχεται δεύτερο.

Όπως αναφέρθηκε ήδη, οι μετρήσεις σε αυτόν τον πίνακα είναι μέσοι όροι για όλες τις εκδόσεις του δυαδικού αρχείου. Εάν κοιτάξετε μόνο τις πιο πρόσφατες εκδόσεις αρχείων, τότε οι αριθμοί θα είναι διαφορετικοί (για παράδειγμα, δείτε παρακάτω). Πρόοδος του Debian με την υλοποίηση του PIE). Επιπλέον, οι περισσότερες διανομές συνήθως ελέγχουν την προστασία μερικών μόνο συναρτήσεων σε δυαδικό επίπεδο κατά τον υπολογισμό στατιστικών στοιχείων και η ανάλυσή μας δείχνει το πραγματικό ποσοστό των σκληρυμένων συναρτήσεων. Επομένως, εάν 5 από τα 50 χαρακτηριστικά προστατεύονται σε ένα δυαδικό, θα του δώσουμε βαθμολογία 0,1, που αντιστοιχεί στο 10% των σκληρυμένων χαρακτηριστικών.

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Πίνακας 4. Χαρακτηριστικά ασφαλείας για τα εκτελέσιμα αρχεία που φαίνονται στο Σχ. 3 (υλοποίηση σχετικών λειτουργιών ως ποσοστό του συνολικού αριθμού εκτελέσιμων αρχείων)

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Πίνακας 5. Χαρακτηριστικά ασφαλείας για τις βιβλιοθήκες που φαίνονται στο Σχ. 3 (υλοποίηση σχετικών λειτουργιών ως ποσοστό του συνολικού αριθμού βιβλιοθηκών)

Υπάρχει λοιπόν πρόοδος; Σίγουρα υπάρχει: αυτό φαίνεται από τα στατιστικά στοιχεία για μεμονωμένες διανομές (για παράδειγμα, Debian), καθώς και από τους παραπάνω πίνακες. Ως παράδειγμα στο Σχ. Το σχήμα 6 δείχνει την εφαρμογή μηχανισμών προστασίας σε τρεις διαδοχικές διανομές του Ubuntu LTS 5 (έχουμε παραλείψει τα στατιστικά στοιχεία προστασίας από σύγκρουση στοίβας). Παρατηρούμε ότι από έκδοση σε έκδοση όλο και περισσότερα αρχεία υποστηρίζουν στοίβα καναρίνια και επίσης όλο και περισσότερα δυαδικά αποστέλλονται με πλήρη προστασία RELRO.

Εκατομμύρια δυαδικά αρχεία αργότερα. Πώς το Linux έγινε πιο δυνατό
Σχήμα. 6

Δυστυχώς, ορισμένα εκτελέσιμα αρχεία σε διαφορετικές διανομές εξακολουθούν να μην διαθέτουν καμία από τις παραπάνω προστασίες. Για παράδειγμα, κοιτάζοντας το Ubuntu 18.04, μπορείτε να δείτε το δυαδικό ngetty (αντικατάσταση του getty), καθώς και τα κελύφη mksh και lksh, τον διερμηνέα picolisp, τα πακέτα nvidia-cuda-toolkit (ένα δημοφιλές πακέτο για εφαρμογές με επιτάχυνση GPU όπως πλαίσια μηχανικής μάθησης) και klibc -utils. Ομοίως, το δυαδικό mandos-client (ένα εργαλείο διαχείρισης που σας επιτρέπει να κάνετε αυτόματη επανεκκίνηση μηχανών με κρυπτογραφημένα συστήματα αρχείων) καθώς και το rsh-redone-client (επαναυλοποίηση του rsh και του rlogin) αποστέλλονται χωρίς προστασία NX, αν και έχουν δικαιώματα SUID: (. Επίσης, πολλά δυαδικά suid στερούνται βασικής προστασίας, όπως τα καναρίνια στοίβας (για παράδειγμα, το δυαδικό Xorg.wrap από το πακέτο Xorg).

Περίληψη και καταληκτικές παρατηρήσεις

Σε αυτό το άρθρο, έχουμε επισημάνει αρκετά χαρακτηριστικά ασφαλείας των σύγχρονων διανομών Linux. Η ανάλυση έδειξε ότι η τελευταία διανομή Ubuntu LTS (18.04) εφαρμόζει, κατά μέσο όρο, την ισχυρότερη προστασία επιπέδου λειτουργικού συστήματος και εφαρμογής μεταξύ διανομών με σχετικά νέους πυρήνες, όπως το Ubuntu 14.04, 12.04 και το Debian 9. Ωστόσο, οι εξεταζόμενες διανομές CentOS, RHEL και Το OpenSUSE στο σετ μας από προεπιλογή παράγει ένα πιο πυκνό σύνολο πακέτων και στις πιο πρόσφατες εκδόσεις (CentOS και RHEL) έχουν υψηλότερο ποσοστό προστασίας από σύγκρουση στοίβας σε σύγκριση με ανταγωνιστές που βασίζονται στο Debian (Debian και Ubuntu). Συγκρίνοντας τις εκδόσεις CentOS και RedHat, παρατηρούμε μεγάλες βελτιώσεις στην εφαρμογή των καναρινιών στοίβας και του RELRO από τις εκδόσεις 6 έως 7, αλλά κατά μέσο όρο το CentOS έχει υλοποιήσει περισσότερες δυνατότητες από τη RHEL. Γενικά, όλες οι διανομές θα πρέπει να δίνουν ιδιαίτερη προσοχή στην προστασία PIE, η οποία, με εξαίρεση το Debian 9 και το Ubuntu 18.04, υλοποιείται σε λιγότερο από το 10% των δυαδικών αρχείων στο σύνολο δεδομένων μας.

Τέλος, πρέπει να σημειωθεί ότι παρόλο που κάναμε την έρευνα χειροκίνητα, υπάρχουν πολλά εργαλεία ασφαλείας (π.χ. Lynis, Τίγρη, Hubble), που εκτελούν ανάλυση και βοηθούν στην αποφυγή μη ασφαλών διαμορφώσεων. Δυστυχώς, ακόμη και η ισχυρή προστασία σε λογικές διαμορφώσεις δεν εγγυάται την απουσία εκμεταλλεύσεων. Γι' αυτό πιστεύουμε ακράδαντα ότι είναι ζωτικής σημασίας να διασφαλίσουμε αξιόπιστη παρακολούθηση και πρόληψη επιθέσεων σε πραγματικό χρόνο, εστιάζοντας σε πρότυπα εκμετάλλευσης και αποτροπή τους.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο