macOS Sandbox
Información Básica
La Caja de Arena de macOS (inicialmente llamada Seatbelt) limita las aplicaciones que se ejecutan dentro de la caja de arena a las acciones permitidas especificadas en el perfil de la Caja de Arena con el que la aplicación se está ejecutando. Esto ayuda a garantizar que la aplicación solo accederá a los recursos esperados.
Cualquier aplicación con el derecho com.apple.security.app-sandbox
se ejecutará dentro de la caja de arena. Los binarios de Apple suelen ejecutarse dentro de una Caja de Arena y para publicar en la App Store, este derecho es obligatorio. Por lo tanto, la mayoría de las aplicaciones se ejecutarán dentro de la caja de arena.
Para controlar lo que un proceso puede o no puede hacer, la Caja de Arena tiene ganchos en todas las llamadas al sistema en el kernel. Dependiendo de los derechos de la aplicación, la Caja de Arena permitirá ciertas acciones.
Algunos componentes importantes de la Caja de Arena 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 el espacio de usuario
/usr/libexec/sandboxd
Los contenedores
~/Library/Containers
Dentro de la carpeta de contenedores puedes encontrar una carpeta para cada aplicación ejecutada en la caja de arena con el nombre del identificador del paquete:
Dentro de cada carpeta de identificación de paquete puedes encontrar el plist y el directorio Data de la aplicación:
Ten en cuenta que aunque los enlaces simbólicos estén ahí para "escapar" del Sandbox y acceder a otras carpetas, la aplicación aún necesita tener permisos para acceder a ellas. Estos permisos se encuentran dentro del archivo .plist
.
Todo lo creado/modificado por una aplicación en Sandbox obtendrá 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 qué está permitido/prohibido en ese Sandbox. Utiliza el Lenguaje de Perfil de Sandbox (SBPL), que utiliza el lenguaje de programación Scheme.
Aquí puedes encontrar un ejemplo:
Consulta esta investigación para ver más acciones que podrían permitirse o denegarse.
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 verificar en https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles.
Las aplicaciones de App Store utilizan el perfil /System/Library/Sandbox/Profiles/application.sb
. Puedes verificar en este perfil cómo los permisos como com.apple.security.network.server
permiten que un proceso utilice 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:
Ten en cuenta que el software creado por Apple que se ejecuta en Windows no tiene precauciones de seguridad adicionales, como el aislamiento 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 los perfiles de sandbox del sistema en dos ubicaciones: /usr/share/sandbox/ y /System/Library/Sandbox/Profiles.
Y si una aplicación de terceros lleva el permiso 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 aislados desde el principio por el kernel, los procesos deben optar por el sandbox por sí mismos. Esto significa que en macOS, un proceso no está restringido por el sandbox hasta que decide activamente ingresar a él.
Los procesos se aíslan automáticamente desde el espacio de usuario cuando se inician si tienen el permiso: com.apple.security.app-sandbox
. Para obtener una explicación detallada de este proceso, consulta:
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 PID específico.
La herramienta sbtool puede verificar si un PID puede realizar una determinada acción:
Perfiles SBPL personalizados en aplicaciones de la App Store
Podría ser posible para las empresas hacer que sus aplicaciones se ejecuten con perfiles de Sandbox personalizados (en lugar del predeterminado). Necesitan usar el permiso com.apple.security.temporary-exception.sbpl
que debe ser autorizado por Apple.
Es posible verificar la definición de este permiso en /System/Library/Sandbox/Profiles/application.sb:
Esto evaluará la cadena después de este permiso como un perfil de Sandbox.
Última actualización