macOS Kernel Extensions
Βασικές Πληροφορίες
Οι επεκτάσεις πυρήνα (Kexts) είναι πακέτα με επέκταση .kext
που φορτώνονται απευθείας στον χώρο πυρήνα του macOS, παρέχοντας επιπλέον λειτουργικότητα στον κύριο λειτουργικό σύστημα.
Απαιτήσεις
Φυσικά, αυτό είναι τόσο ισχυρό που είναι περίπλοκο να φορτωθεί μια επέκταση πυρήνα. Αυτές είναι οι απαιτήσεις που πρέπει να πληροί μια επέκταση πυρήνα για να φορτωθεί:
Κατά την είσοδο σε λειτουργία ανάκαμψης, οι επεκτάσεις πυρήνα πρέπει να επιτρέπεται να φορτωθούν:
Η επέκταση πυρήνα πρέπει να είναι υπογεγραμμένη με πιστοποιητικό υπογραφής κώδικα πυρήνα, το οποίο μπορεί να χορηγηθεί μόνο από την Apple. Ποιος θα εξετάσει λεπτομερώς την εταιρεία και τους λόγους για τους οποίους απαιτείται.
Η επέκταση πυρήνα πρέπει επίσης να είναι επικυρωμένη, ώστε η Apple να μπορεί να την ελέγξει για κακόβουλο λογισμικό.
Στη συνέχεια, ο χρήστης root είναι αυτός που μπορεί να φορτώσει την επέκταση πυρήνα και τα αρχεία μέσα στο πακέτο πρέπει να ανήκουν στο root.
Κατά τη διαδικασία φόρτωσης, το πακέτο πρέπει να προετοιμαστεί σε μια προστατευμένη μη-ριζική τοποθεσία:
/Library/StagedExtensions
(απαιτεί τη χορήγησηcom.apple.rootless.storage.KernelExtensionManagement
).Τέλος, κατά την προσπάθεια φόρτωσής της, ο χρήστης θα λάβει αίτημα επιβεβαίωσης και, εάν γίνει αποδεκτό, ο υπολογιστής πρέπει να επανεκκινηθεί για να τη φορτώσει.
Διαδικασία Φόρτωσης
Στο Catalina ήταν ως εξής: Είναι ενδιαφέρον να σημειωθεί ότι η διαδικασία επαλήθευσης συμβαίνει στο userland. Ωστόσο, μόνο εφαρμογές με τη χορήγηση com.apple.private.security.kext-management
μπορούν να ζητήσουν από τον πυρήνα να φορτώσει μια επέκταση: kextcache
, kextload
, kextutil
, kextd
, syspolicyd
Το
kextutil
cli ξεκινά τη διαδικασία επαλήθευσης για τη φόρτωση μιας επέκτασης
Θα επικοινωνήσει με το
kextd
στέλνοντας χρησιμοποιώντας ένα Mach service.
Το
kextd
θα ελέγξει διάφορα πράγματα, όπως η υπογραφή
Θα επικοινωνήσει με το
syspolicyd
για να ελέγξει αν η επέκταση μπορεί να φορτωθεί.
Το
syspolicyd
θα ζητήσει το αίτημα επιβεβαίωσης από τον χρήστη αν η επέκταση δεν έχει φορτωθεί προηγουμένως.
Το
syspolicyd
θα αναφέρει το αποτέλεσμα στοkextd
Το
kextd
θα μπορεί εν τέλει να πει στον πυρήνα να φορτώσει την επέκταση
Αν το kextd
δεν είναι διαθέσιμο, το kextutil
μπορεί να πραγματοποιήσει τις ίδιες ελέγχους.
Αναφορές
Last updated