Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Fault-Injection-Finder — Автоматически находить и выполнять атаки методом внедрения неисправностей | Kitploit
Инструменты/GitHubGitHub/geeoon/fault-injection-finder
Безопасность встроенных системЭксплуатацияФаззингАппаратный ХакингТестирование на ПроникновениеАппаратная БезопасностьБезопасность оборудования и IoTАнализ Бинарных Файлов
GitHubgeeoon/fault-injection-finder

Fault-Injection-Finder

Автоматически находить и выполнять атаки методом внедрения неисправностей

Репозиторий
14448 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Fault Injection Finder

root@kitploit:~
▄▖    ▜ ▗   ▄▖   ▘    ▗ ▘      ▄▖▘   ▌     
▙▖▀▌▌▌▐ ▜▘  ▐ ▛▌ ▌█▌▛▘▜▘▌▛▌▛▌  ▙▖▌▛▌▛▌█▌▛▘ 
▌ █▌▙▌▐▖▐▖  ▟▖▌▌ ▌▙▖▙▖▐▖▌▙▌▌▌  ▌ ▌▌▌▙▌▙▖▌  
                ▙▌                         

Geeoon Chung и Nate Snyder

Этот репозиторий — программная часть нашего проекта атак с внедрением неисправностей. Аппаратную часть смотрите в этом репозитории.

Общий проект

Цель этого проекта — найти инструкции в выполнении программы, которые при пропуске/замене на NOP вызывают проблемы безопасности.

  1. Предварительная обработка
    1. Загрузить бинарный файл
    2. Определить инструкции, которые с большей вероятностью вызовут проблемы безопасности при замене на NOP.
  2. Эмуляция Unicorn
    1. Запустить программу, заменив на NOP n-ю выданную инструкцию.
    2. Проверить вывод программы, чтобы узнать, произошёл ли сбой безопасности.
      1. Если произошла недопустимая выборка, инвертировать все биты входных данных программы.
      2. Повторно запустить программу.
      3. Если произошла недопустимая выборка по другому адресу, отметить это. Это означает, что входные данные программы могут влиять на счётчик команд (т.е. контроль над PC).
  3. Решение SMT с помощью Angr
    1. Если эмуляция Unicorn показала контроль над PC, запустить программу с символьными входными данными и пропустить инструкцию, выданную на шаге Unicorn.
    2. Проверить, попадёт ли в конечном итоге символьная переменная в регистр PC.
    3. Решить для заданного значения PC, чтобы узнать, какие входные данные нужны для перехода PC по конкретному адресу.
    4. Если это удаётся решить, записать входные данные, которые привели к указанному PC.
  4. Экспорт интересных инструкций
  5. Протестировать инструкции на целевой платформе с помощью скрипта targets/tooling.py и ПЛИС.

Блок-схема для программного обеспечения

Презентация, которую мы представили по этому проекту

Подробности

Мы ищем проблемы безопасности, выполняя одно или несколько из следующих действий:

  1. Проверка вывода ввода-вывода программы
  2. Проверка кода завершения программы
  3. Ручное добавление триггеров неисправностей в «недостижимые» части кода
  4. Выполнение проверки заражения (taint checking), чтобы узнать, можно ли изменить счётчик команд (PC)
  5. Использование angr (решатель SMT) для поиска входных данных, которые приводят к заданным пользователем значениям PC

Глитчинг

Для внедрения неисправностей мы выбрали глитчинг с помощью «шунта» (crowbar glitching). Это было реализовано с использованием ПЛИС и N-канального MOSFET SI 2302. Вот ссылка на наш инструментарий для ПЛИС. Дополнительную информацию можно найти в targets.

Триггеры

Для триггеров мы решили использовать вход GPIO на ПЛИС. В тестовом коде мы переключаем светодиод, хотя можно выполнять анализ энергопотребления для ваших триггеров.

Использование

Зависимости

Зависимости перечислены в файле requirements.txt. Установите их с помощью pip install -r requirements.txt.

root@kitploit:~
usage: main.py [-h] [-s INDEX] [-i MAX_ITERATIONS] [-o EXPECTED_OUTPUT] [-e EXPECTED_EXIT] [-d DESIRED_PC] [-v] [-n] [-t TYPES] [-b BINARY_ADDR]
               [-u OUTPUT_DIR] [-f BEGIN_ADDR] [-g END_ADDR]
               binary_path input_path

Automatically finds hardware security vulnerabilities in binaries. Only support ARM.

positional arguments:
  binary_path           The binary to examine
  input_path            The path to the input to the program

options:
  -h, --help            show this help message and exit
  -s, --simulate INDEX  Runs a Unicorn simulation with the fault at an nth instruction issue. Ignores all other flags besides --max_iterations and
                        --verbose.
  -i, --max-iterations MAX_ITERATIONS
                        The maximum number of instructions to run in the binary before ending early
  -o, --expected-output EXPECTED_OUTPUT
                        The expected output of the program on a successful security incident
  -e, --expected-exit EXPECTED_EXIT
                        The expected exit of the program on a successful security incident
  -d, --desired-pc DESIRED_PC
                        The program counter we desire to achieve if possible. In hex or decimal. Keep in mind that this is the absolute address,
                        not relative to the binary.
  -v, --verbose         Verbosity: warning, info, debug
  -n, --no-thumb        Whether or not to run in thumb mode
  -t, --types TYPES     Which types of instructions to focus on. 0) Brute force: every issue. 1) Recommended defaults. 2) Only conditional
                        branches. 3) Only compare/tests. 4) Only returns. 5) Only branches, calls, returns, and compares
  -b, --binary-addr BINARY_ADDR
                        The address to flash the binary to. Defaults to 0x1000000. Can be in hex or decimal.
  -u, --output-dir OUTPUT_DIR
                        The directory to store faults that were found.
  -f, --begin-addr BEGIN_ADDR
                        The starting address of the instructions that should be considered for skipping. (inclusive.) If set, -g must also be set.
  -g, --end-addr END_ADDR
                        The ending address of the instructions that should be considered for skipping. (inclusive.) If set, -f must also be set.

Примеры использования

Проверка вывода

python3 main.py ./binaries/sha256.bin ./inputs/sha256.bin -o ./expecteds/sha256.bin -v

Проверяет вывод, чтобы узнать, достигли ли мы целей атаки.

Управление счётчиком команд

python3 main.py ./binaries/aes_ecb.bin ./inputs/aes_ecb.bin -d 0x100045c -v -u outputs/aes_ecb

Тестирует бинарный файл aes_ecb, чтобы перейти к пользовательской «недостижимой» функции и сохранить входные данные в каталог.

Тестирование глитча в симуляции

python3 main.py ./binaries/aes_ecb.bin ./outputs/aes_ecb/solved_pc_188.bin -s 188

Запустить симуляцию Unicorn для этого конкретного цикла глитча и входных данных. В данном случае — выходные данные из управления счётчиком команд.

Ограничения

  1. На данный момент эта программа поддерживает только набор инструкций ARM. Она поддерживает как режим Thumb, так и обычный режим.
  2. Некоторые бинарные файлы выполняют очень сложные операции над входными данными (например, хеширование), что замедляет работу SMT-решателя.

Примечания

Запуск бинарных файлов

Код, включённый в binaries/sources, предназначен только для тестирования. Он не ориентирован на реальное оборудование и используется исключительно для тестирования инструмента.

Чтобы запустить конкретный бинарный файл, предназначенный для устройства, необходимо извлечь соответствующую часть бинарного файла таким образом, чтобы он не выполнял никаких вызовов периферийных устройств, кроме простого ввода-вывода. Например, если ваш бинарный файл использует UART, вы можете пропатчить его, заменив вызовы UART на вызовы заглушек _read и _write, находящихся в binaries/stubs. Кроме того, при желании GPIO можно заменить вызовами _trigger. Чтобы запустить ваш код через инструмент, вы создадите символ main, содержащий пропатченный бинарный файл, а затем свяжете его с кодом binaries/startup.s. Таким образом, инструмент сможет запустить и выполнить ваш бинарный файл.

Конкретный пример смотрите в каталоге targets, где мы показываем этот процесс на TIMSPM0L2228.

Компиляция из исходных кодов

Вы должны использовать компилятор той же версии и те же флаги/шаги компиляции, чтобы создать бинарный файл, соответствующий бинарному файлу, работающему на целевой платформе. Если вы создаёте свои собственные программы и тестируете их, это нормально. Но если у вас есть только исходный код целевой платформы, которую вы атакуете, вряд ли удастся скомпилировать точный бинарный файл, который там выполняется. Поэтому рекомендуется по возможности использовать точный бинарный файл, запущенный на целевой платформе.

Скачать инструмент