Sandblaster ist ein Werkzeug zum Umkehr (zerlegt) binäre Apfel -Sandbox -Profile. Apple Sandbox-Profile sind in SBPL ( Sandbox Profile Language ), einer schemasartigen Sprache, geschrieben und dann in ein undokumentiertes binäres Format zusammengestellt und versandt. Sandbox -Profile werden hauptsächlich auf iOS verwendet und sind auch auf macOS vorhanden. Sandblaster ist nach unserem Kenntnisstand das erste Werkzeug, das binäre Sandkastenprofile in das ursprüngliche SBPL -Format umkehrt. Sandblaster arbeitet ab Version 7 auf iOS, einschließlich iOS 11.
Der technische Bericht Sandblaster: Die Umkehrung der Apple Sandbox enthält umfangreiche (wenn auch etwas veraltete) Informationen zu Sandblaster -Interna.
Sandblaster stützte sich auf frühere Arbeiten von Dionysos Blazakis und Stefan Essers Code und Folien.
Der Umkehrer (in der reverse-sandbox/ -ordner) und das Helfer-Tool (im helpers/ Ordner) werden auf einer beliebigen Python-Plattform ausgeführt.
Sandblaster kann installiert werden und stellvertretend ausführen, obwohl wir empfehlen, es innerhalb von Iextractor zu installieren und auszuführen. Überprüfen Sie die Dokumentation von Iextractor, um Informationen zu erhalten.
Iextractor ist Open-Source-Software, die unter der 3-Klausel-BSD-Lizenz veröffentlicht wurde.
Sandblaster benötigt Python2 für den Umkehrer (in reverse-sandbox/ ), Python3 mit lief Bibliothek für Helfer-Skript (in helpers/ ).
Nach dem Klonen des Sandblaster -Repositorys müssen Sie lief für Python3 installieren:
pip3 install lief
Wenn die Installation von lief fehlschlägt, müssen Sie dazu kompiliert werden. Weitere Informationen zum Kompilieren finden Sie auf der Wiki -Seite.
Um Sandblaster zu verwenden, benötigen Sie Zugriff auf die Binär-Sandbox-Profile und die Sandbox-Operationen, eine Reihe von Zeichenfolgen, die sandboxspezifische Aktionen definieren. Sandbox -Operationen und Sandboxprofile werden mithilfe des Skripts helpers/extract_sandbox_data.py extrahiert. Sandboxprofile werden aus der Kernel Sandbox-Erweiterung (als Bundle für iOS 4 und 9-11) oder aus dem Kernel-Cache (als Bundle für iOS 12) oder aus der sandboxd Datei im iOS-Dateisystem (für iOS 5-8) extrahiert. Sandboxoperationen werden entweder aus der Kernel-Erweiterung (für iOS 4-11) oder aus dem Kernel-Cache (für iOS 12) extrahiert.
Als Eingabedaten benötigt Sandblaster den Kernelcache, die Kernel Sandbox -Erweiterung und die sandboxd -Datei. Informationen und Skripte zum Extrahieren aus einer öffentlich verfügbaren IPSW -Datei ( iPhone -Software ) werden von Iextractor angegeben.
Im Folgenden finden Sie die Schritte und Befehle, um die Sandbox -Profile für iOS 8.4.1 umzukehren, sofern die Sandbox -Kernel -Erweiterung ( com.apple.security.sandbox.kext ) und die sandboxd -Datei verfügbar sind:
# 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
Im Folgenden finden Sie die Schritte und Befehle, um die Sandbox -Profile für iOS 9.3 umzukehren, sofern die Sandbox -Kernel -Erweiterung ( com.apple.security.sandbox.kext ) verfügbar ist:
# 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
Die Extraktion der binären Sandkastenprofile unterscheidet sich zwischen iOS <= 8 und iOS> = 9. Da iOS> = 9 die binären Sandkastenprofile in einem Sandkastenbündel in der Kernel -Sandbox -Erweiterung gespeichert sind. Die helpers/extract_sandbox_data.py -Skript extrahiert sie je nach iOS -Version angemessen.
Die Option -psb für reverse_sandbox.py druckt den Sandbox -Profil Teil eines Sandbox -Bündels aus, ohne die tatsächliche Umkehrung durchzuführen.
Das Skript reverse_sandbox.py muss in seinem Verzeichnis ( reverse-sandbox/ ) ausgeführt werden, da es die anderen Python-Module und die logger.config -Datei benötigt.
Der helpers/ Unterordner enthält Helferskripte, die eine schönere Schnittstelle für die externen Tools bieten.
Der tatsächliche Umkehrer ist Teil des reverse-sandbox/ Ordners. Dateien hier können wie folgt kategorisiert werden:
reverse_sandbox.py . Es analysiert die Befehlszeilenargumente, führt grundlegende Parsen der Eingabe -Binärdatei (extrahiert Abschnitte) und ruft die entsprechenden Funktionen aus den anderen Modulen auf.operation_node.py . Es bietet Funktionen zum Erstellen des Regeln -Diagramms, das dem Sandkastenprofil entspricht, und um das Diagramm in SBPL umzuwandeln. Es wird von reverse_sandbox.py aufgerufen.sandbox_filter.py und der Konfiguration in filters.json , filter_list.py und filters.py behandelt. Filterspezifische Funktionen werden von operation_node.py aufgerufen.sandbox_regex.py und regex_parse.py behandelt. regex_parse.py ist der Back -End -Parser, der die binäre Darstellung in ein Basisdiagramm umwandelt. sandbox_regex.py konvertiert die Grafikdarstellung (einen Automat) in einen tatsächlichen regulären Ausdruck (dh eine Zeichenfolge von Zeichen und Metacharactern). Es wird von reverse_sandbox.py aufgerufen, um reguläre Ausdrücke zu analysieren, wobei die daraus resultierende reguläre Ausdrucksliste an die von operation_node.py entlarvten Funktionen übergeben wird. operation_node.py weitergibt sie an Sandbox -Filterhandhabungsdateien.reverse_string.py behandelt wird. Die primäre SandboxString -Klasse in reverse_string.py wird in sandbox_filter.py verwendet.logger.config konfiguriert. Standardmäßig werden INFO und höhere Meldungen in der Konsole gedruckt, während DEBUG und höhere Meldungen auf die reverse.log -Datei gedruckt werden. Sandblaster arbeitet ab Version 4, einschließlich iOS 12. Apple hat das binäre Format der Sandbox -Profile aktualisiert: Da iOS 9 Sandbox -Profile in einem Bündel gespeichert sind, da iOS 10 Saiten zusammen in einem speziellen Binärformat zusammengefasst sind. iOS 11 hat das Format keine Veränderung gebracht.
Begleiten Sie uns zu Zwietracht für Live -Diskussionen.