Google Project Zero: мутационный грамматический фаззинг — эффективность и ограничения

Мутационный грамматический фаззинг — мощный инструмент для поиска уязвимостей, но он не лишён недостатков. Специалист Google Project Zero проанализировал его слабые места и предложил простое улучшение. Разберёмся, в чём суть проблемы и как её можно компенсировать. Мутационный грамматический фаззи

Google Project Zero: мутационный грамматический фаззинг — эффективность и ограничения

Мутационный грамматический фаззинг — мощный инструмент для поиска уязвимостей, но он не лишён недостатков. Специалист Google Project Zero проанализировал его слабые места и предложил простое улучшение. Разберёмся, в чём суть проблемы и как её можно компенсировать.

Что такое мутационный грамматический фаззинг

Мутационный грамматический фаззинг — это техника тестирования, при которой входные данные генерируются на основе грамматики языка. В отличие от случайного фаззинга, такие данные синтаксически корректны, что позволяет эффективно тестировать парсеры, компиляторы и интерпретаторы. Инструменты вроде Jackalope от Google Project Zero используют мутации — небольшие изменения существующих корректных примеров — для создания новых тестовых случаев. Это обеспечивает высокое покрытие кода, но, как выяснилось, не всегда приводит к обнаружению реальных ошибок.

Проблема №1: покрытие кода не равно обнаружению ошибок

Основной метрикой эффективности фаззинга часто служит покрытие кода. Однако, как отмечает исследователь, в языковом фаззинге покрытие — не идеальный показатель. Ошибки часто возникают не просто при выполнении определённых строк кода, а при специфических последовательностях вызовов функций или при передаче результатов одной функции в другую. Грамматический фаззинг может генерировать множество синтаксически корректных, но семантически бессмысленных примеров, которые увеличивают покрытие, но не выявляют багов. Например, в XSLT-реализациях браузеров или JIT-движках критичны именно логические ошибки, а не просто выполнение редких веток кода.

Проблема №2: мутации сохраняют структуру, но ограничивают разнообразие

Вторая проблема связана с самой природой мутаций. Поскольку мутации гарантируют соответствие грамматике, они часто не затрагивают ключевые семантические аспекты, такие как порядок операций, типы данных или зависимости между переменными. В результате фаззер генерирует много похожих примеров, не исследуя глубоко семантическое пространство. Это снижает шансы на обнаружение сложных логических ошибок, которые требуют нестандартных комбинаций конструкций языка.

Какой недостаток мутационного грамматического фаззинга выделил специалист Google Project Zero

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

Предложенное решение: вероятностное сохранение сэмплов

Для решения этой проблемы исследователь предлагает простую технику: после мутации, если сэмпл не привёл к новому покрытию, он всё равно сохраняется с заданной вероятностью (например, 10%). Это позволяет сохранять семантически интересные, но не увеличивающие покрытие сэмплы. Впоследствии они могут стать основой для мутаций, которые приведут к обнаружению ошибок. Такой подход не требует сложных изменений в архитектуре фаззера и может быть легко реализован в существующих инструментах.

Практическая значимость и ограничения

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

Кого затронет это исследование

Результаты работы будут полезны разработчикам фаззеров и инструментов безопасности, исследователям, занимающимся поиском уязвимостей в парсерах, компиляторах и интерпретаторах, а также командам QA, использующим автоматизированное тестирование. Понимание ограничений грамматического фаззинга поможет корректно интерпретировать результаты и избегать ложного чувства безопасности.

Что пока неизвестно

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