Видеоролик о технологиях ИСП РАН
Инструмент направленного фаззинга LibAFL-DiFuzz
LibAFL-DiFuzz — это инструмент направленного фаззинга, основанный на модульной архитектуре фаззера LibAFL и инструменте статической предобработки DiFuzz. LibAFL-DiFuzz позволяет выполнять фаззинг-тестирование, фокусируясь на достижении определенных участков кода. Данный вид анализа применяется для анализа патчей, воспроизведения ошибок, верификации предупреждений статического анализа. «Направление» фаззинга задается с помощью одной или нескольких целевых точек в исходном коде программы. Процесс направленного фаззинга начинается со статической предобработки тестируемой программы, в ходе которой формируются специальные метрики для анализа. В процессе фаззинга LibAFL-DiFuzz отслеживает состояние программы и адаптивно распределяет ресурсы для генерирования входных данных. Это значительно увеличивает скорость и вероятность достижения указанных участков кода.
Особенности и преимущества
В отличие от аналогичных открытых инструментов, LibAFL-DiFuzz поддерживает гибкую и удобную конфигурацию, сигнализирует о достижении любой целевой точки в коде (не только аварийные завершения), а также поддерживает направленный фаззинг для нескольких целевых точек одновременно. Работа LibAFL-DiFuzz организована в три этапа:
Статическая предобработка. Инструмент Difuzz вы полняет построение графов и деревьев доминаторов, формирует улучшенные целевые последовательности ETS и рассчитывает контекстные веса.
Сборка фаззинг-целей. Специальные компиляторы собирают фаззинг-цели с LibAFL-инструментацией, используя информацию, полученную от Difuzz.
Направленный фаззинг. LibAFL выполняет фаззинг-тестирование и рассчитывает метрику близости к целевым точкам для оценки входных данных. Метрика используется в планировщике энергии для приоритизации генерируемых входных данных.
Основные преимущества LibAFL-DiFuzz:
- метод планирования энергии во время фаззинга основан на алгоритме имитации отжига.
- метрика близости к целевым точкам строится на основе графа доминаторов и улучшенных целевых последовательностях (Enhanced Target Sequences, ETS).
- разрешение неявных вызовов при помощи анализа иерархий наследования.
- использование контекстных весов при построении целевых последовательностей улучшает точность.
- гибридный направленный фаззинг с динамическим символьным исполнением Sydr/Sydr-Fuzz.
- поддержка направленного фаззинга для C/C++/Rust/Go проектов.
Схема работы
Перейти к списку всех технологий 