Πρόσφατα μοιραζόμαστε εδώ στο ιστολόγιο τα νέα για πρόβλημα που προκαλείται από μια ενημέρωση της Microsoft σε διπλή εκκίνηση με διανομές Linux που χρησιμοποιούν GRUB. Σχετικά με το περιστατικό, αναφέραμε στο άρθρο ότι ο "σκοπός" αυτής της ενημέρωσης ήταν να αντιμετωπίσει μια ευπάθεια GRUB από πριν από δύο χρόνια, "CVE-2022-2601" που επιτρέπει στους εισβολείς να παρακάμπτουν τις ασφαλείς προστασίες εκκίνησης, αλλά δεν είναι όφελος, κατέληξε να βλάψει πολλούς χρήστες.
Μέρες μετά την εκδήλωση, Μάθιου Γκάρετ, ένας διάσημος προγραμματιστής πυρήνα Linux, Δημοσιεύω ένα σημείωμα στην οποία εξήγησε τη λειτουργία του μηχανισμού SBAT. Σε αυτό, αναφέρει ότι το SBAT σχεδιάστηκε για να αποκλείει ευπάθειες στον bootloader χωρίς να χρειάζεται ανάκληση ψηφιακών υπογραφών, και ήταν το κεντρικό στοιχείο στο πρόσφατο περιστατικό που προκλήθηκε από μια ενημέρωση των Windows που επηρέασε ορισμένες διανομές Linux σε συστήματα με ασφαλή εκκίνηση UEFI, εμποδίζοντας την εκκίνηση τους.
Σύμφωνα με τον Garrett, Τόσο η Microsoft όσο και ορισμένοι προγραμματιστές Linux μοιράζονται την ευθύνη του προβλήματος: η Microsoft επειδή δεν έχει δοκιμάσει επαρκώς την ενημέρωση σε όλα τα σενάρια και lΠρογραμματιστές Linux για μη ενημέρωση του αριθμού γενιάς GRUB και SBAT όταν ανακαλύφθηκαν τρωτά σημεία στο GRUB.
Ο Garrett αναφέρει επίσης ότι όταν δημιουργήθηκε η προδιαγραφή UEFI Secure Boot, όλοι οι εμπλεκόμενοι υποτίμησαν σε κάποιο βαθμό την πολυπλοκότητά της, καθώς
Το βασικό μοντέλο ασφαλείας Secure Boot δηλώνει ότι όλος ο κώδικας που εκτελείται σε ένα προνομιακό περιβάλλον σε επίπεδο πυρήνα πρέπει να επαληθευτεί πριν από την εκτέλεση: το υλικολογισμικό επαληθεύει τον φορτωτή εκκίνησης, ο φορτωτής εκκίνησης επαληθεύει τον πυρήνα και ο πυρήνας επαληθεύει κάθε πρόσθετο κώδικα που έχει φορτωθεί κατά την εκτέλεση. Έτσι, δημιουργείται ένα ασφαλές περιβάλλον για την εφαρμογή πρόσθετων πολιτικών ασφαλείας.
Επιπλέον, διευκρινίζει ότι, παρόλο που υπάρχει η δυνατότητα να "κάνετε σφάλματα" αυτή καθαυτή, η προδιαγραφή περιλαμβάνει έναν μηχανισμό για την ανάκληση μη αξιόπιστων υπογεγραμμένων στοιχείων: ο κατακερματισμός του προβληματικού κώδικα προστίθεται απλώς σε μια μεταβλητή και η φόρτωση οποιουδήποτε κώδικα με αυτός ο κατακερματισμός, ακόμα κι αν είναι υπογεγραμμένος με αξιόπιστο κλειδί.
Μέχρι αυτό το σημείο όλα ακούγονται καλά, αλλά Ο Garrett αναφέρει ότι το πρόβλημα έγκειται στην κλίμακα και κυρίως στον κατακερματισμό του οικοσυστήματος Secure Boot, αφού κάθε διανομή δημιουργεί τα δικά της αρχεία δυαδικά αρχεία για το bootloader, το καθένα με το δικό του κατακερματισμό.
Γι' αυτό το εξηγεί όταν εντοπιστεί μια ευπάθεια στον πηγαίο κώδικα ενός bootloader, ένας μεγάλος αριθμός αρχείων πρέπει να ανακληθεί διαφορετικά δυαδικά. Επιπλέον, η διαθέσιμη μνήμη για την αποθήκευση μιας μεταβλητής που περιέχει όλους αυτούς τους κατακερματισμούς είναι περιορισμένη, και δεν υπάρχει αρκετός χώρος για να προσθέσετε ένα νέο σύνολο κατακερματισμών κάθε φορά που ανακαλύπτεται μια ευπάθεια στο GRUB και γι' αυτό ήταν απαραίτητη μια διαφορετική λύση.
Αυτή η λύση ήταν το SBAT.
Η ιδέα του SBAT είναι σχετικά απλή: κάθε κρίσιμο στοιχείο εντός της αλυσίδας εκκίνησης δηλώνει έναν αριθμό δημιουργίας ασφαλείας που περιλαμβάνεται στο υπογεγραμμένο δυαδικό αρχείο. Όταν εντοπίζεται και διορθώνεται μια ευπάθεια, αυτός ο αριθμός παραγωγής αυξάνεται. Από εκεί, είναι δυνατή η έκδοση μιας ενημέρωσης που καθορίζει την ελάχιστη αποδεκτή παραγωγή. Τα στοιχεία εκκίνησης θα ελέγξουν αυτόν τον αριθμό για να καθορίσουν εάν μπορούν να εκτελέσουν το επόμενο στοιχείο στην αλυσίδα εκκίνησης, συγκρίνοντας το όνομα και τον αριθμό έκδοσης με τις τιμές που είναι αποθηκευμένες στη μεταβλητή υλικολογισμικού.
Αντί να χρειάζεται να ανακαλέσετε πολλά μεμονωμένα hash, μια ενημερωμένη έκδοση μπορεί να πει: "Οποιαδήποτε έκδοση του GRUB με γενιά ασφαλείας μικρότερη από αυτόν τον αριθμό θεωρείται μη αξιόπιστη."
Linux, ο πραγματικός υπεύθυνος
Ο Garrett αναφέρει ότι το λάθος που εμποδίζει την εκκίνηση ορισμένων συστημάτων μετά την ενημέρωση, δεν προέρχεται από τον κώδικα της Microsoft, αλλά από το στοιχείο shim του φορτωτή εκκίνησης Linux.
Αν και η Microsoft κυκλοφόρησε την ενημέρωση SBAT, είναι ο bootloader Linux που αρνείται να εκτελέσει παλαιότερες εκδόσεις του GRUB, κάνοντας τα πάντα να λειτουργούν όπως αναμένεται από τεχνική άποψη.
Αυτός είναι ο λόγος για τον οποίο το πραγματικό πρόβλημα έγκειται στο γεγονός ότι αρκετοί Οι διανομές Linux δεν έχουν κυκλοφορήσει ενημερωμένες εκδόσεις του GRUB που ενσωματώνουν διορθώσεις ασφαλείας και νέες γενιές SBAT. Αυτό κάνει αυτές τις εκδόσεις του GRUB να θεωρούνται μη ασφαλείς, καθώς το shim εμποδίζει την εκτέλεσή τους.
Είναι σημαντικό να σημειωθεί ότι το GRUB υπογράφεται από τις ίδιες τις διανομές Linux, όχι από τη Microsoft, γεγονός που εξαλείφει τυχόν εξωτερικές καθυστερήσεις στην ενημέρωση.
Δεδομένης της εξήγησης του Garrett, αναφέρει ότι η Microsoft κυκλοφόρησε την ενημέρωση της ώστε να εφαρμόζεται μόνο στα Windows (όπως θα έπρεπε) και το πρόβλημα ήταν από την πλευρά των διανομών που διαχειρίζονταν ακόμα ευάλωτες εκδόσεις και δημιουργώντας το πρόβλημα με τη διπλή εκκίνηση
Τέλος, αναφέρει ότι σε αυτό το περιστατικό, Δυστυχώς, τα κύρια θύματα αυτής της κατάστασης είναι οι τελικοί χρήστες, οι οποίοι ξαφνικά διαπιστώνουν ότι δεν μπορούν να εκκινήσουν το λειτουργικό σύστημα που θέλουν.
Αυτό είναι κάτι που δεν πρέπει ποτέ να συμβεί. Αν και κατανοώ την ανάγκη για την Ασφαλή εκκίνηση του UEFI να είναι ενεργοποιημένη από προεπιλογή και υποστηρίζω την απόφαση της Microsoft γενικά, είναι σαφές ότι η προσπάθεια αποτροπής της ενημέρωσης σε συστήματα διπλής εκκίνησης δεν λειτούργησε όπως αναμενόταν.
Αν είστε ενδιαφέρεται να μάθει περισσότερα για αυτό, σας προσκαλώ να συμβουλευτείτε το πρωτότυπο σημείωμα του Μάθιου Γκάρετ Στον ακόλουθο σύνδεσμο.