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

6.2 KiB

Extensions du noyau macOS

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

Informations de base

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

Exigences

Évidemment, c'est si puissant qu'il est compliqué de charger une extension du noyau. Voici les exigences qu'une extension du noyau doit respecter 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 package doivent appartenir à root.
  • Pendant le processus de chargement, le package 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.

Processus de chargement

Dans Catalina, c'était comme ça : Il est intéressant de noter que le processus de vérification se produit dans userland. Cependant, seules les applications ayant l'autorisation 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 communiquera avec kextd en utilisant un service Mach.
  1. kextd vérifiera plusieurs choses, comme la signature
  • Il communiquera avec syspolicyd pour vérifier si l'extension peut être chargée.
  1. syspolicyd demandera à l'utilisateur s'il n'a pas déjà chargé l'extension.
  • syspolicyd rapportera le résultat à kextd
  1. kextd pourra enfin demander au noyau de charger l'extension

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

Références

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