
Инструмент анализа и сравнения прошивок
Анализ прошивок может использоваться для достижения нескольких интересных целей. Главные из них — выявление функциональности, компонентов и потенциальных уязвимостей безопасности в прошивках типа «чёрный ящик».
Инструмент анализа и сравнения прошивок (FACT) предназначен для максимальной автоматизации ручной работы по анализу прошивок. FACT объединяет растущий набор мощных анализов, создавая единый интерфейс, который позволяет пользователю перейти от произвольного образца прошивки к готовому анализу. Некоторые из ключевых особенностей анализа FACT заключаются в том, что результаты
Кроме того, FACT предлагает несколько способов навигации и визуализации результатов анализа и содержимого прошивки для удобного доступа. Основной интерфейс FACT — это веб-интерфейс на основе HTML/js/css, который может быть размещён локально или доступен по сети. Кроме того, FACT предоставляет REST-подобный HTTP API, который можно исследовать с помощью встроенного SwaggerUI. Некоторые ключевые функции веб-интерфейса:
Хотя FACT поддерживается как исследовательский прототип, проект хорошо протестирован, включает базовую документацию и предлагает множество функций производственного уровня. Мы всегда открыты для обратной связи и запросов на новые функции.
Более подробная информация и несколько скриншотов доступны на нашей странице проекта.
FACT спроектирован как многопроцессное приложение: чем больше ядер и оперативной памяти, тем лучше.
| Минимальные | Рекомендуемые |
|---|---|
| 4 ядра | 16 ядер |
| 8 ГБ ОЗУ | 64 ГБ ОЗУ |
| 10 ГБ дискового пространства | 10* ГБ дискового пространства |
[!NOTE] Около 10 ГБ требуется для установки кода FACT, контейнера и бинарных файлов. Дополнительное пространство необходимо для хранения распакованных файлов и результатов анализа. Оно может располагаться на отдельном разделе или диске.
В принципе, FACT можно установить на любой дистрибутив Linux, но установщик ограничен
Установка на более старых дистрибутивах (например, Debian 11 «Bullseye» или Ubuntu 20.04 «Focal») может по-прежнему работать, но не считается стабильной, поскольку эти дистрибутивы достигли конца своего жизненного цикла.
FACT требует Python 3.10–3.14 (должен быть по умолчанию во всех поддерживаемых дистрибутивах).
Процесс установки в основном автоматизирован и объединён в один скрипт. Однако некоторые функции можно выбрать отдельно. Подробное руководство по установке FACT см. в INSTALL.md.
[!IMPORTANT] Обратите внимание: хотя FACT широко использует контейнеры, он всё ещё содержит много зависимостей (и функция удаления не предусмотрена). Если вы хотите сохранить чистоту системы, вы можете попробовать один из вариантов установки, приведённых ниже.
Мы предоставляем ежемесячные и готовые к использованию Vagrant-коробки нашей ветки master. Vagrant — это простой и удобный способ начать работу с FACT без установки на свою машину. Просто настройте Vagrant и импортируйте предоставленную нами коробку в VirtualBox. Наши коробки можно найти на сайте vagrantup!
О том, как начать работу с FACT и Vagrant, читайте в нашем учебнике.
Существует также версия в Docker, но в настоящее время она не поддерживается. (см. репозиторий FACT_docker для получения дополнительной информации).
Вы можете запустить FACT, выполнив скрипт start_fact.py.
Скрипт автоматически определяет все установленные компоненты.
src/start_fact.py
После этого FACT будет доступен по адресу http://localhost:5000 (по умолчанию) или https://localhost (если FACT установлен с nginx).
Вы можете завершить систему, нажав Ctrl + c или отправив сигнал SIGTERM скрипту start_fact.py.
[!CAUTION] FACT не предназначен для использования в качестве публичного интернет-сервиса. Веб-интерфейс не является закалённым приложением. Мы стараемся ограничить проблемы безопасности, применяя SecDevOps, но FACT всё равно может содержать уязвимости. Обязательно сбросьте все пароли в конфигурации FACT, если планируете размещать FACT в ненадёжных сетях.
[!TIP] Дополнительная документация по использованию FACT доступна на наших страницах вики.
Вы также можете ознакомиться с нашей документацией Sphinx.
Информацию о том, что такое FACT и как он работает, можно найти в слайдах в
папке docs.
FACT предоставляет REST API. Дополнительную информацию можно найти на странице вики.
FACT предоставляет необязательную базовую аутентификацию, управление ролями и пользователями. Дополнительную информацию можно найти на странице вики.
Самый простой способ внести вклад — написать собственный плагин. Наше руководство разработчика можно найти в вики на GitHub.
В настоящее время доступны следующие дополнительные плагины:
Скрипт src/firmware_import_export.py можно использовать для экспорта распакованных файлов и результатов анализа и импорта их
в другой экземпляр FACT.
Данные сохраняются в виде ZIP-архива, и это же формат, который скрипт ожидает при импорте.
Чтобы экспортировать файлы и данные анализа проанализированных образов прошивок, выполните
python3 firmware_import_export.py export FW_UID [FW_UID_2 ...] [-o OUTPUT_DIR]
[!NOTE] Экспортированные архивы могут занимать значительный объём дискового пространства. Фиксированной зависимости нет, но размер может превышать размер исходной прошивки в 2–10 раз.
После этого вы можете импортировать экспортированные файлы с помощью
python3 firmware_import_export.py import FW.zip [FW_2.zip ...]
Мы были рады показать FACT на нескольких сессиях BlackHat Arsenal.
Спасибо @botlabsDev, который изначально предоставил Vagrantfile, который, однако, теперь устарел.
Этот проект частично финансируется Федеральным управлением по информационной безопасности Германии (BSI) и другими организациями.
Инструмент анализа и сравнения прошивок (FACT)
Copyright (C) 2015-2026 Fraunhofer FKIE
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять её в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии. Эта программа распространяется в надежде, что она будет полезна, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии КОММЕРЧЕСКОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. См. Стандартную общественную лицензию GNU для получения дополнительных сведений. Вы должны были получить копию Стандартной общественной лицензии GNU вместе с этой программой. Если нет, см. http://www.gnu.org/licenses/.
Некоторые плагины могут иметь другие лицензии. Если это так, файл с лицензией предоставляется в папке плагина.