Zenbleed: Πώς η αναζήτηση για την απόδοση της CPU θα μπορούσε να θέσει τους κωδικούς πρόσβασής σας σε κίνδυνο

Zenbleed: Πώς η αναζήτηση για την απόδοση της CPU θα μπορούσε να θέσει τους κωδικούς πρόσβασής σας σε κίνδυνο

Zenbleed: Πώς η αναζήτηση για απόδοση της CPU θα μπορούσε να θέσει τους κωδικούς πρόσβασής σας σε κίνδυνο PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Θυμάστε το Heartbleed;

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

Με άλλα λόγια, ένας απατεώνας δεν μπορεί να χρησιμοποιήσει ένα σφάλμα τύπου bleed για μια επίθεση ακριβείας, όπως "Εύρεση του σκιώδους αρχείου κωδικού πρόσβασης στο /etc κατάλογο και να το ανεβάσω σε εμένα» ή «Αναζήτηση προς τα πίσω στη μνήμη μέχρι την πρώτη εκτέλεση 16 διαδοχικών ψηφίων ASCII. αυτός είναι ένας αριθμός πιστωτικής κάρτας, οπότε αποθηκεύστε τον για αργότερα."

Στο Heartbleed, για παράδειγμα, θα μπορούσατε να ξεγελάσετε έναν μη επιδιορθωμένο διακομιστή για να στείλει ένα μήνυμα που υποτίθεται ότι είχε μήκος το πολύ 16 byte, αλλά που περιλάμβανε λανθασμένα έως και περίπου 64,000 επιπλέον byte επικολλημένα στο τέλος.

Δεν προλάβατε να επιλέξετε τι υπήρχε σε αυτά τα 64,000 λεηλατημένα byte. μόλις πήρες ό,τι έτυχε να βρίσκεται δίπλα στη μνήμη με το γνήσιο μήνυμα που έπρεπε να λάβεις.

Μερικές φορές, θα λαμβάνατε κομμάτια από όλα τα μηδενικά ή άγνωστα κρυπτογραφημένα δεδομένα για τα οποία δεν είχατε το κλειδί αποκρυπτογράφησης…

…αλλά κάθε τόσο θα λαμβάνατε υπολείμματα καθαρού κειμένου μιας ιστοσελίδας που κατέβασε ο προηγούμενος επισκέπτης, ή μέρη ενός email που μόλις έστειλε κάποιος άλλος ή ακόμα και μπλοκ μνήμης με τα ιδιωτικά κρυπτογραφικά κλειδιά του διακομιστή.

Πληθωρικές βελόνες σε ατελείωτες θημωνιές

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

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

Άλλα σφάλματα με το όνομα bleed περιλαμβάνουν Rambled, το οποίο σκόπιμα προκάλεσε προσωρινά σφάλματα μνήμης για να μαντέψει τι ήταν αποθηκευμένο σε κοντινά μέρη ενός τσιπ RAM, και Optionsbleed, όπου θα μπορούσατε να ρωτάτε ξανά και ξανά έναν διακομιστή ιστού ποιες επιλογές HTTP υποστήριζε, μέχρι να σας στείλει μια απάντηση με τα δεδομένα κάποιου άλλου σε αυτόν κατά λάθος.

Κατ' αναλογία, ένα σφάλμα τύπου bleed μοιάζει λίγο με μια λοταρία χαμηλών τόνων που δεν έχει εγγυημένα έπαθλα μέγα-τζάκποτ, αλλά όπου έχετε μια ύπουλη ευκαιρία να αγοράσετε 1,000,000 εισιτήρια στην τιμή του ενός.

Λοιπόν, ο διάσημος κυνηγός σφαλμάτων της Google, Tavis Ormandy, μόλις ανέφερε νέο σφάλμα αυτού του είδους που τον έχουν μεταγλωττίσει Zenbleed, επειδή το σφάλμα ισχύει για το πιο πρόσφατο της AMD Zen 2 σειρά επεξεργαστών υψηλής απόδοσης.

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

Για παράδειγμα, ένα πρόγραμμα που εκτελείται ως μη προνομιούχος χρήστης μέσα σε μια επισκέπτη εικονική μηχανή (VM) που υποτίθεται ότι είναι σφραγισμένη από το υπόλοιπο σύστημα μπορεί να καταλήξει με δεδομένα από άλλους χρήστες στο ίδιο VM ή από άλλα VM στο ίδιο υπολογιστή ή από το κεντρικό πρόγραμμα που υποτίθεται ότι ελέγχει τα VM ή ακόμα και από τον πυρήνα του ίδιου του λειτουργικού συστήματος κεντρικού υπολογιστή.

Ο Ormandy μπόρεσε δημιουργία κώδικας απόδειξης ιδέας που διέρρευε περίπου 30,000 byte δεδομένων άλλων ατόμων ανά δευτερόλεπτο ανά πυρήνα επεξεργαστή, 16 byte τη φορά.

Αυτό μπορεί να μην ακούγεται πολύ, αλλά τα 30 KB/sec είναι αρκετά για να αποκαλύψουν τα τεράστια 3 GB κατά τη διάρκεια της ημέρας, με δεδομένα στα οποία γίνεται πιο τακτική πρόσβαση (συμπεριλαμβανομένων κωδικών πρόσβασης, διακριτικών ελέγχου ταυτότητας και άλλων δεδομένων που υποτίθεται ότι κρατούνται μυστικά) πιθανώς να εμφανίζονται επανειλημμένα.

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

Το τίμημα της απόδοσης

Δεν θα προσπαθήσουμε να εξηγήσουμε το ελάττωμα του Zenbleed εδώ (παρακαλώ δείτε το Tavis Ormandy's δικό του άρθρο για λεπτομέρειες), αλλά θα επικεντρωθούμε στον λόγο για τον οποίο εμφανίστηκε το σφάλμα εξαρχής.

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

Χαλαρά μιλώντας, η ιδέα πίσω από την κερδοσκοπική εκτέλεση είναι ότι εάν ένας πυρήνας επεξεργαστή θα καθόταν διαφορετικά σε αδράνεια, ίσως περιμένοντας να μάθει αν υποτίθεται ότι θα κατέβει THEN ή η ELSE διαδρομή μιας απόφασης «εάν-τότε-άλλο» στο πρόγραμμά σας ή αναμονή για έλεγχο ελέγχου πρόσβασης υλικού για να προσδιοριστεί εάν επιτρέπεται πραγματικά η χρήση της τιμής δεδομένων που είναι αποθηκευμένη σε μια συγκεκριμένη διεύθυνση μνήμης ή όχι…

…τότε αξίζει να το οργώσετε ούτως ή άλλως και να υπολογίσετε εκ των προτέρων (αυτό είναι το μέρος της «κερδοσκοπικής εκτέλεσης») σε περίπτωση που η απάντηση είναι χρήσιμη.

Εάν η εικαστική απάντηση αποδειχθεί περιττή (επειδή πέτυχε το THEN αποτέλεσμα όταν ο κωδικός κατέβηκε στο ELSE αντ' αυτού), ή καταλήγει εκτός ορίων στην τρέχουσα διαδικασία (σε περίπτωση αποτυχίας ελέγχου πρόσβασης), μπορεί απλώς να απορριφθεί.

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

Αλλά σε ορισμένες εκπομπές κουίζ ο διαγωνιζόμενος μπορεί να πει "Περάστε", παρακάμπτοντας την ερώτηση με σκοπό να επιστρέψει σε αυτήν αργότερα.

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

Αλλά αν η ερώτηση «πέρασε» όντως επανέλθει, πόσο θα επηρεάσει το γεγονός ότι τώρα γνωρίζουν την απάντηση εκ των προτέρων τον τρόπο που θα την κάνουν τη δεύτερη φορά;

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

Άλλωστε, ο μόνος αληθινός τρόπος για να «ξεχάσεις» κάτι εντελώς είναι να μην το έχεις γνωρίσει ποτέ από την αρχή.

Το πρόβλημα με τα διανύσματα

Στο Ormandy's Zenbleed bug, πλέον επίσημα γνωστό ως CVE-2023-20593, το πρόβλημα προκύπτει όταν ένας επεξεργαστής AMD Zen 2 εκτελεί μια ειδική εντολή που υπάρχει για να ορίσει πολλαπλές λεγόμενες διανυσματικά μητρώα στο μηδέν ταυτόχρονα.

Οι διανυσματικοί καταχωρητές χρησιμοποιούνται για την αποθήκευση δεδομένων που χρησιμοποιούνται από ειδικές οδηγίες υψηλής απόδοσης αριθμητικής και επεξεργασίας δεδομένων και στους περισσότερους σύγχρονους επεξεργαστές Intel και AMD έχουν πλάτος 256 bit, σε αντίθεση με τα 64 bit των καταχωρητών γενικής χρήσης της CPU που χρησιμοποιούνται για παραδοσιακούς σκοπούς προγραμματισμού .

Αυτοί οι ειδικοί διανυσματικοί καταχωρητές μπορούν συνήθως να λειτουργήσουν είτε σε 256 bit (32 bytes) τη φορά είτε σε μόλις 128 bit (16 bytes) τη φορά.

Στην πραγματικότητα, για ιστορικούς λόγους, οι σημερινές CPU έχουν δύο εντελώς διαφορετικά σύνολα οδηγιών κώδικα μηχανής τύπου vector: μια νεότερη δέσμη γνωστή ως AVX (προηγμένες διανυσματικές επεκτάσεις), το οποίο μπορεί να λειτουργήσει με 128 ή 256 bit και μια παλαιότερη, λιγότερο ισχυρή ομάδα εντολών που ονομάζεται SSE (ροή επεκτάσεων SIMD, όπου το SIMD με τη σειρά του αντιπροσωπεύει μίας εντολής/πολλαπλά δεδομένα), το οποίο μπορεί να λειτουργήσει μόνο με 128 bit κάθε φορά.

Ενοχλητικό είναι ότι εάν εκτελείτε έναν κώδικα AVX νέου τύπου, μετά έναν κώδικα SSE παλαιού τύπου και μετά έναν άλλο κώδικα AVX, οι οδηγίες SSE στη μέση ανακατεύουν τα κορυφαία 128 bit των νέων καταχωρητών AVX 256 bit, παρόλο που οι οδηγίες SSE, τουλάχιστον σε χαρτί, κάνουν τους υπολογισμούς τους μόνο στα 128 bit.

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

Αλλά αυτή η διαδικασία αποθήκευσης και επαναφοράς βλάπτει την απόδοση, που και τα δύο Της Intel και AMD της οι οδηγοί προγραμματισμού σας προειδοποιούν έντονα.

Η AMD λέει:

Υπάρχει μια σημαντική ποινή για την ανάμειξη εντολών SSE και AVX όταν τα ανώτερα 128 bit των καταχωρητών YMM [256 bit-wide] περιέχουν μη μηδενικά δεδομένα.

Η μετάβαση προς οποιαδήποτε κατεύθυνση θα προκαλέσει ένα μικροσφάλμα να χυθεί ή να γεμίσει τα ανώτερα 128 bit και των δεκαέξι καταχωρητών YMM.

Θα υπάρξει ποινή περίπου 100 κύκλων για να σηματοδοτήσει και να χειριστεί αυτό το σφάλμα.

Και η Intel λέει κάτι παρόμοιο:

Το υλικό αποθηκεύει τα περιεχόμενα των άνω 128 bit των καταχωρητών YMM [256 bit-wide] κατά τη μετάβαση από το AVX στο SSE και, στη συνέχεια, επαναφέρει αυτές τις τιμές κατά τη μετάβαση πίσω […]

Και οι δύο λειτουργίες αποθήκευσης και επαναφοράς προκαλούν μια ποινή που ανέρχεται σε αρκετές δεκάδες κύκλους ρολογιού για κάθε λειτουργία.

Για να σώσετε τη μέρα, υπάρχει μια ειδική διανυσματική οδηγία που ονομάζεται VZEROUPPER που μηδενίζει τα κορυφαία 128 bit κάθε διανυσματικού καταχωρητή με μία κίνηση.

Καλώντας VZEROUPPER, ακόμα κι αν ο δικός σας κωδικός δεν τον χρειάζεται πραγματικά, σηματοδοτείτε στον επεξεργαστή ότι δεν σας ενδιαφέρουν πλέον τα κορυφαία 128 bit αυτών των καταχωρητών 256 bit, επομένως δεν χρειάζονται αποθήκευση εάν έρθει μια οδηγία SSE της παλιάς σχολής στο επόμενο.

Αυτό σας βοηθά να επιταχύνετε τον κώδικά σας ή τουλάχιστον σας εμποδίζει να επιβραδύνετε τον κώδικα οποιουδήποτε άλλου.

Και αν αυτό ακούγεται σαν λίγο χαζό…

…καλά, είναι.

Είναι ένα hack σε επίπεδο επεξεργαστή, αν θέλετε, απλώς για να διασφαλιστεί ότι δεν θα μειώσετε την απόδοση προσπαθώντας να τη βελτιώσετε.

Πού έρχεται το CVE-2023-20593;

Όλη αυτή η προσήλωση στην απόδοση οδήγησε τον Ormandy στην τρύπα διαρροής δεδομένων Zenbleed, επειδή:

  • Ο κώδικας AVX χρησιμοποιείται εξαιρετικά συχνά για μη μαθηματικούς σκοπούς, όπως η εργασία με κείμενο. Για παράδειγμα, η δημοφιλής βιβλιοθήκη προγραμματισμού Linux glibc χρησιμοποιεί οδηγίες AVX και καταχωρεί για να επιταχύνει τη λειτουργία strlen() που χρησιμοποιείται για την εύρεση του μήκους των συμβολοσειρών κειμένου στο C. (Μιλώντας χαλαρά, strlen() Η χρήση του κώδικα AVX σάς επιτρέπει να κάνετε αναζήτηση σε 16 byte μιας συμβολοσειράς κάθε φορά αναζητώντας το μηδενικό byte που υποδηλώνει πού τελειώνει, αντί να χρησιμοποιήσετε έναν συμβατικό βρόχο που ελέγχει byte-by-byte.)
  • Οι επεξεργαστές Zen 2 της AMD δεν αναιρούν αξιόπιστα VZEROUPPER όταν μια κερδοσκοπική διαδρομή κώδικα εκτέλεσης αποτυγχάνει. Όταν «ξεμηδενίζουμε» τα κορυφαία 128 bit ενός καταχωρητή 256 διανυσμάτων επειδή ο επεξεργαστής μάντευε λάθος και VZEROUPPER Η λειτουργία πρέπει να αντιστραφεί, ο καταχωρητής καταλήγει μερικές φορές με 128 bit (16 bytes) που έχουν «αποκατασταθεί» από τον κωδικό AVX κάποιου άλλου, αντί για τα δεδομένα που υπήρχαν πριν.

Στην πραγματική ζωή, φαίνεται ότι οι προγραμματιστές χρησιμοποιούν σπάνια VZEROUPPER με τρόπους που χρειάζονται αντιστροφή, διαφορετικά αυτό το σφάλμα μπορεί να είχε εντοπιστεί πριν από χρόνια, ίσως ακόμη και κατά την ανάπτυξη και τη δοκιμή στην ίδια την AMD.

Όμως, πειραματιζόμενος προσεκτικά, ο Ormandy ανακάλυψε πώς να δημιουργήσει βρόχους κώδικα AVX που όχι μόνο πυροδοτούσαν επανειλημμένα την εικαστική εκτέλεση ενός VZEROUPPER εντολή, αλλά και ανάγκασε τακτικά αυτή την εντολή να επαναφέρεται και οι καταχωρίσεις AVX να «ξεμηδενίζονται».

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

Το λειτουργικό σας σύστημα, το πρόγραμμα-πελάτη ηλεκτρονικού ταχυδρομείου, το πρόγραμμα περιήγησης ιστού, ο διακομιστής ιστού, ο επεξεργαστής πηγαίου κώδικα, το παράθυρο τερματικού – σχεδόν κάθε πρόγραμμα που χρησιμοποιείτε τακτικά – σχεδόν σίγουρα χρησιμοποιεί το δίκαιο μερίδιο του κώδικα AVX για να βελτιώσει την απόδοση.

Έτσι, ακόμη και κάτω από πολύ τυπικές συνθήκες, ο Ormandy μερικές φορές κατέληγε με τα φανταστικά υπολείμματα των δεδομένων άλλων προγραμμάτων να αναμιγνύονται στα δικά του δεδομένα AVX, τα οποία μπορούσε να ανιχνεύσει και να παρακολουθήσει.

Εξάλλου, αν γνωρίζετε τι υποτίθεται ότι υπάρχει στους καταχωρητές AVX μετά από ένα VZEROUPPER η λειτουργία επανέρχεται, είναι εύκολο να εντοπιστεί όταν οι τιμές σε αυτούς τους καταχωρητές στραβώνουν.

Με τα ίδια τα λόγια του Ormandy:

[B]βασικές λειτουργίες όπως strlen(), memcpy() και strcmp() [εύρεση μήκους συμβολοσειράς κειμένου, αντιγραφή μνήμης, σύγκριση συμβολοσειρών κειμένου] θα χρησιμοποιήσει τους καταχωρητές διανυσμάτων – ώστε να μπορούμε να κατασκοπεύουμε αποτελεσματικά αυτές τις λειτουργίες που γίνονται οπουδήποτε στο σύστημα!

Δεν έχει σημασία αν συμβαίνουν σε άλλες εικονικές μηχανές, sandboxes, κοντέινερ, διεργασίες, οτιδήποτε.

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

Αλλά είστε σχεδόν βέβαιο ότι θα κερδίσετε το ισοδύναμο των χιλιάδων βραβείων των 1000 $, χωρίς να βάζετε τη μύτη σας επικίνδυνα στις διαδικασίες και τις σελίδες μνήμης άλλων ανθρώπων, όπως χρειάζεται να κάνει το παραδοσιακό κακόβουλο λογισμικό "RAM Snooping".

Τι να κάνω;

Το CVE-2023-20593 αποκαλύφθηκε υπεύθυνα και η AMD έχει ήδη δημιουργήσει έμπλαστρο μικροκώδικα για να μετριάσει το ελάττωμα.

Εάν διαθέτετε CPU οικογένειας Zen 2 και ανησυχείτε για αυτό το σφάλμα, μιλήστε με τον προμηθευτή της μητρικής πλακέτας για περισσότερες πληροφορίες σχετικά με τον τρόπο λήψης και εφαρμογής τυχόν σχετικών διορθώσεων.

Σε λειτουργικά συστήματα με εργαλεία λογισμικού που υποστηρίζουν την προσαρμογή των λεγόμενων MSR (καταχωρητές για συγκεκριμένο μοντέλο) στον επεξεργαστή σας που ελέγχουν τη διαμόρφωσή του σε χαμηλό επίπεδο, υπάρχει μια σημαία χωρίς τεκμηρίωση (bit 9) που μπορείτε να ορίσετε σε έναν καταχωρητή μοντέλου με κακή τεκμηρίωση (MSR 0xC0011029) που προφανώς απενεργοποιεί τη συμπεριφορά που προκαλεί το σφάλμα.

Το MSR 0xC0011029 αναφέρεται στη λίστα αλληλογραφίας του πυρήνα του Linux αρχεία καθώς η DE_CFG εγγραφή, προφανώς σύντομο για αποκωδικοποίηση διαμόρφωσης, και άλλα γνωστά bit σε αυτόν τον καταχωρητή χρησιμοποιούνται για τη ρύθμιση άλλων πτυχών της κερδοσκοπικής εκτέλεσης.

Γι' αυτό το μαντεύουμε DE_CFG[9], που είναι συντομογραφία για το "bit 9 of MSR 0xC0011029", αποφασίζει εάν θα επιτρέψει οδηγίες με περίπλοκες παρενέργειες όπως π.χ. VZEROUPPER να δοκιμαστεί καθόλου κερδοσκοπικά.

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

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

Το άρθρο του Ormandy περιλαμβάνει μια περιγραφή του τρόπου επαναδιαμόρφωσης του σχετικού bit MSR στον επεξεργαστή Zen 2 σε Linux και FreeBSD.

(Θα δεις DE_CFG[9] που περιγράφεται ως α μπουκιά κοτόπουλου, ορολογία για μια ρύθμιση διαμόρφωσης που γυρίζετε on να γυρίσει off ένα χαρακτηριστικό που φοβάσαι.)

OpenBSD, ακούμε, θα είναι αναγκαστική DE_CFG[9] ενεργοποιείται αυτόματα σε όλους τους επεξεργαστές Zen 2, καταστέλλοντας έτσι αυτό το σφάλμα από προεπιλογή σε αναζήτηση ασφάλειας έναντι της απόδοσης. επί Linux και άλλα BSD, μπορείτε να το κάνετε με εργαλεία γραμμής εντολών (απαιτείται root) όπως π.χ wrmsr και cpucontrol.

Mac Οι χρήστες μπορούν να χαλαρώσουν επειδή τα Mac που δεν είναι ARM έχουν όλα τσιπ Intel, από όσο γνωρίζουμε, αντί για AMD, και οι επεξεργαστές Intel δεν είναι γνωστό ότι είναι ευάλωτοι σε αυτό το συγκεκριμένο σφάλμα.

Windows Οι χρήστες μπορεί να χρειαστεί να επανέλθουν σε ανεπίσημες παραβιάσεις του προγράμματος οδήγησης πυρήνα (αποφύγετε αυτές, εκτός αν ξέρετε πραγματικά τι κάνετε, λόγω των κινδύνων ασφαλείας από την εκκίνηση σε λειτουργία "allow any old driver") ή να εγκαταστήσουν το επίσημο πρόγραμμα εντοπισμού σφαλμάτων WinDbg, ενεργοποιήστε τον εντοπισμό σφαλμάτων τοπικού πυρήνα και χρησιμοποιήστε ένα σενάριο WinDbg για να τροποποιήσετε το σχετικό MSR.

(Παραδεχόμαστε ότι δεν έχουμε δοκιμάσει κανέναν από αυτούς τους μετριασμούς, επειδή δεν διαθέτουμε έναν υπολογιστή που βασίζεται σε AMD αυτήν τη στιγμή. Ενημερώστε μας πώς τα πηγαίνετε εάν το κάνετε!)


Σφραγίδα ώρας:

Περισσότερα από Γυμνή ασφάλεια