Фаззинг-тестирование (Fuzzing)

24 декабря, 2025, 17:56

Фаззинг-тестирование (Fuzzing, Фаззинг) — это метод автоматизированного тестирования безопасности и надежности программного обеспечения, в частности API (Application Programming Interface), который заключается в подаче на вход системы большого объема неверных, неожиданных, случайных или искаженных данных (так называемый «фазз») с целью спровоцировать сбои, утечки памяти, исключения или выявить потенциальные уязвимости безопасности.

Возможности и виды фаззинга:

  • Генерация «фазза» (Fuzz): Тестовые данные создаются:
    • На основе модификаций (Mutation-based): Исходные валидные данные (например, корректный JSON-запрос) случайным образом искажаются (биты переворачиваются, строки укорачиваются/удлиняются, вставляются специальные символы).
    • На основе генерации (Generation-based): Данные генерируются «с нуля» согласно спецификации формата (например, схеме OpenAPI/Swagger для API), но с нарушением правил.
  • Типы тестируемых входных точек:
    • API-эндпоинты (REST, GraphQL, SOAP): Фаззинг параметров запроса (query, path), тела запроса (JSON, XML), заголовков (headers).
    • Файловые парсеры: Подача искаженных файлов (PDF, JPEG, DOCX) для поиска уязвимостей в обработчиках.
    • Сетевые протоколы: Тестирование сервисов, принимающих сетевые пакеты.
  • Мониторинг реакции системы: Инструменты фаззинга отслеживают целевую систему на предмет:
    • Падения (краш) или зависания.
    • Утечек памяти (memory leaks).
    • Необработанных исключений.
    • Изменений в поведении (например, неожиданные HTTP-статусы, вывод ошибок в ответах).

Фаззинг является мощным методом для обнаружения нулевых дней (zero-day) и сложных уязвимостей, таких как переполнение буфера, XSS, SQL-инъекции, RCE (Remote Code Execution), которые трудно выявить статическим или ручным анализом. Интеллектуальные (smart) или управляемые покрытием (coverage-guided) фаззеры (например, AFLlibFuzzer) анализируют, какой код выполняется при каждом тесте, и генерируют новые данные, чтобы максимально увеличить покрытие кода, что делает тестирование более эффективным. Фаззинг должен быть частью Secure SDLC, интегрирован в CI/CD-конвейеры и применяться как к собственному коду, так и к сторонним библиотекам.

Продолжение ниже

Боссы российского кибербеза

Упоминания