macOS Sandbox
Basic Information
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.
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.
Al alcuni componenti importanti della Sandbox sono:
L'estensione del kernel
/System/Library/Extensions/Sandbox.kext
Il framework privato
/System/Library/PrivateFrameworks/AppSandbox.framework
Un daemon in esecuzione in userland
/usr/libexec/sandboxd
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:
All'interno di ogni cartella dell'ID bundle puoi trovare il plist e la directory Data dell'App:
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
.
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
.
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.
Qui puoi trovare un esempio:
Controlla questa ricerca per verificare ulteriori azioni che potrebbero essere consentite o negate.
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
/System/Library/Sandbox/Profiles
Altri profili sandbox possono essere controllati su 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.
SIP è un profilo Sandbox chiamato platform_profile in /System/Library/Sandbox/rootless.conf
Esempi di profili Sandbox
Per avviare un'applicazione con un profilo sandbox specifico puoi usare:
Nota che il software autorizzato da Apple che gira su Windows non ha precauzioni di sicurezza aggiuntive, come il sandboxing delle applicazioni.
Esempi di bypass:
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
macOS memorizza i profili di sandbox di sistema in due posizioni: /usr/share/sandbox/ e /System/Library/Sandbox/Profiles.
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.
Profilo Sandbox di iOS
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.
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:
Controlla i privilegi PID
Secondo questo, il sandbox_check
(è un __mac_syscall
), può controllare se un'operazione è consentita o meno dal sandbox in un certo PID.
Il tool sbtool può controllare se un PID può eseguire una certa azione:
Custom SBPL 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.
È possibile controllare la definizione di questo diritto in /System/Library/Sandbox/Profiles/application.sb:
Questo valuterà la stringa dopo questo diritto come un profilo Sandbox.
Last updated