macOS Kernel & System Extensions

Support HackTricks

XNU Kernel

Der Kern von macOS ist XNU, was für "X is Not Unix" steht. Dieser Kernel besteht grundlegend aus dem Mach-Mikrokernel (der später besprochen wird) und Elementen der Berkeley Software Distribution (BSD). XNU bietet auch eine Plattform für Kernel-Treiber über ein System namens I/O Kit. Der XNU-Kernel ist Teil des Darwin-Open-Source-Projekts, was bedeutet, dass der Quellcode frei zugänglich ist.

Aus der Perspektive eines Sicherheitsforschers oder Unix-Entwicklers kann macOS ziemlich ähnlich einem FreeBSD-System mit einer eleganten GUI und einer Vielzahl von benutzerdefinierten Anwendungen erscheinen. Die meisten Anwendungen, die für BSD entwickelt wurden, lassen sich ohne Modifikationen auf macOS kompilieren und ausführen, da die für Unix-Benutzer vertrauten Befehlszeilenwerkzeuge alle in macOS vorhanden sind. Da der XNU-Kernel jedoch Mach integriert, gibt es einige wesentliche Unterschiede zwischen einem traditionellen Unix-ähnlichen System und macOS, und diese Unterschiede können potenzielle Probleme verursachen oder einzigartige Vorteile bieten.

Open-Source-Version von XNU: https://opensource.apple.com/source/xnu/

Mach

Mach ist ein Mikrokernel, der UNIX-kompatibel sein soll. Eines seiner wichtigsten Entwurfsprinzipien war es, die Menge an Code, die im Kernel-Bereich läuft, zu minimieren und stattdessen viele typische Kernel-Funktionen, wie Dateisystem, Netzwerk und I/O, als Benutzerebene-Aufgaben auszuführen.

In XNU ist Mach verantwortlich für viele der kritischen Low-Level-Operationen, die ein Kernel typischerweise behandelt, wie Prozessorplanung, Multitasking und Verwaltung des virtuellen Speichers.

BSD

Der XNU Kernel integriert auch eine erhebliche Menge an Code, der aus dem FreeBSD-Projekt stammt. Dieser Code läuft als Teil des Kernels zusammen mit Mach im selben Adressraum. Der FreeBSD-Code innerhalb von XNU kann jedoch erheblich vom ursprünglichen FreeBSD-Code abweichen, da Modifikationen erforderlich waren, um die Kompatibilität mit Mach sicherzustellen. FreeBSD trägt zu vielen Kernel-Operationen bei, einschließlich:

  • Prozessmanagement

  • Signalverarbeitung

  • Grundlegende Sicherheitsmechanismen, einschließlich Benutzer- und Gruppenverwaltung

  • Systemaufruf-Infrastruktur

  • TCP/IP-Stack und Sockets

  • Firewall und Paketfilterung

Das Verständnis der Interaktion zwischen BSD und Mach kann komplex sein, aufgrund ihrer unterschiedlichen konzeptionellen Rahmen. Zum Beispiel verwendet BSD Prozesse als seine grundlegende Ausführungseinheit, während Mach auf Threads basiert. Diese Diskrepanz wird in XNU durch die Zuordnung jedes BSD-Prozesses zu einer Mach-Aufgabe gelöst, die genau einen Mach-Thread enthält. Wenn der Fork()-Systemaufruf von BSD verwendet wird, nutzt der BSD-Code innerhalb des Kernels Mach-Funktionen, um eine Aufgabe und eine Thread-Struktur zu erstellen.

Darüber hinaus pflegen Mach und BSD jeweils unterschiedliche Sicherheitsmodelle: Das Sicherheitsmodell von Mach basiert auf Port-Rechten, während das Sicherheitsmodell von BSD auf Prozesseigentum basiert. Unterschiede zwischen diesen beiden Modellen haben gelegentlich zu lokalen Privilegieneskalationsanfälligkeiten geführt. Neben typischen Systemaufrufen gibt es auch Mach-Traps, die es Benutzerspace-Programmen ermöglichen, mit dem Kernel zu interagieren. Diese verschiedenen Elemente bilden zusammen die facettenreiche, hybride Architektur des macOS-Kernels.

I/O Kit - Treiber

Das I/O Kit ist ein Open-Source, objektorientiertes Gerätetreiber-Framework im XNU-Kernel, das dynamisch geladene Gerätetreiber verwaltet. Es ermöglicht, modulare Codes zur Laufzeit in den Kernel einzufügen und unterstützt verschiedene Hardware.

macOS IOKit

IPC - Interprozesskommunikation

macOS IPC - Inter Process Communication

macOS Kernel-Erweiterungen

macOS ist sehr restriktiv beim Laden von Kernel-Erweiterungen (.kext) aufgrund der hohen Privilegien, mit denen der Code ausgeführt wird. Tatsächlich ist es standardmäßig nahezu unmöglich (es sei denn, es wird ein Bypass gefunden).

Auf der folgenden Seite kannst du auch sehen, wie du die .kext wiederherstellen kannst, die macOS in seinem Kernelcache lädt:

macOS Kernel Extensions & Debugging

macOS Systemerweiterungen

Anstelle von Kernel-Erweiterungen hat macOS die Systemerweiterungen geschaffen, die in der Benutzerebene APIs bieten, um mit dem Kernel zu interagieren. Auf diese Weise können Entwickler auf die Verwendung von Kernel-Erweiterungen verzichten.

macOS System Extensions

Referenzen

Support HackTricks

Last updated