macOS SIP

Reading time: 12 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Grundinformationen

System Integrity Protection (SIP) in macOS ist ein Mechanismus, der entwickelt wurde, um selbst die privilegiertesten Benutzer daran zu hindern, unautorisierte Änderungen an wichtigen Systemordnern vorzunehmen. Diese Funktion spielt eine entscheidende Rolle bei der Aufrechterhaltung der Integrität des Systems, indem sie Aktionen wie das Hinzufügen, Ändern oder Löschen von Dateien in geschützten Bereichen einschränkt. Die wichtigsten Ordner, die durch SIP geschützt sind, umfassen:

  • /System
  • /bin
  • /sbin
  • /usr

Die Regeln, die das Verhalten von SIP steuern, sind in der Konfigurationsdatei festgelegt, die sich unter /System/Library/Sandbox/rootless.conf befindet. In dieser Datei werden Pfade, die mit einem Sternchen (*) vorangestellt sind, als Ausnahmen von den ansonsten strengen SIP-Beschränkungen bezeichnet.

Betrachten Sie das folgende Beispiel:

javascript
/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man

Dieser Abschnitt impliziert, dass SIP im Allgemeinen das /usr Verzeichnis sichert, es jedoch spezifische Unterverzeichnisse (/usr/libexec/cups, /usr/local und /usr/share/man) gibt, in denen Änderungen zulässig sind, wie durch den Stern (*) vor ihren Pfaden angezeigt.

Um zu überprüfen, ob ein Verzeichnis oder eine Datei durch SIP geschützt ist, können Sie den Befehl ls -lOd verwenden, um das Vorhandensein des restricted oder sunlnk Flags zu überprüfen. Zum Beispiel:

bash
ls -lOd /usr/libexec/cups
drwxr-xr-x  11 root  wheel  sunlnk 352 May 13 00:29 /usr/libexec/cups

In diesem Fall bedeutet das sunlnk-Flag, dass das Verzeichnis /usr/libexec/cups selbst nicht gelöscht werden kann, obwohl Dateien darin erstellt, geändert oder gelöscht werden können.

Andererseits:

bash
ls -lOd /usr/libexec
drwxr-xr-x  338 root  wheel  restricted 10816 May 13 00:29 /usr/libexec

Hier zeigt das restricted Flag an, dass das Verzeichnis /usr/libexec durch SIP geschützt ist. In einem SIP-geschützten Verzeichnis können keine Dateien erstellt, geändert oder gelöscht werden.

Darüber hinaus wird eine Datei, die das Attribut com.apple.rootless als erweiterte Eigenschaft enthält, ebenfalls durch SIP geschützt.

tip

Beachten Sie, dass der Sandbox Hook hook_vnode_check_setextattr jeden Versuch verhindert, die erweiterte Eigenschaft com.apple.rootless zu ändern.

SIP beschränkt auch andere Root-Aktionen wie:

  • Laden von nicht vertrauenswürdigen Kernel-Erweiterungen
  • Abrufen von Task-Ports für von Apple signierte Prozesse
  • Ändern von NVRAM-Variablen
  • Erlauben von Kernel-Debugging

Optionen werden in der NVRAM-Variablen als Bitflag (csr-active-config auf Intel und lp-sip0 wird aus dem gebooteten Device Tree für ARM gelesen) gespeichert. Sie können die Flags im XNU-Quellcode in csr.sh finden:

SIP-Status

Sie können überprüfen, ob SIP auf Ihrem System aktiviert ist, mit dem folgenden Befehl:

bash
csrutil status

Wenn Sie SIP deaktivieren müssen, müssen Sie Ihren Computer im Wiederherstellungsmodus neu starten (indem Sie während des Startvorgangs Command+R drücken), und dann den folgenden Befehl ausführen:

bash
csrutil disable

Wenn Sie SIP aktiviert lassen, aber die Debugging-Schutzmaßnahmen entfernen möchten, können Sie dies tun mit:

bash
csrutil enable --without debug

Weitere Einschränkungen

  • Verhindert das Laden von nicht signierten Kernel-Erweiterungen (kexts), wodurch sichergestellt wird, dass nur verifizierte Erweiterungen mit dem Systemkernel interagieren.
  • Verhindert das Debugging von macOS-Systemprozessen und schützt so die Kernkomponenten des Systems vor unbefugtem Zugriff und Modifikation.
  • Hemmung von Tools wie dtrace, um Systemprozesse zu inspizieren, was die Integrität des Systembetriebs weiter schützt.

Erfahren Sie mehr über SIP-Informationen in diesem Vortrag.

SIP-bezogene Berechtigungen

  • com.apple.rootless.xpc.bootstrap: Steuerung von launchd
  • com.apple.rootless.install[.heritable]: Zugriff auf das Dateisystem
  • com.apple.rootless.kext-management: kext_request
  • com.apple.rootless.datavault.controller: Verwaltung von UF_DATAVAULT
  • com.apple.rootless.xpc.bootstrap: XPC-Setup-Funktionen
  • com.apple.rootless.xpc.effective-root: Root über launchd XPC
  • com.apple.rootless.restricted-block-devices: Zugriff auf rohe Blockgeräte
  • com.apple.rootless.internal.installer-equivalent: Ungehinderter Zugriff auf das Dateisystem
  • com.apple.rootless.restricted-nvram-variables[.heritable]: Voller Zugriff auf NVRAM
  • com.apple.rootless.storage.label: Ändern von Dateien, die durch com.apple.rootless xattr mit dem entsprechenden Label eingeschränkt sind
  • com.apple.rootless.volume.VM.label: VM-Swap auf Volume beibehalten

SIP-Umgehungen

Die Umgehung von SIP ermöglicht es einem Angreifer:

  • Zugriff auf Benutzerdaten: Sensible Benutzerdaten wie E-Mails, Nachrichten und Safari-Verlauf aus allen Benutzerkonten zu lesen.
  • TCC-Umgehung: Direkte Manipulation der TCC (Transparency, Consent, and Control)-Datenbank, um unbefugten Zugriff auf die Webcam, das Mikrofon und andere Ressourcen zu gewähren.
  • Persistenz herstellen: Malware an SIP-geschützten Orten platzieren, wodurch sie resistent gegen Entfernung wird, selbst durch Root-Rechte. Dies schließt auch die Möglichkeit ein, das Malware Removal Tool (MRT) zu manipulieren.
  • Kernel-Erweiterungen laden: Obwohl es zusätzliche Schutzmaßnahmen gibt, vereinfacht die Umgehung von SIP den Prozess des Ladens von nicht signierten Kernel-Erweiterungen.

Installationspakete

Installationspakete, die mit Apples Zertifikat signiert sind, können die Schutzmaßnahmen umgehen. Das bedeutet, dass selbst Pakete, die von Standardentwicklern signiert sind, blockiert werden, wenn sie versuchen, SIP-geschützte Verzeichnisse zu ändern.

Nicht vorhandene SIP-Datei

Ein potenzielles Schlupfloch besteht darin, dass, wenn eine Datei in rootless.conf angegeben, aber derzeit nicht vorhanden ist, sie erstellt werden kann. Malware könnte dies ausnutzen, um Persistenz im System herzustellen. Beispielsweise könnte ein bösartiges Programm eine .plist-Datei in /System/Library/LaunchDaemons erstellen, wenn sie in rootless.conf aufgeführt, aber nicht vorhanden ist.

com.apple.rootless.install.heritable

caution

Die Berechtigung com.apple.rootless.install.heritable ermöglicht die Umgehung von SIP

CVE-2019-8561

Es wurde entdeckt, dass es möglich war, das Installationspaket nach der Überprüfung der Codesignatur durch das System auszutauschen, sodass das System das bösartige Paket anstelle des Originals installieren würde. Da diese Aktionen von system_installd durchgeführt wurden, würde dies die Umgehung von SIP ermöglichen.

CVE-2020–9854

Wenn ein Paket von einem gemounteten Image oder externen Laufwerk installiert wurde, würde der Installer die Binärdatei von diesem Dateisystem ausführen (anstatt von einem SIP-geschützten Ort), wodurch system_installd eine beliebige Binärdatei ausführen könnte.

CVE-2021-30892 - Shrootless

Forscher aus diesem Blogbeitrag entdeckten eine Schwachstelle im Systemintegritätsschutz (SIP) von macOS, die als 'Shrootless'-Schwachstelle bezeichnet wird. Diese Schwachstelle konzentriert sich auf den system_installd-Daemon, der eine Berechtigung, com.apple.rootless.install.heritable, hat, die es einem seiner Kindprozesse ermöglicht, die Dateisystembeschränkungen von SIP zu umgehen.

Der system_installd-Daemon installiert Pakete, die von Apple signiert wurden.

Forscher fanden heraus, dass während der Installation eines von Apple signierten Pakets (.pkg-Datei) system_installd alle Post-Installations-Skripte ausführt, die im Paket enthalten sind. Diese Skripte werden von der Standard-Shell, zsh, ausgeführt, die automatisch Befehle aus der /etc/zshenv-Datei ausführt, wenn sie existiert, selbst im nicht-interaktiven Modus. Dieses Verhalten könnte von Angreifern ausgenutzt werden: indem sie eine bösartige /etc/zshenv-Datei erstellen und auf system_installd warten, um zsh aufzurufen, könnten sie beliebige Operationen auf dem Gerät durchführen.

Darüber hinaus wurde entdeckt, dass /etc/zshenv als allgemeine Angriffstechnik verwendet werden könnte, nicht nur für eine SIP-Umgehung. Jedes Benutzerprofil hat eine ~/.zshenv-Datei, die sich genauso verhält wie /etc/zshenv, aber keine Root-Rechte benötigt. Diese Datei könnte als Persistenzmechanismus verwendet werden, der jedes Mal ausgelöst wird, wenn zsh gestartet wird, oder als Mechanismus zur Erhöhung der Berechtigungen. Wenn ein Admin-Benutzer mit sudo -s oder sudo <Befehl> zu Root aufsteigt, würde die ~/.zshenv-Datei ausgelöst, was effektiv zu Root-Rechten führt.

CVE-2022-22583

In CVE-2022-22583 wurde entdeckt, dass der gleiche system_installd-Prozess weiterhin missbraucht werden konnte, da er das Post-Installationsskript in einen zufällig benannten Ordner, der durch SIP in /tmp geschützt ist, legte. Das Problem ist, dass /tmp selbst nicht durch SIP geschützt ist, sodass es möglich war, ein virtuelles Image darauf zu mounten, dann würde der Installer das Post-Installationsskript dort ablegen, das virtuelle Image aushängen, alle Ordner neu erstellen und das Post-Installations-Skript mit der Payload zum Ausführen hinzufügen.

fsck_cs utility

Eine Schwachstelle wurde identifiziert, bei der fsck_cs in die Irre geführt wurde, um eine entscheidende Datei zu beschädigen, aufgrund seiner Fähigkeit, symbolische Links zu folgen. Angreifer erstellten speziell einen Link von /dev/diskX zur Datei /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist. Das Ausführen von fsck_cs auf /dev/diskX führte zur Beschädigung von Info.plist. Die Integrität dieser Datei ist entscheidend für den SIP (System Integrity Protection) des Betriebssystems, der das Laden von Kernel-Erweiterungen steuert. Sobald sie beschädigt ist, ist die Fähigkeit von SIP, Kernel-Ausschlüsse zu verwalten, beeinträchtigt.

Die Befehle zur Ausnutzung dieser Schwachstelle sind:

bash
ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot

Die Ausnutzung dieser Schwachstelle hat schwerwiegende Auswirkungen. Die Info.plist-Datei, die normalerweise für die Verwaltung von Berechtigungen für Kernel-Erweiterungen verantwortlich ist, wird unwirksam. Dazu gehört die Unfähigkeit, bestimmte Erweiterungen wie AppleHWAccess.kext auf die schwarze Liste zu setzen. Folglich kann, da der Kontrollmechanismus von SIP außer Betrieb ist, diese Erweiterung geladen werden, was unbefugten Lese- und Schreibzugriff auf den RAM des Systems gewährt.

Mount über SIP-geschützte Ordner

Es war möglich, ein neues Dateisystem über SIP-geschützte Ordner zu mounten, um den Schutz zu umgehen.

bash
mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg

Upgrader bypass (2016)

Das System ist so eingestellt, dass es von einem eingebetteten Installationsdisk-Image innerhalb von Install macOS Sierra.app bootet, um das Betriebssystem zu aktualisieren, wobei das Dienstprogramm bless verwendet wird. Der verwendete Befehl lautet wie folgt:

bash
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer

Die Sicherheit dieses Prozesses kann gefährdet werden, wenn ein Angreifer das Upgrade-Image (InstallESD.dmg) vor dem Booten verändert. Die Strategie besteht darin, einen dynamischen Loader (dyld) durch eine bösartige Version (libBaseIA.dylib) zu ersetzen. Dieser Austausch führt dazu, dass der Code des Angreifers ausgeführt wird, wenn der Installer gestartet wird.

Der Code des Angreifers erlangt während des Upgrade-Prozesses die Kontrolle und nutzt das Vertrauen des Systems in den Installer aus. Der Angriff erfolgt durch die Veränderung des InstallESD.dmg-Images mittels Method Swizzling, wobei insbesondere die Methode extractBootBits ins Visier genommen wird. Dies ermöglicht die Einspeisung von bösartigem Code, bevor das Disk-Image verwendet wird.

Darüber hinaus gibt es im InstallESD.dmg ein BaseSystem.dmg, das als Wurzel-Dateisystem des Upgrade-Codes dient. Das Einspeisen einer dynamischen Bibliothek in dieses ermöglicht es dem bösartigen Code, innerhalb eines Prozesses zu arbeiten, der in der Lage ist, OS-Ebene-Dateien zu ändern, was das Potenzial für eine Systemkompromittierung erheblich erhöht.

systemmigrationd (2023)

In diesem Vortrag von DEF CON 31 wird gezeigt, wie systemmigrationd (das SIP umgehen kann) ein bash- und ein perl-Skript ausführt, das über Umgebungsvariablen BASH_ENV und PERL5OPT missbraucht werden kann.

CVE-2023-42860

Wie in diesem Blogbeitrag detailliert beschrieben wird, erlaubte ein postinstall-Skript aus InstallAssistant.pkg, das ausgeführt wurde:

bash
/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"

und es war möglich, einen Symlink in ${SHARED_SUPPORT_PATH}/SharedSupport.dmg zu erstellen, der es einem Benutzer ermöglicht, jede Datei zu entsperren und SIP-Schutz zu umgehen.

com.apple.rootless.install

caution

Die Berechtigung com.apple.rootless.install ermöglicht es, SIP zu umgehen.

Die Berechtigung com.apple.rootless.install ist bekannt dafür, den System Integrity Protection (SIP) auf macOS zu umgehen. Dies wurde insbesondere im Zusammenhang mit CVE-2022-26712 erwähnt.

In diesem speziellen Fall besitzt der System-XPC-Dienst, der sich unter /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc befindet, diese Berechtigung. Dies ermöglicht dem zugehörigen Prozess, SIP-Beschränkungen zu umgehen. Darüber hinaus bietet dieser Dienst bemerkenswerterweise eine Methode, die es erlaubt, Dateien zu verschieben, ohne Sicherheitsmaßnahmen durchzusetzen.

Versiegelte System-Snapshots

Versiegelte System-Snapshots sind ein von Apple in macOS Big Sur (macOS 11) eingeführtes Feature, das Teil des System Integrity Protection (SIP)-Mechanismus ist, um eine zusätzliche Sicherheitsebene und Systemstabilität zu bieten. Sie sind im Wesentlichen schreibgeschützte Versionen des Systemvolumens.

Hier ist ein detaillierterer Blick:

  1. Unveränderliches System: Versiegelte System-Snapshots machen das macOS-Systemvolumen "unveränderlich", was bedeutet, dass es nicht modifiziert werden kann. Dies verhindert unbefugte oder versehentliche Änderungen am System, die
bash
csrutil authenticated-root status
Authenticated Root status: enabled

Darüber hinaus wird die Snapshot-Disk ebenfalls als schreibgeschützt gemountet:

bash
mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks