macOS Kernel Extensions
Last updated
Last updated
Les extensions du noyau (Kexts) sont des paquets avec une extension .kext
qui sont chargés directement dans l'espace noyau de macOS, fournissant des fonctionnalités supplémentaires au système d'exploitation principal.
De toute évidence, c'est tellement puissant qu'il est compliqué de charger une extension du noyau. Voici les exigences qu'une extension du noyau doit remplir pour être chargée :
Lorsque vous entrez en mode de récupération, les extensions du noyau doivent être autorisées à être chargées :
L'extension du noyau doit être signée avec un certificat de signature de code du noyau, qui ne peut être accordé que par Apple. Qui examinera en détail l'entreprise et les raisons pour lesquelles elle est nécessaire.
L'extension du noyau doit également être notarisée, Apple pourra la vérifier pour les logiciels malveillants.
Ensuite, l'utilisateur root est celui qui peut charger l'extension du noyau et les fichiers à l'intérieur du paquet doivent appartenir à root.
Pendant le processus de chargement, le paquet doit être préparé dans un emplacement protégé non root : /Library/StagedExtensions
(nécessite l'autorisation com.apple.rootless.storage.KernelExtensionManagement
).
Enfin, lors de la tentative de chargement, l'utilisateur recevra une demande de confirmation et, si elle est acceptée, l'ordinateur doit être redémarré pour la charger.
Dans Catalina, c'était comme ça : Il est intéressant de noter que le processus de vérification se produit dans l'espace utilisateur. Cependant, seules les applications avec l'autorisation com.apple.private.security.kext-management
peuvent demander au noyau de charger une extension : kextcache
, kextload
, kextutil
, kextd
, syspolicyd
kextutil
en ligne de commande démarre le processus de vérification pour charger une extension
Il parlera à kextd
en envoyant en utilisant un service Mach.
kextd
vérifiera plusieurs choses, comme la signature
Il parlera à syspolicyd
pour vérifier si l'extension peut être chargée.
syspolicyd
demandera à l'utilisateur si l'extension n'a pas été chargée précédemment.
syspolicyd
rapportera le résultat à kextd
kextd
pourra enfin dire au noyau de charger l'extension
Si kextd
n'est pas disponible, kextutil
peut effectuer les mêmes vérifications.