Το Checkpoint πρότεινε την τεχνική προστασίας Safe-Linking, καθιστώντας πιο δύσκολη την εκμετάλλευση των τρωτών σημείων

Εταιρεία σημείων ελέγχου παρουσιάζονται Μηχανισμός προστασίας Safe-Linking, ο οποίος καθιστά δύσκολη τη δημιουργία εκμεταλλεύσεων που χειρίζονται τον ορισμό ή την τροποποίηση δεικτών σε buffer που εκχωρούνται κατά την εκτέλεση μιας κλήσης malloc. Η ασφαλής σύνδεση δεν αποκλείει εντελώς τη δυνατότητα εκμετάλλευσης τρωτών σημείων, αλλά με ελάχιστη επιβάρυνση περιπλέκει σημαντικά τη δημιουργία ορισμένων κατηγοριών εκμεταλλεύσεων, καθώς εκτός από την εκμεταλλεύσιμη υπερχείλιση buffer, είναι απαραίτητο να βρεθεί μια άλλη ευπάθεια που προκαλεί διαρροή πληροφοριών σχετικά με η τοποθέτηση του σωρού στη μνήμη.

Οι ενημερώσεις κώδικα που εφαρμόζουν την Ασφαλή Σύνδεση έχουν προετοιμαστεί για τα Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) και Google TCMalloc, και προτείνονται επίσης για αναβάθμιση προστασίας στο Chromium (στο
Από το 2012, το Chromium έχει ήδη ενσωματώσει την τεχνική προστασίας MaskPtr με στόχο την επίλυση του ίδιου προβλήματος, αλλά η λύση από το Checkpoint επιδεικνύει υψηλότερη απόδοση).
Τα προτεινόμενα patches έχουν ήδη εγκριθεί για παράδοση στην κυκλοφορία του Αυγούστου Glibc 3.32 και η Ασφαλής Σύνδεση θα είναι ενεργοποιημένη από προεπιλογή. Το uClibc-NG υποστηρίζει ασφαλή σύνδεση εισήχθη περιλαμβάνεται στην έκδοση 1.0.33 και είναι ενεργοποιημένη από προεπιλογή. Αλλαγές στα gperftools (παλιό tcmalloc) δεκτός, αλλά θα προσφέρεται ως επιλογή σε μελλοντική κυκλοφορία.

Προγραμματιστές TCMalloc (νέο tcmalloc) αρνήθηκε να δεχτεί αλλαγή, αναφέροντας σοβαρή υποβάθμιση της απόδοσης και την ανάγκη προσθήκης εκτεταμένων δοκιμών για να ελέγχεται τακτικά ότι όλα λειτουργούν όπως αναμένεται. Δοκιμές από μηχανικούς Checkpoint έδειξε ότι η μέθοδος Safe-Linking δεν οδηγεί σε πρόσθετη κατανάλωση μνήμης και η απόδοση κατά την εκτέλεση λειτουργιών σωρού μειώνεται κατά μέσο όρο μόνο κατά 0.02% και στη χειρότερη περίπτωση κατά 1.5% (για σύγκριση, τα γενικά έξοδα σε η μέθοδος που χρησιμοποιείται στο Chromium εκτιμάται ως "λιγότερο από 2%"). Συμπερίληψη
Η ασφαλής σύνδεση έχει ως αποτέλεσμα 2-3 επιπλέον εντολές συναρμολόγησης να εκτελούνται κάθε φορά που καλείται η free() και 3-4 εντολές κάθε φορά που καλείται η malloc(). Δεν απαιτείται η εκτέλεση των σταδίων προετοιμασίας και δημιουργίας τυχαίας τιμής.

Το Checkpoint πρότεινε την τεχνική προστασίας Safe-Linking, καθιστώντας πιο δύσκολη την εκμετάλλευση των τρωτών σημείων

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

+#define PROTECT_PTR(pos, ptr) \
+ ((__τύπος (ptr)) ((((μέγεθος_t) pos) >> 12) ^ ((μέγεθος_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...

Η ουσία της μεθόδου είναι η χρήση τυχαίων δεδομένων από τον μηχανισμό τυχαιοποίησης διευθύνσεων ASLR (mmap_base) για την προστασία λιστών που συνδέονται μεμονωμένα, όπως το Fast-Bins και το TCache. Προτού εφαρμοστεί η τιμή σε έναν δείκτη στο επόμενο στοιχείο της λίστας, εκτελεί μια μετατροπή μάσκας και ελέγχει για στοίχιση σελίδας. Ο δείκτης αντικαθίσταται από το αποτέλεσμα της λειτουργίας "(L >> PAGE_SHIFT) XOR (P)", όπου P είναι η τιμή του δείκτη και L είναι η θέση μνήμης όπου είναι αποθηκευμένος ο δείκτης.

Το Checkpoint πρότεινε την τεχνική προστασίας Safe-Linking, καθιστώντας πιο δύσκολη την εκμετάλλευση των τρωτών σημείων

Όταν χρησιμοποιείται στο σύστημα ASLR (Address Space Layout Randomization) μέρος των bit L με τη διεύθυνση βάσης σωρού περιέχει τυχαίες τιμές που χρησιμοποιούνται ως κλειδί για την κωδικοποίηση P (εξάγονται από μια λειτουργία μετατόπισης 12 bit για σελίδες 4096 byte). Αυτός ο χειρισμός μειώνει τον κίνδυνο παραβίασης του δείκτη σε ένα exploit, καθώς ο δείκτης δεν αποθηκεύεται στην αρχική του μορφή και η αντικατάστασή του απαιτεί γνώση της κατανομής σωρού. Επιπλέον, ο κώδικας ενημέρωσης κώδικα περιέχει επίσης έναν πρόσθετο έλεγχο για ευθυγράμμιση μπλοκ, ο οποίος δεν επιτρέπει σε έναν εισβολέα να αντικαταστήσει έναν δείκτη με μια μη ευθυγραμμισμένη τιμή και απαιτεί γνώση του αριθμού των bit που είναι ευθυγραμμισμένα, κάτι που σε συστήματα 64-bit επιτρέπει επιπλέον τον αποκλεισμό 15 από τις 16 απόπειρες επίθεσης που δεν λαμβάνουν υπόψη την ευθυγράμμιση.

Η μέθοδος είναι αποτελεσματική για την προστασία από επιθέσεις που χρησιμοποιούν μερική επανεγγραφή δείκτη (αλλαγή χαμηλών byte), πλήρη επανεγγραφή δείκτη (ανακατεύθυνση στον κώδικα του εισβολέα) και αλλαγή της θέσης της λίστας σε μη ευθυγραμμισμένη διεύθυνση. Ως παράδειγμα, φαίνεται ότι η χρήση του Safe-Linking στο malloc θα επέτρεπε τον αποκλεισμό της εκμετάλλευσης πρόσφατα αναγνωρισθείς από τους ίδιους ερευνητές ευπάθειας CVE-2020-6007 στο έξυπνο φως Philips Hue Bridge, που προκαλείται από υπερχείλιση buffer και σας επιτρέπει να αποκτήσετε τον έλεγχο της συσκευής.

Πηγή: opennet.ru

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