macOS Kernel Extensions

Support HackTricks

Grundinformationen

Kernel-Erweiterungen (Kexts) sind Pakete mit einer .kext-Erweiterung, die direkt in den macOS-Kernelraum geladen werden, um zusätzliche Funktionalität zum Hauptbetriebssystem bereitzustellen.

Anforderungen

Offensichtlich ist es so mächtig, dass es kompliziert ist, eine Kernel-Erweiterung zu laden. Dies sind die Anforderungen, die eine Kernel-Erweiterung erfüllen muss, um geladen zu werden:

  • Beim Eintreten in den Wiederherstellungsmodus müssen Kernel-Erweiterungen erlaubt sein, geladen zu werden:

  • Die Kernel-Erweiterung muss mit einem Kernel-Code-Signaturzertifikat signiert sein, das nur von Apple gewährt werden kann. Wer wird das Unternehmen und die Gründe, warum es benötigt wird, im Detail überprüfen.

  • Die Kernel-Erweiterung muss auch notariell beglaubigt sein, Apple wird in der Lage sein, sie auf Malware zu überprüfen.

  • Dann ist der Root-Benutzer derjenige, der die Kernel-Erweiterung laden kann, und die Dateien im Paket müssen dem Root gehören.

  • Während des Ladeprozesses muss das Paket an einem geschützten Nicht-Root-Standort vorbereitet werden: /Library/StagedExtensions (erfordert die Genehmigung com.apple.rootless.storage.KernelExtensionManagement).

  • Schließlich erhält der Benutzer beim Versuch, sie zu laden, eine Bestätigungsanfrage und, wenn akzeptiert, muss der Computer neu gestartet werden, um sie zu laden.

Ladeprozess

In Catalina war es so: Es ist interessant zu beachten, dass der Überprüfungsprozess in Userland erfolgt. Allerdings können nur Anwendungen mit der com.apple.private.security.kext-management Genehmigung die Kernel anfordern, eine Erweiterung zu laden: kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil CLI startet den Überprüfungsprozess zum Laden einer Erweiterung

  • Es wird mit kextd kommunizieren, indem es einen Mach-Dienst verwendet.

  1. kextd wird mehrere Dinge überprüfen, wie die Signatur

  • Es wird mit syspolicyd kommunizieren, um zu überprüfen, ob die Erweiterung geladen werden kann.

  1. syspolicyd wird den Benutzer auffordern, wenn die Erweiterung nicht zuvor geladen wurde.

  • syspolicyd wird das Ergebnis an kextd melden

  1. kextd wird schließlich in der Lage sein, dem Kernel zu sagen, die Erweiterung zu laden

Wenn kextd nicht verfügbar ist, kann kextutil die gleichen Überprüfungen durchführen.

Referenzen

Support HackTricks

Last updated