Sploitus

Exploit for BootStomp

kitploit · 2026-09-04

Exploit Code

MARKDOWN143 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-UCSB-SECLAB-BOOTSTOMP
# BootStomp

![License](https://img.shields.io/github/license/angr/angr.svg)

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