macOS Kernel & System Extensions
XNU-Kernel
Der Kern von macOS ist XNU, was für "X is Not Unix" steht. Dieser Kernel besteht im Wesentlichen aus dem Mach-Mikrokernel (später diskutiert) 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 sein Quellcode frei zugänglich ist.
Aus der Sicht eines Sicherheitsforschers oder eines Unix-Entwicklers kann sich macOS ziemlich ähnlich zu einem FreeBSD-System mit einer eleganten GUI und einer Vielzahl von benutzerdefinierten Anwendungen anfühlen. Die meisten für BSD entwickelten Anwendungen können auf macOS kompiliert und ausgeführt werden, ohne dass Änderungen erforderlich sind, da die Unix-Befehlszeilentools, die Unix-Benutzern vertraut sind, 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 darauf ausgelegt ist, UNIX-kompatibel zu sein. Eines seiner wichtigsten Designprinzipien war es, die Menge an Code im Kernel-Speicherplatz zu minimieren und stattdessen viele typische Kernel-Funktionen wie Dateisystem, Netzwerk und I/O als Benutzeraufgaben auszuführen.
In XNU ist Mach für viele der kritischen Low-Level-Operationen verantwortlich, die ein Kernel typischerweise handhabt, wie Prozessorplanung, Multitasking und virtuelle Speicherverwaltung.
BSD
Der XNU Kernel integriert auch eine erhebliche Menge an Code, der aus dem FreeBSD-Projekt abgeleitet ist. Dieser Code läuft als Teil des Kernels zusammen mit Mach im gleichen Adressraum. Der FreeBSD-Code innerhalb von XNU kann sich jedoch erheblich vom ursprünglichen FreeBSD-Code unterscheiden, da Änderungen erforderlich waren, um seine Kompatibilität mit Mach sicherzustellen. FreeBSD trägt zu vielen Kerneloperationen bei, darunter:
Prozessverwaltung
Signalbehandlung
Grundlegende Sicherheitsmechanismen, einschließlich Benutzer- und Gruppenverwaltung
Systemaufrufinfrastruktur
TCP/IP-Stack und Sockets
Firewall und Paketfilterung
Das Verständnis der Interaktion zwischen BSD und Mach kann aufgrund ihrer unterschiedlichen konzeptionellen Rahmenbedingungen komplex sein. Zum Beispiel verwendet BSD Prozesse als seine grundlegende Ausführungseinheit, während Mach auf Threads basiert. Dieser Unterschied wird in XNU dadurch gelöst, dass jedem BSD-Prozess eine Mach-Aufgabe zugeordnet ist, die genau einen Mach-Thread enthält. Wenn der BSD-Befehl fork() verwendet wird, verwendet der BSD-Code im Kernel Mach-Funktionen, um eine Aufgabe und eine Thread-Struktur zu erstellen.
Darüber hinaus verwalten Mach und BSD jeweils unterschiedliche Sicherheitsmodelle: Das Sicherheitsmodell von Mach basiert auf Portrechten, während das Sicherheitsmodell von BSD auf Prozessbesitz basiert. Unterschiede zwischen diesen beiden Modellen haben gelegentlich zu lokalen Privileg-Eskalations-Schwachstellen geführt. Neben typischen Systemaufrufen gibt es auch Mach-Fallen, die es Benutzerprogrammen ermöglichen, mit dem Kernel zu interagieren. Diese verschiedenen Elemente bilden zusammen die vielschichtige, 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 die Hinzufügung von modularem Code zum Kernel im laufenden Betrieb und unterstützt verschiedene Hardware.
macOS IOKitIPC - Interprozesskommunikation
macOS IPC - Inter Process CommunicationKernelcache
Der Kernelcache ist eine vorab kompilierte und vorverknüpfte Version des XNU-Kernels zusammen mit wichtigen Gerätetreibern und Kernelerweiterungen. Er wird im komprimierten Format gespeichert und während des Bootvorgangs in den Speicher dekomprimiert. Der Kernelcache ermöglicht eine schnellere Bootzeit, indem eine betriebsbereite Version des Kernels und wichtiger Treiber verfügbar ist, was die Zeit und Ressourcen reduziert, die sonst für das dynamische Laden und Verknüpfen dieser Komponenten beim Booten aufgewendet würden.
In iOS befindet er sich unter /System/Library/Caches/com.apple.kernelcaches/kernelcache
, in macOS können Sie ihn mit find / -name kernelcache 2>/dev/null
oder mdfind kernelcache | grep kernelcache
finden.
Es ist möglich, kextstat
auszuführen, um die geladenen Kernelerweiterungen zu überprüfen.
IMG4
Das IMG4-Dateiformat ist ein Containerformat, das von Apple in seinen iOS- und macOS-Geräten zum sicheren Speichern und Überprüfen von Firmware-Komponenten (wie Kernelcache) verwendet wird. Das IMG4-Format enthält einen Header und mehrere Tags, die verschiedene Datenstücke einschließen, einschließlich des eigentlichen Payloads (wie eines Kernels oder Bootloaders), einer Signatur und einer Reihe von Manifesteigenschaften. Das Format unterstützt die kryptografische Überprüfung, die es dem Gerät ermöglicht, die Echtheit und Integrität der Firmware-Komponente vor der Ausführung zu bestätigen.
Es besteht normalerweise aus den folgenden Komponenten:
Payload (IM4P):
Oft komprimiert (LZFSE4, LZSS, ...)
Optional verschlüsselt
Manifest (IM4M):
Enthält Signatur
Zusätzliches Schlüssel/Wert-Verzeichnis
Wiederherstellungsinformationen (IM4R):
Auch bekannt als APNonce
Verhindert das Wiederholen einiger Updates
OPTIONAL: Normalerweise nicht gefunden
Dekomprimieren des Kernelcache:
Kernelcache Symbole
Manchmal veröffentlicht Apple Kernelcache mit Symbolen. Sie können einige Firmware mit Symbolen herunterladen, indem Sie den Links auf https://theapplewiki.com folgen.
IPSW
Dies sind Apple Firmwares, die Sie von https://ipsw.me/ herunterladen können. Unter anderem enthält es den Kernelcache. Um die Dateien zu extrahieren, können Sie sie einfach entzippen.
Nach dem Extrahieren der Firmware erhalten Sie eine Datei wie: kernelcache.release.iphone14
. Es ist im IMG4-Format, Sie können die interessanten Informationen extrahieren mit:
Du kannst das extrahierte Kernelcache auf Symbole überprüfen mit: nm -a kernelcache.release.iphone14.e | wc -l
Damit können wir jetzt alle Erweiterungen extrahieren oder die eine, an der du interessiert bist:
macOS Kernel-Erweiterungen
macOS ist sehr restriktiv beim Laden von Kernel-Erweiterungen (.kext) aufgrund der hohen Privilegien, unter denen der Code ausgeführt wird. Tatsächlich ist es standardmäßig praktisch unmöglich (es sei denn, es wird ein Umgehungsweg gefunden).
macOS Kernel ExtensionsmacOS System-Erweiterungen
Anstelle von Kernel-Erweiterungen hat macOS die System-Erweiterungen erstellt, die APIs auf Benutzerebene bieten, um mit dem Kernel zu interagieren. Auf diese Weise können Entwickler vermeiden, Kernel-Erweiterungen zu verwenden.
macOS System ExtensionsReferenzen
Last updated