TToolBox
💻
💻 dev
9 апреля 2026 г.6 мин чтения

Как настроить фаззинг-сканирование и интегрировать его с CI/CD

Как настроить фаззинг-сканирование и интегрировать его с 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:
    1. Установите пакет afl++ (версии 2.52b2026).
    2. Перекомпилируйте приложение: CC=afl-clang-fast CXX=afl-clang-fast++ ./configure && make -j$(nproc).
    3. Запустите фаззинг: afl-fuzz -i inputs/ -o findings/ ./target @@.
    4. Сохраните результаты в артефакт CI (директория findings).
  • libFuzzer:
    1. Скомпилируйте с флагом -fsanitize=fuzzer.
    2. Запустите: ./target_fuzz corpus/ -runs=1000000.
    3. Для CI добавьте шаг --max_total_time=300 (5 минут).
  • OSS‑Fuzz (Google Cloud):
    1. Создайте .bazelrc с настройками --config=oss-fuzz.
    2. Определите fuzz_target в BUILD.bazel.
    3. Запустите в 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 — работает онлайн, без регистрации.
Поделиться:

Теги

#fuzzing#security#ci-cd#devops#testing
Как настроить фаззинг-сканирование и интегрировать его с CI/CD | ToolBox Online