Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Προτείνουμε να κατέβουμε ξανά στο χαμηλό επίπεδο και να μιλήσουμε για την ασφάλεια των πλατφορμών υπολογιστών συμβατών με υλικολογισμικό x86. Αυτή τη φορά, το κύριο συστατικό της μελέτης είναι το Intel Boot Guard (δεν πρέπει να συγχέεται με το Intel BIOS Guard!) - μια αξιόπιστη τεχνολογία εκκίνησης BIOS που υποστηρίζεται από υλικό, την οποία ένας προμηθευτής συστημάτων υπολογιστή μπορεί να ενεργοποιήσει ή να απενεργοποιήσει μόνιμα στο στάδιο της παραγωγής. Λοιπόν, γνωρίζουμε ήδη τη συνταγή της έρευνας: κόψτε την εφαρμογή αυτής της τεχνολογίας με αντίστροφη μηχανική, περιγράψτε την αρχιτεκτονική της, γεμίστε την με λεπτομέρειες χωρίς τεκμηρίωση, καρυκεύστε την με διανύσματα επίθεσης για να δοκιμάσετε και ανακατέψτε την. Ας προσθέσουμε φωτιά με μια ιστορία για το πώς ένα κλωνοποιημένο σφάλμα στην παραγωγή πολλών προμηθευτών για χρόνια επιτρέπει σε έναν πιθανό εισβολέα να χρησιμοποιήσει αυτήν την τεχνολογία για να δημιουργήσει ένα κρυφό rootkit που δεν μπορεί να αφαιρεθεί (ακόμη και από προγραμματιστή) στο σύστημα.

Παρεμπιπτόντως, το άρθρο βασίζεται στις αναφορές "On Guard for Rootkits: Intel BootGuard" από το συνέδριο ZeroNights 2016 και 29η συνάντηση DefCon Ρωσία (και οι δύο παρουσιάσεις εδώ).

Υλικολογισμικό για πλατφόρμα υπολογιστή με αρχιτεκτονική Intel 64

Αρχικά, ας απαντήσουμε στην ερώτηση: ποιο είναι το υλικολογισμικό μιας σύγχρονης πλατφόρμας υπολογιστών με την αρχιτεκτονική Intel 64; Φυσικά, UEFI BIOS. Αλλά αυτή η απάντηση δεν θα είναι ακριβής. Ας ρίξουμε μια ματιά στο σχήμα, το οποίο δείχνει την έκδοση desktop (laptop) αυτής της αρχιτεκτονικής.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Η βάση είναι ο σύνδεσμος:

  • Επεξεργαστής (CPU, Central Processing Unit), ο οποίος, εκτός από τους κύριους πυρήνες, διαθέτει ενσωματωμένο πυρήνα γραφικών (όχι σε όλα τα μοντέλα) και ελεγκτή μνήμης (IMC, Integrated Memory Controller).
  • Chipset (PCH, Platform Controller Hub), που περιέχει διάφορους ελεγκτές για αλληλεπίδραση με περιφερειακές συσκευές και διαχείριση υποσυστημάτων. Ανάμεσά τους είναι το περιβόητο Intel Management Engine (ME), το οποίο διαθέτει και firmware (Intel ME firmware).

Οι φορητοί υπολογιστές, εκτός από τα παραπάνω, απαιτούν ενσωματωμένο χειριστήριο (ACPI EC, Advanced Control and Power Interface Embedded Controller), το οποίο είναι υπεύθυνο για τη λειτουργία του υποσυστήματος τροφοδοσίας, touchpad, πληκτρολόγιο, πλήκτρα Fn (φωτεινότητα οθόνης, ένταση ήχου, πληκτρολόγιο οπίσθιος φωτισμός, κ.λπ.) και άλλα. Και έχει επίσης το δικό του firmware.

Άρα, ο συνδυασμός του παραπάνω υλικολογισμικού είναι το υλικολογισμικό της πλατφόρμας του υπολογιστή (σύστημα firmware), το οποίο είναι αποθηκευμένο σε μια κοινή μνήμη flash SPI. Για να μην μπερδεύονται οι χρήστες αυτής της μνήμης που βρίσκεται κάποιος, τα περιεχόμενα αυτής της μνήμης χωρίζονται στις ακόλουθες περιοχές (όπως φαίνεται στο σχήμα):

  • UEFI BIOS?
  • Υλικολογισμικό ACPI EC (εμφανίστηκε μια ξεχωριστή περιοχή με τη μικροαρχιτεκτονική του επεξεργαστή Skylake (2015), αλλά στη φύση δεν έχουμε δει ακόμη παραδείγματα χρήσης του, επομένως το υλικολογισμικό του ενσωματωμένου ελεγκτή εξακολουθεί να αποτελεί μέρος του UEFI BIOS).
  • υλικολογισμικό Intel ME.
  • διαμόρφωση (διεύθυνση MAC, κ.λπ.) του ενσωματωμένου προσαρμογέα δικτύου GbE (Gigabit Ethernet).
  • περιγραφείς φλας - η κύρια περιοχή της μνήμης flash, η οποία περιέχει δείκτες σε άλλες περιοχές, καθώς και δικαιώματα πρόσβασης σε αυτές.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Η διαφοροποίηση της πρόσβασης στις περιοχές (σύμφωνα με τα καθορισμένα δικαιώματα) γίνεται από τον κύριο διαύλου SPI - τον ελεγκτή SPI που είναι ενσωματωμένος στο chipset, μέσω του οποίου γίνεται πρόσβαση σε αυτή τη μνήμη. Εάν τα δικαιώματα οριστούν στις τιμές που συνιστώνται (για λόγους ασφαλείας) από την Intel, τότε κάθε χρήστης του SPI flash έχει πλήρη πρόσβαση (ανάγνωση/εγγραφή) μόνο στην περιοχή του. Τα υπόλοιπα είναι είτε μόνο για ανάγνωση είτε απρόσιτα. Γνωστό γεγονός: σε πολλά συστήματα, η CPU έχει πλήρη πρόσβαση στο UEFI BIOS και στο GbE, πρόσβαση ανάγνωσης μόνο σε περιγραφείς flash και καθόλου πρόσβαση στην περιοχή Intel ME. Γιατί πολλοί και όχι όλοι; Αυτό που προτείνεται είναι προαιρετικό. Θα σας πούμε περισσότερα αργότερα στο άρθρο.

Μηχανισμοί για την προστασία του υλικολογισμικού μιας πλατφόρμας υπολογιστή από τροποποιήσεις

Προφανώς, το υλικολογισμικό μιας πλατφόρμας υπολογιστή θα πρέπει να προστατεύεται από ενδεχόμενο συμβιβασμό, που θα επέτρεπε σε έναν δυνητικό εισβολέα να αποκτήσει βάση σε αυτό (επιβιώσει ενημερώσεις OS / επανεγκαταστάσεις), να εκτελέσει τον κώδικά του στις πιο προνομιακές λειτουργίες κ.λπ. Και η οριοθέτηση της πρόσβασης στις περιοχές μνήμης flash SPI, φυσικά, δεν αρκεί. Επομένως, χρησιμοποιούνται διάφοροι μηχανισμοί ειδικά για κάθε περιβάλλον εκτέλεσης για την προστασία του υλικολογισμικού από τροποποιήσεις.

Έτσι, το υλικολογισμικό Intel ME είναι υπογεγραμμένο για έλεγχο ακεραιότητας και γνησιότητας και ελέγχεται από τον ελεγκτή ME κάθε φορά που φορτώνεται στη μνήμη ME UMA. Αυτή η διαδικασία επαλήθευσης έχει ήδη συζητηθεί από εμάς σε ένα από τα άρθρααφιερωμένο στο υποσύστημα Intel ME.

Και το υλικολογισμικό ACPI EC, κατά κανόνα, ελέγχεται μόνο για ακεραιότητα. Ωστόσο, λόγω του γεγονότος ότι αυτό το δυαδικό περιλαμβάνεται στο UEFI BIOS, υπόκειται σχεδόν πάντα στους ίδιους μηχανισμούς προστασίας που χρησιμοποιεί το UEFI BIOS. Ας μιλήσουμε για αυτούς.

Αυτοί οι μηχανισμοί μπορούν να χωριστούν σε δύο κατηγορίες.

Προστασία εγγραφής στην περιοχή UEFI BIOS

  1. Φυσική προστασία των περιεχομένων της μνήμης flash SPI με βραχυκυκλωτήρα προστασίας εγγραφής.
  2. Προστασία της προβολής της περιοχής UEFI BIOS στο χώρο διευθύνσεων της CPU χρησιμοποιώντας τους καταχωρητές PRx του chipset.
  3. Αποκλεισμός προσπαθειών εγγραφής στην περιοχή UEFI BIOS δημιουργώντας και επεξεργαζόμενοι την αντίστοιχη διακοπή SMI ορίζοντας τα bit BIOS_WE / BLE και SMM_BWP στους καταχωρητές του σετ chip.
  4. Μια πιο προηγμένη έκδοση αυτής της προστασίας είναι το Intel BIOS Guard (PFAT).

Εκτός από αυτούς τους μηχανισμούς, οι πωλητές μπορούν να αναπτύξουν και να εφαρμόσουν τα δικά τους μέτρα ασφαλείας (για παράδειγμα, υπογραφή καψουλών με ενημερώσεις του UEFI BIOS).

Είναι σημαντικό να σημειωθεί ότι σε ένα συγκεκριμένο σύστημα (ανάλογα με τον προμηθευτή), μπορεί να μην εφαρμόζονται όλοι οι παραπάνω μηχανισμοί προστασίας, μπορεί να μην εφαρμόζονται καθόλου ή μπορεί να υλοποιούνται με ευάλωτο τρόπο. Μπορείτε να διαβάσετε περισσότερα για αυτούς τους μηχανισμούς και την κατάσταση με την εφαρμογή τους στο Αυτό το άρθρο. Για όσους ενδιαφέρονται, συνιστούμε να διαβάσετε ολόκληρη τη σειρά άρθρων για την ασφάλεια του UEFI BIOS από CodeRush.

Επαλήθευση ελέγχου ταυτότητας UEFI BIOS

Όταν μιλάμε για αξιόπιστες τεχνολογίες εκκίνησης, το πρώτο πράγμα που μας έρχεται στο μυαλό είναι το Secure Boot. Ωστόσο, αρχιτεκτονικά, έχει σχεδιαστεί για τον έλεγχο ταυτότητας στοιχείων εκτός του UEFI BIOS (προγράμματα οδήγησης, φορτωτές κ.λπ.) και όχι το ίδιο το υλικολογισμικό.

Ως εκ τούτου, η Intel σε SoCs με τη μικροαρχιτεκτονική Bay Trail (2012) υλοποίησε μια ασφαλή εκκίνηση χωρίς δυνατότητα εναλλαγής υλικού (Verified Boot), η οποία δεν έχει καμία σχέση με την προαναφερθείσα τεχνολογία Secure Boot. Αργότερα (2013), αυτός ο μηχανισμός βελτιώθηκε και, με το όνομα Intel Boot Guard, κυκλοφόρησε για επιτραπέζιους υπολογιστές με τη μικροαρχιτεκτονική Haswell.

Πριν περιγράψουμε το Intel Boot Guard, ας δούμε τους χρόνους εκτέλεσης στην αρχιτεκτονική Intel 64, οι οποίοι, σε συνδυασμό, αποτελούν τις ρίζες εμπιστοσύνης για αυτήν την αξιόπιστη τεχνολογία εκκίνησης.

Intel CPU

Το Cap προτείνει ότι ο επεξεργαστής είναι το κύριο περιβάλλον εκτέλεσης στην αρχιτεκτονική Intel 64. Γιατί είναι επίσης η ρίζα της εμπιστοσύνης; Αποδεικνύεται ότι είναι η κατοχή των ακόλουθων στοιχείων που το κάνει αυτό:

  • Το Microcode ROM είναι μια μη πτητική, μη επανεγγράψιμη μνήμη για την αποθήκευση μικροκώδικα. Πιστεύεται ότι ο μικροκώδικας είναι η υλοποίηση του συστήματος εντολών του επεξεργαστή στις απλούστερες οδηγίες. Συμβαίνει και σε μικροκώδικα σφάλματα. Έτσι στο BIOS μπορείτε να βρείτε δυαδικά αρχεία με ενημερώσεις μικροκώδικα (είναι υπέρθεση κατά την εκκίνηση, επειδή η ROM δεν μπορεί να αντικατασταθεί). Το περιεχόμενο αυτών των δυαδικών αρχείων είναι κρυπτογραφημένο, γεγονός που περιπλέκει πολύ την ανάλυση (επομένως, το συγκεκριμένο περιεχόμενο του μικροκώδικα είναι γνωστό μόνο σε όσους το αναπτύσσουν) και υπογράφεται για τον έλεγχο της ακεραιότητας και της αυθεντικότητας.
  • Κλειδί AES για την αποκρυπτογράφηση των περιεχομένων των ενημερώσεων μικροκώδικα.
  • έναν κατακερματισμό του δημόσιου κλειδιού RSA που επαληθεύει την υπογραφή των ενημερώσεων μικροκώδικα.
  • Κατακερματισμός δημόσιου κλειδιού RSA, το οποίο ελέγχει την υπογραφή των μονάδων κώδικα ACM (Authenticated Code Module) που έχει αναπτυχθεί από την Intel, τις οποίες η CPU μπορεί να εκτελέσει πριν από την εκκίνηση του BIOS (hello microcode) ή κατά τη λειτουργία του, όταν συμβαίνουν κάποια συμβάντα.

Intel ME

Αυτό το υποσύστημα στο ιστολόγιό μας ήταν αφιερωμένο σε две Άρθρο. Θυμηθείτε ότι αυτό το εκτελέσιμο περιβάλλον βασίζεται στον μικροελεγκτή που είναι ενσωματωμένος στο chipset και είναι το πιο κρυφό και προνομιακό στο σύστημα.

Παρά το μυστικό, το Intel ME είναι επίσης η ρίζα της εμπιστοσύνης, επειδή έχει:

  • ME ROM - μη πτητική, μη επανεγγράψιμη μνήμη (δεν παρέχεται μέθοδος ενημέρωσης), που περιέχει τον κωδικό έναρξης, καθώς και τον κατακερματισμό SHA256 του δημόσιου κλειδιού RSA, το οποίο ελέγχει την υπογραφή του υλικολογισμικού Intel ME.
  • Κλειδί AES για την αποθήκευση μυστικών πληροφοριών.
  • πρόσβαση σε ένα σύνολο ασφαλειών (FPF, Field Programmable Fuses) ενσωματωμένες στο chipset για μόνιμη αποθήκευση ορισμένων πληροφοριών, συμπεριλαμβανομένων των πληροφοριών που καθορίζονται από τον προμηθευτή του συστήματος υπολογιστή.

Intel Boot Guard 1.x

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

Έτσι, το Intel Boot Guard (BG) είναι μια τεχνολογία ελέγχου ταυτότητας UEFI BIOS που υποστηρίζεται από υλικό. Αν κρίνουμε από τη μικρή περιγραφή του στο βιβλίο [Platform Embedded Security Technology Revealed, Chapter Boot with Integrity, or Not Boot], λειτουργεί ως αξιόπιστη αλυσίδα εκκίνησης. Και ο πρώτος σύνδεσμος σε αυτό είναι ο κωδικός εκκίνησης (μικροκώδικας) μέσα στη CPU, ο οποίος ενεργοποιείται από το συμβάν RESET (δεν πρέπει να συγχέεται με το διάνυσμα RESET στο BIOS!). Η CPU βρίσκει μια μονάδα κώδικα (Intel BG startup ACM) που αναπτύχθηκε και υπογράφηκε από την Intel στη μνήμη flash SPI, τη φορτώνει στη μνήμη cache της, την επαληθεύει (είχε ήδη σημειωθεί παραπάνω ότι η CPU έχει ένα κατακερματισμό δημόσιου κλειδιού που επαληθεύει την υπογραφή ACM ) και ξεκινά.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard

Αυτή η ενότητα κώδικα είναι υπεύθυνη για την επαλήθευση ενός μικρού τμήματος εκκίνησης του UEFI BIOS - Initial Boot Block (IBB), το οποίο, με τη σειρά του, περιέχει τη λειτουργία για την επαλήθευση του κύριου μέρους του UEFI BIOS. Έτσι, η Intel BG σάς επιτρέπει να επαληθεύσετε την αυθεντικότητα του BIOS πριν από την εκκίνηση του λειτουργικού συστήματος (η οποία μπορεί να εκτελεστεί υπό την επίβλεψη της τεχνολογίας Secure Boot).

Η τεχνολογία Intel BG παρέχει δύο τρόπους λειτουργίας (και ο ένας δεν παρεμβαίνει στον άλλο, δηλαδή μπορούν να ενεργοποιηθούν και οι δύο λειτουργίες στο σύστημα και να απενεργοποιηθούν και οι δύο).

Μετρημένη μπότα

Στη λειτουργία Measured Boot (MB), κάθε στοιχείο εκκίνησης (ξεκινώντας από το ROM εκκίνησης της CPU) "μετράει" το επόμενο χρησιμοποιώντας τις δυνατότητες της μονάδας Trusted Platform Module (TPM). Για όσους δεν ξέρουν, να εξηγήσω.

Το TPM διαθέτει PCR (Platform Configuration Registers), τα οποία καταγράφουν το αποτέλεσμα της λειτουργίας κατακερματισμού σύμφωνα με τον τύπο:

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard

Εκείνοι. η τρέχουσα τιμή PCR εξαρτάται από την προηγούμενη και αυτοί οι καταχωρητές επαναφέρονται μόνο όταν το σύστημα είναι RESET.

Έτσι, στη λειτουργία MB, σε κάποια χρονική στιγμή, τα PCR αντικατοπτρίζουν ένα μοναδικό (εντός των δυνατοτήτων της λειτουργίας κατακερματισμού) αναγνωριστικό του κώδικα ή των δεδομένων που «μετρήθηκαν». Οι τιμές PCR μπορούν να χρησιμοποιηθούν για την κρυπτογράφηση ορισμένων λειτουργιών δεδομένων (TPM_Seal). Μετά από αυτό, η αποκρυπτογράφηση τους (TPM_Unseal) θα είναι δυνατή μόνο εάν οι τιμές PCR δεν έχουν αλλάξει ως αποτέλεσμα της φόρτωσης (δηλαδή, δεν έχει τροποποιηθεί ούτε ένα "μετρημένο" στοιχείο).

Επαληθευμένη εκκίνηση

Το πιο τρομακτικό πράγμα για όσους θέλουν να τροποποιήσουν το UEFI BIOS είναι η λειτουργία Verified Boot (VB), στην οποία κάθε στοιχείο εκκίνησης επαληθεύει κρυπτογραφικά την ακεραιότητα και την αυθεντικότητα του επόμενου. Και σε περίπτωση σφάλματος επαλήθευσης, προκύπτει (ένα από τα παρακάτω):

  • τερματισμός λειτουργίας με χρονικό όριο από 1 λεπτό έως 30 λεπτά (έτσι ώστε ο χρήστης να έχει χρόνο να καταλάβει γιατί ο υπολογιστής του δεν εκκινείται και, αν είναι δυνατόν, να προσπαθήσει να επαναφέρει το BIOS).
  • άμεσος τερματισμός λειτουργίας (έτσι ώστε ο χρήστης να μην έχει χρόνο να καταλάβει και, επιπλέον, να κάνει).
  • συνέχιση της εργασίας με ίσιο πρόσωπο (η περίπτωση που δεν υπάρχει χρόνος για ασφάλεια, επειδή υπάρχουν πιο σημαντικά πράγματα να κάνετε).

Η επιλογή της ενέργειας εξαρτάται από την καθορισμένη διαμόρφωση Intel BG (δηλαδή, από τη λεγόμενη πολιτική επιβολής), η οποία καταγράφεται μόνιμα από τον προμηθευτή της πλατφόρμας υπολογιστή σε μια ειδικά σχεδιασμένη αποθήκευση - ασφάλειες chipset (FPF). Σε αυτό το σημείο θα σταθούμε λεπτομερέστερα αργότερα.

Εκτός από τη διαμόρφωση, ο προμηθευτής δημιουργεί δύο κλειδιά RSA 2048 και δημιουργεί δύο δομές δεδομένων (φαίνεται στο σχήμα):

  1. Το μανιφέστο ριζικού κλειδιού προμηθευτή (KEYM, OEM Root Key Manifest), το οποίο τοποθετεί το SVN (Αριθμός έκδοσης ασφαλείας) αυτού του μανιφέστου, τον κατακερματισμό SHA256 του δημόσιου κλειδιού της επόμενης δήλωσης, το δημόσιο κλειδί RSA (δηλαδή το δημόσιο τμήμα του κλειδί ρίζας προμηθευτή) για επαλήθευση της υπογραφής αυτού του μανιφέστου και της ίδιας της υπογραφής.
  2. Το IBB Manifest (IBBM, Initial Boot Block Manifest), το οποίο τοποθετεί το SVN αυτού του μανιφέστου, τον κατακερματισμό SHA256 του IBB, το δημόσιο κλειδί για την επαλήθευση της υπογραφής αυτού του μανιφέστου και την ίδια την υπογραφή.

Ο κατακερματισμός SHA256 του ριζικού κλειδιού OEM είναι μόνιμα γραμμένος σε ασφάλειες chipset (FPF), ακριβώς όπως η διαμόρφωση Intel BG. Εάν η ρύθμιση παραμέτρων Intel BG προβλέπει τη συμπερίληψη αυτής της τεχνολογίας, τότε από εδώ και στο εξής αυτό το σύστημα μόνο ο κάτοχος του ιδιωτικού τμήματος του ριζικού κλειδιού OEM μπορεί να ενημερώσει το BIOS (δηλαδή να μπορεί να υπολογίσει εκ νέου αυτές τις δηλώσεις), δηλ. Προμηθευτή.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard

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

Στην πραγματικότητα, η Intel παρέχει έτσι στον προμηθευτή τη δυνατότητα να χρησιμοποιήσει διαφορετικά κλειδιά IBB για διαφορετικές σειρές προϊόντων και ένα ως ρίζα. Εάν διαρρεύσει το ιδιωτικό τμήμα του κλειδιού IBB (που υπογράφει τη δεύτερη δήλωση), το περιστατικό θα επηρεάσει μόνο μία σειρά προϊόντων και μόνο έως ότου ο πωλητής δημιουργήσει ένα νέο ζεύγος και ενεργοποιήσει τις δηλώσεις που υπολογίστηκαν εκ νέου στην επόμενη ενημέρωση του BIOS.

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

Intel Boot Guard Configuration

Τώρα ας ρίξουμε μια πιο προσεκτική ματιά στη διαμόρφωση του Intel BG και στη διαδικασία δημιουργίας του. Αν κοιτάξετε την αντίστοιχη καρτέλα στο GUI του Flash Image Tool από το Intel System Tool Kit (STK), θα παρατηρήσετε ότι η διαμόρφωση Intel BG περιλαμβάνει ένα κατακερματισμό του δημόσιου τμήματος του ριζικού κλειδιού του προμηθευτή, μερικά ασαφή αξίες, και ούτω καθεξής. Προφίλ Intel BG.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard

Η δομή αυτού του προφίλ:

typedef struct BG_PROFILE
{
	unsigned long Force_Boot_Guard_ACM : 1;
	unsigned long Verified_Boot : 1;
	unsigned long Measured_Boot : 1;
	unsigned long Protect_BIOS_Environment : 1;
	unsigned long Enforcement_Policy : 2; // 00b – do nothing
                                              // 01b – shutdown with timeout
                                              // 11b – immediate shutdown
	unsigned long : 26;
};

Γενικά, η διαμόρφωση Intel BG είναι μια πολύ ευέλικτη οντότητα. Σκεφτείτε, για παράδειγμα, τη σημαία Force_Boot_Guard_ACM. Όταν διαγραφεί, εάν η μονάδα ACM εκκίνησης BG στο φλας SPI δεν βρεθεί, δεν θα πραγματοποιηθεί αξιόπιστη εκκίνηση. Θα είναι αναξιόπιστο.

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

Αφήστε τέτοια πράγματα στους πωλητές...

Το GUI του βοηθητικού προγράμματος παρέχει τα ακόλουθα "έτοιμα" προφίλ:

αριθμός
καθεστώς
Περιγραφή

0
No_FVME
Η τεχνολογία Intel BG είναι απενεργοποιημένη

1
VE
Η λειτουργία VB ενεργοποιήθηκε, τερματισμός λειτουργίας με χρονικό όριο

2
VME
και οι δύο λειτουργίες είναι ενεργοποιημένες (VB και MB), τερματισμός λειτουργίας με χρονικό όριο

3
VM
και οι δύο λειτουργίες είναι ενεργοποιημένες, χωρίς να απενεργοποιείται το σύστημα

4
FVE
Ενεργοποιημένη λειτουργία VB, άμεσος τερματισμός λειτουργίας

5
FVME
και οι δύο λειτουργίες ενεργοποιημένες, άμεσος τερματισμός λειτουργίας

Όπως αναφέρθηκε ήδη, η διαμόρφωση Intel BG πρέπει να γραφτεί μια για πάντα από τον προμηθευτή συστήματος σε ασφάλειες chipset (FPF) - μια μικρή (σύμφωνα με μη επαληθευμένες πληροφορίες, μόνο 256 byte) αποθήκευση πληροφοριών υλικού μέσα στο chipset, η οποία μπορεί να προγραμματιστεί εκτός των εγκαταστάσεων παραγωγής της Intel (γι' αυτό Προγραμματιζόμενο πεδίο ασφάλειες).

Είναι εξαιρετικό για την αποθήκευση των ρυθμίσεων επειδή:

  • έχει μια περιοχή αποθήκευσης δεδομένων που μπορεί να προγραμματιστεί μία φορά (ακριβώς εκεί που είναι γραμμένη η διαμόρφωση Intel BG).
  • μόνο το Intel ME μπορεί να το διαβάσει και να το προγραμματίσει.

Έτσι, για να ορίσετε τη διαμόρφωση για την τεχνολογία Intel BG σε ένα συγκεκριμένο σύστημα, ο πωλητής κάνει τα εξής κατά την παραγωγή:

  1. Χρησιμοποιώντας το βοηθητικό πρόγραμμα Flash Image Tool (από την Intel STK), δημιουργείται μια εικόνα υλικολογισμικού με δεδομένη διαμόρφωση Intel BG ως μεταβλητές εντός της περιοχής Intel ME (το λεγόμενο προσωρινό κάτοπτρο για FPF).
  2. Χρησιμοποιώντας το Flash Programming Tool (από την Intel STK), γράφει αυτή την εικόνα στη μνήμη flash SPI του συστήματος και κλείνει το λεγόμενο. λειτουργία κατασκευής (στην περίπτωση αυτή, η αντίστοιχη εντολή αποστέλλεται στην Intel ME).

Ως αποτέλεσμα αυτών των λειτουργιών, η Intel ME θα δεσμεύσει στα FPF τις δεδομένες τιμές από τον καθρέφτη για τα FPF στην περιοχή ME, θα ορίσει τα δικαιώματα στους περιγραφείς φλας SPI στις τιμές που συνιστώνται από την Intel (που περιγράφονται στην αρχή του άρθρο) και πραγματοποιήστε επαναφορά συστήματος.

Ανάλυση υλοποίησης Intel Boot Guard

Για να αναλύσουμε την εφαρμογή αυτής της τεχνολογίας σε ένα συγκεκριμένο παράδειγμα, ελέγξαμε τα ακόλουθα συστήματα για ίχνη τεχνολογίας Intel BG:

Σύστημα
Σημείωση

Gigabyte GA-H170-D3H
Skylake, υπάρχει υποστήριξη

Gigabyte GA-Q170-D3H
Skylake, υπάρχει υποστήριξη

Gigabyte GA-B150-HD3
Skylake, υπάρχει υποστήριξη

MSI H170A Gaming Pro
Skylake, χωρίς υποστήριξη

Lenovo ThinkPad 460
Skylake, διαθέσιμη υποστήριξη, ενεργοποιημένη η τεχνολογία

Lenovo Yoga 2 Pro
Haswell, καμία υποστήριξη

Lenovo U330p
Haswell, καμία υποστήριξη

"Υποστήριξη" σημαίνει την παρουσία της μονάδας ACM εκκίνησης Intel BG, των δηλώσεων που αναφέρονται παραπάνω και του αντίστοιχου κωδικού στο BIOS, π.χ. υλοποιήσεις για ανάλυση.

Ως παράδειγμα, ας πάρουμε αυτό που κατεβάσατε από το γραφείο. εικόνα τοποθεσίας πωλητή μνήμης flash SPI για Gigabyte GA-H170-D3H (έκδοση F4).

ROM εκκίνησης CPU Intel

Πρώτα απ 'όλα, ας μιλήσουμε για τις ενέργειες του επεξεργαστή εάν είναι ενεργοποιημένη η τεχνολογία Intel BG.

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

Μετά την έξοδο από την κατάσταση RESET, ο επεξεργαστής (στον χώρο διευθύνσεων του οποίου έχουν ήδη αντιστοιχιστεί τα περιεχόμενα της μνήμης flash) βρίσκει το FIT (Πίνακας διεπαφής υλικολογισμικού). Η εύρεση του είναι εύκολη, ο δείκτης σε αυτό είναι γραμμένος στη διεύθυνση FFFF FFC0h.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Σε αυτό το παράδειγμα, αυτή η διεύθυνση περιέχει την τιμή FFD6 9500h. Γυρίζοντας σε αυτή τη διεύθυνση, ο επεξεργαστής βλέπει τον πίνακα FIT, τα περιεχόμενα του οποίου χωρίζονται σε εγγραφές. Η πρώτη καταχώρηση είναι η επικεφαλίδα της ακόλουθης δομής:

typedef struct FIT_HEADER
{
	char           Tag[8];     // ‘_FIT_   ’
	unsigned long  NumEntries; // including FIT header entry
	unsigned short Version;    // 1.0
	unsigned char  EntryType;  // 0
	unsigned char  Checksum;
};

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Για κάποιο άγνωστο λόγο, το άθροισμα ελέγχου δεν υπολογίζεται πάντα σε αυτούς τους πίνακες (το πεδίο παραμένει μηδενικό).

Οι υπόλοιπες εγγραφές δείχνουν διάφορα δυαδικά αρχεία που πρέπει να αναλυθούν / εκτελεστούν πριν από την εκτέλεση του BIOS, π.χ. πριν μεταβείτε στο παλαιού τύπου διάνυσμα RESET (FFFF FFF0h). Η δομή κάθε τέτοιας καταχώρισης έχει ως εξής:

typedef struct FIT_ENTRY
{
	unsigned long  BaseAddress;
	unsigned long  : 32;
	unsigned long  Size;
	unsigned short Version;     // 1.0
	unsigned char  EntryType;
	unsigned char  Checksum;
};

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Το πεδίο EntryType υποδεικνύει τον τύπο του μπλοκ στο οποίο οδηγεί αυτή η καταχώρηση. Γνωρίζουμε διάφορους τύπους:

enum FIT_ENTRY_TYPES
{
	FIT_HEADER = 0,
	MICROCODE_UPDATE,
	BG_ACM,
	BIOS_INIT = 7,
	TPM_POLICY,
	BIOS_POLICY,
	TXT_POLICY,
	BG_KEYM,
	BG_IBBM
};

Είναι πλέον προφανές ότι μία από τις καταχωρήσεις δείχνει τη θέση του δυαδικού ACM εκκίνησης της Intel BG. Η δομή της κεφαλίδας αυτού του δυαδικού αρχείου είναι τυπική για μονάδες κώδικα που αναπτύχθηκαν από την Intel (ACM, ενημερώσεις μικροκώδικα, ενότητες κώδικα Intel ME, ...).

typedef struct BG_ACM_HEADER
{
	unsigned short ModuleType;     // 2
	unsigned short ModuleSubType;  // 3
	unsigned long  HeaderLength;   // in dwords
	unsigned long  : 32;
	unsigned long  : 32;
	unsigned long  ModuleVendor;   // 8086h
	unsigned long  Date;           // in BCD format
	unsigned long  TotalSize;      // in dwords
	unsigned long  unknown1[6];
	unsigned long  EntryPoint;
	unsigned long  unknown2[16];
	unsigned long  RsaKeySize;     // in dwords
	unsigned long  ScratchSize;    // in dwords
	unsigned char  RsaPubMod[256];
	unsigned long  RsaPubExp;
	unsigned char  RsaSig[256];
};

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Ο επεξεργαστής φορτώνει αυτό το δυαδικό αρχείο στην κρυφή μνήμη του, επαληθεύει και εκκινεί.

Εκκίνηση Intel BG ACM

Ως αποτέλεσμα της ανάλυσης του έργου αυτού του ACM, κατέστη σαφές ότι κάνει τα εξής:

  • λαμβάνει από την Intel ME τη διαμόρφωση Intel BG που είναι γραμμένη στις ασφάλειες του σετ chip (FPF).
  • βρίσκει το KEYM και το IBBM manifest, τα επαληθεύει.

Για να βρει αυτά τα μανιφέστα, το ACM χρησιμοποιεί επίσης τον πίνακα FIT, ο οποίος έχει δύο τύπους καταχωρίσεων για να δείξει αυτές τις δομές (δείτε FIT_ENTRY_TYPES παραπάνω).

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

typedef struct KEY_MANIFEST
{
	char           Tag[8];          // ‘__KEYM__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned char  : 8;             // 1
	unsigned short : 16;            // 0Bh
	unsigned short : 16;            // 20h == hash size?
	unsigned char  IbbmKeyHash[32]; // SHA256 of an IBBM public key
	BG_RSA_ENTRY   OemRootKey;
};

typedef struct BG_RSA_ENTRY
{
	unsigned char  : 8;             // 10h
	unsigned short : 16;            // 1
	unsigned char  : 8;             // 10h
	unsigned short RsaPubKeySize;   // 800h
	unsigned long  RsaPubExp;
	unsigned char  RsaPubKey[256];
	unsigned short : 16;            // 14
	unsigned char  : 8;             // 10h
	unsigned short RsaSigSize;      // 800h
	unsigned short : 16;            // 0Bh
	unsigned char  RsaSig[256];
};

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Για την επαλήθευση του δημόσιου κλειδιού του ριζικού κλειδιού OEM, υπενθυμίζουμε ότι χρησιμοποιείται ο κατακερματισμός SHA256 από τις ασφάλειες, ο οποίος αυτή τη στιγμή έχει ήδη ληφθεί από την Intel ME.

Ας περάσουμε στο δεύτερο μανιφέστο. Αποτελείται από τρεις δομές:

typedef struct IBB_MANIFEST
{
	ACBP Acbp;         // Boot policies
	IBBS Ibbs;         // IBB description
	IBB_DESCRIPTORS[];
	PMSG Pmsg;         // IBBM signature
};

Το πρώτο περιέχει μερικές σταθερές:

typedef struct ACBP
{
	char           Tag[8];          // ‘__ACBP__’
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 1
	unsigned char  : 8;             // 10h
	unsigned char  : 8;             // 0
	unsigned short : 16;            // x & F0h = 0
	unsigned short : 16;            // 0 < x <= 400h
};

Το δεύτερο περιέχει τον κατακερματισμό SHA256 του IBB και τον αριθμό των περιγραφέων που περιγράφουν τα περιεχόμενα του IBB (δηλαδή από τι υπολογίζεται ο κατακερματισμός):

typedef struct IBBS
{
	char           Tag[8];            // ‘__IBBS__’
	unsigned char  : 8;               // 10h
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // 0
	unsigned char  : 8;               // x <= 0Fh
	unsigned long  : 32;              // x & FFFFFFF8h = 0
	unsigned long  Unknown[20];
	unsigned short : 16;              // 0Bh
	unsigned short : 16;              // 20h == hash size ?
	unsigned char  IbbHash[32];       // SHA256 of an IBB
	unsigned char  NumIbbDescriptors;
};

Οι περιγραφείς IBB ακολουθούν αυτή τη δομή, ο ένας μετά τον άλλο. Το περιεχόμενό τους έχει την εξής μορφή:

typedef struct IBB_DESCRIPTOR
{
	unsigned long  : 32;
	unsigned long  BaseAddress;
	unsigned long  Size;
};

Είναι απλό: κάθε περιγραφέας περιέχει τη διεύθυνση/μέγεθος ενός τμήματος IBB. Έτσι, η συνένωση των μπλοκ στα οποία επισημαίνονται αυτοί οι περιγραφείς (με τη σειρά των ίδιων των περιγραφέων) είναι IBB. Και, κατά κανόνα, το IBB είναι ένας συνδυασμός όλων των ενοτήτων των φάσεων SEC και PEI.

Η δεύτερη δήλωση τελειώνει με μια δομή που περιέχει το δημόσιο κλειδί IBB (επαληθευμένο από τον κατακερματισμό SHA256 από την πρώτη δήλωση) και την υπογραφή αυτής της δήλωσης:

typedef struct PMSG
{
	char           Tag[8];            // ‘__PMSG__’
	unsigned char  : 8;               // 10h
	BG_RSA_ENTRY   IbbKey;
};

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Έτσι, ακόμη και πριν από την έναρξη της εκτέλεσης του UEFI BIOS, ο επεξεργαστής θα εκκινήσει το ACM, το οποίο θα επαληθεύσει την αυθεντικότητα των περιεχομένων των ενοτήτων με τον κωδικό φάσης SEC και PEI. Στη συνέχεια, ο επεξεργαστής βγαίνει από το ACM, μετακινείται κατά μήκος του διανύσματος RESET και ξεκινά την εκτέλεση του BIOS.

Το επαληθευμένο διαμέρισμα PEI πρέπει να περιέχει μια λειτουργική μονάδα που θα ελέγχει το υπόλοιπο BIOS (κωδικός DXE). Αυτή η ενότητα αναπτύσσεται ήδη από την IBV (Independent BIOS Vendor) ή τον ίδιο τον προμηθευτή του συστήματος. Επειδή Μόνο τα συστήματα Lenovo και Gigabyte αποδείχτηκαν στη διάθεσή μας και έχοντας υποστήριξη Intel BG, ας εξετάσουμε τον κώδικα που εξάγεται από αυτά τα συστήματα.

Μονάδα UEFI BIOS LenovoVerifiedBootPei

Στην περίπτωση της Lenovo, αποδείχθηκε ότι ήταν η μονάδα LenovoVerifiedBootPei {B9F2AC77-54C7-4075-B42E-C36325A9468D}, που αναπτύχθηκε από τη Lenovo.

Η δουλειά του είναι να αναζητήσει (μέσω GUID) έναν πίνακα κατακερματισμού για το DXE και να επαληθεύσει το DXE.

if (EFI_PEI_SERVICES->GetBootMode() != BOOT_ON_S3_RESUME)
{
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	if (!VerifyDxe())
		return EFI_SECURITY_VIOLATION;
}

Хеш таблица {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} имеет следующий формат:

typedef struct HASH_TABLE
{
	char          Tag[8];            // ‘$HASHTBL’
	unsigned long NumDxeDescriptors;
	DXE_DESCRIPTORS[];
};

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long Offset;
	unsigned long Size;
};

Μονάδα UEFI BIOS BootGuardPei

Στην περίπτωση της Gigabyte, αποδείχθηκε ότι ήταν η μονάδα BootGuardPei {B41956E1-7CA2-42DB-9562-168389F0F066}, που αναπτύχθηκε από την AMI, και επομένως υπάρχει σε οποιοδήποτε AMI BIOS με υποστήριξη Intel BG.

Ο αλγόριθμος λειτουργίας του είναι κάπως διαφορετικός, ωστόσο, συνοψίζεται στο ίδιο:

int bootMode = EFI_PEI_SERVICES->GetBootMode();

if (bootMode != BOOT_ON_S3_RESUME &&
    bootMode != BOOT_ON_FLASH_UPDATE &&
    bootMode != BOOT_IN_RECOVERY_MODE)
{
	HOB* h = CreateHob();
	if (!FindHashTable())
		return EFI_NOT_FOUND;
	WriteHob(&h, VerifyDxe());
	return h;
}

Ο πίνακας κατακερματισμού {389CC6F2-1EA8-467B-AB8A-78E769AE2A15} που εμφανίζεται έχει την ακόλουθη μορφή:

typedef HASH_TABLE DXE_DESCRIPTORS[];

typedef struct DXE_DESCRIPTOR
{
	unsigned char BlockHash[32];     // SHA256
	unsigned long BaseAddress;
	unsigned long Size;
};

Intel Boot Guard 2.x

Ας μιλήσουμε εν συντομία για μια άλλη υλοποίηση του Intel Boot Guard, η οποία βρέθηκε σε ένα νεότερο σύστημα βασισμένο στο Intel SoC με μικροαρχιτεκτονική Apollo Lake - ASRock J4205-IT.

Αν και αυτή η έκδοση θα χρησιμοποιείται μόνο σε SoC (τα νέα συστήματα με μικροαρχιτεκτονική επεξεργαστή Kaby Lake συνεχίζουν να χρησιμοποιούν το Intel Boot Guard 1.x), έχει μεγάλο ενδιαφέρον η εξερεύνηση μιας νέας αρχιτεκτονικής επιλογής για πλατφόρμες που βασίζονται σε Intel SoC, η οποία έχει φανεί απτή αλλαγές, για παράδειγμα:

  • Οι περιοχές BIOS και Intel ME (ή μάλλον Intel TXE, σύμφωνα με την ορολογία Intel SoC) είναι πλέον μία περιοχή IFWI.
  • Παρόλο που το Intel BG ήταν ενεργοποιημένο στην πλατφόρμα, δομές όπως FIT, KEYM, IBBM δεν βρέθηκαν στη μνήμη flash.
  • εκτός από τους πυρήνες TXE και ISH (x86), ένας τρίτος πυρήνας (και πάλι ARC, παρεμπιπτόντως) προστέθηκε στο chipset - PMC (Power Management Controller), που σχετίζεται με τη διασφάλιση της λειτουργικότητας του υποσυστήματος ισχύος και την παρακολούθηση της απόδοσης.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Το περιεχόμενο της νέας περιοχής IFWI είναι ένα σύνολο από τις ακόλουθες ενότητες:

Μετατόπιση
Όνομα
Περιγραφή

0000 2000h
SMIP
κάποια διαμόρφωση πλατφόρμας, υπογεγραμμένη από τον προμηθευτή

0000 6000h
RBEP
Ενότητα κώδικα υλικολογισμικού Intel TXE, x86, υπογεγραμμένο από την Intel

0001 0000h
PMCP
ενότητα κώδικα υλικολογισμικού Intel PMC, ARC, υπογεγραμμένο από την Intel

0002 0000h
FTPR
Ενότητα κώδικα υλικολογισμικού Intel TXE, x86, υπογεγραμμένο από την Intel

0007B000h
UCOD
Ενημερώσεις μικροκώδικα CPU υπογεγραμμένες από την Intel

0008 0000h
IBBP
UEFI BIOS, φάσεις SEC/PEI, x86, υπογεγραμμένος προμηθευτής

0021 8000h
ISHC
ενότητα κώδικα του υλικολογισμικού Intel ISH, x86, υπογεγραμμένο από τον προμηθευτή

0025 8000h
FTP
Ενότητα κώδικα υλικολογισμικού Intel TXE, x86, υπογεγραμμένο από την Intel

0036 1000h
IUNP
άγνωστο

0038 1000h
OBBP
UEFI BIOS, φάση DXE, x86, ανυπόγραφο

Κατά την ανάλυση του υλικολογισμικού TXE, έγινε προφανές ότι μετά το RESET, το TXE διατηρεί τον επεξεργαστή σε αυτήν την κατάσταση μέχρι να προετοιμάσει τα βασικά περιεχόμενα του χώρου διευθύνσεων για την CPU (FIT, ACM, RESET vector ...). Επιπλέον, το TXE τοποθετεί αυτά τα δεδομένα στη SRAM του, μετά την οποία παρέχει προσωρινά στον επεξεργαστή πρόσβαση εκεί και τα «απελευθερώνει» από το RESET.

Σε φύλαξη των rootkit

Λοιπόν, ας περάσουμε τώρα στα «καυτά». Κάποτε ανακαλύψαμε ότι σε πολλά συστήματα, οι περιγραφείς φλας SPI έχουν δικαιώματα πρόσβασης σε περιοχές της μνήμης flash SPI, έτσι ώστε όλοι οι χρήστες αυτής της μνήμης να μπορούν να γράφουν και να διαβάζουν οποιαδήποτε περιοχή. Εκείνοι. με τιποτα.

Μετά από έλεγχο με το βοηθητικό πρόγραμμα MEinfo (από την Intel STK), είδαμε ότι η λειτουργία κατασκευής σε αυτά τα συστήματα δεν ήταν κλειστή, επομένως, οι ασφάλειες του chipset (FPF) έμειναν σε απροσδιόριστη κατάσταση. Ναι, το Intel BG δεν είναι ούτε ενεργοποιημένο ούτε απενεργοποιημένο σε τέτοιες περιπτώσεις.

Μιλάμε για τα ακόλουθα συστήματα (όσον αφορά την Intel BG και όσα θα περιγραφούν αργότερα στο άρθρο, θα μιλήσουμε για συστήματα με μικροαρχιτεκτονική επεξεργαστή Haswell και ανώτερη):

  • όλα τα προϊόντα Gigabyte.
  • όλα τα προϊόντα MSI·
  • 21 μοντέλα φορητών υπολογιστών Lenovo και 4 μοντέλα διακομιστών Lenovo.

Φυσικά, αναφέραμε το εύρημα σε αυτούς τους προμηθευτές, καθώς και στην Intel.

Επαρκής ανταπόκριση ακολούθησε μόνο από Lenovoπου αναγνώρισε το πρόβλημα και κυκλοφόρησε ένα έμπλαστρο.

Gigabyte Φαίνεται ότι δέχτηκαν πληροφορίες για την ευπάθεια, αλλά δεν σχολίασαν με κανέναν τρόπο.

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

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

1. Εκκίνηση σε λειτουργικό σύστημα Windows (γενικά, τα βήματα που περιγράφονται παρακάτω μπορούν επίσης να γίνουν από το Linux, εάν αναπτύξετε ένα ανάλογο του Intel STK για το επιθυμητό λειτουργικό σύστημα). Χρησιμοποιώντας το βοηθητικό πρόγραμμα MEinfo, βεβαιωθείτε ότι οι ασφάλειες σε αυτό το σύστημα δεν είναι προγραμματισμένες.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
2. Διαβάστε τα περιεχόμενα της μνήμης flash χρησιμοποιώντας το Flash Programming Tool.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
3. Ανοίξτε την εικόνα ανάγνωσης χρησιμοποιώντας οποιοδήποτε εργαλείο επεξεργασίας UEFI BIOS, κάντε τις απαραίτητες αλλαγές (για παράδειγμα, εφαρμόστε ένα rootkit), δημιουργήστε / επεξεργαστείτε τις υπάρχουσες δομές KEYM και IBBM στην περιοχή ME.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Το δημόσιο τμήμα του κλειδιού RSA επισημαίνεται στην εικόνα, ο κατακερματισμός του οποίου θα προγραμματιστεί στις ασφάλειες του chipset μαζί με την υπόλοιπη διαμόρφωση Intel BG.

4. Χρησιμοποιώντας το Flash Image Tool, δημιουργήστε μια νέα εικόνα υλικολογισμικού (ρυθμίζοντας τη διαμόρφωση Intel BG).

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
5. Γράψτε μια νέα εικόνα για να αναβοσβήνει χρησιμοποιώντας το Flash Programming Tool, επαληθεύστε χρησιμοποιώντας το MEinfo ότι η περιοχή ME περιέχει τώρα τη διαμόρφωση Intel BG.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
6. Χρησιμοποιήστε το Flash Programming Tool για να κλείσετε τη λειτουργία κατασκευής.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
7. Το σύστημα θα επανεκκινήσει, μετά την οποία, χρησιμοποιώντας το MEinfo, μπορείτε να επαληθεύσετε ότι τα FPF έχουν πλέον προγραμματιστεί.

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Αυτές οι ενέργειες για πάντα ενεργοποιήστε το Intel BG σε αυτό το σύστημα. Θα είναι αδύνατη η αναίρεση της ενέργειας, πράγμα που σημαίνει:

  • μόνο ο κάτοχος του ιδιωτικού τμήματος του ριζικού κλειδιού (δηλαδή αυτός που ενεργοποίησε την Intel BG) θα μπορεί να ενημερώσει το UEFI BIOS σε αυτό το σύστημα.
  • εάν επιστρέψετε το αρχικό υλικολογισμικό σε αυτό το σύστημα, για παράδειγμα, χρησιμοποιώντας έναν προγραμματιστή, δεν θα ενεργοποιηθεί καν (συνέπεια της πολιτικής επιβολής σε περίπτωση σφάλματος επαλήθευσης).
  • για να απαλλαγείτε από ένα τέτοιο BIOS UEFI, πρέπει να αντικαταστήσετε το chipset με προγραμματισμένα FPF με ένα "καθαρό" (δηλαδή επανακολλήστε το chipset εάν έχετε πρόσβαση σε σταθμό συγκόλλησης υπερύθρων στην τιμή ενός αυτοκινήτου ή απλώς αντικαταστήστε τη μητρική πλακέτα ).

Για να κατανοήσετε τι μπορεί να κάνει ένα τέτοιο rootkit, πρέπει να αξιολογήσετε τι καθιστά δυνατή την εκτέλεση του κώδικά σας σε περιβάλλον UEFI BIOS. Ας πούμε, στην πιο προνομιακή λειτουργία του επεξεργαστή - SMM. Ένα τέτοιο rootkit μπορεί να έχει τις ακόλουθες ιδιότητες:

  • να εκτελεστεί παράλληλα με το λειτουργικό σύστημα (μπορείτε να διαμορφώσετε την επεξεργασία δημιουργώντας μια διακοπή SMI, η οποία θα ενεργοποιηθεί από ένα χρονόμετρο).
  • έχουν όλα τα πλεονεκτήματα της λειτουργίας SMM (πλήρης πρόσβαση στα περιεχόμενα της μνήμης RAM και των πόρων υλικού, μυστικότητα από το λειτουργικό σύστημα).
  • Ο κώδικας του rootkit μπορεί να κρυπτογραφηθεί και να αποκρυπτογραφηθεί κατά την εκκίνηση σε λειτουργία SMM. Οποιαδήποτε δεδομένα είναι διαθέσιμα μόνο σε λειτουργία SMM μπορούν να χρησιμοποιηθούν ως κλειδί κρυπτογράφησης. Για παράδειγμα, ένας κατακερματισμός από ένα σύνολο διευθύνσεων στο SMRAM. Για να αποκτήσετε αυτό το κλειδί, θα χρειαστεί να ανεβείτε στο SMM. Και αυτό μπορεί να γίνει με δύο τρόπους. Βρείτε το RCE στον κώδικα SMM και εκμεταλλευτείτε το ή προσθέστε τη δική σας μονάδα SMM στο BIOS, κάτι που είναι αδύνατο, αφού ενεργοποιήσαμε το Boot Guard.

Έτσι, αυτή η ευπάθεια επιτρέπει σε έναν εισβολέα να:

  • δημιουργήστε ένα κρυφό, μη αφαιρούμενο rootkit άγνωστου σκοπού στο σύστημα.
  • εκτελέστε τον κώδικά σας σε έναν από τους πυρήνες του chipset μέσα στο Intel SoC, δηλαδή στο Intel ISH (ρίξε μια πιο προσεκτική ματιά στην εικόνα).

Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Η αξιόπιστη μπότα του Schrödinger. Intel Boot Guard
Αν και οι δυνατότητες του υποσυστήματος Intel ISH δεν έχουν ακόμη διερευνηθεί, φαίνεται να είναι ένας ενδιαφέρον φορέας επίθεσης εναντίον της Intel ME.

Ευρήματα

  1. Η μελέτη παρείχε μια τεχνική περιγραφή του τρόπου λειτουργίας της τεχνολογίας Intel Boot Guard. Μείον μερικά μυστικά για την ασφάλεια της Intel μέσω του μοντέλου αφάνειας.
  2. Παρουσιάζεται ένα σενάριο επίθεσης που επιτρέπει τη δημιουργία ενός μη αφαιρέσιμου rootkit στο σύστημα.
  3. Έχουμε δει ότι οι σύγχρονοι επεξεργαστές Intel είναι σε θέση να εκτελέσουν πολύ αποκλειστικό κώδικα ακόμη και πριν από την εκκίνηση του BIOS.
  4. Οι πλατφόρμες με αρχιτεκτονική Intel 64 γίνονται όλο και λιγότερο κατάλληλες για τη λειτουργία ελεύθερου λογισμικού: επαλήθευση υλικού, αυξανόμενος αριθμός αποκλειστικών τεχνολογιών και υποσυστημάτων (τρεις πυρήνες στο chipset SoC: x86 ME, x86 ISH και ARC PMC).

Μετριασμοί

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

Οι χρήστες μπορούν να απενεργοποιήσουν το Intel BG στα συστήματά τους (τα οποία επηρεάζονται από την περιγραφόμενη ευπάθεια) εκτελώντας το Flash Programming Tool με την επιλογή -closemnf. Αρχικά, θα πρέπει να βεβαιωθείτε (χρησιμοποιώντας το MEinfo) ότι η διαμόρφωση της Intel BG στην περιοχή ME προβλέπει την ακριβή απενεργοποίηση αυτής της τεχνολογίας μετά τον προγραμματισμό σε FPF.

Πηγή: www.habr.com

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