Η Google επιδεικνύει την εκμετάλλευση των τρωτών σημείων του Spectre εκτελώντας JavaScript στο πρόγραμμα περιήγησης

Η Google έχει δημοσιεύσει πολλά πρωτότυπα εκμετάλλευσης που δείχνουν τη δυνατότητα εκμετάλλευσης ευπαθειών της κλάσης Spectre κατά την εκτέλεση κώδικα JavaScript σε ένα πρόγραμμα περιήγησης, παρακάμπτοντας μεθόδους προστασίας που είχαν προστεθεί προηγουμένως. Οι εκμεταλλεύσεις μπορούν να χρησιμοποιηθούν για να αποκτήσουν πρόσβαση στη μνήμη μιας διαδικασίας που επεξεργάζεται περιεχόμενο ιστού στην τρέχουσα καρτέλα. Για να δοκιμαστεί η λειτουργία του exploit, ξεκίνησε ο ιστότοπος leaky.page και ο κώδικας που περιγράφει τη λογική της εργασίας δημοσιεύτηκε στο GitHub.

Το προτεινόμενο πρωτότυπο έχει σχεδιαστεί για να επιτίθεται σε συστήματα με επεξεργαστές Intel Core i7-6500U σε περιβάλλον Linux και Chrome 88. Απαιτούνται αλλαγές για την εφαρμογή του exploit σε άλλα περιβάλλοντα. Η μέθοδος εκμετάλλευσης δεν είναι συγκεκριμένη για τους επεξεργαστές Intel - μετά από κατάλληλη προσαρμογή, το exploit επιβεβαιώθηκε ότι λειτουργεί σε συστήματα με CPU άλλων κατασκευαστών, συμπεριλαμβανομένου του Apple M1 που βασίζεται στην αρχιτεκτονική ARM. Μετά από μικρές προσαρμογές, το exploit λειτουργεί επίσης σε άλλα λειτουργικά συστήματα και άλλα προγράμματα περιήγησης που βασίζονται στη μηχανή Chromium.

Σε ένα περιβάλλον που βασίζεται σε τυπικούς επεξεργαστές Chrome 88 και Intel Skylake, διέρρευσαν δεδομένα από τη διαδικασία που είναι υπεύθυνη για την επεξεργασία περιεχομένου ιστού στην τρέχουσα καρτέλα Chrome (διαδικασία απόδοσης), με ρυθμό 1 kilobyte ανά δευτερόλεπτο. Επιπλέον, αναπτύχθηκαν εναλλακτικά πρωτότυπα, για παράδειγμα, ένα exploit που επιτρέπει, με το κόστος της μείωσης της σταθερότητας, την αύξηση του ρυθμού διαρροής στα 8 kB / s κατά τη χρήση του χρονοδιακόπτη performance.now() με ακρίβεια 5 μικροδευτερόλεπτα (0.005 χιλιοστά του δευτερολέπτου) . Ετοιμάστηκε επίσης μια παραλλαγή, που λειτουργούσε με ακρίβεια χρονοδιακόπτη ενός χιλιοστού του δευτερολέπτου, η οποία θα μπορούσε να χρησιμοποιηθεί για την οργάνωση της πρόσβασης στη μνήμη μιας άλλης διαδικασίας με ταχύτητα περίπου 60 byte ανά δευτερόλεπτο.

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

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

Η προτεινόμενη τεχνική εκμετάλλευσης εξαλείφει τα χρονόμετρα υψηλής ακρίβειας που είναι διαθέσιμα μέσω του API performance.now() και χωρίς υποστήριξη για τον τύπο SharedArrayBuffer, ο οποίος επιτρέπει τη δημιουργία πινάκων σε κοινόχρηστη μνήμη. Το exploit περιλαμβάνει το gadget Spectre, το οποίο προκαλεί ελεγχόμενη εκτέλεση κερδοσκοπικού κώδικα και έναν αναλυτή διαρροής πλευρικού καναλιού, ο οποίος καθορίζει τα δεδομένα που λαμβάνονται κατά τη διάρκεια της κερδοσκοπικής εκτέλεσης που εισήχθη στην κρυφή μνήμη.

Το gadget υλοποιείται χρησιμοποιώντας έναν πίνακα JavaScript, στον οποίο γίνεται προσπάθεια πρόσβασης σε μια περιοχή εκτός των ορίων του buffer, επηρεάζοντας την κατάσταση του μπλοκ πρόβλεψης κλάδου λόγω του ελέγχου μεγέθους buffer που προστέθηκε από τον μεταγλωττιστή (ο επεξεργαστής κοιτάζει μπροστά , εκτελεί κερδοσκοπικά την πρόσβαση, αλλά επαναφέρει την κατάσταση μετά τον έλεγχο). Για την ανάλυση των περιεχομένων της κρυφής μνήμης υπό συνθήκες ανεπαρκούς ακρίβειας χρονοδιακόπτη, προτείνεται μια μέθοδος που παραπλανά τη στρατηγική εξώθησης της κρυφής μνήμης Tree-PLRU που χρησιμοποιείται στους επεξεργαστές και επιτρέπει, αυξάνοντας τον αριθμό των κύκλων, να αυξήσει σημαντικά τη διαφορά χρόνου κατά την επιστροφή ενός τιμή από την κρυφή μνήμη και όταν δεν υπάρχει τιμή στη μνήμη cache.

Σημειώνεται ότι η Google δημοσίευσε ένα πρωτότυπο exploit προκειμένου να δείξει τον ρεαλισμό των επιθέσεων που χρησιμοποιούν τρωτά σημεία της κλάσης Spectre και να ενθαρρύνει τους προγραμματιστές ιστού να χρησιμοποιούν τεχνικές που ελαχιστοποιούν τους κινδύνους από τέτοιες επιθέσεις. Ταυτόχρονα, η Google πιστεύει ότι χωρίς σημαντική αναθεώρηση του προτεινόμενου πρωτοτύπου, είναι αδύνατο να δημιουργηθούν καθολικά κατορθώματα που είναι έτοιμα όχι μόνο για επίδειξη, αλλά και για ευρεία χρήση.

Για να μειωθεί ο κίνδυνος, οι ιδιοκτήτες ιστότοπων ενθαρρύνονται να χρησιμοποιούν την πρόσφατα εφαρμοσμένη Πολιτική ανοίγματος πολλαπλής προέλευσης (COOP), Πολιτική ενσωμάτωσης μεταξύ προέλευσης (COEP), Πολιτική πόρων μεταξύ προέλευσης (CORP), αίτημα λήψης μεταδεδομένων, Επιλογές X-Frame, X -Content-Type-Options και SameSite Cookies. Αυτοί οι μηχανισμοί δεν προστατεύουν άμεσα από επιθέσεις, αλλά επιτρέπουν την απομόνωση δεδομένων τοποθεσίας από διαρροή σε διαδικασίες στις οποίες μπορεί να εκτελεστεί ο κώδικας JavaScript του εισβολέα (η διαρροή προκύπτει από τη μνήμη της τρέχουσας διαδικασίας, στην οποία, εκτός από τον κώδικα του εισβολέα, δεδομένα από άλλη τοποθεσία που άνοιξε στην ίδια καρτέλα). Η κύρια ιδέα είναι να διαχωριστεί σε διαφορετικές διαδικασίες η εκτέλεση του κώδικα τοποθεσίας από κώδικα τρίτων που λαμβάνεται από αναξιόπιστες πηγές, για παράδειγμα, που περιλαμβάνεται μέσω ενός iframe.



Πηγή: opennet.ru

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