Εκμετάλλευση μηδενικών αναφορών στον πυρήνα του Linux
Πρόσφατα ανακοινώθηκε ότι ερευνητές από την ομάδα Google Project Zero ανέπτυξαν μια μέθοδο για την αξιοποίηση των ευπαθειών στον πυρήνα του Linux που προκαλούνται από την κατάργηση αναφοράς του δείκτη NULL.
Μέχρι τώρα, τα προβλήματα πυρήνα που σχετίζονται με την αποαναφορά δεικτών NULL δεν έχουν λάβει την δέουσα προσοχή , καθώς θεωρούνταν μη ρεαλιστικό να μετατραπούν τέτοια προβλήματα σε επιθέσεις που οδηγούν σε κλιμάκωση δικαιωμάτων ή εκτέλεση του δικού τους κώδικα (απαγορεύεται η αντιστοίχιση μη προνομιούχων διεργασιών στην κάτω περιοχή του χώρου διευθύνσεων).
Κατά γενικό κανόνα, τέτοια σφάλματα οδηγούν στη δημιουργία προειδοποιήσεων oops από τον πυρήνα, μετά τις οποίες οι προβληματικές εργασίες ολοκληρώνονται και η κατάσταση αποκαθίσταται χωρίς να χρειάζεται να σταματήσει το σύστημα.
Η νέα μέθοδος επίθεσης βασίζεται στον χειρισμό καταστάσεων "oops" , οι οποίες μπορούν να οδηγήσουν σε αύξηση της τιμής του μετρητή αναφοράς (refcount), η οποία με τη σειρά της μπορεί να προκαλέσει υπερχείλιση του μετρητή και απελευθέρωση της μνήμης που σχετίζεται με την refcount.
Σε αυτήν την περίπτωση, η εκμετάλλευση περιορίζεται σε χειρισμούς τυπικούς χειρισμούς για επιθέσεις χωρίς χρήση (προκύπτει μια κατάσταση όπου ο αριθμός αναφοράς του αντικειμένου μηδενίζεται, η μνήμη ελευθερώνεται, αλλά στην πραγματικότητα υπάρχουν σύνδεσμοι εργασίας που δείχνουν προς την απελευθερωμένη μνήμη).
Προς το παρόν, όταν ο πυρήνας του Linux ενεργοποιεί μια μηδενική διακοπή αναφοράς μέσα από ένα περιβάλλον διεργασίας, δημιουργεί ένα σφάλμα oops , το οποίο διαφέρει από έναν πανικό πυρήνα. Ένας πανικός συμβαίνει όταν ο πυρήνας προσδιορίζει ότι δεν υπάρχει ασφαλής τρόπος για να συνεχιστεί η εκτέλεση και επομένως πρέπει να διακόψει κάθε εκτέλεση. Ωστόσο, ο πυρήνας δεν διακόπτει κάθε εκτέλεση κατά τη διάρκεια ενός σφάλματος oops. Αντίθετα, ο πυρήνας προσπαθεί να ανακάμψει όσο καλύτερα μπορεί και συνεχίζει την εκτέλεση.
Η αποαναφορά ενός δείκτη NULL χρησιμοποιείται εδώ ως τρόπος δημιουργίας της κατάστασης "oops" με ελεγχόμενο τρόπο. Το πρόβλημα είναι ότι χρειάζονται περίπου 232 κλήσεις κατάστασης "oops" για να επιτευχθεί υπερχείλιση επαναμέτρησης 32 bit.
Από πρακτική άποψη, χρειάζονται περίπου οκτώ ημέρες συνεχούς δημιουργίας καταστάσεων εκτός τόπου (OOP) για να εκτελεστεί μια επίθεση χρησιμοποιώντας το προτεινόμενο exploit. Εάν είναι επιτυχές, το exploit σάς επιτρέπει να εκτελέσετε τον κώδικά σας σε επίπεδο πυρήνα.
Η παραπομπή δείκτη NULL που χρησιμοποιήθηκε στο exploit διορθώθηκε τον Οκτώβριο, αλλά επειδή παρόμοια ζητήματα δεν είναι ασυνήθιστα και στο παρελθόν αντιμετωπίζονταν ως σφάλματα, όχι ως τρωτά σημεία, οι προγραμματιστές θα προσθέσουν γενική προστασία στον πυρήνα του Linux για να αποτρέψουν επιθέσεις που χειραγωγούν τη δημιουργία "oops ."
Στην περίπτωση μιας εργασίας, αυτό σημαίνει απόρριψη της υπάρχουσας στοίβας πυρήνα και μετάβαση απευθείας στο make_task_dead που καλεί do_exit. Ο πυρήνας θα δημοσιεύσει επίσης στο dmesg ένα αρχείο καταγραφής "crash" και ένα ίχνος πυρήνα που θα δείχνει σε ποια κατάσταση ήταν ο πυρήνας όταν παρουσιάστηκε το σφάλμα. Αυτό μπορεί να φαίνεται σαν μια περίεργη επιλογή όταν έχει εμφανιστεί σαφώς καταστροφή της μνήμης. Ωστόσο, ο στόχος είναι να γίνει ευκολότερος ο εντοπισμός και η καταγραφή των σφαλμάτων του πυρήνα, σύμφωνα με τη φιλοσοφία ότι ένα τρέχον σύστημα είναι πολύ πιο εύκολο να διορθωθεί από ό,τι ένα μη λειτουργικό.
Συγκεκριμένα , ο πυρήνας 6.2 περιλαμβάνει αλλαγές για τον περιορισμό του μέγιστου αριθμού "oops" . Αφού επιτευχθεί το όριο, το οποίο έχει οριστεί σε 10 oops από προεπιλογή (μπορείτε να το αλλάξετε χρησιμοποιώντας την παράμετρο oops_limit, αν θέλετε), ο πυρήνας θα ξεκινήσει μια μετάβαση σε κατάσταση "πανικού", ακολουθούμενη από επανεκκίνηση, η οποία δεν θα επιτρέψει τον αριθμό των επαναλήψεων που απαιτούνται για την επαναφορά του refcount στο μηδέν.
Προβλέπεται επίσης ότι ο περιορισμός θα μεταφερθεί σε κλάδους πυρήνα που είχαν κυκλοφορήσει προηγουμένως, αλλά υποστηρίζονται ακόμη, καθώς και σε πακέτα πυρήνα δημοφιλών διανομών.
Τέλος, αν ενδιαφέρεστε να μάθετε περισσότερα σχετικά με αυτό , μπορείτε να βρείτε τις λεπτομέρειες στον παρακάτω σύνδεσμο.