macOS Sandbox
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
MacOS Sandbox (inicialmente llamado Seatbelt) limita las aplicaciones que se ejecutan dentro del sandbox a las acciones permitidas especificadas en el perfil de Sandbox con el que se está ejecutando la aplicación. Esto ayuda a garantizar que la aplicación solo accederá a los recursos esperados.
Cualquier aplicación con la entitlement com.apple.security.app-sandbox
se ejecutará dentro del sandbox. Los binarios de Apple generalmente se ejecutan dentro de un Sandbox y para publicar en la App Store, esta entitlement es obligatoria. Por lo tanto, la mayoría de las aplicaciones se ejecutarán dentro del sandbox.
Para controlar lo que un proceso puede o no hacer, el Sandbox tiene hooks en todas las syscalls a través del kernel. Dependiendo de las entitlements de la aplicación, el Sandbox permitirá ciertas acciones.
Algunos componentes importantes del Sandbox son:
La extensión del kernel
/System/Library/Extensions/Sandbox.kext
El framework privado
/System/Library/PrivateFrameworks/AppSandbox.framework
Un daemon que se ejecuta en userland
/usr/libexec/sandboxd
Los contenedores
~/Library/Containers
Dentro de la carpeta de contenedores, puedes encontrar una carpeta para cada aplicación ejecutada en sandbox con el nombre del id del bundle:
Dentro de cada carpeta de id de paquete, puedes encontrar el plist y el directorio de datos de la aplicación:
Tenga en cuenta que incluso si los symlinks están ahí para "escapar" del Sandbox y acceder a otras carpetas, la App aún necesita tener permisos para acceder a ellas. Estos permisos están dentro del .plist
.
Todo lo creado/modificado por una aplicación en Sandbox recibirá el atributo de cuarentena. Esto evitará un espacio de sandbox al activar Gatekeeper si la aplicación en sandbox intenta ejecutar algo con open
.
Perfiles de Sandbox
Los perfiles de Sandbox son archivos de configuración que indican lo que se va a permitir/prohibir en ese Sandbox. Utiliza el Lenguaje de Perfil de Sandbox (SBPL), que utiliza el Scheme lenguaje de programación.
Aquí puedes encontrar un ejemplo:
Consulta esta investigación para verificar más acciones que podrían ser permitidas o denegadas.
Los servicios del sistema importantes también se ejecutan dentro de su propio sandbox personalizado, como el servicio mdnsresponder
. Puedes ver estos perfiles de sandbox personalizados en:
/usr/share/sandbox
/System/Library/Sandbox/Profiles
Otros perfiles de sandbox se pueden consultar en https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Las aplicaciones de la App Store utilizan el perfil /System/Library/Sandbox/Profiles/application.sb
. Puedes verificar en este perfil cómo los derechos como com.apple.security.network.server
permiten que un proceso use la red.
SIP es un perfil de Sandbox llamado platform_profile en /System/Library/Sandbox/rootless.conf
Ejemplos de Perfiles de Sandbox
Para iniciar una aplicación con un perfil de sandbox específico puedes usar:
Tenga en cuenta que el software autorizado por Apple que se ejecuta en Windows no tiene precauciones de seguridad adicionales, como el sandboxing de aplicaciones.
Ejemplos de bypass:
https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c (pueden escribir archivos fuera del sandbox cuyo nombre comienza con
~$
).
Perfiles de Sandbox de MacOS
macOS almacena perfiles de sandbox del sistema en dos ubicaciones: /usr/share/sandbox/ y /System/Library/Sandbox/Profiles.
Y si una aplicación de terceros tiene el derecho com.apple.security.app-sandbox, el sistema aplica el perfil /System/Library/Sandbox/Profiles/application.sb a ese proceso.
Perfil de Sandbox de iOS
El perfil predeterminado se llama container y no tenemos la representación de texto SBPL. En memoria, este sandbox se representa como un árbol binario de Permitir/Denegar para cada permiso del sandbox.
Depurar y Bypass Sandbox
En macOS, a diferencia de iOS donde los procesos están en sandbox desde el principio por el kernel, los procesos deben optar por el sandbox ellos mismos. Esto significa que en macOS, un proceso no está restringido por el sandbox hasta que decide activamente entrar en él.
Los procesos se en sandbox automáticamente desde el userland cuando comienzan si tienen el derecho: com.apple.security.app-sandbox
. Para una explicación detallada de este proceso, consulte:
Verificar Privilegios de PID
Según esto, el sandbox_check
(es un __mac_syscall
), puede verificar si una operación está permitida o no por el sandbox en un cierto PID.
La herramienta sbtool puede verificar si un PID puede realizar una cierta acción:
Custom SBPL en aplicaciones de la App Store
Podría ser posible que las empresas hicieran que sus aplicaciones funcionaran con perfiles de Sandbox personalizados (en lugar de con el predeterminado). Necesitan usar la autorización com.apple.security.temporary-exception.sbpl
que debe ser autorizada por Apple.
Es posible verificar la definición de esta autorización en /System/Library/Sandbox/Profiles/application.sb:
Esto evaluará la cadena después de este derecho como un perfil de Sandbox.
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Last updated