Компания Google представила проект ClusterFuzzLite, позволяющий организовать fuzzing-тестирование кода для раннего выявления потенциальных уязвимостей на этапе работы систем непрерывной интеграции. В настоящее время ClusterFuzz может использоваться для автоматизации fuzzing-тестирования pull-запросов в GitHub Actions, в Google Cloud Build и в Prow, но в дальнейшем ожидается появление поддержки и других CI-систем. Проект базируется на платформе ClusterFuzz, созданной для координации работы кластеров fuzzing-тестирования, и распространяются под лицензией Apache 2.0.
Отмечается, что после внедрения в 2016 году компанией Google сервиса OSS-Fuzz в программу непрерывного fuzzing-тестирования было принято более 500 важных открытых проектов. На основе проведённых проверок было устранено более 6500 подтверждённых уязвимостей и исправлено более 21 тысячи ошибок.
ClusterFuzzLite продолжает развитие механизмов fuzzing-тестирования возможностью более раннего выявления проблем на стадии рецензирования предлагаемых изменений. ClusterFuzzLite уже внедрён в процессы рецензирования изменений в проектах systemd и curl, и позволил выявлять ошибки, пропущенные статическими анализаторами и linter-ами, применявшимися на начальном этапе проверки нового кода.
ClusterFuzzLite поддерживает проверку проектов на языках C, C++, Java (и других языков на базе JVM), Go, Python, Rust и Swift. Fuzzing-тестирование проводится с использованием движка LibFuzzer. Для выявления ошибок работы с памятью и аномалий также могут вызываться инструменты AddressSanitizer, MemorySanitizer и UBSan (UndefinedBehaviorSanitizer).
Основные возможности ClusterFuzzLite: быстрая проверка предлагаемых изменений для нахождения ошибок на этапе до принятия кода; загрузка отчётов об условиях возникновения крахов; возможность перехода к более расширенному fuzzing-тестированию для выявления более глубоких ошибок, не всплывших после проверки изменения кода; генерация coverage-отчётов для оценки охвата кода при тестировании; модульная архитектура, позволяющая выбирать необходимую функциональность.
Напомним, что при fuzzing-тестировании осуществляется генерация потока всевозможных случайных комбинаций входных данных, приближенных к реальным данным (например, html-страницы с случайными параметрами тегов, архивы или изображения с аномальными заголовками и т.п.), и фиксация возможных сбоев в процессе их обработки. Если какая-то последовательность приводит к краху или не соответствует ожидаемой реакции, то такое поведение с высокой вероятностью свидетельствует об ошибке или уязвимости.