Как настроить фаззинг-сканирование и интегрировать его с CI/CD
Фаззинг‑сканирование автоматически выявляет уязвимости, а интеграция с CI/CD позволяет находить их в каждом билде — настройте за 5 шагов.
Фаззинг‑сканирование автоматически генерирует и подаёт на вход программы случайные данные, выявляя ошибки и уязвимости за считанные минуты — интегрировать его в CI/CD можно уже сегодня, следуя простой инструкции.
Как работает фаззинг‑сканирование и какие типы уязвимостей оно обнаруживает?
Фаззинг‑сканирование – это метод динамического тестирования, при котором в программу подаются «мутированные» входные данные и наблюдается её поведение. Если приложение падает, зависает или выдаёт исключение, это сигнал о потенциальной уязвимости. Наиболее часто обнаруживаются ошибки переполнения буфера, use‑after‑free, SQL‑инъекции в парсерах и уязвимости в криптографических библиотеках.
- 1. Генерация случайных или мутированных входных данных (fuzz vectors).
- 2. Инъекция данных в целевую функцию или API.
- 3. Мониторинг крашей, таймаутов и аномальных логов.
- 4. Сбор покрытий кода (code coverage) для оценки эффективности.
Почему фаззинг важен в современном DevSecOps и какие преимущества даёт интеграция с CI/CD?
В 2026 году более 30 % компаний используют автоматический фаззинг как часть цепочки поставки, потому что он позволяет обнаруживать критические уязвимости до выхода в продакшн, сокращая расходы на исправление до 2 500 000 ₽ в среднем на проект.
Интеграция с CI/CD даёт следующие выгоды:
- Непрерывный мониторинг безопасности на каждом коммите.
- Автоматическое блокирование релизов, если найдено критическое падение.
- Отчётность в виде артефактов сборки и дашбордов.
- Сокращение времени отклика на уязвимости до 24 часов.
Что нужно подготовить перед запуском фаззинг‑сканирования в проекте?
Перед первым запуском необходимо собрать несколько артефактов, чтобы фаззинг‑инструмент мог работать эффективно.
- 1. Исходный код с включёнными отладочными символами (‑g) и покрытием (‑fprofile-arcs ‑ftest‑coverage).
- 2. Список входных форматов (JSON, XML, протоколы) и примеры валидных файлов.
- 3. Среду выполнения (Docker‑образ или VM), где будет запускаться фаззер.
- 4. Инструменты сбора логов и core‑dump (например, gdb, lldb).
Как настроить популярные инструменты фаззинга (AFL, libFuzzer, OSS‑Fuzz) для автоматизации?
Настройка начинается с компиляции проекта под конкретный фаззер, после чего создаётся скрипт‑обёртка для CI.
- AFL:
- Установите пакет
afl++(версии 2.52b2026). - Перекомпилируйте приложение:
CC=afl-clang-fast CXX=afl-clang-fast++ ./configure && make -j$(nproc). - Запустите фаззинг:
afl-fuzz -i inputs/ -o findings/ ./target @@. - Сохраните результаты в артефакт CI (директория
findings).
- Установите пакет
- libFuzzer:
- Скомпилируйте с флагом
-fsanitize=fuzzer. - Запустите:
./target_fuzz corpus/ -runs=1000000. - Для CI добавьте шаг
--max_total_time=300(5 минут).
- Скомпилируйте с флагом
- OSS‑Fuzz (Google Cloud):
- Создайте
.bazelrcс настройками--config=oss-fuzz. - Определите
fuzz_targetвBUILD.bazel. - Запустите в CI:
bazel run //project:fuzz_target -- --runs=50000.
- Создайте
Как интегрировать фаззинг‑сканирование в пайплайн GitHub Actions или GitLab CI в 2026 году?
Интеграция сводится к добавлению отдельного job‑а, который использует подготовленный Docker‑образ с фаззером и сохраняет артефакты.
- GitHub Actions пример:
name: Fuzz Test
on: [push, pull_request]
jobs:
fuzz:
runs-on: ubuntu‑latest
container:
image: ghcr.io/yourorg/fuzz‑env:2026
steps:
- uses: actions/checkout@v3
- name: Build with AFL
run: |
CC=afl-clang-fast ./configure && make -j$(nproc)
- name: Run AFL
run: |
afl‑fuzz -i tests/inputs -o fuzz‑out ./target @@
- name: Upload findings
uses: actions/upload-artifact@v3
with:
name: fuzz-findings
path: fuzz‑out
- GitLab CI пример:
fuzz_test:
image: registry.gitlab.com/yourorg/fuzz-env:2026
stage: test
script:
- CC=afl-clang-fast ./configure && make -j$(nproc)
- afl‑fuzz -i tests/inputs -o fuzz‑out ./target @@
artifacts:
paths:
- fuzz‑out/
expire_in: 1 week
Важно добавить условие if: github.event_name == 'pull_request' или аналог в GitLab, чтобы фаззинг запускался только для безопасных веток.
Что делать, если фаззинг обнаружил критическую уязвимость?
При обнаружении критического краша необходимо быстро реагировать, иначе риск эксплойта может превысить 5 % в течение недели.
- 1. Сохраните репродуцируемый тест‑кейс (crash‑file).
- 2. Откатите последний коммит, если он содержит уязвимый код.
- 3. Откройте тикет в системе отслеживания (Jira, YouTrack) с меткой
SECURITYи прикрепите лог. - 4. Выполните локальное отладочное исследование с gdb:
gdb ./target core. - 5. Внедрите патч, запустите повторный фаззинг, убедитесь, что краш исчез.
- 6. Обновите CI‑конфигурацию, чтобы аналогичный ввод теперь покрывался unit‑тестами.
Воспользуйтесь бесплатным инструментом FuzzScanner на toolbox-online.ru — работает онлайн, без регистрации.
Теги