Mayhem - επίθεση καταστροφής bit μνήμης για παράκαμψη ελέγχου ταυτότητας sudo και OpenSSH

Ερευνητές από το Worcester Polytechnic Institute (ΗΠΑ) εισήγαγαν έναν νέο τύπο επίθεσης Mayhem που χρησιμοποιεί την τεχνική παραμόρφωσης bit μνήμης δυναμικής τυχαίας πρόσβασης Rowhammer για να αλλάξει τις τιμές των μεταβλητών στοίβας που χρησιμοποιούνται ως σημαίες στο πρόγραμμα για να αποφασίσουν εάν ο έλεγχος ταυτότητας και οι έλεγχοι ασφαλείας έχουν πέρασε. Επιδεικνύονται πρακτικά παραδείγματα της επίθεσης για την παράκαμψη του ελέγχου ταυτότητας σε SUDO, OpenSSH και MySQL, καθώς και για αλλαγή του αποτελέσματος των ελέγχων που σχετίζονται με την ασφάλεια στη βιβλιοθήκη OpenSSL.

Η επίθεση μπορεί να εφαρμοστεί σε εφαρμογές που χρησιμοποιούν ελέγχους για να συγκρίνουν τιμές που διαφέρουν από το μηδέν. Παράδειγμα ευάλωτου κώδικα: int auth = 0; ... // κωδικός επαλήθευσης που αλλάζει την τιμή auth σε περίπτωση επιτυχούς ελέγχου ταυτότητας εάν(auth != 0) επιστρέψει AUTH_SUCCESS; αλλιώς επιστροφή AUTH_FAILURE.

Στο πλαίσιο αυτού του παραδείγματος, για μια επιτυχημένη επίθεση αρκεί να καταστραφεί οποιοδήποτε bit στη μνήμη που σχετίζεται με τη μεταβλητή auth 32-bit στη στοίβα. Εάν κάποιο bit στη μεταβλητή είναι κατεστραμμένο, η τιμή δεν θα είναι πλέον μηδέν και ο τελεστής υπό όρους θα καθορίσει την επιτυχή ολοκλήρωση του ελέγχου ταυτότητας. Τέτοια μοτίβα επικύρωσης είναι αρκετά κοινά σε εφαρμογές και βρίσκονται, για παράδειγμα, στα SUDO, OpenSSH, MySQL και OpenSSL.

Mayhem - επίθεση παραβίασης bit μνήμης για παράκαμψη ελέγχου ταυτότητας sudo και OpenSSH

Η επίθεση μπορεί επίσης να εφαρμοστεί σε συγκρίσεις της μορφής "if(auth == 1)", αλλά σε αυτήν την περίπτωση η υλοποίησή της γίνεται πιο περίπλοκη, καθώς είναι απαραίτητο να παραμορφωθεί όχι οποιοδήποτε bit του 32, αλλά το τελευταίο bit. Η μέθοδος μπορεί επίσης να χρησιμοποιηθεί για να επηρεάσει τις τιμές των μεταβλητών στους καταχωρητές επεξεργαστή, καθώς τα περιεχόμενα των καταχωρητών μπορούν προσωρινά να ξεπλυθούν στη στοίβα όταν ενεργοποιείται ένας διακόπτης περιβάλλοντος, μια κλήση συνάρτησης ή ένας χειριστής σήματος. Κατά τη διάρκεια του χρονικού διαστήματος που οι τιμές καταχωρητή βρίσκονται στη μνήμη, μπορούν να εισαχθούν παραμορφώσεις σε αυτήν τη μνήμη και η αλλαγμένη τιμή θα αποκατασταθεί στον καταχωρητή.

Mayhem - επίθεση παραβίασης bit μνήμης για παράκαμψη ελέγχου ταυτότητας sudo και OpenSSH

Για να παραμορφωθούν τα bit, χρησιμοποιείται μία από τις τροποποιήσεις της επίθεσης της κλάσης RowHammer. Δεδομένου ότι η μνήμη DRAM είναι μια δισδιάστατη συστοιχία κυψελών, η καθεμία αποτελούμενη από έναν πυκνωτή και ένα τρανζίστορ, η εκτέλεση συνεχών αναγνώσεων της ίδιας περιοχής μνήμης έχει ως αποτέλεσμα διακυμάνσεις τάσης και ανωμαλίες που προκαλούν μικρή απώλεια φορτίου σε γειτονικές κυψέλες. Εάν η ένταση ανάγνωσης είναι υψηλή, τότε το γειτονικό κελί μπορεί να χάσει αρκετά μεγάλο ποσό φόρτισης και ο επόμενος κύκλος αναγέννησης δεν θα έχει χρόνο να επαναφέρει την αρχική του κατάσταση, γεγονός που θα οδηγήσει σε αλλαγή της τιμής των δεδομένων που είναι αποθηκευμένα στο κελί . Για την προστασία από το RowHammer, οι κατασκευαστές τσιπ έχουν προσθέσει έναν μηχανισμό TRR (Target Row Refresh), ο οποίος εμποδίζει την καταστροφή των κυττάρων σε ειδικές περιπτώσεις, αλλά δεν προστατεύει από όλες τις πιθανές παραλλαγές επιθέσεων.

Για την προστασία από την επίθεση Mayhem, συνιστάται να χρησιμοποιείτε σε συγκρίσεις όχι μια αξιολόγηση διαφορών από το μηδέν ή μια σύμπτωση με ένα, αλλά έναν έλεγχο αντιστοίχισης χρησιμοποιώντας μια τυχαία τιμή σπόρου με μη μηδενικές οκτάδες. Σε αυτήν την περίπτωση, για να ορίσετε την επιθυμητή τιμή της μεταβλητής, είναι απαραίτητο να παραμορφωθεί με ακρίβεια ένας σημαντικός αριθμός bit, κάτι που δεν είναι ρεαλιστικό, σε αντίθεση με την παραμόρφωση ενός bit. Παράδειγμα κώδικα που δεν μπορεί να επιτεθεί: int auth = 0xbe406d1a; ... // κωδικός επαλήθευσης που ορίζει την τιμή auth σε 0x23ab8701 σε περίπτωση επιτυχούς ελέγχου ταυτότητας if(auth == 0x23ab8701) επιστρέψει AUTH_SUCCESS; αλλιώς επιστροφή AUTH_FAILURE.

Η καθορισμένη μέθοδος προστασίας έχει ήδη χρησιμοποιηθεί από τους προγραμματιστές sudo και συμπεριλήφθηκε στην έκδοση 1.9.15 ως επιδιόρθωση για την ευπάθεια CVE-2023-42465. Σκοπεύουν να δημοσιεύσουν ένα πρωτότυπο του κώδικα για την πραγματοποίηση της επίθεσης αφού έχουν γίνει διορθώσεις στα κύρια ευάλωτα έργα.

Πηγή: opennet.ru

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