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
0308e33874
commit
8625e2a113
2 changed files with 228 additions and 75 deletions
|
@ -1,8 +1,8 @@
|
||||||
# macOS Sandbox
|
# macOS Sandbox
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -19,18 +19,20 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
MacOS Sandbox (inizialmente chiamato Seatbelt) **limita le applicazioni** in esecuzione all'interno della sandbox alle **azioni consentite specificate nel profilo Sandbox** con cui l'app è in esecuzione. Questo aiuta a garantire che **l'applicazione accederà solo alle risorse previste**.
|
MacOS Sandbox (inizialmente chiamato Seatbelt) **limita le applicazioni** in esecuzione all'interno della sandbox alle **azioni consentite specificate nel profilo Sandbox** con cui l'app è in esecuzione. Questo aiuta a garantire che **l'applicazione accederà solo alle risorse previste**.
|
||||||
|
|
||||||
Qualsiasi app con l'**entitlement** **`com.apple.security.app-sandbox`** verrà eseguita all'interno della sandbox. **I binari Apple** vengono solitamente eseguiti all'interno di una Sandbox e per pubblicare all'interno dell'**App Store**, **questo entitlement è obbligatorio**. Quindi, la maggior parte delle applicazioni verrà eseguita all'interno della sandbox.
|
Qualsiasi app con l'**entitlement** **`com.apple.security.app-sandbox`** verrà eseguita all'interno della sandbox. **I binari Apple** vengono solitamente eseguiti all'interno di una Sandbox, e tutte le applicazioni dell'**App Store hanno quell'entitlement**. Quindi diverse applicazioni verranno eseguite all'interno della sandbox.
|
||||||
|
|
||||||
Per controllare cosa un processo può o non può fare, la **Sandbox ha hook** in tutte le **syscall** nel kernel. **A seconda** degli **entitlements** dell'app, la Sandbox **consentirà** determinate azioni.
|
Per controllare cosa un processo può o non può fare, la **Sandbox ha hook** in quasi ogni operazione che un processo potrebbe tentare (inclusi la maggior parte delle syscalls) utilizzando **MACF**. Tuttavia, d**ipendendo** dagli **entitlements** dell'app, la Sandbox potrebbe essere più permissiva con il processo.
|
||||||
|
|
||||||
Al alcuni componenti importanti della Sandbox sono:
|
Alcuni componenti importanti della Sandbox sono:
|
||||||
|
|
||||||
* L'**estensione del kernel** `/System/Library/Extensions/Sandbox.kext`
|
* L'**estensione del kernel** `/System/Library/Extensions/Sandbox.kext`
|
||||||
* Il **framework privato** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
* Il **framework privato** `/System/Library/PrivateFrameworks/AppSandbox.framework`
|
||||||
* Un **daemon** in esecuzione in userland `/usr/libexec/sandboxd`
|
* Un **daemon** in esecuzione in userland `/usr/libexec/sandboxd`
|
||||||
* I **contenitori** `~/Library/Containers`
|
* I **contenitori** `~/Library/Containers`
|
||||||
|
|
||||||
All'interno della cartella dei contenitori puoi trovare **una cartella per ogni app eseguita in sandbox** con il nome dell'id del bundle:
|
### Containers
|
||||||
|
|
||||||
|
Ogni applicazione sandboxed avrà il proprio contenitore in `~/Library/Containers/{CFBundleIdentifier}` :
|
||||||
```bash
|
```bash
|
||||||
ls -l ~/Library/Containers
|
ls -l ~/Library/Containers
|
||||||
total 0
|
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
|
drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler
|
||||||
[...]
|
[...]
|
||||||
```
|
```
|
||||||
All'interno di ogni cartella dell'ID bundle puoi trovare il **plist** e la **directory Data** dell'App:
|
All'interno di ogni cartella dell'ID bundle puoi trovare il **plist** e la **directory Data** dell'App con una struttura che imita la cartella Home:
|
||||||
```bash
|
```bash
|
||||||
cd /Users/username/Library/Containers/com.apple.Safari
|
cd /Users/username/Library/Containers/com.apple.Safari
|
||||||
ls -la
|
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
|
drwx------ 2 username staff 64 Mar 24 18:02 tmp
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Nota che anche se i symlink sono presenti per "uscire" dal Sandbox e accedere ad altre cartelle, l'App deve comunque **avere permessi** per accedervi. Questi permessi sono all'interno del **`.plist`**.
|
Nota che anche se i symlink sono presenti per "uscire" dal Sandbox e accedere ad altre cartelle, l'App deve comunque **avere permessi** per accedervi. Questi permessi sono all'interno del **`.plist`** in `RedirectablePaths`.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
Il **`SandboxProfileData`** è il profilo sandbox compilato CFData codificato in B64.
|
||||||
```bash
|
```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 -
|
plutil -convert xml1 .com.apple.containermanagerd.metadata.plist -o -
|
||||||
|
|
||||||
# Binary sandbox profile
|
# Binary sandbox profile
|
||||||
|
@ -118,7 +123,7 @@ AAAhAboBAAAAAAgAAABZAO4B5AHjBMkEQAUPBSsGPwsgASABHgEgASABHwEf...
|
||||||
Tutto ciò che viene creato/modificato da un'applicazione in Sandbox riceverà l'**attributo di quarantena**. Questo impedirà a uno spazio sandbox di attivare Gatekeeper se l'app sandbox tenta di eseguire qualcosa con **`open`**.
|
Tutto ciò che viene creato/modificato da un'applicazione in Sandbox riceverà l'**attributo di quarantena**. Questo impedirà a uno spazio sandbox di attivare Gatekeeper se l'app sandbox tenta di eseguire qualcosa con **`open`**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Profili Sandbox
|
## Profili Sandbox
|
||||||
|
|
||||||
I profili Sandbox sono file di configurazione che indicano cosa sarà **consentito/vietato** in quel **Sandbox**. Utilizza il **Sandbox Profile Language (SBPL)**, che utilizza il linguaggio di programmazione [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)).
|
I profili Sandbox sono file di configurazione che indicano cosa sarà **consentito/vietato** in quel **Sandbox**. Utilizza il **Sandbox Profile Language (SBPL)**, che utilizza il linguaggio di programmazione [**Scheme**](https://en.wikipedia.org/wiki/Scheme\_\(programming\_language\)).
|
||||||
|
|
||||||
|
@ -142,12 +147,14 @@ Qui puoi trovare un esempio:
|
||||||
```
|
```
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Controlla questa [**ricerca**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **per verificare ulteriori azioni che potrebbero essere consentite o negate.**
|
Controlla questa [**ricerca**](https://reverse.put.as/2011/09/14/apple-sandbox-guide-v1-0/) **per verificare ulteriori azioni che potrebbero essere consentite o negate.**
|
||||||
|
|
||||||
|
Nota che nella versione compilata di un profilo, i nomi delle operazioni sono sostituiti dalle loro voci in un array conosciuto dalla dylib e dal kext, rendendo la versione compilata più corta e più difficile da leggere.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
I **servizi di sistema** importanti vengono eseguiti anche all'interno del proprio **sandbox** personalizzato, come il servizio `mdnsresponder`. Puoi visualizzare questi **profili sandbox** personalizzati all'interno di:
|
I **servizi di sistema** importanti vengono eseguiti anche all'interno del proprio **sandbox** personalizzato, come il servizio `mdnsresponder`. Puoi visualizzare questi **profili sandbox** personalizzati all'interno di:
|
||||||
|
|
||||||
* **`/usr/share/sandbox`**
|
* **`/usr/share/sandbox`**
|
||||||
* **`/System/Library/Sandbox/Profiles`** 
|
* **`/System/Library/Sandbox/Profiles`**
|
||||||
* Altri profili sandbox possono essere controllati su [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
|
* Altri profili sandbox possono essere controllati su [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles).
|
||||||
|
|
||||||
Le app dell'**App Store** utilizzano il **profilo** **`/System/Library/Sandbox/Profiles/application.sb`**. Puoi controllare in questo profilo come i diritti, come **`com.apple.security.network.server`**, consentono a un processo di utilizzare la rete.
|
Le app dell'**App Store** utilizzano il **profilo** **`/System/Library/Sandbox/Profiles/application.sb`**. Puoi controllare in questo profilo come i diritti, come **`com.apple.security.network.server`**, consentono a un processo di utilizzare la rete.
|
||||||
|
@ -211,7 +218,7 @@ log show --style syslog --predicate 'eventMessage contains[c] "sandbox"' --last
|
||||||
{% endtabs %}
|
{% endtabs %}
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
Nota che il **software** **autorizzato da Apple** che gira su **Windows** **non ha precauzioni di sicurezza aggiuntive**, come il sandboxing delle applicazioni.
|
Nota che il **software** **scritto da Apple** che gira su **Windows** **non ha precauzioni di sicurezza aggiuntive**, come il sandboxing delle applicazioni.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Esempi di bypass:
|
Esempi di bypass:
|
||||||
|
@ -219,38 +226,45 @@ Esempi di bypass:
|
||||||
* [https://lapcatsoftware.com/articles/sandbox-escape.html](https://lapcatsoftware.com/articles/sandbox-escape.html)
|
* [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) (sono in grado di scrivere file al di fuori del sandbox il cui nome inizia con `~$`).
|
* [https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c) (sono in grado di scrivere file al di fuori del sandbox il cui nome inizia con `~$`).
|
||||||
|
|
||||||
### Profili Sandbox di MacOS
|
### Tracciamento del Sandbox
|
||||||
|
|
||||||
macOS memorizza i profili di sandbox di sistema in due posizioni: **/usr/share/sandbox/** e **/System/Library/Sandbox/Profiles**.
|
#### Tramite profilo
|
||||||
|
|
||||||
E se un'applicazione di terze parti possiede il diritto _**com.apple.security.app-sandbox**_, il sistema applica il profilo **/System/Library/Sandbox/Profiles/application.sb** a quel processo.
|
È possibile tracciare tutti i controlli che il sandbox esegue ogni volta che viene verificata un'azione. Per farlo, crea semplicemente il seguente profilo:
|
||||||
|
|
||||||
### **Profilo Sandbox di iOS**
|
{% code title="trace.sb" %}
|
||||||
|
```scheme
|
||||||
Il profilo predefinito si chiama **container** e non abbiamo la rappresentazione testuale SBPL. In memoria, questo sandbox è rappresentato come un albero binario Allow/Deny per ciascuna autorizzazione del sandbox.
|
(version 1)
|
||||||
|
(trace /tmp/trace.out)
|
||||||
### Debug & Bypass Sandbox
|
|
||||||
|
|
||||||
Su macOS, a differenza di iOS dove i processi sono sandboxati fin dall'inizio dal kernel, **i processi devono optare per il sandboxing da soli**. Questo significa che su macOS, un processo non è limitato dal sandbox fino a quando non decide attivamente di entrarvi.
|
|
||||||
|
|
||||||
I processi vengono automaticamente sandboxati dal userland quando iniziano se hanno il diritto: `com.apple.security.app-sandbox`. Per una spiegazione dettagliata di questo processo controlla:
|
|
||||||
|
|
||||||
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
|
||||||
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
|
||||||
{% endcontent-ref %}
|
|
||||||
|
|
||||||
### **Controlla i privilegi PID**
|
|
||||||
|
|
||||||
[**Secondo questo**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), il **`sandbox_check`** (è un `__mac_syscall`), può controllare **se un'operazione è consentita o meno** dal sandbox in un certo PID.
|
|
||||||
|
|
||||||
Il [**tool sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) può controllare se un PID può eseguire una certa azione:
|
|
||||||
```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
|
|
||||||
```
|
```
|
||||||
### Custom SBPL nelle app dell'App Store
|
{% endcode %}
|
||||||
|
|
||||||
|
E poi esegui semplicemente qualcosa utilizzando quel profilo:
|
||||||
|
```bash
|
||||||
|
sandbox-exec -f /tmp/trace.sb /bin/ls
|
||||||
|
```
|
||||||
|
In `/tmp/trace.out` potrai vedere ogni controllo della sandbox eseguito ogni volta che è stato chiamato (quindi, molti duplicati).
|
||||||
|
|
||||||
|
È anche possibile tracciare la sandbox utilizzando il parametro **`-t`**: `sandbox-exec -t /path/trace.out -p "(version 1)" /bin/ls`
|
||||||
|
|
||||||
|
#### Via API
|
||||||
|
|
||||||
|
La funzione `sandbox_set_trace_path` esportata da `libsystem_sandbox.dylib` consente di specificare un nome file di traccia in cui verranno scritti i controlli della sandbox.\
|
||||||
|
È anche possibile fare qualcosa di simile chiamando `sandbox_vtrace_enable()` e poi ottenendo i log di errore dal buffer chiamando `sandbox_vtrace_report()`.
|
||||||
|
|
||||||
|
### Ispezione della Sandbox
|
||||||
|
|
||||||
|
`libsandbox.dylib` esporta una funzione chiamata sandbox\_inspect\_pid che fornisce un elenco dello stato della sandbox di un processo (inclusi le estensioni). Tuttavia, solo i binari della piattaforma possono utilizzare questa funzione.
|
||||||
|
|
||||||
|
### Profili Sandbox di MacOS e iOS
|
||||||
|
|
||||||
|
MacOS memorizza i profili della sandbox di sistema in due posizioni: **/usr/share/sandbox/** e **/System/Library/Sandbox/Profiles**.
|
||||||
|
|
||||||
|
E se un'applicazione di terze parti porta il diritto _**com.apple.security.app-sandbox**_, il sistema applica il profilo **/System/Library/Sandbox/Profiles/application.sb** a quel processo.
|
||||||
|
|
||||||
|
In iOS, il profilo predefinito si chiama **container** e non abbiamo la rappresentazione testuale SBPL. In memoria, questa sandbox è rappresentata come un albero binario di Permesso/Nego per ciascuna autorizzazione della sandbox.
|
||||||
|
|
||||||
|
### SBPL personalizzato nelle app dell'App Store
|
||||||
|
|
||||||
Potrebbe essere possibile per le aziende far funzionare le loro app **con profili Sandbox personalizzati** (invece di quello predefinito). Devono utilizzare il diritto **`com.apple.security.temporary-exception.sbpl`** che deve essere autorizzato da Apple.
|
Potrebbe essere possibile per le aziende far funzionare le loro app **con profili Sandbox personalizzati** (invece di quello predefinito). Devono utilizzare il diritto **`com.apple.security.temporary-exception.sbpl`** che deve essere autorizzato da Apple.
|
||||||
|
|
||||||
|
@ -264,17 +278,140 @@ Potrebbe essere possibile per le aziende far funzionare le loro app **con profil
|
||||||
```
|
```
|
||||||
Questo **valuterà la stringa dopo questo diritto** come un profilo Sandbox.
|
Questo **valuterà la stringa dopo questo diritto** come un profilo Sandbox.
|
||||||
|
|
||||||
|
### Compilazione e decompilazione di un profilo Sandbox
|
||||||
|
|
||||||
|
Lo strumento **`sandbox-exec`** utilizza le funzioni `sandbox_compile_*` da `libsandbox.dylib`. Le principali funzioni esportate sono: `sandbox_compile_file` (si aspetta un percorso di file, parametro `-f`), `sandbox_compile_string` (si aspetta una stringa, parametro `-p`), `sandbox_compile_name` (si aspetta un nome di un contenitore, parametro `-n`), `sandbox_compile_entitlements` (si aspetta un plist di diritti).
|
||||||
|
|
||||||
|
Questa versione invertita e [**open source dello strumento sandbox-exec**](https://newosxbook.com/src.jl?tree=listings\&file=/sandbox\_exec.c) consente di far scrivere a **`sandbox-exec`** in un file il profilo sandbox compilato.
|
||||||
|
|
||||||
|
Inoltre, per confinare un processo all'interno di un contenitore, potrebbe chiamare `sandbox_spawnattrs_set[container/profilename]` e passare un contenitore o un profilo preesistente.
|
||||||
|
|
||||||
|
## Debug e Bypass Sandbox
|
||||||
|
|
||||||
|
Su macOS, a differenza di iOS dove i processi sono sandboxati fin dall'inizio dal kernel, **i processi devono optare per la sandbox da soli**. Ciò significa che su macOS, un processo non è limitato dalla sandbox fino a quando non decide attivamente di entrarvi, anche se le app dell'App Store sono sempre sandboxate.
|
||||||
|
|
||||||
|
I processi sono automaticamente sandboxati dal userland quando iniziano se hanno il diritto: `com.apple.security.app-sandbox`. Per una spiegazione dettagliata di questo processo controlla:
|
||||||
|
|
||||||
|
{% content-ref url="macos-sandbox-debug-and-bypass/" %}
|
||||||
|
[macos-sandbox-debug-and-bypass](macos-sandbox-debug-and-bypass/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## **Estensioni Sandbox**
|
||||||
|
|
||||||
|
Le estensioni consentono di dare ulteriori privilegi a un oggetto e vengono attivate chiamando una delle funzioni:
|
||||||
|
|
||||||
|
* `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`
|
||||||
|
|
||||||
|
Le estensioni sono memorizzate nel secondo slot di etichetta MACF accessibile dalle credenziali del processo. Il seguente **`sbtool`** può accedere a queste informazioni.
|
||||||
|
|
||||||
|
Nota che le estensioni sono solitamente concesse dai processi autorizzati, ad esempio, `tccd` concederà il token di estensione di `com.apple.tcc.kTCCServicePhotos` quando un processo tenta di accedere alle foto ed è stato autorizzato in un messaggio XPC. Poi, il processo dovrà consumare il token di estensione affinché venga aggiunto ad esso.\
|
||||||
|
Nota che i token di estensione sono lunghi esadecimali che codificano i permessi concessi. Tuttavia, non hanno il PID autorizzato hardcoded, il che significa che qualsiasi processo con accesso al token potrebbe essere **consumato da più processi**.
|
||||||
|
|
||||||
|
Nota che le estensioni sono molto correlate ai diritti, quindi avere determinati diritti potrebbe automaticamente concedere determinate estensioni.
|
||||||
|
|
||||||
|
### **Controlla i privilegi PID**
|
||||||
|
|
||||||
|
[**Secondo questo**](https://www.youtube.com/watch?v=mG715HcDgO8\&t=3011s), le funzioni **`sandbox_check`** (è un `__mac_syscall`), possono controllare **se un'operazione è consentita o meno** dalla sandbox in un certo PID, audit token o ID unico.
|
||||||
|
|
||||||
|
Il [**tool sbtool**](http://newosxbook.com/src.jl?tree=listings\&file=sbtool.c) (trovalo [compilato qui](https://newosxbook.com/articles/hitsb.html)) può controllare se un PID può eseguire determinate azioni:
|
||||||
|
```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
|
||||||
|
|
||||||
|
È anche possibile sospendere e riattivare il sandbox utilizzando le funzioni `sandbox_suspend` e `sandbox_unsuspend` da `libsystem_sandbox.dylib`.
|
||||||
|
|
||||||
|
Nota che per chiamare la funzione di sospensione vengono controllati alcuni diritti per autorizzare il chiamante a chiamarla come:
|
||||||
|
|
||||||
|
* com.apple.private.security.sandbox-manager
|
||||||
|
* com.apple.security.print
|
||||||
|
* com.apple.security.temporary-exception.audio-unit-host
|
||||||
|
|
||||||
|
## mac\_syscall
|
||||||
|
|
||||||
|
Questa chiamata di sistema (#381) si aspetta un primo argomento stringa che indicherà il modulo da eseguire, e poi un codice nel secondo argomento che indicherà la funzione da eseguire. Poi il terzo argomento dipenderà dalla funzione eseguita.
|
||||||
|
|
||||||
|
La funzione `___sandbox_ms` chiama `mac_syscall` indicando nel primo argomento `"Sandbox"` proprio come `___sandbox_msp` è un wrapper di `mac_set_proc` (#387). Poi, alcuni dei codici supportati da `___sandbox_ms` possono essere trovati in questa tabella:
|
||||||
|
|
||||||
|
* **set\_profile (#0)**: Applica un profilo compilato o nominato a un processo.
|
||||||
|
* **platform\_policy (#1)**: Applica controlli di policy specifici per la piattaforma (varia tra macOS e iOS).
|
||||||
|
* **check\_sandbox (#2)**: Esegue un controllo manuale di un'operazione sandbox specifica.
|
||||||
|
* **note (#3)**: Aggiunge una notazione a un Sandbox
|
||||||
|
* **container (#4)**: Attacca un'annotazione a un sandbox, tipicamente per il debug o identificazione.
|
||||||
|
* **extension\_issue (#5)**: Genera una nuova estensione per un processo.
|
||||||
|
* **extension\_consume (#6)**: Consuma un'estensione data.
|
||||||
|
* **extension\_release (#7)**: Rilascia la memoria legata a un'estensione consumata.
|
||||||
|
* **extension\_update\_file (#8)**: Modifica i parametri di un'estensione di file esistente all'interno del sandbox.
|
||||||
|
* **extension\_twiddle (#9)**: Regola o modifica un'estensione di file esistente (es. TextEdit, rtf, rtfd).
|
||||||
|
* **suspend (#10)**: Sospende temporaneamente tutti i controlli del sandbox (richiede diritti appropriati).
|
||||||
|
* **unsuspend (#11)**: Riprende tutti i controlli del sandbox precedentemente sospesi.
|
||||||
|
* **passthrough\_access (#12)**: Consente l'accesso diretto a una risorsa, bypassando i controlli del sandbox.
|
||||||
|
* **set\_container\_path (#13)**: (solo iOS) Imposta un percorso di contenitore per un gruppo di app o ID di firma.
|
||||||
|
* **container\_map (#14)**: (solo iOS) Recupera un percorso di contenitore da `containermanagerd`.
|
||||||
|
* **sandbox\_user\_state\_item\_buffer\_send (#15)**: (iOS 10+) Imposta i metadati in modalità utente nel sandbox.
|
||||||
|
* **inspect (#16)**: Fornisce informazioni di debug su un processo sandboxed.
|
||||||
|
* **dump (#18)**: (macOS 11) Dump del profilo attuale di un sandbox per analisi.
|
||||||
|
* **vtrace (#19)**: Traccia le operazioni del sandbox per monitoraggio o debug.
|
||||||
|
* **builtin\_profile\_deactivate (#20)**: (macOS < 11) Disattiva profili nominati (es. `pe_i_can_has_debugger`).
|
||||||
|
* **check\_bulk (#21)**: Esegue più operazioni `sandbox_check` in una singola chiamata.
|
||||||
|
* **reference\_retain\_by\_audit\_token (#28)**: Crea un riferimento per un token di audit da utilizzare nei controlli del sandbox.
|
||||||
|
* **reference\_release (#29)**: Rilascia un riferimento di token di audit precedentemente mantenuto.
|
||||||
|
* **rootless\_allows\_task\_for\_pid (#30)**: Verifica se `task_for_pid` è consentito (simile ai controlli `csr`).
|
||||||
|
* **rootless\_whitelist\_push (#31)**: (macOS) Applica un file di manifest di Protezione Integrità di Sistema (SIP).
|
||||||
|
* **rootless\_whitelist\_check (preflight) (#32)**: Controlla il file di manifest SIP prima dell'esecuzione.
|
||||||
|
* **rootless\_protected\_volume (#33)**: (macOS) Applica protezioni SIP a un disco o partizione.
|
||||||
|
* **rootless\_mkdir\_protected (#34)**: Applica protezione SIP/DataVault a un processo di creazione di directory.
|
||||||
|
|
||||||
|
## Sandbox.kext
|
||||||
|
|
||||||
|
Nota che in iOS l'estensione del kernel contiene **tutti i profili hardcoded** all'interno del segmento `__TEXT.__const` per evitare che vengano modificati. Le seguenti sono alcune funzioni interessanti dall'estensione del kernel:
|
||||||
|
|
||||||
|
* **`hook_policy_init`**: Collega `mpo_policy_init` ed è chiamato dopo `mac_policy_register`. Esegue la maggior parte delle inizializzazioni del Sandbox. Inizializza anche SIP.
|
||||||
|
* **`hook_policy_initbsd`**: Imposta l'interfaccia sysctl registrando `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` e `security.mac.sandbox.debug_mode` (se avviato con `PE_i_can_has_debugger`).
|
||||||
|
* **`hook_policy_syscall`**: È chiamato da `mac_syscall` con "Sandbox" come primo argomento e codice che indica l'operazione nel secondo. Viene utilizzato uno switch per trovare il codice da eseguire in base al codice richiesto.
|
||||||
|
|
||||||
|
### MACF Hooks
|
||||||
|
|
||||||
|
**`Sandbox.kext`** utilizza più di un centinaio di hook tramite MACF. La maggior parte degli hook controllerà solo alcuni casi banali che consentono di eseguire l'azione, altrimenti chiameranno **`cred_sb_evalutate`** con le **credenziali** da MACF e un numero corrispondente all'**operazione** da eseguire e un **buffer** per l'output.
|
||||||
|
|
||||||
|
Un buon esempio di ciò è la funzione **`_mpo_file_check_mmap`** che ha agganciato **`mmap`** e che inizierà a controllare se la nuova memoria sarà scrivibile (e se non lo è, consentirà l'esecuzione), poi controllerà se è utilizzata per la cache condivisa dyld e, se sì, consentirà l'esecuzione, e infine chiamerà **`cred_sb_evalutate`** per eseguire ulteriori controlli di autorizzazione.
|
||||||
|
|
||||||
|
Inoltre, tra i centinaia di hook utilizzati dal Sandbox, ce ne sono 3 in particolare che sono molto interessanti:
|
||||||
|
|
||||||
|
* `mpo_proc_check_for`: Applica il profilo se necessario e se non era stato precedentemente applicato.
|
||||||
|
* `mpo_vnode_check_exec`: Chiamato quando un processo carica il binario associato, quindi viene eseguito un controllo del profilo e anche un controllo che vieta le esecuzioni SUID/SGID.
|
||||||
|
* `mpo_cred_label_update_execve`: Questo viene chiamato quando l'etichetta viene assegnata. Questo è il più lungo poiché viene chiamato quando il binario è completamente caricato ma non è ancora stato eseguito. Eseguirà azioni come la creazione dell'oggetto sandbox, l'attacco della struttura sandbox alle credenziali kauth, la rimozione dell'accesso alle porte mach...
|
||||||
|
|
||||||
|
Nota che **`cred_sb_evalutate`** è un wrapper su **`sb_evaluate`** e questa funzione ottiene le credenziali passate e poi esegue la valutazione utilizzando la funzione **`eval`** che di solito valuta il **profilo della piattaforma** che è per impostazione predefinita applicato a tutti i processi e poi il **profilo del processo specifico**. Nota che il profilo della piattaforma è uno dei principali componenti di **SIP** in macOS.
|
||||||
|
|
||||||
|
## Sandboxd
|
||||||
|
|
||||||
|
Il Sandbox ha anche un demone utente in esecuzione che espone il servizio XPC Mach `com.apple.sandboxd` e lega la porta speciale 14 (`HOST_SEATBELT_PORT`) che l'estensione del kernel utilizza per comunicare con esso. Espone alcune funzioni utilizzando MIG.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Impara e pratica il hacking AWS:<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 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">\
|
||||||
Impara e pratica il hacking GCP: <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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Supporta HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **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)**.**
|
||||||
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# macOS SIP
|
# macOS SIP
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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 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 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>
|
<details>
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
|
|
||||||
## **Informazioni di base**
|
## **Informazioni di base**
|
||||||
|
|
||||||
**La Protezione dell'Integrità del Sistema (SIP)** in macOS è un meccanismo progettato per impedire anche agli utenti più privilegiati di apportare modifiche non autorizzate a cartelle di sistema chiave. Questa funzione gioca un ruolo cruciale nel mantenere l'integrità del sistema limitando azioni come l'aggiunta, la modifica o la cancellazione di file in aree protette. Le cartelle principali protette da SIP includono:
|
**La Protezione dell'Integrità del Sistema (SIP)** in macOS è un meccanismo progettato per impedire anche agli utenti più privilegiati di apportare modifiche non autorizzate a cartelle di sistema chiave. Questa funzione gioca un ruolo cruciale nel mantenere l'integrità del sistema limitando azioni come l'aggiunta, la modifica o la cancellazione di file in aree protette. Le cartelle principali protette da SIP includono:
|
||||||
|
@ -25,7 +24,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
* **/sbin**
|
* **/sbin**
|
||||||
* **/usr**
|
* **/usr**
|
||||||
|
|
||||||
Le regole che governano il comportamento del SIP sono definite nel file di configurazione situato in **`/System/Library/Sandbox/rootless.conf`**. All'interno di questo file, i percorsi che sono preceduti da un asterisco (\*) sono indicati come eccezioni alle altrimenti rigorose restrizioni del SIP.
|
Le regole che governano il comportamento di SIP sono definite nel file di configurazione situato in **`/System/Library/Sandbox/rootless.conf`**. All'interno di questo file, i percorsi che sono preceduti da un asterisco (\*) sono indicati come eccezioni alle altrimenti rigorose restrizioni di SIP.
|
||||||
|
|
||||||
Considera l'esempio qui sotto:
|
Considera l'esempio qui sotto:
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -50,7 +49,11 @@ drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
|
||||||
```
|
```
|
||||||
Qui, il flag **`restricted`** indica che la directory `/usr/libexec` è protetta da SIP. In una directory protetta da SIP, i file non possono essere creati, modificati o eliminati.
|
Qui, il flag **`restricted`** indica che la directory `/usr/libexec` è protetta da SIP. In una directory protetta da SIP, i file non possono essere creati, modificati o eliminati.
|
||||||
|
|
||||||
Inoltre, se un file contiene l'attributo **`com.apple.rootless`** come **attributo esteso**, quel file sarà anche **protetto da SIP**.
|
Inoltre, se un file contiene l'attributo **`com.apple.rootless`** come **attributo** esteso, quel file sarà anch'esso **protetto da SIP**.
|
||||||
|
|
||||||
|
{% hint style="success" %}
|
||||||
|
Nota che il hook **Sandbox** **`hook_vnode_check_setextattr`** impedisce qualsiasi tentativo di modificare l'attributo esteso **`com.apple.rootless`.**
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
**SIP limita anche altre azioni di root** come:
|
**SIP limita anche altre azioni di root** come:
|
||||||
|
|
||||||
|
@ -63,7 +66,7 @@ Le opzioni sono mantenute nella variabile nvram come un bitflag (`csr-active-con
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1192).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1192).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
### Stato SIP
|
### Stato di SIP
|
||||||
|
|
||||||
Puoi controllare se SIP è abilitato sul tuo sistema con il seguente comando:
|
Puoi controllare se SIP è abilitato sul tuo sistema con il seguente comando:
|
||||||
```bash
|
```bash
|
||||||
|
@ -77,7 +80,7 @@ Se desideri mantenere SIP abilitato ma rimuovere le protezioni di debug, puoi fa
|
||||||
```bash
|
```bash
|
||||||
csrutil enable --without debug
|
csrutil enable --without debug
|
||||||
```
|
```
|
||||||
### Altre Restrizioni
|
### Other Restrictions
|
||||||
|
|
||||||
* **Disabilita il caricamento di estensioni del kernel non firmate** (kexts), garantendo che solo le estensioni verificate interagiscano con il kernel di sistema.
|
* **Disabilita il caricamento di estensioni del kernel non firmate** (kexts), garantendo che solo le estensioni verificate interagiscano con il kernel di sistema.
|
||||||
* **Previene il debugging** dei processi di sistema macOS, proteggendo i componenti core del sistema da accessi e modifiche non autorizzate.
|
* **Previene il debugging** dei processi di sistema macOS, proteggendo i componenti core del sistema da accessi e modifiche non autorizzate.
|
||||||
|
@ -85,20 +88,34 @@ csrutil enable --without debug
|
||||||
|
|
||||||
[**Scopri di più sulle informazioni SIP in questo talk**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
[**Scopri di più sulle informazioni SIP in questo talk**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
|
||||||
|
|
||||||
## Bypass SIP
|
### **SIP related Entitlements**
|
||||||
|
|
||||||
Il bypass di SIP consente a un attaccante di:
|
* `com.apple.rootless.xpc.bootstrap`: Controlla launchd
|
||||||
|
* `com.apple.rootless.install[.heritable]`: Accesso al file system
|
||||||
|
* `com.apple.rootless.kext-management`: `kext_request`
|
||||||
|
* `com.apple.rootless.datavault.controller`: Gestisci UF\_DATAVAULT
|
||||||
|
* `com.apple.rootless.xpc.bootstrap`: Capacità di configurazione XPC
|
||||||
|
* `com.apple.rootless.xpc.effective-root`: Root tramite launchd XPC
|
||||||
|
* `com.apple.rootless.restricted-block-devices`: Accesso a dispositivi a blocchi raw
|
||||||
|
* `com.apple.rootless.internal.installer-equivalent`: Accesso illimitato al file system
|
||||||
|
* `com.apple.rootless.restricted-nvram-variables[.heritable]`: Accesso completo a NVRAM
|
||||||
|
* `com.apple.rootless.storage.label`: Modifica file limitati da com.apple.rootless xattr con l'etichetta corrispondente
|
||||||
|
* `com.apple.rootless.volume.VM.label`: Mantieni lo swap VM sul volume
|
||||||
|
|
||||||
* **Accedere ai Dati Utente**: Leggere dati sensibili dell'utente come email, messaggi e cronologia di Safari da tutti gli account utente.
|
## SIP Bypasses
|
||||||
|
|
||||||
|
Evitare SIP consente a un attaccante di:
|
||||||
|
|
||||||
|
* **Accedere ai dati dell'utente**: Leggere dati sensibili dell'utente come email, messaggi e cronologia di Safari da tutti gli account utente.
|
||||||
* **Bypass TCC**: Manipolare direttamente il database TCC (Trasparenza, Consenso e Controllo) per concedere accesso non autorizzato alla webcam, al microfono e ad altre risorse.
|
* **Bypass TCC**: Manipolare direttamente il database TCC (Trasparenza, Consenso e Controllo) per concedere accesso non autorizzato alla webcam, al microfono e ad altre risorse.
|
||||||
* **Stabilire Persistenza**: Posizionare malware in posizioni protette da SIP, rendendolo resistente alla rimozione, anche da privilegi di root. Questo include anche la possibilità di manomettere lo strumento di rimozione malware (MRT).
|
* **Stabilire persistenza**: Posizionare malware in posizioni protette da SIP, rendendolo resistente alla rimozione, anche da privilegi di root. Questo include anche la possibilità di manomettere lo strumento di rimozione malware (MRT).
|
||||||
* **Caricare Estensioni del Kernel**: Sebbene ci siano ulteriori misure di sicurezza, bypassare SIP semplifica il processo di caricamento di estensioni del kernel non firmate.
|
* **Caricare estensioni del kernel**: Sebbene ci siano ulteriori misure di sicurezza, bypassare SIP semplifica il processo di caricamento di estensioni del kernel non firmate.
|
||||||
|
|
||||||
### Pacchetti Installer
|
### Installer Packages
|
||||||
|
|
||||||
**I pacchetti installer firmati con il certificato di Apple** possono bypassare le sue protezioni. Ciò significa che anche i pacchetti firmati da sviluppatori standard verranno bloccati se tentano di modificare le directory protette da SIP.
|
**I pacchetti di installazione firmati con il certificato di Apple** possono bypassare le sue protezioni. Ciò significa che anche i pacchetti firmati da sviluppatori standard verranno bloccati se tentano di modificare directory protette da SIP.
|
||||||
|
|
||||||
### File SIP Inesistente
|
### Inexistent SIP file
|
||||||
|
|
||||||
Una potenziale falla è che se un file è specificato in **`rootless.conf` ma attualmente non esiste**, può essere creato. Il malware potrebbe sfruttare questo per **stabilire persistenza** sul sistema. Ad esempio, un programma malevolo potrebbe creare un file .plist in `/System/Library/LaunchDaemons` se è elencato in `rootless.conf` ma non presente.
|
Una potenziale falla è che se un file è specificato in **`rootless.conf` ma attualmente non esiste**, può essere creato. Il malware potrebbe sfruttare questo per **stabilire persistenza** sul sistema. Ad esempio, un programma malevolo potrebbe creare un file .plist in `/System/Library/LaunchDaemons` se è elencato in `rootless.conf` ma non presente.
|
||||||
|
|
||||||
|
@ -110,11 +127,11 @@ L'attributo **`com.apple.rootless.install.heritable`** consente di bypassare SIP
|
||||||
|
|
||||||
#### [CVE-2019-8561](https://objective-see.org/blog/blog\_0x42.html) <a href="#cve" id="cve"></a>
|
#### [CVE-2019-8561](https://objective-see.org/blog/blog\_0x42.html) <a href="#cve" id="cve"></a>
|
||||||
|
|
||||||
È stato scoperto che era possibile **scambiare il pacchetto installer dopo che il sistema aveva verificato la sua firma** e poi, il sistema avrebbe installato il pacchetto malevolo invece di quello originale. Poiché queste azioni venivano eseguite da **`system_installd`**, ciò avrebbe consentito di bypassare SIP.
|
È stato scoperto che era possibile **scambiare il pacchetto di installazione dopo che il sistema aveva verificato la sua firma** e poi, il sistema avrebbe installato il pacchetto malevolo invece di quello originale. Poiché queste azioni venivano eseguite da **`system_installd`**, ciò avrebbe consentito di bypassare SIP.
|
||||||
|
|
||||||
#### [CVE-2020–9854](https://objective-see.org/blog/blog\_0x4D.html) <a href="#cve-unauthd-chain" id="cve-unauthd-chain"></a>
|
#### [CVE-2020–9854](https://objective-see.org/blog/blog\_0x4D.html) <a href="#cve-unauthd-chain" id="cve-unauthd-chain"></a>
|
||||||
|
|
||||||
Se un pacchetto veniva installato da un'immagine montata o da un'unità esterna, l'**installer** avrebbe **eseguito** il binario da **quella file system** (invece che da una posizione protetta da SIP), facendo eseguire a **`system_installd`** un binario arbitrario.
|
Se un pacchetto veniva installato da un'immagine montata o da un'unità esterna, l'**installer** **eseguiva** il binario da **quella file system** (invece che da una posizione protetta da SIP), facendo eseguire a **`system_installd`** un binario arbitrario.
|
||||||
|
|
||||||
#### CVE-2021-30892 - Shrootless
|
#### CVE-2021-30892 - Shrootless
|
||||||
|
|
||||||
|
@ -124,7 +141,7 @@ Il demone **`system_installd`** installerà pacchetti che sono stati firmati da
|
||||||
|
|
||||||
I ricercatori hanno scoperto che durante l'installazione di un pacchetto firmato da Apple (.pkg file), **`system_installd`** **esegue** qualsiasi **script post-install** incluso nel pacchetto. Questi script vengono eseguiti dalla shell predefinita, **`zsh`**, che esegue automaticamente **comandi dal file** **`/etc/zshenv`**, se esiste, anche in modalità non interattiva. Questo comportamento potrebbe essere sfruttato dagli attaccanti: creando un file `/etc/zshenv` malevolo e aspettando che **`system_installd` invochi `zsh`**, potrebbero eseguire operazioni arbitrarie sul dispositivo.
|
I ricercatori hanno scoperto che durante l'installazione di un pacchetto firmato da Apple (.pkg file), **`system_installd`** **esegue** qualsiasi **script post-install** incluso nel pacchetto. Questi script vengono eseguiti dalla shell predefinita, **`zsh`**, che esegue automaticamente **comandi dal file** **`/etc/zshenv`**, se esiste, anche in modalità non interattiva. Questo comportamento potrebbe essere sfruttato dagli attaccanti: creando un file `/etc/zshenv` malevolo e aspettando che **`system_installd` invochi `zsh`**, potrebbero eseguire operazioni arbitrarie sul dispositivo.
|
||||||
|
|
||||||
Inoltre, è stato scoperto che **`/etc/zshenv` potrebbe essere utilizzato come una tecnica di attacco generale**, non solo per un bypass di SIP. Ogni profilo utente ha un file `~/.zshenv`, che si comporta allo stesso modo di `/etc/zshenv` ma non richiede permessi di root. Questo file potrebbe essere utilizzato come meccanismo di persistenza, attivandosi ogni volta che `zsh` si avvia, o come meccanismo di elevazione dei privilegi. Se un utente admin si eleva a root usando `sudo -s` o `sudo <command>`, il file `~/.zshenv` verrebbe attivato, elevandosi effettivamente a root.
|
Inoltre, è stato scoperto che **`/etc/zshenv` potrebbe essere utilizzato come una tecnica di attacco generale**, non solo per un bypass di SIP. Ogni profilo utente ha un file `~/.zshenv`, che si comporta allo stesso modo di `/etc/zshenv` ma non richiede permessi di root. Questo file potrebbe essere utilizzato come meccanismo di persistenza, attivandosi ogni volta che `zsh` si avvia, o come meccanismo di elevazione dei privilegi. Se un utente admin si eleva a root usando `sudo -s` o `sudo <command>`, il file `~/.zshenv` verrebbe attivato, elevando effettivamente a root.
|
||||||
|
|
||||||
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
|
||||||
|
|
||||||
|
@ -132,7 +149,7 @@ In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-
|
||||||
|
|
||||||
#### [fsck\_cs utility](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
#### [fsck\_cs utility](https://www.theregister.com/2016/03/30/apple\_os\_x\_rootless/)
|
||||||
|
|
||||||
È stata identificata una vulnerabilità in cui **`fsck_cs`** è stato indotto a corrompere un file cruciale, a causa della sua capacità di seguire **link simbolici**. In particolare, gli attaccanti hanno creato un link da _`/dev/diskX`_ al file `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. Eseguire **`fsck_cs`** su _`/dev/diskX`_ ha portato alla corruzione di `Info.plist`. L'integrità di questo file è vitale per il SIP (Protezione dell'Integrità di Sistema) del sistema operativo, che controlla il caricamento delle estensioni del kernel. Una volta corrotto, la capacità di SIP di gestire le esclusioni del kernel è compromessa.
|
È stata identificata una vulnerabilità in cui **`fsck_cs`** è stato indotto a corrompere un file cruciale, a causa della sua capacità di seguire **link simbolici**. In particolare, gli attaccanti hanno creato un link da _`/dev/diskX`_ al file `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. Eseguire **`fsck_cs`** su _`/dev/diskX`_ ha portato alla corruzione di `Info.plist`. L'integrità di questo file è vitale per la SIP (Protezione dell'Integrità di Sistema) del sistema operativo, che controlla il caricamento delle estensioni del kernel. Una volta corrotto, la capacità di SIP di gestire le esclusioni del kernel è compromessa.
|
||||||
|
|
||||||
I comandi per sfruttare questa vulnerabilità sono:
|
I comandi per sfruttare questa vulnerabilità sono:
|
||||||
```bash
|
```bash
|
||||||
|
@ -166,7 +183,7 @@ Inoltre, all'interno di `InstallESD.dmg`, c'è un `BaseSystem.dmg`, che funge da
|
||||||
|
|
||||||
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
|
||||||
|
|
||||||
In questo intervento di [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk), viene mostrato come **`systemmigrationd`** (che può bypassare SIP) esegue uno **script bash** e uno **script perl**, che possono essere abusati tramite variabili d'ambiente **`BASH_ENV`** e **`PERL5OPT`**.
|
In questo intervento da [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk), viene mostrato come **`systemmigrationd`** (che può bypassare SIP) esegue uno **script bash** e uno **script perl**, che possono essere abusati tramite variabili d'ambiente **`BASH_ENV`** e **`PERL5OPT`**.
|
||||||
|
|
||||||
#### CVE-2023-42860 <a href="#cve-a-detailed-look" id="cve-a-detailed-look"></a>
|
#### CVE-2023-42860 <a href="#cve-a-detailed-look" id="cve-a-detailed-look"></a>
|
||||||
|
|
||||||
|
@ -174,7 +191,7 @@ Come [**dettagliato in questo post del blog**](https://blog.kandji.io/apple-miti
|
||||||
```bash
|
```bash
|
||||||
/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"
|
/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"
|
||||||
```
|
```
|
||||||
e era possibile creare un symlink in `${SHARED_SUPPORT_PATH}/SharedSupport.dmg` che avrebbe permesso a un utente di **rimuovere le restrizioni da qualsiasi file, eludendo la protezione SIP**.
|
and it was possible to creare un symlink in `${SHARED_SUPPORT_PATH}/SharedSupport.dmg` che consentirebbe a un utente di **rimuovere le restrizioni da qualsiasi file, eludendo la protezione SIP**.
|
||||||
|
|
||||||
### **com.apple.rootless.install**
|
### **com.apple.rootless.install**
|
||||||
|
|
||||||
|
@ -188,13 +205,13 @@ In questo caso specifico, il servizio XPC di sistema situato in `/System/Library
|
||||||
|
|
||||||
## Sealed System Snapshots
|
## Sealed System Snapshots
|
||||||
|
|
||||||
I Sealed System Snapshots sono una funzionalità introdotta da Apple in **macOS Big Sur (macOS 11)** come parte del meccanismo di **Protezione dell'Integrità di Sistema (SIP)** per fornire un ulteriore livello di sicurezza e stabilità del sistema. Sono essenzialmente versioni di sola lettura del volume di sistema.
|
Sealed System Snapshots sono una funzionalità introdotta da Apple in **macOS Big Sur (macOS 11)** come parte del meccanismo di **Protezione dell'Integrità di Sistema (SIP)** per fornire un ulteriore livello di sicurezza e stabilità del sistema. Sono essenzialmente versioni di sola lettura del volume di sistema.
|
||||||
|
|
||||||
Ecco uno sguardo più dettagliato:
|
Ecco uno sguardo più dettagliato:
|
||||||
|
|
||||||
1. **Sistema Immutabile**: I Sealed System Snapshots rendono il volume di sistema macOS "immutabile", il che significa che non può essere modificato. Questo previene qualsiasi cambiamento non autorizzato o accidentale al sistema che potrebbe compromettere la sicurezza o la stabilità del sistema.
|
1. **Sistema Immutabile**: Sealed System Snapshots rendono il volume di sistema macOS "immutabile", il che significa che non può essere modificato. Questo previene qualsiasi cambiamento non autorizzato o accidentale al sistema che potrebbe compromettere la sicurezza o la stabilità del sistema.
|
||||||
2. **Aggiornamenti del Software di Sistema**: Quando installi aggiornamenti o upgrade di macOS, macOS crea un nuovo snapshot di sistema. Il volume di avvio di macOS utilizza quindi **APFS (Apple File System)** per passare a questo nuovo snapshot. L'intero processo di applicazione degli aggiornamenti diventa più sicuro e affidabile poiché il sistema può sempre tornare allo snapshot precedente se qualcosa va storto durante l'aggiornamento.
|
2. **Aggiornamenti del Software di Sistema**: Quando installi aggiornamenti o upgrade di macOS, macOS crea un nuovo snapshot di sistema. Il volume di avvio di macOS utilizza quindi **APFS (Apple File System)** per passare a questo nuovo snapshot. L'intero processo di applicazione degli aggiornamenti diventa più sicuro e affidabile poiché il sistema può sempre tornare allo snapshot precedente se qualcosa va storto durante l'aggiornamento.
|
||||||
3. **Separazione dei Dati**: In concomitanza con il concetto di separazione dei volumi Dati e Sistema introdotto in macOS Catalina, la funzionalità Sealed System Snapshot garantisce che tutti i tuoi dati e le impostazioni siano memorizzati su un volume separato "**Dati**". Questa separazione rende i tuoi dati indipendenti dal sistema, semplificando il processo di aggiornamenti di sistema e migliorando la sicurezza del sistema.
|
3. **Separazione dei Dati**: Insieme al concetto di separazione dei volumi Dati e Sistema introdotto in macOS Catalina, la funzionalità Sealed System Snapshot garantisce che tutti i tuoi dati e le impostazioni siano memorizzati su un volume separato "**Dati**". Questa separazione rende i tuoi dati indipendenti dal sistema, semplificando il processo di aggiornamenti di sistema e migliorando la sicurezza del sistema.
|
||||||
|
|
||||||
Ricorda che questi snapshot sono gestiti automaticamente da macOS e non occupano spazio aggiuntivo sul tuo disco, grazie alle capacità di condivisione dello spazio di APFS. È anche importante notare che questi snapshot sono diversi dagli **snapshot di Time Machine**, che sono backup accessibili dall'utente dell'intero sistema.
|
Ricorda che questi snapshot sono gestiti automaticamente da macOS e non occupano spazio aggiuntivo sul tuo disco, grazie alle capacità di condivisione dello spazio di APFS. È anche importante notare che questi snapshot sono diversi dagli **snapshot di Time Machine**, che sono backup accessibili dall'utente dell'intero sistema.
|
||||||
|
|
||||||
|
@ -241,7 +258,7 @@ Il comando **`diskutil apfs list`** elenca i **dettagli dei volumi APFS** e il l
|
||||||
|
|
||||||
Nell'output precedente è possibile vedere che **le posizioni accessibili all'utente** sono montate sotto `/System/Volumes/Data`.
|
Nell'output precedente è possibile vedere che **le posizioni accessibili all'utente** sono montate sotto `/System/Volumes/Data`.
|
||||||
|
|
||||||
Inoltre, **lo snapshot del volume di sistema macOS** è montato in `/` ed è **sigillato** (firmato crittograficamente dal sistema operativo). Quindi, se SIP viene eluso e modificato, il **sistema operativo non si avvierà più**.
|
Inoltre, **lo snapshot del volume di sistema macOS** è montato in `/` ed è **sigillato** (firmato crittograficamente dal sistema operativo). Quindi, se SIP viene eluso e viene modificato, il **sistema operativo non si avvierà più**.
|
||||||
|
|
||||||
È anche possibile **verificare che il sigillo sia abilitato** eseguendo:
|
È anche possibile **verificare che il sigillo sia abilitato** eseguendo:
|
||||||
```bash
|
```bash
|
||||||
|
@ -254,8 +271,8 @@ mount
|
||||||
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
|
||||||
```
|
```
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Impara e pratica 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">\
|
Impara e pratica 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">\
|
||||||
Impara e pratica 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)
|
Impara e pratica 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>
|
<details>
|
||||||
|
|
||||||
|
@ -263,8 +280,7 @@ Impara e pratica GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
||||||
|
|
||||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
</details>
|
|
||||||
|
|
Loading…
Reference in a new issue