macOS Sandbox
Informazioni di base
Il Sandbox di macOS (inizialmente chiamato Seatbelt) limita le applicazioni in esecuzione all'interno del sandbox alle azioni consentite specificate nel profilo del Sandbox con cui l'app viene eseguita. Ciò aiuta a garantire che l'applicazione acceda solo alle risorse previste.
Qualsiasi app con l'abilitazione com.apple.security.app-sandbox
verrà eseguita all'interno del sandbox. I binari di Apple di solito vengono eseguiti all'interno di un Sandbox e per poterli pubblicare nell'App Store, questa abilitazione è obbligatoria. Quindi la maggior parte delle applicazioni verrà eseguita all'interno del sandbox.
Per controllare cosa un processo può o non può fare, il Sandbox ha hook in tutte le syscall del kernel. A seconda delle abilitazioni dell'app, il Sandbox permetterà determinate azioni.
Alcuni componenti importanti del 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 è possibile trovare una cartella per ogni app eseguita all'interno del sandbox con il nome dell'ID del bundle:
All'interno di ogni cartella dell'ID del bundle è possibile trovare il file plist e la directory Data dell'app:
Nota che anche se i symlink sono presenti per "uscire" dalla Sandbox e accedere ad altre cartelle, l'App ha comunque bisogno di avere le autorizzazioni per accedervi. Queste autorizzazioni sono all'interno del file .plist
.
Tutto ciò che viene creato/modificato da un'applicazione Sandbox avrà l'attributo quarantine. Questo impedirà uno spazio sandbox attivando Gatekeeper se l'app sandbox prova ad eseguire qualcosa con open
.
Profili Sandbox
I profili Sandbox sono file di configurazione che indicano cosa è permesso/vietato in quella Sandbox. Utilizzano il Sandbox Profile Language (SBPL), che utilizza il linguaggio di programmazione Scheme.
Qui puoi trovare un esempio:
Controlla questa ricerca per controllare altre azioni che potrebbero essere consentite o negate.
Importanti servizi di sistema vengono eseguiti all'interno del proprio sandbox personalizzato, come ad esempio il servizio mdnsresponder
. Puoi visualizzare questi profilo 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 App Store utilizzano il profilo /System/Library/Sandbox/Profiles/application.sb
. Puoi controllare in questo profilo come i privilegi 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 utilizzare:
Il file touch.sb è un file di politica del sandbox di macOS che definisce le restrizioni di accesso per l'applicazione touch. Questo file specifica le autorizzazioni di accesso ai file e alle risorse di sistema che l'applicazione touch può utilizzare all'interno del sandbox.
Si noti che il software sviluppato da Apple che viene eseguito su Windows non ha ulteriori precauzioni di sicurezza, come l'applicazione del sandbox.
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 di 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 ha l'abilitazione com.apple.security.app-sandbox, il sistema applica il profilo /System/Library/Sandbox/Profiles/application.sb a quel processo.
Profilo di sandbox di iOS
Il profilo predefinito si chiama container e non abbiamo la rappresentazione testuale SBPL. In memoria, questa sandbox è rappresentata come un albero binario di autorizzazioni Allow/Deny per ogni permesso della sandbox.
Debug e bypass del sandbox
Su macOS, a differenza di iOS dove i processi sono sandboxati fin dall'inizio dal kernel, i processi devono scegliere di aderire al sandbox da soli. Ciò significa che su macOS, un processo non è limitato dal sandbox fino a quando non decide attivamente di entrarvi.
I processi vengono automaticamente sandboxati da userland quando vengono avviati se hanno l'abilitazione: com.apple.security.app-sandbox
. Per una spiegazione dettagliata di questo processo, controlla:
Verifica dei privilegi PID
Secondo questo, il sandbox_check
(è una __mac_syscall
), può verificare se un'operazione è consentita o meno dal sandbox in un determinato PID.
Lo strumento sbtool può verificare se un PID può eseguire una determinata azione:
Profili SBPL personalizzati nelle app dell'App Store
Potrebbe essere possibile per le aziende far eseguire le loro app con profili Sandbox personalizzati (invece di quelli predefiniti). Devono utilizzare il privilegio com.apple.security.temporary-exception.sbpl
che deve essere autorizzato da Apple.
È possibile verificare la definizione di questo privilegio in /System/Library/Sandbox/Profiles/application.sb:
Questo valuterà la stringa dopo questo privilegio come un profilo Sandbox.
Last updated