
BootStomp: un buscador de vulnerabilidades de bootloader
BootStomp es un buscador de errores en cargadores de arranque. Analiza dos clases diferentes de fallos: vulnerabilidades de corrupción de memoria y de almacenamiento de estado. Para más información, consulta el artículo de BootStomp en https://seclab.cs.ucsb.edu/academic/publishing/#bootstomp-security-bootloaders-mobile-devices-2017.
Para ejecutar los análisis de BootStomp, lee las siguientes instrucciones. Ten en cuenta que BootStomp funciona con cargadores de arranque compilados para arquitecturas ARM (tanto de 32 como de 64 bits) y que los resultados pueden variar ligeramente dependiendo de las versiones de angr y Z3. Esto se debe al tiempo que angr tarda en analizar los bloques básicos y a los resultados de concretización de expresiones de Z3.
$ pip install angr
La forma más sencilla de usar BootStomp es ejecutarlo en un contenedor Docker.
La carpeta docker contiene un Dockerfile apropiado.
Estos son los comandos para usarlo.
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 salida debería ser algo como esto:
...
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 en el mismo directorio que el cargador de arranque.Crea un archivo de configuración JSON para el binario del cargador de arranque (consulta los ejemplos en config/), donde:
Ejecuta
python bootloadertaint.py ruta-del-archivo-de-configuración
Los resultados se almacenarán en /tmp/BootloaderTaint_[cargador-de-arranque].out, donde [cargador-de-arranque] es el nombre del cargador analizado. Ten en cuenta que las rutas que involucran bucles pueden aparecer más de una vez.
Ejecuta
python unlock_checker.py ruta-del-archivo-de-configuración
Los resultados se almacenarán en /tmp/UnlockChecker_[cargador-de-arranque].out, donde [cargador-de-arranque] es el nombre del cargador analizado. Ten en cuenta que las rutas que involucran bucles pueden aparecer más de una vez.
Para comprobar los resultados de BootStomp, usa el script result_pretty_print.py, de la siguiente manera:
python result_pretty_print.py archivo-de-resultados