macOS Kernel Extensions

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Grundlegende Informationen

Kernelerweiterungen (Kexts) sind Pakete mit der Erweiterung .kext, die direkt in den macOS-Kernelraum geladen werden und dem Hauptbetriebssystem zusätzliche Funktionen bieten.

Anforderungen

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

  • Beim Betreten des Wiederherstellungsmodus müssen Kernelerweiterungen zugelassen sein, um geladen zu werden:

  • Die Kernelerweiterung muss mit einem Kernelcodesignaturzertifikat signiert sein, das nur von Apple erteilt werden kann. Wer wird das Unternehmen und die Gründe, warum es benötigt wird, im Detail überprüfen.

  • Die Kernelerweiterung muss auch notariell beglaubigt sein, damit Apple sie auf Malware überprüfen kann.

  • Dann ist der Root-Benutzer derjenige, der die Kernelerweiterung laden kann und die Dateien innerhalb des Pakets müssen Root gehören.

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

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

Ladevorgang

In Catalina war es so: Es ist interessant festzustellen, dass der Überprüfungsprozess in Benutzerland stattfindet. Nur Anwendungen mit der Berechtigung com.apple.private.security.kext-management können den Kernel auffordern, eine Erweiterung zu laden: kextcache, kextload, kextutil, kextd, syspolicyd

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

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

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

  • Es wird mit syspolicyd sprechen, 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 kann schließlich den Kernel auffordern, die Erweiterung zu laden

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

Referenzen

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Last updated