Sandblaster es una herramienta para revertir (descompararse) los perfiles binarios de Sandbox de Apple. Los perfiles de Apple Sandbox están escritos en SBPL ( lenguaje de perfil de sandbox ), un idioma similar a un esquema, y luego se compilan en un formato binario indocumentado y se envían. Se usan principalmente en iOS, los perfiles de sandbox también están presentes en macOS. Sandblaster es, hasta donde sabemos, la primera herramienta que revierte los perfiles de sandbox binarios a su formato SBPL original. Sandblaster trabaja en iOS desde la versión 7 en adelante, incluyendo iOS 11.
El informe técnico de Sandblaster: Reversing the Apple Sandbox presenta información extensa (aunque un poco anticuada) sobre Sandblaster Interna.
Sandblaster se basó en el trabajo anterior de Dionysus Blazakis y el código y diapositivas de Stefan Esser.
El Reverser (en la reverse-sandbox/ carpeta) y la herramienta Helper (en la helpers/ carpeta) se ejecutan en cualquier plataforma de ejecución de Python.
Sandblaster se puede instalar y ejecutar independientemente, aunque recomendamos instalar y ejecutarlo desde IEXtractor. Consulte la documentación de IEXtractor para obtener información.
IEXtractor es un software de código abierto lanzado bajo la licencia BSD de 3 cláusulas.
Sandblaster requiere Python2 para el Reverser (en reverse-sandbox/ ), Python3 con lief Library para Script (en helpers/ ).
Después de clonar el repositorio de Sandblaster, debe instalar lief para Python3:
pip3 install lief
Si la instalación de lief falla, necesita compilarlo. Se puede encontrar más información sobre cómo compilarlo en la página wiki.
Para usar Sandblaster, necesita acceso a los perfiles binarios de Sandbox y las operaciones de Sandbox, un conjunto de cadenas que definen acciones específicas de Sandbox. Las operaciones de sandbox y los perfiles de sandbox se extraen utilizando el script helpers/extract_sandbox_data.py . Los perfiles de sandbox se extraen de la extensión del núcleo Sandbox (como un paquete para iOS 4 y 9-11) o del caché del kernel (como un paquete para iOS 12) o desde el archivo sandboxd en el sistema de archivos iOS (para iOS 5-8). Las operaciones de sandbox se extraen de la extensión del núcleo (para iOS 4-11) o del caché del núcleo (para iOS 12).
Entonces, como datos de entrada, Sandblaster requiere el KernelCache, la extensión de Sandbox del kernel y el archivo sandboxd . IEXtractor presenta la información y los scripts sobre la extracción de un archivo de IPSW ( software para iPhone ) disponible públicamente.
A continuación se muestran los pasos y los comandos para revertir los perfiles de Sandbox para iOS 8.4.1, suponiendo que la extensión de núcleo Sandbox ( com.apple.security.sandbox.kext ) y el archivo sandboxd estén disponibles:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPad2,1_8.4.1_12H321.sb_ops iPad2,1_8.4.1_12H321.com.apple.security.sandox.kext 8.4.1
# Extract binary sandbox profile files from sandboxd.
mkdir iPad2,1_8.4.1_12H321.sandbox_profiles
./extract_sandbox_data.py -O iPad2,1_8.4.1_12H321.sandbox_profiles/ iPad2,1_8.4.1_12H321.sandboxd 8.4.1
# Reverse all binary sandbox profiles.
cd ../reverse-sandbox/
mkdir iPad2,1_8.4.1_12H321.reversed_profiles
for i in ../helpers/iPad2,1_8.4.1_12H321.sandbox_profiles/*; do python reverse_sandbox.py -r 8.4.1 -o ../helpers/iPad2,1_8.4.1_12H321.sb_ops -d iPad2,1_8.4.1_12H321.reversed_profiles/ "$i"; done
A continuación se muestran los pasos y los comandos para revertir los perfiles de sandbox para iOS 9.3, suponiendo que la extensión del núcleo de sandbox ( com.apple.security.sandbox.kext ) esté disponible:
# Extract sandbox operations from kernelcache.
cd helpers/
./extract_sandbox_data.py -o iPhone5,1_9.3_13E237.sb_ops iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
# Extract sandbox profile bundle from kernel sandbox extension.
./extract_sandbox_data.py -O . iPhone5,1_9.3_13E237.com.apple.security.sandox.kext 9.3
cd ../reverse-sandbox/
# Reverse all binary sandbox profiles in sandbox bundle.
mkdir iPhone5,1_9.3_13E237.reversed_profiles
# Print all sandbox profiles in bundle.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle -psb
# Do actual reversing.
python reverse_sandbox.py -r 9.3 -o ../helpers/iPhone5,1_9.3_13E237.sb_ops -d iPhone5,1_9.3_13E237.reversed_profiles/ ../helpers/sandbox_bundle
La extracción de los perfiles de caja de arena binaria difiere entre iOS <= 8 e iOS> = 9. Dado que iOS> = 9 los perfiles de caja de arena binaria se almacenan en un paquete de caja de arena en la extensión de la caja de arena del núcleo. El script helpers/extract_sandbox_data.py los extrae adecuadamente dependiendo de la versión iOS.
La opción -psb para reverse_sandbox.py imprime los perfiles de sandbox parte de un paquete de sandbox sin hacer la inversión real.
El script reverse_sandbox.py debe ejecutarse en su directorio ( reverse-sandbox/ ) ya que necesita los otros módulos Python y el archivo logger.config .
El helpers/ subcarpeta contiene scripts auxiliares que proporcionan una interfaz más agradable para las herramientas externas.
El reversor real es parte de la carpeta reverse-sandbox/ . Los archivos aquí se pueden clasificar de la siguiente manera:
reverse_sandbox.py . Analiza los argumentos de la línea de comandos, realiza el análisis básico del archivo binario de entrada (secciones de extracción) y llama a las funciones apropiadas de los otros módulos.operation_node.py . Proporciona funciones para construir el gráfico de reglas correspondiente al perfil de sandbox y convertir el gráfico a SBPL. Se llama por reverse_sandbox.py .sandbox_filter.py y la configuración en filters.json , filter_list.py y filters.py . Las funciones específicas del filtro son llamadas por operation_node.py .sandbox_regex.py y regex_parse.py . regex_parse.py es el analizador de back -end que convierte la representación binaria en un gráfico básico. sandbox_regex.py convierte la representación del gráfico (un autómata) a una expresión regular real (es decir, una cadena de caracteres y metacharacteres). Se llama por reverse_sandbox.py para analizar expresiones regulares, con la lista de expresiones regular resultante que se pasa a las funciones expuestas por operation_node.py ; operation_node.py los pasa a archivos de manejo de filtro de sandbox.reverse_string.py . La clase SandboxString primaria en reverse_string.py se usa en sandbox_filter.py .logger.config . Por defecto, INFO y los mensajes de nivel superior se imprimen en la consola, mientras que los mensajes DEBUG y nivel superior se imprimen en el archivo reverse.log . Sandblaster funciona para iOS versión 4 en adelante, incluida iOS 12. Apple ha estado realizando actualizaciones al formato binario de los perfiles de sandbox: ya que los perfiles de sandbox iOS 9 se almacenan en un paquete, ya que iOS 10 cuerdas se agregan en un formato binario especializado. iOS 11 no trajo ningún cambio al formato.
Únase a nosotros en Discord para discusiones en vivo.