macOS Kernel & System Extensions
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 aus 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, werden auf macOS ohne Änderungen kompiliert und ausgeführt, 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önnten potenzielle Probleme verursachen oder einzigartige Vorteile bieten.
Open-Source-Version von XNU: https://opensource.apple.com/source/xnu/
Mach ist ein Mikrokernel, der UNIX-kompatibel sein soll. Eines seiner wichtigsten Entwurfsprinzipien war es, die Menge an Code, die im Kernel-Bereich ausgeführt wird, 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.
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 Änderungen erforderlich waren, um die Kompatibilität mit Mach sicherzustellen. FreeBSD trägt zu vielen Kernel-Operationen bei, einschließlich:
Prozessverwaltung
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 Systemaufruf fork() von BSD verwendet wird, verwendet 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.
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 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:
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.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)