Всем привет!
Fuzzing – интересная, но далеко не самая очевидная тема, особенно «в начале пути». Чтобы чуть упростить погружение предлагаем Вашему вниманию статью. В ней собрана как теоретическая информация, так и пара практических примеров.
Рассматривается следующий «процесс»:
🍭 Инструментация. Грубо говоря – добавление в код или в исполняемый файл средств, которые позволяют понять какие части кода были выполнены в момент тестирования (code coverage)
🍭 Генерация входных данных. Первичные данные, которые будут использованы в дальнейшем – можно генерировать как «руками», так и с использованием средств автоматизации
🍭 Мутация входных данных. Генерация новых тестовых данных за счет изменения существующих
🍭 Тестирование. Применение сгенерированных тестовых данных для анализа программного обеспечения
🍭 Сбор обратной связи. Анализ code coverage, запуск повторных тестов для получения лучшего результата
Для указанного выше «процесса» Автор статьи создает PoC на примере минималистичного приложения, написанного на
C++. Второй пример чуть интереснее: в качестве «подопытного» выступает библиотека libxml2. Комментарии, код, описание, результаты – все на месте!