14 октября 2025 / время чтения: 3 мин. / всего просмотров: 1

Фаззинг-тестирование. Что такое, с чего начать и к чему стремиться?


C августа 2024 года проектом OSS-Fuzz зарегистрировано не менее 750 подтверждённых уязвимостей в open-source-компонентах. Не менее 20 исправлений десятков уязвимостей в них за этот же период внесено Центром исследования безопасности системного ПО, сформированным при участии отечественных экспертов.

Эти цифры объединяет одно: данные уязвимости выявлены видом динамического анализа кода под названием «фаззинг». Тестировщики, которые впервые с ним знакомятся, ассоциируют его с анализом граничных значений, оценкой на основе эквивалентных классов, тестированием property-based. Действительно, эти виды тестирования отчасти покрываются в ходе фаззинга, но всплывают и нюансы, которые делают процедуру не такой уж и простой.

ФАЗЗИНГ: ЧТО ЭТО?

Фаззинг — подход к анализу кода во время его исполнения, основанный на оценке работы программы в ответ на подачу на вход множества невалидных значений. Гибкость в его проведении достигается широкими возможностями:

  • в зависимости от оценки выполнения кода фаззинг проводится по принципу «белого», «серого» и «чёрного» ящиков;
  • подход к формированию входных значений, семплов, может быть генерационным — не связанным с процессом фаззинга — или мутационным — основанным на получаемом покрытии кода;
  • целью исследования может быть как конечный исполняемый файл, так и конкретная библиотечная функция.

Большой ассортимент существующих инструментов, фаззеров, «даёт разгуляться». Однако такая вариативность создаёт определённую сложность в реализации фаззинг-тестирования.

С ЧЕГО НАЧАТЬ?

Простой фаззинг можно запустить «на коленке», достаточно определить цель. В таком случае проще получить генерационный фаззинг чёрного ящика: входные семплы генерируются случайно, информации о покрытии кода нет, целью выступает конечный исполняемый процесс, который можно запустить и вручную. Такой подход является примитивом к фаззингу веб-приложений: программа-клиент отправляет на сервер запросы, в их содержимое подставляются случайные данные. Результат ожидаемо «сырой»: искать «вредные» семплы необходимо самостоятельно.

К ЧЕМУ СТРЕМИТЬСЯ?

Освоение мутационного фаззинга серого ящика удобно начать с формирования на базе юнит-тестов «фаззинг-обёрток» — программ, вызывающих исследуемый код и подающих на вход данные от фаззера. Интересными целями выступают библиотечные функции: строкочувствительные, утилитарные, с высокой цикломатической сложностью, парсеры, десериализаторы и т. п. Их тест завязан на трёх элементах:

  • проинструментированная библиотека;
  • фаззер;
  • скомпилированная обёртка с входным набором данных, обеспечивающих стартовое покрытие.

Дополнить процесс можно:

  • мутаторами, увеличивающими входной набор данных;
  • словарями, насыщающими семплы значениями, влияющими на ход выполнения кода.

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

ИГРА СТОИТ СВЕЧ

Внедрение фаззинга берёт начало от крупных игроков ИТ-индустрии и вызвано стремлением к повышению качества и безопасности продуктов: фаззинг давно доказал свою эффективность в поиске багов и уязвимостей. Ясна и риторика регулятора: искать ошибки нужно уметь, особенно если речь идёт о том, что действительно важно, и фаззинг — эффективный способ для этого.

Похожие статьи

Статья

Гонка за суперинтеллектом на распутье: инициативупо контролю над LLM встретили с подозрительностью и скепсисом

Статья

Отягощённое интеллектом. Сложности испытательной лаборатории при оценке защищённости программного обеспечения, разработанного с использованием ИИ

Статья

Атаки на извлечение обучающих данных. Почему нейросеть может «проболтаться» о том, чему её учили

Статья

ИИ-безопасность становится реальностью. Российский бизнес на пороге новых киберрисков

  1. 05 «Доверие нельзя сертифицировать — его можно только построить». 11 вопросов после 11-го Certification Day
  2. 06 Как финансовым организациям защищаться от фрода с помощью технологии фингерпринта
  3. 07 ИИ против ИИ. Как искусственный интеллект меняет правила игры в кибербезопасности
  4. 08 Инциденты безопасности ИИ. Новые виды угроз, которые уже отслеживают в российских компаниях
  5. 09 Лучшие практики по организации работы SOC и VOC
  6. 10 Не вместо, а вместе. Как ИИ-платформы расширяют возможности банковского SOC
ИИ-ассистент BISонлайн
Привет! Я помогу разобраться в материалах журнала. Хотите, перескажу текущую статью за 20 секунд?
Рекомендую прочитать
«Как построить SOC в 2026»