macOS Sandbox Debug & Bypass
Proceso de carga del Sandbox
En la imagen anterior es posible observar cómo se cargará el sandbox cuando se ejecute una aplicación con el permiso com.apple.security.app-sandbox
.
El compilador vinculará /usr/lib/libSystem.B.dylib
al binario.
Luego, libSystem.B
llamará a varias funciones hasta que xpc_pipe_routine
envíe los permisos de la aplicación a securityd
. Securityd verifica si el proceso debe ser puesto en cuarentena dentro del Sandbox, y de ser así, será puesto en cuarentena.
Finalmente, el sandbox se activará con una llamada a __sandbox_ms
que llamará a __mac_syscall
.
Posibles Bypasses
Saltándose el atributo de cuarentena
Los archivos creados por procesos en sandbox se les añade el atributo de cuarentena para evitar que escapen del sandbox. Sin embargo, si logras crear una carpeta .app
sin el atributo de cuarentena dentro de una aplicación en sandbox, podrías hacer que el binario del paquete de la aplicación apunte a /bin/bash
y agregar algunas variables de entorno en el plist para abusar de open
y lanzar la nueva aplicación sin sandbox.
Esto es lo que se hizo en CVE-2023-32364.
Por lo tanto, en este momento, si eres capaz de crear una carpeta con un nombre que termine en .app
sin un atributo de cuarentena, puedes escapar del sandbox porque macOS solo verifica el atributo de cuarentena en la carpeta .app
y en el ejecutable principal (y haremos que el ejecutable principal apunte a /bin/bash
).
Ten en cuenta que si un paquete .app ya ha sido autorizado para ejecutarse (tiene un xttr de cuarentena con la bandera de autorización para ejecutar), también podrías abusar de ello... excepto que ahora no puedes escribir dentro de los paquetes .app
a menos que tengas algunos permisos TCC privilegiados (que no tendrás dentro de un sandbox alto).
Abusando de la funcionalidad de Open
En los últimos ejemplos de bypass del sandbox de Word se puede apreciar cómo la funcionalidad de línea de comandos open
podría ser abusada para evadir el sandbox.
Agentes/Demonios de Inicio
Incluso si una aplicación está destinada a estar en sandbox (com.apple.security.app-sandbox
), es posible evadir el sandbox si se ejecuta desde un LaunchAgent (~/Library/LaunchAgents
) por ejemplo.
Como se explica en este post, si deseas obtener persistencia con una aplicación que está en sandbox, podrías hacer que se ejecute automáticamente como un LaunchAgent e inyectar código malicioso a través de variables de entorno DyLib.
Abusando de las Ubicaciones de Inicio Automático
Si un proceso en sandbox puede escribir en un lugar donde más tarde se ejecutará el binario de una aplicación sin sandbox, podrá escapar simplemente colocando allí el binario. Un buen ejemplo de este tipo de ubicaciones son ~/Library/LaunchAgents
o /System/Library/LaunchDaemons
.
Para esto, incluso podrías necesitar 2 pasos: hacer que un proceso con un sandbox más permisivo (file-read*
, file-write*
) ejecute tu código que realmente escribirá en un lugar donde se ejecutará sin sandbox.
Consulta esta página sobre Ubicaciones de Inicio Automático:
pagemacOS Auto StartAbusando de otros procesos
Si desde el proceso en sandbox eres capaz de comprometer otros procesos que se ejecutan en sandbox menos restrictivos (o ninguno), podrás escapar a sus sandboxes:
pagemacOS Process AbuseCompilación Estática y Enlace Dinámico
Esta investigación descubrió 2 formas de evadir el Sandbox. Debido a que el sandbox se aplica desde el espacio de usuario cuando se carga la biblioteca libSystem. Si un binario pudiera evitar cargarla, nunca sería sandboxeado:
Si el binario fuera compilado completamente de forma estática, podría evitar cargar esa biblioteca.
Si el binario no necesitara cargar ninguna biblioteca (porque el enlazador también está en libSystem), no necesitará cargar libSystem.
Shellcodes
Ten en cuenta que incluso los shellcodes en ARM64 necesitan ser enlazados en libSystem.dylib
:
Permisos
Tenga en cuenta que incluso si algunas acciones pueden estar permitidas por el sandbox si una aplicación tiene un permiso específico, como en:
Bypass de Interposting
Para obtener más información sobre Interposting, consulta:
pagemacOS Function HookingInterponer _libsecinit_initializer
para evitar el sandbox
_libsecinit_initializer
para evitar el sandboxInterponer __mac_syscall
para evitar el Sandbox
__mac_syscall
para evitar el SandboxDepurar y evadir el Sandbox con lldb
Compilamos una aplicación que debería estar en un sandbox:
macOS Sandbox Debug and Bypass
Debugging the macOS sandbox and bypassing its restrictions
This section covers techniques for debugging the macOS sandbox and bypassing its restrictions.
Debugging
To debug the macOS sandbox, you can use tools like LLDB or GDB to attach to the target process and inspect its behavior.
Bypassing Restrictions
There are various ways to bypass the restrictions imposed by the macOS sandbox, such as exploiting vulnerabilities in the sandbox profile or using techniques like code injection.
It's important to understand these techniques to assess the security of macOS sandboxed applications effectively.
References
macOS Sandbox Debug and Bypass
Debugging the macOS Sandbox
When debugging the macOS sandbox, you can use the sandbox-exec
tool to launch a process within a sandbox. This allows you to observe how the sandbox restricts the process's behavior and identify any potential weaknesses that could be exploited for privilege escalation.
To debug a process using sandbox-exec
, you need to create a custom sandbox profile in a file, for example, my-sandbox.sb
, and then run the process within this sandbox using the following command:
This will launch the process with the restrictions defined in your custom sandbox profile, allowing you to analyze its behavior within the sandbox environment.
Bypassing the macOS Sandbox
Bypassing the macOS sandbox involves finding and exploiting vulnerabilities in the sandbox profile or the macOS sandbox implementation itself to escape the restrictions imposed by the sandbox. This can allow an attacker to execute malicious code with elevated privileges on the system.
To bypass the macOS sandbox, security researchers and attackers often analyze the sandbox profile for misconfigurations or vulnerabilities that can be leveraged to weaken or bypass the restrictions. By understanding how the sandbox works and identifying potential weaknesses, security professionals can develop exploits to bypass the sandbox and escalate privileges on a macOS system.
Understanding the debugging and bypassing techniques for the macOS sandbox is crucial for security professionals and researchers to assess the effectiveness of the sandbox in protecting macOS systems from privilege escalation attacks.
Luego compila la aplicación:
La aplicación intentará leer el archivo ~/Desktop/del.txt
, lo cual no permitirá el Sandbox.
Crea un archivo allí, ya que una vez que se haya eludido el Sandbox, podrá leerlo:
Vamos a depurar la aplicación para ver cuándo se carga el Sandbox:
Incluso con el bypass del Sandbox, TCC preguntará al usuario si desea permitir que el proceso lea archivos desde el escritorio.
Referencias
Última actualización