## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-UCSB-SECLAB-BOOTSTOMP
# 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.
* * *
## Структура каталогов
* **analysis** : Содержит результаты анализа (например, IDB-файлы IDA) загрузочных образов различных устройств.
* **tools** : Содержит инструменты для работы с различными образами.
## Предварительные требования
* angr (http://angr.io/)
> $ pip install angr
* IDA PRO (https://www.hex-rays.com/products/ida/)
* IDA Decompiler (https://www.hex-rays.com/products/decompiler/)
## Как запустить
## Запуск BootStomp с помощью Docker
Самый простой способ использовать BootStomp — запустить его в контейнере Docker. Папка `docker` содержит соответствующий `Dockerfile`. Вот команды для его использования.
root@kitploit:~
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
Вывод должен выглядеть примерно так:
root@kitploit:~
...
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
## Запуск BootStomp вручную
### Автоматическое обнаружение источников и стоков примесей (taint)
1. Загрузите двоичный файл загрузчика в IDA (мы использовали версию 6.95). В зависимости от архитектуры процессора телефона, из которого он был извлечён, может потребоваться 32- или 64-битная IDA.
2. В строке меню выполните File => Script file => `find_taint.py`.
3. Результат появится в файле `taint_source_sink.txt` в том же каталоге, где находится загрузчик.
### Файл конфигурации
Создайте JSON-файл конфигурации для двоичного файла загрузчика (примеры см. в `config/`), где:
* **bootloader** : путь к файлу загрузчика
* **info_path** : путь к файлу с информацией об источниках/стоках загрузчика (т.е. taint_source_sink.txt)
* **arch** : разрядность архитектуры (доступные варианты: 32 и 64)
* **enable_thumb** : учитывать режим Thumb (при необходимости) во время анализа
* **start_with_thumb** : начинать анализ с включённым режимом Thumb
* **exit_on_dec_error** : остановить анализ, если некоторые инструкции не удаётся декодировать
* **unlock_addr** : адрес функции разблокировки. Это поле необходимо только для поиска уязвимостей небезопасного хранения состояния.
### Поиск уязвимостей повреждения памяти
Выполните:
> 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
#### Эксплойт для CVE-2017-2729
## Другие ссылки
* Исходный код ядра и lk для MediaTek MT65x2
* Подробности о MediaTek: разделы и Preloader
* Обратная разработка Android Aboot
* Загрузчик Android на основе (L)ittle (K)ernel
* Обзор загрузчика Little Kernel от Qualcomm
* android: arm: bootloader: как (L)ittle (K)ernel загружает boot.img
* BootUnlocker для устройств Nexus
* Проверка загрузки
* Освобождение моего планшета (взлом Android, ПО и железо)
* Как заблокировать режим загрузки Samsung с помощью недокументированной функции aboot
* BIOS и атаки на Secure Boot раскрыты
* Безопасность Apple iOS
* Отладка загрузчиков телефонов HTC
* Отладчик для HBOOT
* Анализ HBOOT