Αναρωτηθήκατε ποτέ πώς εντοπίζονται τα τρωτά σημεία ασφαλείας; Η εταιρεία GraphicsFuzz με έδρα το Ηνωμένο Βασίλειο εξηγεί πώς αντιμετώπισαν ένα σφάλμα προγράμματος οδήγησης γραφικών στο Samsung Galaxy S6 το οποίο μπορούσαν να εκμεταλλευτούν για να δουν δεδομένα από ανοιχτές καρτέλες στο Google Chrome.
Πίσω στα τέλη Μαρτίου, μια νεοσύστατη εταιρεία με έδρα το Ηνωμένο Βασίλειο που ειδικεύεται στη δοκιμή αξιοπιστίας GPU μας προσέγγισε με Σφάλμα GPU που ανακάλυψαν που προκαλεί την Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ για επανεκκίνηση όταν επισκέπτεστε μια ιστοσελίδα. Η εταιρεία, κάλεσε GraphicsFuzz, συνεργάστηκε μαζί μας για να αναφέρουμε το πρόβλημα Qualcomm και Samsung. Μερικοί από τους αναγνώστες μας ενδιαφέρθηκαν να μάθουν πώς αρέσει σε μια εταιρεία GraphicsFuzz είναι σε θέση να βρει αυτά τα τρωτά σημεία, επομένως συνεργαστήκαμε με την εταιρεία για να δείξουμε πώς ανακάλυψαν μια παλαιότερη ευπάθεια GPU. Αυτή η ήδη επιδιορθωμένη ευπάθεια επέτρεψε σε έναν εισβολέα να "κατασκοπεύσει" εξ αποστάσεως το περιεχόμενο του
Αυτός ο χρήστης έβλεπε τον ιστότοπο της τράπεζάς του πριν επισκεφτεί την κακόβουλη ιστοσελίδα. Τα περιεχόμενα καταγράφηκαν και μεταφορτώθηκαν σε έναν απομακρυσμένο διακομιστή. Πηγή: GraphicsFuzz.
Πώς το GraphicsFuzz εντοπίζει σφάλματα GPU
Ένα πρόγραμμα οδήγησης γραφικών λειτουργεί παίρνοντας ένα πρόγραμμα shader και στέλνοντάς το στη GPU για να εκτελεστεί και έτσι να αποδώσει την εικόνα. Πριν στείλετε το shader στη GPU, το πρόγραμμα οδήγησης γραφικών το μεταφράζει σε μια μορφή που μπορεί να κατανοήσει η GPU. μια εσφαλμένη μετάφραση μπορεί να οδηγήσει σε αποτυχία απόδοσης, σφάλματα προγράμματος ή συσκευής, λανθασμένες εικόνες, ακόμη και ζητήματα ασφάλειας. GraphicsFuzz έχει ένα αυτοματοποιημένη σουίτα δοκιμών που τους επιτρέπει να βρίσκουν αυτά τα σφάλματα με βάση ένα σύνολο shaders αναφοράς. Όταν ένας χρήστης κάνει τη δοκιμή τους, όλες οι εικόνες που προκύπτουν υποτίθεται ότι φαίνονται ίδιες. Οποιαδήποτε εικόνα φαίνεται διαφορετική σημαίνει ότι υπήρχε σφάλμα.
Αποτελέσματα πολλών δημοφιλών συσκευών που εκτελούν τη δοκιμαστική σουίτα GraphicsFuzz. Τα Samsung Galaxy S6, Samsung Galaxy S7 και Samsung Galaxy S8 περιλαμβάνονται σε αυτά τα γραφήματα. Πηγή: GraphicsFuzz.
Για το Samsung Galaxy S6, GraphicsFuzz ανακάλυψε ότι οι εικόνες σε μία από τις σειρές έδειχναν εικόνες που υποτίθεται ότι ήταν σε άλλο πίνακα. Αυτό σημαίνει ότι εικόνες από προηγούμενες δοκιμές διέρρευαν σε μεταγενέστερες δοκιμές. Στη συνέχεια, η ομάδα επανεξέτασε τη δοκιμαστική σουίτα στο Google Chrome και ανακάλυψε ότι τμήματα της ιστοσελίδας εμφανίζονταν στην εικόνα. Επιπλέον, διαπίστωσαν ότι το άνοιγμα μιας άλλης καρτέλας έκανε την εικόνα να εμφανίζει τμήματα άλλων καρτελών. Ουσιαστικά, αυτό το σφάλμα επέτρεψε σε μια καρτέλα του Google Chrome να διαρρεύσει πληροφορίες σχετικά με μια άλλη καρτέλα του Chrome! Η ομάδα πίσω GraphicsFuzz δεν έψαχνε σκόπιμα για σφάλματα ασφαλείας, αλλά κατέληξαν να βρουν ένα ως αποτέλεσμα των δοκιμών τους. (Θα πρέπει να σημειωθεί ότι η ομάδα αναπαρήγαγε το σφάλμα στο stock πρόγραμμα περιήγησης Samsung στο Galaxy S6 καθώς και Mozilla Firefox.)
Πώς λειτουργεί το σφάλμα
Η εικόνα χρησιμοποιείται για την ενεργοποίηση του μακροχρόνιου σφάλματος στο Samsung Galaxy S6. Πηγή: GraphicsFuzz.
Η "κακόβουλη" ιστοσελίδα που δημιουργήθηκε από GraphicsFuzz χρησιμοποιεί το WebGL για να επιχειρήσει να σχεδιάσει μια σκηνή διαστήματος μέσα σε έναν καμβά όπως φαίνεται παραπάνω. Το χρώμα κάθε εικονοστοιχείου καθορίζεται από έναν σκιαστή θραυσμάτων, ένα πρόγραμμα που παρέχεται από την ιστοσελίδα για εκτέλεση στη GPU. ο GraphicsFuzz Το πλαίσιο τροποποίησε τον σκιαδιστή θραυσμάτων, με αποτέλεσμα να λειτουργεί για πολύ μεγάλο χρονικό διάστημα. Όταν ένα shader εκτελείται για πολύ μεγάλο χρονικό διάστημα, το πρόγραμμα περιήγησης ή το λειτουργικό σύστημα συνήθως ματαιώνει την απόδοση. Ωστόσο, ενώ η GPU διέκοψε την απόδοση αφού σχεδίασε μερικά pixel, το πρόγραμμα οδήγησης GPU δεν το ανέφερε αυτό στο Google Chrome. (Εάν ρίξετε μια ματιά στην εικόνα στο επάνω μέρος του άρθρου που δείχνει μνήμη βίντεο σκουπιδιών, μπορείτε πραγματικά να δείτε τμήματα της διαστημικής σκηνής στην κορυφή αριστερά.) Αυτό σημαίνει ότι τα εικονοστοιχεία που αποδόθηκαν πριν από τη ματαίωση παραμένουν ανέγγιχτα, που σημαίνει ότι η τελική εικόνα που αποδίδεται είναι ως επί το πλείστον βίντεο σκουπιδιών μνήμη. Δεδομένου ότι η μνήμη βίντεο χρησιμοποιείται συνεχώς για την απόδοση άλλων ιστοσελίδων, τα δεδομένα "σκουπίδια" περιέχουν στην πραγματικότητα προηγούμενες αποδόσεις άλλων ιστοσελίδων. Έτσι, άλλες ιστοσελίδες καταλήγουν να εμφανίζονται στην "κακόβουλη" ιστοσελίδα. Κυρίως, το WebGL επιτρέπει στην ιστοσελίδα να καταγράφει τα περιεχόμενα ό, τι αποδίδεται. Αυτή η εικόνα στη συνέχεια μεταφορτώνεται σε έναν απομακρυσμένο διακομιστή.
Διάγραμμα που εξηγεί το μακροχρόνιο σφάλμα GPU που προκαλεί "διαρροή" των δεδομένων καρτέλας του Chrome. Πηγή: GraphicsFuzz.
Το Google Chrome χρησιμοποιεί πολλαπλές διεργασίες, επομένως οι διαφορετικές καρτέλες συχνά απομονώνονται, γεγονός που κάνει αυτό το exploit να φαίνεται αδύνατον στην επιφάνεια. Ωστόσο, το Chrome αλληλεπιδρά με τη GPU χρησιμοποιώντας μια ενιαία "διεργασία GPU", που σημαίνει ότι όλες οι καρτέλες μοιράζονται την ίδια μνήμη GPU, επιτρέποντας έτσι τη λειτουργία αυτής της εκμετάλλευσης. Το παραπάνω διάγραμμα δείχνει αυτό με περισσότερες λεπτομέρειες.
Το σφάλμα παρουσιάζεται σε αυτό το βίντεο κατά τα πρώτα 22 δευτερόλεπτα. Επιδεικνύονται επίσης άλλα ζητήματα ασφαλείας που εντοπίστηκαν από το GraphicsFuzz.
Μαθήματα που πρέπει να ληφθούν
Μια κακή GPU μπορεί να παρακάμψει όλα τα μέτρα ασφαλείας του Google Chrome και του Android, καθώς το WebGL επιτρέπει σε οποιαδήποτε κακόβουλη ιστοσελίδα να στέλνει κώδικα στη GPU για εκτέλεση. Η Google δεν μπορεί να διορθώσει σφάλματα GPU δεδομένου ότι η εταιρεία δεν ελέγχει το υλικό και τα προγράμματα οδήγησης. Σε αυτήν την περίπτωση, εναπόκειται στον προμηθευτή GPU (σε αυτήν την περίπτωση, ARM) να διορθώσει το σφάλμα και στον OEM του οποίου οι συσκευές επηρεάζονται (στην περίπτωση αυτή, η Samsung) να ενσωματώσει την επιδιόρθωση σε μια ενημέρωση. Προσθέστε φορείς στο μείγμα και είναι εύκολο να δείτε πώς ένα σφάλμα όπως αυτό μπορεί να πάρει πολύ χρόνο για να διορθωθεί—χρειάστηκε τουλάχιστον 5 μήνες για τους περισσότερους χρήστες του Samsung Galaxy S6 να λάβουν την ενημερωμένη έκδοση κώδικα.
GraphicsFuzz βοηθά τους προμηθευτές GPU να βρουν δύσκολα ανιχνεύσιμα σφάλματα, όπως σφάλματα μεταγλώττισης που προκαλούν τη δημιουργία και την εκτέλεση λανθασμένου κώδικα στη GPU. Το αυτοματοποιημένο πλαίσιο δοκιμών τους επιτρέπει να βρίσκουν σφάλματα όπως αυτό που παρουσιάζεται σε αυτό το άρθρο. Ο μακροχρόνιος βρόχος που προκαλείται από την "κακόβουλη" ιστοσελίδα έχει επίσης αποδειχθεί ότι προκαλεί προβλήματα σε άλλες συσκευές, όπως η HTC One M7 και πιο πρόσφατα το Samsung Galaxy S9. GraphicsFuzz δοκιμάζει κορυφαία smartphone και δημοσιεύει α πίνακα αποτελεσμάτων που κατατάσσει αυτές τις συσκευές με βάση την απόδοσή τους σε ένα υποσύνολο των δοκιμών τους. Εκατοντάδες κολλήματα και σφάλματα απόδοσης έχουν βρεθεί κατά τη διάρκεια των δοκιμών τους, αλλά τα περισσότερα δεν διερευνώνται για να διαπιστωθεί εάν αποτελούν απειλή για την ασφάλεια. Ωστόσο, όπως φαίνεται από αυτό το exploit, μια κακή συμπεριφορά GPU είναι ένας κίνδυνος ασφάλειας και είναι πιθανό ότι ένα ή περισσότερα κρίσιμα τρωτά σημεία ασφαλείας περιμένουν να ανακαλυφθούν. GraphicsFuzz ελπίζει ότι οι προμηθευτές GPU δίνουν προτεραιότητα στη βελτίωση της ποιότητας του προγράμματος οδήγησης στο μέλλον.
Συγκριτική αξιοπιστία προγραμμάτων οδήγησης γραφικών, ταξινομημένη με βάση τον αριθμό των συνολικών προβλημάτων. Πηγή: GraphicsFuzz.
Χρονοδιάγραμμα αποκάλυψης
- Τον Δεκέμβριο του 2016, GraphicsFuzz ανέφερε το σφάλμα στο Παρακολούθηση σφαλμάτων Google Chromium επειδή ήταν κατάλληλο για το Πρόγραμμα επιβράβευσης Chrome. Αφού το GraphicsFuzz υπέβαλε το σφάλμα στο πρόγραμμα παρακολούθησης σφαλμάτων Google Chromium, το σφάλμα έγινε αποδεκτό από την Google και το προωθήθηκε στην ARM και στη Samsung για επιδιόρθωση.
- Google διαβίβασε την έκθεση στις επαφές της ARM και της Samsung.
- Η Samsung διόρθωσε σιωπηλά το σφάλμα και παρουσίασε την επιδιόρθωση στην ενημέρωση Android 7.0 Nougat που κυκλοφόρησε μεταξύ Μαρτίου και Ιουνίου του 2017. Παρόλο που δεν δημιουργήθηκε CVE από τη Samsung, την Google ή την ARM και ούτε η Samsung ούτε η ARM δημοσίευσαν πληροφορίες σχετικά με την ενημέρωση κώδικα, σημειώστε ότι GraphicsFuzz δεν ανέφερε το σφάλμα μέσω του σωστή διαδικασία.
- Αργότερα, GraphicsFuzz ήταν σε θέση να επιβεβαιώσει ότι τόσο η Samsung όσο και η ARM είχαν δει την αναφορά και ότι η ARM μπόρεσε να διορθώσει το πρόβλημα λόγω της αναφοράς.
- Τον Αύγουστο του 2017, GraphicsFuzz ανταμείφθηκε 2.000 $ από την Google για την αναφορά σφαλμάτων.
- Τον Νοέμβριο του 2017, η αναφορά σφαλμάτων δημοσιοποιήθηκε.