Honggfuzz
Ориентированный на безопасность, управляемый обратной связью, эволюционный фаззер.
Honggfuzz — это фаззер общего назначения, использующий покрытие кода (программное и аппаратное) для поиска ошибок. Он многопроцессный, многопоточный и поддерживает персистентный фаззинг для экстремальной скорости.
Ключевые возможности
- Быстрота: Многопроцессный и многопоточный движок, раскрывающий полный потенциал ЦП.
- Персистентный фаззинг: Тестируйте API напрямую в процессе со скоростью до 1 млн итераций в секунду.
- Управление обратной связью: Использует аппаратное (Intel BTS/PT) и программное покрытие кода для эволюции входных данных.
- Простота: Можно начать с пустого корпуса и автоматически создать допустимый набор входных данных.
- Глубокий мониторинг: Использует низкоуровневые API (
ptrace) для обнаружения перехваченных сигналов и скрытых сбоев.
- Широкая поддержка: Linux, macOS, Android, NetBSD, FreeBSD и Windows (Cygwin).
Установка
Зависимости
Linux (Ubuntu/Debian)
sudo apt-get install binutils-dev libunwind-dev libblocksruntime-dev clang
macOS
Требуется Xcode (10.8+) и libblocksruntime.
Сборка
make
# Compilation wrappers are created in hfuzz_cc/
Использование
1. Компиляция цели
Используйте предоставленные обёртки компилятора для автоматического добавления инструментирования:
# C code
./hfuzz_cc/hfuzz-clang -o my_target my_target.c
# C++ code
./hfuzz_cc/hfuzz-clang++ -o my_target my_target.cpp
2. Запуск фаззера
Укажите каталог с входными данными (может быть пустым) и ваш бинарный файл:
# Basic run
./honggfuzz -i input_dir/ -- ./my_target ___FILE___
# Persistent mode (faster)
./honggfuzz -P -i input_dir/ -- ./my_target
Примечание: ___FILE___ — это заполнитель для имени входного файла, создаваемого honggfuzz.
Дополнительные примеры (Apache, OpenSSL, BIND и т. д.) см. в каталоге examples/.
Подробные параметры см. в USAGE.md.
Трофеи
С помощью Honggfuzz были обнаружены серьёзные уязвимости в критически важном программном обеспечении.
HTTP и серверы
- Apache HTTPD:
- CVE-2017-7659 (удалённый сбой mod_http2)
- CVE-2017-9789 (использование после освобождения)
- CVE-2018-1301, CVE-2018-1302, CVE-2018-1303
- OpenSSH: Удалённый сбой до аутентификации (коммит 28652bca)
- BIND: Множественные ошибки
- NGINX Unit: Бесконечный цикл
- ProFTPD: CVE-2019-18217 (DoS)
- Samba: CVE-2019-14907, CVE-2020-10745, CVE-2021-20277
Криптография и SSL
- OpenSSL:
- CVE-2016-6309 (критическая, потенциальное RCE)
- CVE-2015-1789, CVE-2016-7054, CVE-2017-3731
- LibreSSL: Множественные сбои и некорректное освобождение памяти
- BoringSSL: Использование неинициализированной памяти
- Crypto++: CVE-2016-9939 (удалённый DoS)
Языки и интерпретаторы
- PHP: Ошибки WDDX, общие сбои интерпретатора
- Python/Ruby: Ошибки интерпретаторов
- Rust: Паники/проблемы безопасности в
regex, h2, sleep-parser, lewton
- Perl: Множественные сбои интерпретатора
Медиа и форматы
- FreeType 2: CVE-2010-2497–CVE-2010-2527 (7+ CVE)
- LibTIFF: Множественные ошибки
- LibJPEG/Turbo: Множественные ошибки
- VLC: RCE из-за двойного освобождения памяти
- Adobe Flash: CVE-2015-0316
- ImageIO (iOS/macOS): Множественные проблемы безопасности (Project Zero)
- LibreOffice: Повреждение памяти
Система и утилиты
- Systemd: Протестировано с помощью honggfuzz
- fwupd: Обнаружено более 17 ошибок
- TCPDump: Множественные ошибки
- Rsyslog: Множественные ошибки
(Ещё сотни — на OSS-Fuzz)
Проекты, использующие Honggfuzz
- Google OSS-Fuzz: Непрерывный фаззинг открытого программного обеспечения.
- Android: Используется командой безопасности Android.
- Rust: Крейт
honggfuzz-rs для фаззинга кода на Rust.
- Bitcoin Core: Инфраструктура фаззинга.
- Apache HTTP Server: Фаззинг в CI.
- Systemd: Фаззинг в CI.
- Cifasis QuickFuzz
- Mozilla FuzzOS
Лицензия
Лицензия Apache 2.0.
Это НЕ официальный продукт Google