mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['macos-hardening/macos-security-and-privilege-escalation/mac
This commit is contained in:
parent
4590ad5002
commit
7f79493410
2 changed files with 236 additions and 83 deletions
|
@ -1,8 +1,8 @@
|
|||
# macOS Sandbox
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,11 +17,11 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## Grundinformationen
|
||||
|
||||
MacOS Sandbox (anfangs Seatbelt genannt) **beschränkt Anwendungen**, die innerhalb des Sandboxes ausgeführt werden, auf die **erlaubten Aktionen, die im Sandbox-Profil** festgelegt sind, mit dem die App ausgeführt wird. Dies hilft sicherzustellen, dass **die Anwendung nur auf erwartete Ressourcen zugreift**.
|
||||
MacOS Sandbox (anfänglich Seatbelt genannt) **beschränkt Anwendungen**, die innerhalb des Sandboxes ausgeführt werden, auf die **erlaubten Aktionen, die im Sandbox-Profil** festgelegt sind, mit dem die App ausgeführt wird. Dies hilft sicherzustellen, dass **die Anwendung nur auf erwartete Ressourcen zugreift**.
|
||||
|
||||
Jede App mit der **Berechtigung** **`com.apple.security.app-sandbox`** wird innerhalb des Sandboxes ausgeführt. **Apple-Binärdateien** werden normalerweise innerhalb eines Sandboxes ausgeführt, und um im **App Store** veröffentlicht zu werden, ist **diese Berechtigung obligatorisch**. Daher werden die meisten Anwendungen innerhalb des Sandboxes ausgeführt.
|
||||
Jede App mit der **Berechtigung** **`com.apple.security.app-sandbox`** wird innerhalb des Sandboxes ausgeführt. **Apple-Binärdateien** werden normalerweise innerhalb eines Sandboxes ausgeführt, und alle Anwendungen aus dem **App Store haben diese Berechtigung**. Daher werden mehrere Anwendungen innerhalb des Sandboxes ausgeführt.
|
||||
|
||||
Um zu kontrollieren, was ein Prozess tun oder nicht tun kann, hat der **Sandbox Hooks** in allen **Syscalls** im Kernel. **Abhängig** von den **Berechtigungen** der App wird der Sandbox bestimmte Aktionen **erlauben**.
|
||||
Um zu kontrollieren, was ein Prozess tun oder nicht tun kann, hat der **Sandbox Hooks** in fast jede Operation, die ein Prozess versuchen könnte (einschließlich der meisten Syscalls), unter Verwendung von **MACF**. Allerdings kann der **Sandbox je nach** den **Berechtigungen** der App permissiver mit dem Prozess umgehen.
|
||||
|
||||
Einige wichtige Komponenten des Sandboxes sind:
|
||||
|
||||
|
@ -30,7 +30,9 @@ Einige wichtige Komponenten des Sandboxes sind:
|
|||
* Ein **Daemon**, der im Userland läuft `/usr/libexec/sandboxd`
|
||||
* Die **Container** `~/Library/Containers`
|
||||
|
||||
Im Container-Ordner finden Sie **einen Ordner für jede App, die sandboxed ausgeführt wird**, mit dem Namen der Bundle-ID:
|
||||
### Container
|
||||
|
||||
Jede sandboxed Anwendung hat ihren eigenen Container in `~/Library/Containers/{CFBundleIdentifier}` :
|
||||
```bash
|
||||
ls -l ~/Library/Containers
|
||||
total 0
|
||||
|
@ -41,7 +43,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings
|
|||
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
||||
[...]
|
||||
```
|
||||
Innerhalb jedes Bundle-ID-Ordners finden Sie die **plist** und das **Datenverzeichnis** der App:
|
||||
Innerhalb jedes Bundle-ID-Ordners finden Sie die **plist** und das **Datenverzeichnis** der App mit einer Struktur, die dem Home-Ordner ähnelt:
|
||||
```bash
|
||||
cd /Users/username/Library/Containers/com.apple.Safari
|
||||
ls -la
|
||||
|
@ -65,10 +67,13 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData
|
|||
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Beachten Sie, dass selbst wenn die Symlinks vorhanden sind, um aus dem Sandbox zu "entkommen" und auf andere Ordner zuzugreifen, die App dennoch **Berechtigungen haben muss**, um auf sie zuzugreifen. Diese Berechtigungen befinden sich in der **`.plist`**.
|
||||
Beachten Sie, dass selbst wenn die Symlinks vorhanden sind, um aus dem Sandbox zu "entkommen" und auf andere Ordner zuzugreifen, die App dennoch **Berechtigungen haben muss**, um auf sie zuzugreifen. Diese Berechtigungen befinden sich in der **`.plist`** in den `RedirectablePaths`.
|
||||
{% endhint %}
|
||||
|
||||
Die **`SandboxProfileData`** ist das kompilierte Sandbox-Profil CFData, das in B64 kodiert ist.
|
||||
```bash
|
||||
# Get permissions
|
||||
# Get container config
|
||||
## You need FDA to access the file, not even just root can read it
|
||||
plutil -convert xml1 .com.apple.containermanagerd.metadata.plist -o -
|
||||
|
||||
# Binary sandbox profile
|
||||
|
@ -115,10 +120,10 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
|||
[...]
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Alles, was von einer Sandbox-Anwendung erstellt/modified wird, erhält das **Quarantäneattribut**. Dies wird einen Sandbox-Raum verhindern, indem Gatekeeper ausgelöst wird, wenn die Sandbox-App versucht, etwas mit **`open`** auszuführen.
|
||||
Alles, was von einer Sandbox-Anwendung erstellt oder geändert wird, erhält das **Quarantäneattribut**. Dies verhindert einen Sandbox-Raum, indem Gatekeeper ausgelöst wird, wenn die Sandbox-App versucht, etwas mit **`open`** auszuführen.
|
||||
{% endhint %}
|
||||
|
||||
### Sandbox-Profile
|
||||
## Sandbox-Profile
|
||||
|
||||
Die Sandbox-Profile sind Konfigurationsdateien, die angeben, was in dieser **Sandbox** **erlaubt/verboten** ist. Es verwendet die **Sandbox Profile Language (SBPL)**, die die [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)) Programmiersprache nutzt.
|
||||
|
||||
|
@ -142,19 +147,21 @@ Hier finden Sie ein Beispiel:
|
|||
```
|
||||
{% hint style="success" %}
|
||||
Überprüfen Sie diese [**Forschung**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **um weitere Aktionen zu überprüfen, die erlaubt oder verweigert werden könnten.**
|
||||
|
||||
Beachten Sie, dass in der kompilierten Version eines Profils die Namen der Operationen durch ihre Einträge in einem Array ersetzt werden, das von der dylib und dem kext bekannt ist, wodurch die kompilierte Version kürzer und schwerer lesbar wird.
|
||||
{% endhint %}
|
||||
|
||||
Wichtige **Systemdienste** laufen ebenfalls in ihrem eigenen benutzerdefinierten **Sandbox**, wie der Dienst `mdnsresponder`. Sie können diese benutzerdefinierten **Sandbox-Profile** einsehen in:
|
||||
Wichtige **Systemdienste** laufen ebenfalls in ihrem eigenen benutzerdefinierten **Sandbox**, wie der Dienst `mdnsresponder`. Sie können diese benutzerdefinierten **Sandbox-Profile** einsehen unter:
|
||||
|
||||
* **`/usr/share/sandbox`**
|
||||
* **`/System/Library/Sandbox/Profiles`** 
|
||||
* **`/System/Library/Sandbox/Profiles`**
|
||||
* Andere Sandbox-Profile können unter [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles) überprüft werden.
|
||||
|
||||
**App Store**-Apps verwenden das **Profil** **`/System/Library/Sandbox/Profiles/application.sb`**. Sie können in diesem Profil überprüfen, wie Berechtigungen wie **`com.apple.security.network.server`** einem Prozess erlauben, das Netzwerk zu nutzen.
|
||||
|
||||
SIP ist ein Sandbox-Profil, das in /System/Library/Sandbox/rootless.conf als platform\_profile bezeichnet wird.
|
||||
|
||||
### Sandbox-Profilbeispiele
|
||||
### Beispiele für Sandbox-Profile
|
||||
|
||||
Um eine Anwendung mit einem **spezifischen Sandbox-Profil** zu starten, können Sie verwenden:
|
||||
```bash
|
||||
|
@ -219,42 +226,49 @@ Beispiele für Umgehungen:
|
|||
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
||||
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (sie können Dateien außerhalb der Sandbox schreiben, deren Name mit `~$` beginnt).
|
||||
|
||||
### MacOS Sandbox-Profile
|
||||
### Sandbox-Überwachung
|
||||
|
||||
macOS speichert System-Sandbox-Profile an zwei Orten: **/usr/share/sandbox/** und **/System/Library/Sandbox/Profiles**.
|
||||
#### Über Profil
|
||||
|
||||
Es ist möglich, alle Überprüfungen zu verfolgen, die die Sandbox jedes Mal durchführt, wenn eine Aktion überprüft wird. Erstellen Sie dazu einfach das folgende Profil:
|
||||
|
||||
{% code title="trace.sb" %}
|
||||
```scheme
|
||||
(version 1)
|
||||
(trace /tmp/trace.out)
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Und dann einfach etwas mit diesem Profil ausführen:
|
||||
```bash
|
||||
sandbox-exec -f /tmp/trace.sb /bin/ls
|
||||
```
|
||||
In `/tmp/trace.out` können Sie jede Sandbox-Prüfung sehen, die jedes Mal durchgeführt wurde, wenn sie aufgerufen wurde (also viele Duplikate).
|
||||
|
||||
Es ist auch möglich, die Sandbox mit dem **`-t`** Parameter zu verfolgen: `sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls`
|
||||
|
||||
#### Über die API
|
||||
|
||||
Die Funktion `sandbox_set_trace_path`, die von `libsystem_sandbox.dylib` exportiert wird, ermöglicht es, einen Trace-Dateinamen anzugeben, in den Sandbox-Prüfungen geschrieben werden.\
|
||||
Es ist auch möglich, etwas Ähnliches zu tun, indem man `sandbox_vtrace_enable()` aufruft und dann die Protokollfehler aus dem Puffer mit `sandbox_vtrace_report()` abruft.
|
||||
|
||||
### Sandbox-Inspektion
|
||||
|
||||
`libsandbox.dylib` exportiert eine Funktion namens sandbox\_inspect\_pid, die eine Liste des Sandbox-Zustands eines Prozesses (einschließlich Erweiterungen) liefert. Allerdings können nur Plattform-Binärdateien diese Funktion verwenden.
|
||||
|
||||
### MacOS & iOS Sandbox-Profile
|
||||
|
||||
MacOS speichert System-Sandbox-Profile an zwei Orten: **/usr/share/sandbox/** und **/System/Library/Sandbox/Profiles**.
|
||||
|
||||
Und wenn eine Drittanbieteranwendung das _**com.apple.security.app-sandbox**_ Recht hat, wendet das System das **/System/Library/Sandbox/Profiles/application.sb** Profil auf diesen Prozess an.
|
||||
|
||||
### **iOS Sandbox-Profil**
|
||||
In iOS heißt das Standardprofil **container** und wir haben keine SBPL-Textdarstellung. Im Speicher wird diese Sandbox als Erlauben/Verweigern-Binärbaum für jede Berechtigung aus der Sandbox dargestellt.
|
||||
|
||||
Das Standardprofil heißt **container** und wir haben keine SBPL-Textdarstellung. Im Speicher wird diese Sandbox als Erlauben/Verweigern-Binärbaum für jede Berechtigung aus der Sandbox dargestellt.
|
||||
|
||||
### Debuggen & Umgehen der Sandbox
|
||||
|
||||
Auf macOS, im Gegensatz zu iOS, wo Prozesse von Anfang an durch den Kernel in einer Sandbox laufen, **müssen Prozesse selbst in die Sandbox eintreten**. Das bedeutet, dass ein Prozess auf macOS nicht durch die Sandbox eingeschränkt ist, bis er aktiv entscheidet, sie zu betreten.
|
||||
|
||||
Prozesse werden automatisch aus dem Userland in die Sandbox gesetzt, wenn sie starten, wenn sie das Recht `com.apple.security.app-sandbox` haben. Für eine detaillierte Erklärung dieses Prozesses siehe:
|
||||
|
||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### **Überprüfen der PID-Berechtigungen**
|
||||
|
||||
[**Laut diesem**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s) kann der **`sandbox_check`** (es ist ein `__mac_syscall`), überprüfen, **ob eine Operation erlaubt ist oder nicht** durch die Sandbox in einer bestimmten PID.
|
||||
|
||||
Das [**Tool sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) kann überprüfen, ob eine PID eine bestimmte Aktion ausführen kann:
|
||||
```bash
|
||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||
sbtool <pid> file /tmp #Check file access
|
||||
sbtool <pid> inspect #Gives you an explaination of the sandbox profile
|
||||
sbtool <pid> all
|
||||
```
|
||||
### Benutzerdefinierte SBPL in App Store-Apps
|
||||
|
||||
Es könnte für Unternehmen möglich sein, ihre Apps **mit benutzerdefinierten Sandbox-Profilen** (anstatt mit dem Standardprofil) auszuführen. Sie müssen die Berechtigung **`com.apple.security.temporary-exception.sbpl`** verwenden, die von Apple genehmigt werden muss.
|
||||
Es könnte für Unternehmen möglich sein, ihre Apps **mit benutzerdefinierten Sandbox-Profilen** (anstatt mit dem Standardprofil) auszuführen. Sie müssen das Recht **`com.apple.security.temporary-exception.sbpl`** verwenden, das von Apple genehmigt werden muss.
|
||||
|
||||
Es ist möglich, die Definition dieser Berechtigung in **`/System/Library/Sandbox/Profiles/application.sb:`** zu überprüfen.
|
||||
Es ist möglich, die Definition dieses Rechts in **`/System/Library/Sandbox/Profiles/application.sb:`** zu überprüfen.
|
||||
```scheme
|
||||
(sandbox-array-entitlement
|
||||
"com.apple.security.temporary-exception.sbpl"
|
||||
|
@ -262,19 +276,142 @@ Es ist möglich, die Definition dieser Berechtigung in **`/System/Library/Sandbo
|
|||
(let* ((port (open-input-string string)) (sbpl (read port)))
|
||||
(with-transparent-redirection (eval sbpl)))))
|
||||
```
|
||||
Dies wird den **String nach diesem Berechtigungsnachweis** als Sandbox-Profil **eval**.
|
||||
Dies wird **den String nach diesem Recht** als ein Sandbox-Profil **eval**.
|
||||
|
||||
### Kompilieren & Dekompilieren eines Sandbox-Profils
|
||||
|
||||
Das **`sandbox-exec`**-Tool verwendet die Funktionen `sandbox_compile_*` aus `libsandbox.dylib`. Die Hauptfunktionen, die exportiert werden, sind: `sandbox_compile_file` (erwartet einen Dateipfad, Parameter `-f`), `sandbox_compile_string` (erwartet einen String, Parameter `-p`), `sandbox_compile_name` (erwartet einen Namen eines Containers, Parameter `-n`), `sandbox_compile_entitlements` (erwartet Entitlements plist).
|
||||
|
||||
Diese umgekehrte und [**Open-Source-Version des Tools sandbox-exec**](https://newosxbook.com/src.jl?tree=listings\&file=/sandbox\_exec.c) ermöglicht es, dass **`sandbox-exec`** in eine Datei das kompilierte Sandbox-Profil schreibt.
|
||||
|
||||
Darüber hinaus kann es, um einen Prozess innerhalb eines Containers einzuschränken, `sandbox_spawnattrs_set[container/profilename]` aufrufen und einen Container oder ein bereits vorhandenes Profil übergeben.
|
||||
|
||||
## Debuggen & Umgehen der Sandbox
|
||||
|
||||
Auf macOS, im Gegensatz zu iOS, wo Prozesse von Anfang an durch den Kernel sandboxed sind, **müssen Prozesse selbst in die Sandbox eintreten**. Das bedeutet, dass ein Prozess auf macOS nicht durch die Sandbox eingeschränkt ist, bis er aktiv entscheidet, sie zu betreten, obwohl Apps aus dem App Store immer sandboxed sind.
|
||||
|
||||
Prozesse werden automatisch aus dem Userland sandboxed, wenn sie starten, wenn sie das Recht haben: `com.apple.security.app-sandbox`. Für eine detaillierte Erklärung dieses Prozesses siehe:
|
||||
|
||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Sandbox-Erweiterungen**
|
||||
|
||||
Erweiterungen ermöglichen es, einem Objekt weitere Berechtigungen zu geben, und werden durch den Aufruf einer der Funktionen vergeben:
|
||||
|
||||
* `sandbox_issue_extension`
|
||||
* `sandbox_extension_issue_file[_with_new_type]`
|
||||
* `sandbox_extension_issue_mach`
|
||||
* `sandbox_extension_issue_iokit_user_client_class`
|
||||
* `sandbox_extension_issue_iokit_registry_rentry_class`
|
||||
* `sandbox_extension_issue_generic`
|
||||
* `sandbox_extension_issue_posix_ipc`
|
||||
|
||||
Die Erweiterungen werden im zweiten MACF-Label-Slot gespeichert, der über die Prozessanmeldeinformationen zugänglich ist. Das folgende **`sbtool`** kann auf diese Informationen zugreifen.
|
||||
|
||||
Beachten Sie, dass Erweiterungen normalerweise von erlaubten Prozessen gewährt werden. Zum Beispiel wird `tccd` das Erweiterungstoken von `com.apple.tcc.kTCCServicePhotos` gewähren, wenn ein Prozess versucht hat, auf die Fotos zuzugreifen und in einer XPC-Nachricht erlaubt wurde. Dann muss der Prozess das Erweiterungstoken konsumieren, damit es hinzugefügt wird.\
|
||||
Beachten Sie, dass die Erweiterungstoken lange Hexadezimalzahlen sind, die die gewährten Berechtigungen kodieren. Sie haben jedoch die erlaubte PID nicht fest codiert, was bedeutet, dass jeder Prozess mit Zugriff auf das Token **von mehreren Prozessen konsumiert werden kann**.
|
||||
|
||||
Beachten Sie, dass Erweiterungen auch sehr mit Rechten verbunden sind, sodass das Vorhandensein bestimmter Rechte automatisch bestimmte Erweiterungen gewähren kann.
|
||||
|
||||
### **Überprüfen der PID-Berechtigungen**
|
||||
|
||||
[**Laut diesem**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s) können die **`sandbox_check`**-Funktionen (es ist ein `__mac_syscall`) überprüfen, **ob eine Operation erlaubt ist oder nicht** durch die Sandbox in einer bestimmten PID, Audit-Token oder eindeutige ID.
|
||||
|
||||
Das [**Tool sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) (finden Sie es [hier kompiliert](https://newosxbook.com/articles/hitsb.html)) kann überprüfen, ob eine PID bestimmte Aktionen ausführen kann:
|
||||
```bash
|
||||
sbtool <pid> mach #Check mac-ports (got from launchd with an api)
|
||||
sbtool <pid> file /tmp #Check file access
|
||||
sbtool <pid> inspect #Gives you an explanation of the sandbox profile and extensions
|
||||
sbtool <pid> all
|
||||
```
|
||||
### \[un]suspend
|
||||
|
||||
Es ist auch möglich, den Sandbox zu suspendieren und wieder zu aktivieren, indem die Funktionen `sandbox_suspend` und `sandbox_unsuspend` aus `libsystem_sandbox.dylib` verwendet werden.
|
||||
|
||||
Beachten Sie, dass zur Aufruf der Suspend-Funktion einige Berechtigungen überprüft werden, um den Aufrufer zu autorisieren, sie aufzurufen, wie:
|
||||
|
||||
* com.apple.private.security.sandbox-manager
|
||||
* com.apple.security.print
|
||||
* com.apple.security.temporary-exception.audio-unit-host
|
||||
|
||||
## mac\_syscall
|
||||
|
||||
Dieser Systemaufruf (#381) erwartet ein String-Argument als ersten Parameter, das das Modul angibt, das ausgeführt werden soll, und dann einen Code im zweiten Argument, der die auszuführende Funktion angibt. Der dritte Parameter hängt dann von der ausgeführten Funktion ab.
|
||||
|
||||
Der Funktionsaufruf `___sandbox_ms` umschließt `mac_syscall`, wobei im ersten Argument `"Sandbox"` angegeben wird, genau wie `___sandbox_msp` ein Wrapper von `mac_set_proc` (#387) ist. Einige der unterstützten Codes von `___sandbox_ms` finden sich in dieser Tabelle:
|
||||
|
||||
* **set\_profile (#0)**: Wendet ein kompiliertes oder benanntes Profil auf einen Prozess an.
|
||||
* **platform\_policy (#1)**: Erzwingt plattformspezifische Richtlinienprüfungen (variiert zwischen macOS und iOS).
|
||||
* **check\_sandbox (#2)**: Führt eine manuelle Überprüfung einer bestimmten Sandbox-Operation durch.
|
||||
* **note (#3)**: Fügt eine Annotation zu einer Sandbox hinzu.
|
||||
* **container (#4)**: Fügt einer Sandbox eine Annotation hinzu, typischerweise zur Fehlersuche oder Identifikation.
|
||||
* **extension\_issue (#5)**: Generiert eine neue Erweiterung für einen Prozess.
|
||||
* **extension\_consume (#6)**: Verbraucht eine gegebene Erweiterung.
|
||||
* **extension\_release (#7)**: Gibt den Speicher frei, der an eine verbrauchte Erweiterung gebunden ist.
|
||||
* **extension\_update\_file (#8)**: Ändert Parameter einer bestehenden Dateierweiterung innerhalb der Sandbox.
|
||||
* **extension\_twiddle (#9)**: Passt eine bestehende Dateierweiterung an oder ändert sie (z.B. TextEdit, rtf, rtfd).
|
||||
* **suspend (#10)**: Unterbricht vorübergehend alle Sandbox-Prüfungen (erfordert entsprechende Berechtigungen).
|
||||
* **unsuspend (#11)**: Setzt alle zuvor suspendierten Sandbox-Prüfungen fort.
|
||||
* **passthrough\_access (#12)**: Erlaubt direkten Passthrough-Zugriff auf eine Ressource, umgeht Sandbox-Prüfungen.
|
||||
* **set\_container\_path (#13)**: (nur iOS) Setzt einen Containerpfad für eine App-Gruppe oder eine Signatur-ID.
|
||||
* **container\_map (#14)**: (nur iOS) Ruft einen Containerpfad von `containermanagerd` ab.
|
||||
* **sandbox\_user\_state\_item\_buffer\_send (#15)**: (iOS 10+) Setzt Metadaten im Benutzermodus in der Sandbox.
|
||||
* **inspect (#16)**: Bietet Debug-Informationen über einen sandboxed Prozess.
|
||||
* **dump (#18)**: (macOS 11) Dumpt das aktuelle Profil einer Sandbox zur Analyse.
|
||||
* **vtrace (#19)**: Verfolgt Sandbox-Operationen zur Überwachung oder Fehlersuche.
|
||||
* **builtin\_profile\_deactivate (#20)**: (macOS < 11) Deaktiviert benannte Profile (z.B. `pe_i_can_has_debugger`).
|
||||
* **check\_bulk (#21)**: Führt mehrere `sandbox_check`-Operationen in einem einzigen Aufruf durch.
|
||||
* **reference\_retain\_by\_audit\_token (#28)**: Erstellt eine Referenz für ein Audit-Token zur Verwendung in Sandbox-Prüfungen.
|
||||
* **reference\_release (#29)**: Gibt eine zuvor gehaltene Audit-Token-Referenz frei.
|
||||
* **rootless\_allows\_task\_for\_pid (#30)**: Überprüft, ob `task_for_pid` erlaubt ist (ähnlich wie `csr`-Prüfungen).
|
||||
* **rootless\_whitelist\_push (#31)**: (macOS) Wendet eine Manifestdatei für den Systemintegritätsschutz (SIP) an.
|
||||
* **rootless\_whitelist\_check (preflight) (#32)**: Überprüft die SIP-Manifestdatei vor der Ausführung.
|
||||
* **rootless\_protected\_volume (#33)**: (macOS) Wendet SIP-Schutz auf eine Festplatte oder Partition an.
|
||||
* **rootless\_mkdir\_protected (#34)**: Wendet SIP/DataVault-Schutz auf einen Verzeichnis-Erstellungsprozess an.
|
||||
|
||||
## Sandbox.kext
|
||||
|
||||
Beachten Sie, dass die Kernel-Erweiterung in iOS **alle Profile hardcodiert** im `__TEXT.__const`-Segment enthält, um zu verhindern, dass sie modifiziert werden. Folgendes sind einige interessante Funktionen aus der Kernel-Erweiterung:
|
||||
|
||||
* **`hook_policy_init`**: Es hookt `mpo_policy_init` und wird nach `mac_policy_register` aufgerufen. Es führt die meisten Initialisierungen der Sandbox durch. Es initialisiert auch SIP.
|
||||
* **`hook_policy_initbsd`**: Es richtet die sysctl-Schnittstelle ein und registriert `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` und `security.mac.sandbox.debug_mode` (wenn mit `PE_i_can_has_debugger` gebootet).
|
||||
* **`hook_policy_syscall`**: Es wird von `mac_syscall` mit "Sandbox" als erstem Argument und einem Code, der die Operation im zweiten angibt, aufgerufen. Ein Switch wird verwendet, um den auszuführenden Code entsprechend dem angeforderten Code zu finden.
|
||||
|
||||
### MACF Hooks
|
||||
|
||||
**`Sandbox.kext`** verwendet mehr als hundert Hooks über MACF. Die meisten Hooks überprüfen nur einige triviale Fälle, die es erlauben, die Aktion auszuführen; andernfalls rufen sie **`cred_sb_evalutate`** mit den **Anmeldeinformationen** von MACF und einer Nummer, die der **Operation** entspricht, die ausgeführt werden soll, sowie einem **Puffer** für die Ausgabe auf.
|
||||
|
||||
Ein gutes Beispiel dafür ist die Funktion **`_mpo_file_check_mmap`**, die **`mmap`** hookt und die überprüft, ob der neue Speicher beschreibbar sein wird (und wenn nicht, die Ausführung erlaubt), dann überprüft, ob er für den dyld Shared Cache verwendet wird, und wenn ja, die Ausführung erlaubt, und schließlich wird **`cred_sb_evalutate`** aufgerufen, um weitere Erlaubnisprüfungen durchzuführen.
|
||||
|
||||
Darüber hinaus gibt es von den Hunderten von Hooks, die Sandbox verwendet, 3, die besonders interessant sind:
|
||||
|
||||
* `mpo_proc_check_for`: Es wendet das Profil an, wenn nötig, und wenn es zuvor nicht angewendet wurde.
|
||||
* `mpo_vnode_check_exec`: Wird aufgerufen, wenn ein Prozess die zugehörige Binärdatei lädt, dann wird eine Profilüberprüfung durchgeführt und auch eine Überprüfung, die SUID/SGID-Ausführungen verbietet.
|
||||
* `mpo_cred_label_update_execve`: Dies wird aufgerufen, wenn das Label zugewiesen wird. Dies ist der längste, da es aufgerufen wird, wenn die Binärdatei vollständig geladen ist, aber noch nicht ausgeführt wurde. Es führt Aktionen wie das Erstellen des Sandbox-Objekts, das Anhängen der Sandbox-Struktur an die kauth-Anmeldeinformationen und das Entfernen des Zugriffs auf Mach-Ports durch...
|
||||
|
||||
Beachten Sie, dass **`cred_sb_evalutate`** ein Wrapper über **`sb_evaluate`** ist und diese Funktion die übergebenen Anmeldeinformationen erhält und dann die Bewertung unter Verwendung der **`eval`**-Funktion durchführt, die normalerweise das **Plattformprofil** bewertet, das standardmäßig auf alle Prozesse angewendet wird, und dann das **spezifische Prozessprofil**. Beachten Sie, dass das Plattformprofil eines der Hauptkomponenten von **SIP** in macOS ist.
|
||||
|
||||
## Sandboxd
|
||||
|
||||
Sandbox hat auch einen Benutzerdämon, der den XPC Mach-Dienst `com.apple.sandboxd` ausführt und den speziellen Port 14 (`HOST_SEATBELT_PORT`) bindet, den die Kernel-Erweiterung verwendet, um mit ihm zu kommunizieren. Es stellt einige Funktionen über MIG zur Verfügung.
|
||||
|
||||
## References
|
||||
|
||||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% hint style="success" %}
|
||||
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Unterstütze HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
||||
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# macOS SIP
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,10 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
|
||||
## **Grundinformationen**
|
||||
|
||||
**System Integrity Protection (SIP)** in macOS ist ein Mechanismus, der verhindern soll, dass selbst die privilegiertesten Benutzer unbefugte Änderungen an wichtigen Systemordnern vornehmen. 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 Integrity Protection (SIP)** in macOS ist ein Mechanismus, der darauf abzielt, selbst die privilegiertesten Benutzer daran zu hindern, unbefugte Ä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**
|
||||
|
@ -50,7 +49,11 @@ 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 erweitertes **Attribut** enthält, ebenfalls **durch SIP geschützt**.
|
||||
Darüber hinaus wird eine Datei, die das Attribut **`com.apple.rootless`** enthält, ebenfalls **durch SIP geschützt**.
|
||||
|
||||
{% hint style="success" %}
|
||||
Beachten Sie, dass der **Sandbox** Hook **`hook_vnode_check_setextattr`** jeden Versuch verhindert, das erweiterte Attribut **`com.apple.rootless`** zu ändern.
|
||||
{% endhint %}
|
||||
|
||||
**SIP beschränkt auch andere Root-Aktionen** wie:
|
||||
|
||||
|
@ -73,11 +76,11 @@ Wenn Sie SIP deaktivieren müssen, müssen Sie Ihren Computer im Wiederherstellu
|
|||
```bash
|
||||
csrutil disable
|
||||
```
|
||||
Wenn Sie SIP aktiviert lassen, aber die Debugging-Schutzmaßnahmen entfernen möchten, können Sie dies tun mit:
|
||||
Wenn Sie SIP aktiviert lassen, aber die Debugging-Schutzmaßnahmen entfernen möchten, können Sie dies mit folgendem Befehl tun:
|
||||
```bash
|
||||
csrutil enable --without debug
|
||||
```
|
||||
### Andere Einschränkungen
|
||||
### Other Restrictions
|
||||
|
||||
* **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.
|
||||
|
@ -85,18 +88,32 @@ csrutil enable --without debug
|
|||
|
||||
[**Erfahren Sie mehr über SIP-Informationen in diesem Vortrag**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||||
|
||||
## SIP-Umgehungen
|
||||
### **SIP-bezogene Berechtigungen**
|
||||
|
||||
Die Umgehung von SIP ermöglicht es einem Angreifer:
|
||||
* `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
|
||||
|
||||
* **Zugriff auf Benutzerdaten**: Sensible Benutzerdaten wie E-Mails, Nachrichten und Safari-Verlauf aus allen Benutzerkonten zu lesen.
|
||||
## SIP Bypasses
|
||||
|
||||
Das Umgehen von SIP ermöglicht es einem Angreifer:
|
||||
|
||||
* **Zugriff auf Benutzerdaten**: Sensible Benutzerdaten wie E-Mails, Nachrichten und Safari-Verlauf aus allen Benutzerkonten lesen.
|
||||
* **TCC-Umgehung**: Direkte Manipulation der TCC (Transparenz, Zustimmung und Kontrolle)-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.
|
||||
* **Persistenz herstellen**: Malware an SIP-geschützten Orten platzieren, wodurch sie resistent gegen Entfernung ist, 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 das Umgehen von SIP den Prozess des Ladens nicht signierter Kernel-Erweiterungen.
|
||||
|
||||
### Installationspakete
|
||||
### Installer-Pakete
|
||||
|
||||
**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.
|
||||
**Installer-Pakete, 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
|
||||
|
||||
|
@ -110,7 +127,7 @@ Die Berechtigung **`com.apple.rootless.install.heritable`** ermöglicht es, SIP
|
|||
|
||||
#### [CVE-2019-8561](https://objective-see.org/blog/blog\_0x42.html) <a href="#cve" id="cve"></a>
|
||||
|
||||
Es wurde entdeckt, dass es möglich war, **das Installationspaket nach der Überprüfung der Codesignatur durch das System zu tauschen**, 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.
|
||||
Es wurde entdeckt, dass es möglich war, **das Installationspaket nach der Überprüfung der Codesignatur durch das System zu tauschen**, 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 das Umgehen von SIP ermöglichen.
|
||||
|
||||
#### [CVE-2020–9854](https://objective-see.org/blog/blog\_0x4D.html) <a href="#cve-unauthd-chain" id="cve-unauthd-chain"></a>
|
||||
|
||||
|
@ -118,7 +135,7 @@ Wenn ein Paket von einem gemounteten Image oder externen Laufwerk installiert wu
|
|||
|
||||
#### CVE-2021-30892 - Shrootless
|
||||
|
||||
[**Forscher aus diesem Blogbeitrag**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) entdeckten eine Schwachstelle im Systemintegritätsschutz (SIP)-Mechanismus 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.
|
||||
[**Forscher aus diesem Blogbeitrag**](https://www.microsoft.com/en-us/security/blog/2021/10/28/microsoft-finds-new-macos-vulnerability-shrootless-that-could-bypass-system-integrity-protection/) 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.
|
||||
|
||||
|
@ -128,7 +145,7 @@ Darüber hinaus wurde entdeckt, dass **`/etc/zshenv` als allgemeine Angriffstech
|
|||
|
||||
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
||||
|
||||
In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-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-Installationsskript** mit der **Payload** hinzufügen, um es auszuführen.
|
||||
In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) wurde entdeckt, dass der gleiche **`system_installd`**-Prozess weiterhin missbraucht werden konnte, da er das **Post-Installations-Skript 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-Installations-Skript** 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](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
||||
|
||||
|
@ -141,7 +158,7 @@ fsck_cs /dev/diskX 1>&-
|
|||
touch /Library/Extensions/
|
||||
reboot
|
||||
```
|
||||
Die Ausnutzung dieser Schwachstelle hat schwerwiegende Folgen. Die `Info.plist`-Datei, die normalerweise für die Verwaltung der 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 diese Erweiterung, da der Kontrollmechanismus von SIP außer Betrieb ist, geladen werden, was unbefugten Lese- und Schreibzugriff auf den RAM des Systems gewährt.
|
||||
Die Ausnutzung dieser Schwachstelle hat schwerwiegende Folgen. 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 diese Erweiterung, da der Kontrollmechanismus des SIP außer Betrieb ist, geladen werden, was unbefugten Lese- und Schreibzugriff auf den RAM des Systems gewährt.
|
||||
|
||||
#### [Mount über SIP geschützte Ordner](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
|
||||
|
||||
|
@ -162,7 +179,7 @@ Die Sicherheit dieses Prozesses kann gefährdet werden, wenn ein Angreifer das U
|
|||
|
||||
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-Level-Dateien zu ändern, was das Potenzial für eine Systemkompromittierung erheblich erhöht.
|
||||
Darüber hinaus gibt es innerhalb des `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)](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||
|
||||
|
@ -194,7 +211,7 @@ 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 die Sicherheit oder Systemstabilität gefährden könnten.
|
||||
2. **Systemsoftware-Updates**: Wenn Sie macOS-Updates oder -Upgrades installieren, erstellt macOS einen neuen System-Snapshot. Das macOS-Startvolumen verwendet dann **APFS (Apple File System)**, um zu diesem neuen Snapshot zu wechseln. Der gesamte Prozess der Anwendung von Updates wird sicherer und zuverlässiger, da das System immer zum vorherigen Snapshot zurückkehren kann, wenn während des Updates etwas schiefgeht.
|
||||
3. **Daten-Trennung**: In Verbindung mit dem Konzept der Trennung von Daten- und Systemvolumen, das in macOS Catalina eingeführt wurde, stellt die Funktion der versiegelten System-Snapshots sicher, dass alle Ihre Daten und Einstellungen auf einem separaten "**Daten**"-Volumen gespeichert werden. Diese Trennung macht Ihre Daten unabhängig vom System, was den Prozess der Systemupdates vereinfacht und die Systemsicherheit erhöht.
|
||||
3. **Daten-Trennung**: In Verbindung mit dem Konzept der Trennung von Daten- und Systemvolumen, das in macOS Catalina eingeführt wurde, stellt die Funktion des versiegelten System-Snapshots sicher, dass alle Ihre Daten und Einstellungen auf einem separaten "**Daten**"-Volumen gespeichert werden. Diese Trennung macht Ihre Daten unabhängig vom System, was den Prozess der Systemupdates vereinfacht und die Systemsicherheit erhöht.
|
||||
|
||||
Denken Sie daran, dass diese Snapshots automatisch von macOS verwaltet werden und dank der Speicherfreigabefunktionen von APFS keinen zusätzlichen Speicherplatz auf Ihrer Festplatte beanspruchen. Es ist auch wichtig zu beachten, dass diese Snapshots sich von **Time Machine-Snapshots** unterscheiden, die benutzerzugängliche Backups des gesamten Systems sind.
|
||||
|
||||
|
@ -206,8 +223,8 @@ Der Befehl **`diskutil apfs list`** listet die **Details der APFS-Volumes** und
|
|||
| ====================================================
|
||||
| APFS Container Reference: disk3
|
||||
| Size (Capacity Ceiling): 494384795648 B (494.4 GB)
|
||||
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% verwendet)
|
||||
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% frei)
|
||||
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
|
||||
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
|
||||
| |
|
||||
| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|
||||
| | -----------------------------------------------------------
|
||||
|
@ -216,32 +233,32 @@ Der Befehl **`diskutil apfs list`** listet die **Details der APFS-Volumes** und
|
|||
| |
|
||||
| +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|
||||
| | ---------------------------------------------------
|
||||
<strong>| | APFS Volume Disk (Rolle): disk3s1 (System)
|
||||
</strong>| | Name: Macintosh HD (Groß-/Kleinschreibung-empfindlich)
|
||||
<strong>| | APFS Volume Disk (Role): disk3s1 (System)
|
||||
</strong>| | Name: Macintosh HD (Groß-/Kleinschreibung ignorierend)
|
||||
<strong>| | Mount Point: /System/Volumes/Update/mnt1
|
||||
</strong>| | Capacity Consumed: 12819210240 B (12.8 GB)
|
||||
| | Versiegelt: Gebrochen
|
||||
| | Sealed: Broken
|
||||
| | FileVault: Ja (Entsperrt)
|
||||
| | Verschlüsselt: Nein
|
||||
| | Encrypted: Nein
|
||||
| | |
|
||||
| | Snapshot: FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|
||||
| | Snapshot Disk: disk3s1s1
|
||||
<strong>| | Snapshot Mount Point: /
|
||||
</strong><strong>| | Snapshot Versiegelt: Ja
|
||||
</strong><strong>| | Snapshot Sealed: Ja
|
||||
</strong>[...]
|
||||
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|
||||
| ---------------------------------------------------
|
||||
| APFS Volume Disk (Rolle): disk3s5 (Daten)
|
||||
| Name: Macintosh HD - Daten (Groß-/Kleinschreibung-empfindlich)
|
||||
| APFS Volume Disk (Role): disk3s5 (Daten)
|
||||
| Name: Macintosh HD - Daten (Groß-/Kleinschreibung ignorierend)
|
||||
<strong> | Mount Point: /System/Volumes/Data
|
||||
</strong><strong> | Capacity Consumed: 412071784448 B (412.1 GB)
|
||||
</strong> | Versiegelt: Nein
|
||||
</strong> | Sealed: Nein
|
||||
| FileVault: Ja (Entsperrt)
|
||||
</code></pre>
|
||||
|
||||
Im vorherigen Output ist zu sehen, dass **benutzerzugängliche Orte** unter `/System/Volumes/Data` gemountet sind.
|
||||
|
||||
Darüber hinaus ist der **macOS-Systemvolumensnapshot** unter `/` gemountet und ist **versiegelt** (kryptografisch vom OS signiert). Wenn SIP umgangen und geändert wird, wird das **OS nicht mehr booten**.
|
||||
Darüber hinaus ist der **macOS-Systemvolumensnapshot** unter `/` gemountet und ist **versiegelt** (kryptografisch vom OS signiert). Wenn SIP umgangen und modifiziert wird, wird das **OS nicht mehr booten**.
|
||||
|
||||
Es ist auch möglich, **zu überprüfen, ob das Siegel aktiviert ist**, indem Sie Folgendes ausführen:
|
||||
```bash
|
||||
|
@ -254,8 +271,8 @@ mount
|
|||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||||
```
|
||||
{% hint style="success" %}
|
||||
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -267,4 +284,3 @@ Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue