
BootStomp : un outil de recherche de vulnérabilités de bootloader
BootStomp est un chercheur de bugs dans les chargeurs d'amorçage. Il recherche deux types de bugs : les corruptions mémoire et les vulnérabilités de stockage d'état. Pour plus d'informations, veuillez consulter l'article sur BootStomp à l'adresse https://seclab.cs.ucsb.edu/academic/publishing/#bootstomp-security-bootloaders-mobile-devices-2017
Pour exécuter les analyses de BootStomp, veuillez lire les instructions suivantes. Notez que BootStomp fonctionne avec les chargeurs d'amorçage compilés pour les architectures ARM (32 et 64 bits) et que les résultats peuvent légèrement varier en fonction des versions d'angr et de Z3. Cela est dû au temps qu'angr prend pour analyser les blocs de base et aux résultats de concrétisation des expressions de Z3.
$ pip install angr
La façon la plus simple d'utiliser BootStomp est de l'exécuter dans un conteneur docker.
Le dossier docker contient un Dockerfile approprié.
Voici les commandes à utiliser.
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
La sortie devrait ressembler à ceci :
...
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.pytaint_source_sink.txt dans le même répertoire que le chargeur d'amorçage lui-même.Créez un fichier de configuration JSON pour le binaire du chargeur d'amorçage (voir les exemples dans config/), où :
Exécutez
python bootloadertaint.py config-file-path
Les résultats seront stockés dans /tmp/BootloaderTaint_[boot-loader].out, où [boot-loader] est le nom du chargeur d'amorçage analysé. Notez que les chemins impliquant des boucles peuvent apparaître plus d'une fois.
Exécutez
python unlock_checker.py config-file-path
Les résultats seront stockés dans /tmp/UnlockChecker_[boot-loader].out, où [boot-loader] est le nom du chargeur d'amorçage analysé. Notez que les chemins impliquant des boucles peuvent apparaître plus d'une fois.
Pour vérifier les résultats de BootStomp, utilisez le script result_pretty_print.py, comme suit :
python result_pretty_print.py results_file