Sandblaster est un outil pour inverser les profils binaires binaires (décompilés). Les profils de sandbox Apple sont écrits dans SBPL ( Sandbox Profile Language ), un langage de type schéma, et sont ensuite compilés dans un format binaire sans papiers et expédiés. Principalement utilisé sur iOS, les profils de sable sont également présents sur macOS. Sandblaster est, à notre connaissance, le premier outil qui inverse les profils binaires de sable à leur format SBPL d'origine. Sandblaster travaille sur iOS à partir de la version 7, y compris iOS 11.
Le rapport technique Sandblaster: Inversion du sable de pomme présente des informations importantes (bien qu'un peu obsolètes) sur les internes de sandblaster.
Sandblaster s'est appuyé sur les travaux antérieurs de Dionysus Blazakis et Stefan Esser le code et les diapositives.
Le reverser (dans le reverse-sandbox/ ) et l'outil d'assistance (dans le helpers/ dossier) fonctionnent sur n'importe quelle plate-forme de course Python.
Sandblaster peut être installé et s'exécuter autonome, bien que nous recommandons de l'installer et de l'exécuter à partir de IExtractor. Consultez la documentation IExtractor pour plus d'informations.
IExtractor est un logiciel open source publié dans le cadre de la licence BSD à 3 clauses.
Sandblaster nécessite Python2 pour le reverser (dans reverse-sandbox/ ), Python3 avec la bibliothèque lief pour le script d'assistance (dans helpers/ ).
Après le clonage du référentiel Sandblaster, vous devez installer lief pour Python3:
pip3 install lief
Si l'installation de lief échoue, vous avez besoin de compiler. Plus d'informations sur la façon de le compiler peuvent être trouvées sur la page Wiki.
Afin d'utiliser Sandblaster, vous avez besoin d'accéder aux profils binaires de bacs de sable et aux opérations de bac à sable, un ensemble de chaînes qui définissent les actions spécifiques au bac à sable. Les opérations de bac à sable et les profils de bac à sable sont extraits à l'aide du script helpers/extract_sandbox_data.py . Les profils de bac à sable sont extraits de l'extension de sandbox du noyau (en tant que bundle pour iOS 4 et 9-11) ou du cache du noyau (en tant que bundle pour iOS 12) ou du fichier sandboxd dans le système de fichiers iOS (pour iOS 5-8). Les opérations de bac à sable sont extraites soit de l'extension du noyau (pour iOS 4-11) ou du cache du noyau (pour iOS 12).
Ainsi, en tant que données d'entrée, Sandblaster nécessite le KernelCache, l'extension de sable de noyau et le fichier sandboxd . Les informations et les scripts sur les extraire d'un fichier IPSW ( logiciel iPhone ) accessible au public sont présentés par IExtractor.
Vous trouverez ci-dessous les étapes et les commandes pour inverser les profils de bac à sable pour iOS 8.4.1, en supposant l'extension du noyau de bac à sable ( com.apple.security.sandbox.kext ) et le fichier sandboxd est disponible:
# 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
Vous trouverez ci-dessous les étapes et les commandes pour inverser les profils de bac à sable pour iOS 9.3, en supposant que l'extension du noyau de bac à sable ( 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
L'extraction des profils binaires de bacs de sable diffère entre iOS <= 8 et iOS> = 9. Depuis iOS> = 9, les profils binaires de sable sont stockés dans un faisceau de bac à sable dans l'extension du bac à sable du noyau. Le script helpers/extract_sandbox_data.py les extrait de manière appropriée en fonction de la version iOS.
L'option -psb pour reverse_sandbox.py imprime la partie des profils de bac à sable d'un bundle de bac à sable sans faire le renversement réel.
Le script reverse_sandbox.py doit être exécuté dans son répertoire ( reverse-sandbox/ ) car il a besoin des autres modules Python et du fichier logger.config .
Les helpers/ sous-dossiers contient des scripts d'assistance qui fournissent une interface plus agréable aux outils externes.
Le reverser réel fait partie du reverse-sandbox/ . Les fichiers ici peuvent être classés comme suit:
reverse_sandbox.py . Il analyse les arguments de ligne de commande, fait l'analyse de base du fichier binaire d'entrée (extrait les sections) et appelle les fonctions appropriées des autres modules.operation_node.py . Il fournit des fonctions pour créer le graphique de règles correspondant au profil sandbox et pour convertir le graphique en SBPL. Il est appelé par reverse_sandbox.py .sandbox_filter.py et la configuration dans filters.json , filter_list.py et filters.py . Les fonctions spécifiques au filtre sont appelées par operation_node.py .sandbox_regex.py et regex_parse.py . regex_parse.py est l'analyseur arrière qui convertit la représentation binaire en graphique de base. sandbox_regex.py convertit la représentation du graphique (un automate) en une expression régulière réelle (c'est-à-dire une chaîne de caractères et de métacharacteurs). Il est appelé par reverse_sandbox.py pour l'analyse des expressions régulières, la liste d'expression régulière résultante étant transmise aux fonctions exposées par operation_node.py ; operation_node.py les transmet aux fichiers de manutention du filtre sandbox.reverse_string.py . La classe SandboxString primaire dans reverse_string.py est utilisée dans sandbox_filter.py .logger.config . Par défaut, INFO et les messages de niveau supérieur sont imprimés sur la console, tandis que les messages DEBUG et de niveau supérieur sont imprimés dans le fichier reverse.log . Sandblaster fonctionne pour iOS version 4, y compris iOS 12. Apple a fait des mises à jour au format binaire des profils de bac à sable: puisque les profils de bac à sable iOS 9 sont stockés dans un bundle, car les chaînes iOS 10 sont agrégées ensemble dans un format binaire spécialisé. iOS 11 n'a apporté aucun changement au format.
Rejoignez-nous sur Discord pour des discussions en direct.