
BootStomp: инструмент для поиска уязвимостей в загрузчиках
BootStomp — это инструмент поиска ошибок в загрузчиках. Он ищет два типа уязвимостей: повреждение памяти и небезопасное хранение состояния. Для получения дополнительной информации обратитесь к статье о BootStomp по адресу https://seclab.cs.ucsb.edu/academic/publishing/#bootstomp-security-bootloaders-mobile-devices-2017
Чтобы запустить анализ BootStomp, следуйте приведённым ниже инструкциям. Обратите внимание, что BootStomp работает с загрузчиками, скомпилированными для архитектуры ARM (как 32, так и 64 бита), и результаты могут незначительно различаться в зависимости от версий angr и Z3. Это связано со временем, которое angr тратит на анализ базовых блоков, и результатами конкретизации выражений Z3.
$ pip install angr
Самый простой способ использовать BootStomp — запустить его в контейнере Docker.
Папка docker содержит соответствующий Dockerfile.
Вот команды для его использования.
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
Вывод должен выглядеть примерно так:
...
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 в том же каталоге, где находится загрузчик.Создайте JSON-файл конфигурации для двоичного файла загрузчика (примеры см. в config/), где:
Выполните:
python bootloadertaint.py config-file-path
Результаты будут сохранены в /tmp/BootloaderTaint_[boot-loader].out, где [boot-loader] — имя анализируемого загрузчика. Обратите внимание, что пути, содержащие циклы, могут появляться несколько раз.
Выполните:
python unlock_checker.py config-file-path
Результаты будут сохранены в /tmp/UnlockChecker_[boot-loader].out, где [boot-loader] — имя анализируемого загрузчика. Обратите внимание, что пути, содержащие циклы, могут появляться несколько раз.
Для проверки результатов BootStomp используйте скрипт result_pretty_print.py следующим образом:
python result_pretty_print.py results_file