hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md

4.1 KiB

Extensions de noyau macOS

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Informations de base

Les extensions de noyau (Kexts) sont des bundles utilisant l'extension .kext qui sont chargés directement dans l'espace du noyau de macOS, fournissant des fonctionnalités supplémentaires au système d'exploitation de base.

Exigences

Évidemment, c'est tellement puissant qu'il est compliqué de charger une extension de noyau. Voici les exigences d'une extension de noyau pour être chargée :

  • En allant en mode de récupération, les Kexts doivent être autorisés à être chargés :
  • Le Kext doit être signé avec un certificat de signature de code de noyau, qui ne peut être accordé que par Apple. Qui va examiner en détail la société et les raisons pour lesquelles cela est nécessaire.
  • Le Kext doit également être notarisé, Apple pourra le vérifier pour les logiciels malveillants.
  • Ensuite, l'utilisateur root est celui qui peut charger le Kext et les fichiers à l'intérieur du bundle doivent appartenir à root.
  • Enfin, une fois qu'on essaie de le charger, l'utilisateur sera invité à confirmer et si c'est accepté, l'ordinateur doit redémarrer pour le charger.

Processus de chargement

De retour à Catalina, c'était comme ça : Il est intéressant de noter que le processus de vérification se produit sur userland. Cependant, seules les applications avec l'entitlement com.apple.private.security.kext-management peuvent demander au noyau de charger une extension : kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil cli démarre le processus de vérification pour charger une extension
    • Il parlera à kextd en envoyant en utilisant un service Mach
  2. kextd vérifiera plusieurs choses, telles que la signature
    • Il parlera à syspolicyd pour vérifier si l'extension peut être chargée
  3. syspolicyd demandera à l'utilisateur si l'extension n'a pas été chargée précédemment
    • syspolicyd indiquera le résultat à kextd
  4. kextd pourra enfin indiquer au noyau de charger l'extension

Si kextd n'est pas disponible, kextutil peut effectuer les mêmes vérifications.

Références