
BootStomp: ein Bootloader-Schwachstellenfinder
BootStomp ist ein Bug-Finder für Bootloader. Er sucht nach zwei verschiedenen Bug-Klassen: Speicherkorruptions- und Zustandsspeicher-Schwachstellen. Weitere Informationen finden Sie im BootStomp-Papier unter https://seclab.cs.ucsb.edu/academic/publishing/#bootstomp-security-bootloaders-mobile-devices-2017
Um die Analysen von BootStomp auszuführen, lesen Sie bitte die folgenden Anweisungen. Beachten Sie, dass BootStomp mit Bootloadern funktioniert, die für ARM-Architekturen (sowohl 32 als auch 64 Bit) kompiliert wurden, und dass die Ergebnisse je nach Version von angr und Z3 leicht variieren können. Dies liegt an der Zeit, die angr für die Analyse von Basisblöcken benötigt, sowie an den Ergebnissen der Ausdruckskonkretisierung von Z3.
$ pip install angr
Der einfachste Weg, BootStomp zu verwenden, ist die Ausführung in einem Docker-Container.
Der Ordner docker enthält ein entsprechendes Dockerfile.
Dies sind die Befehle, um es zu verwenden.
cd docker
# build the docker image
docker build -t bootstomp .
# run the docker image (if you need, use proper options to have persistent changes or shared files)
docker run -it bootstomp
# now you are inside a docker container
cd BootStomp
# run BootStomp's taint analysis on one of the examples
# this will take about 30 minutes
python taint_analysis/bootloadertaint.py config/config.huawei
# the last line of the output will be something like:
# INFO | 2017-10-14 01:54:10,617 | _CoreTaint | Results in /tmp/BootloaderTaint_fastboot.img_.out
# you can then "pretty print" the results using:
python taint_analysis/result_pretty_print.py /tmp/BootloaderTaint_fastboot.img_.out
Die Ausgabe sollte in etwa so aussehen:
...
17)
===================== Start Info path =====================
Dereference address at: 0x5319cL
Reason: at location 0x5319cL a tainted variable is dereferenced and used as address.
...
Tainted Path
----------------
0x52f3cL -> 0x52f78L -> 0x52f8cL -> 0x52fb8L -> 0x52fc8L -> 0x52fecL -> 0x53000L -> 0x53014L -> 0x5301cL -> 0x53030L -> 0x53044L -> 0x53050L -> 0x5305cL -> 0x53068L
===================== End Info path =====================
# Total sinks related alerts: 5
# Total loop related alerts: 8
# Total dereference related alerts: 4
find_taint.py.taint_source_sink.txt im selben Verzeichnis wie der Bootloader selbst.Erstellen Sie eine JSON-Konfigurationsdatei für die Bootloader-Binärdatei (siehe Beispiele in config/), wobei:
Führen Sie aus
python bootloadertaint.py config-file-path
Die Ergebnisse werden in /tmp/BootloaderTaint_[boot-loader].out gespeichert, wobei [boot-loader] der Name des analysierten Bootloaders ist. Beachten Sie, dass Pfade, die Schleifen beinhalten, möglicherweise mehrfach erscheinen.
Führen Sie aus
python unlock_checker.py config-file-path
Die Ergebnisse werden in /tmp/UnlockChecker_[boot-loader].out gespeichert, wobei [boot-loader] der Name des analysierten Bootloaders ist. Beachten Sie, dass Pfade, die Schleifen beinhalten, möglicherweise mehrfach erscheinen.
Verwenden Sie zum Überprüfen der BootStomp-Ergebnisse das Skript result_pretty_print.py wie folgt:
python result_pretty_print.py results_file