SAST и SCA как процесс: когда блокируют сборку, кто закрывает находки

0
6
Обложка статьи: SAST и SCA как процесс: когда блокируют сборку, кто закрывает находки

Сканер в конвейере без правил — это отчёт, который никто не читает. Зафиксируйте процесс: какие находки SAST (анализ своего кода) и SCA (зависимости) останавливают merge, кто их забирает, за сколько дней закрывают, как выглядит исключение. Как поставить SonarQube, bandit, pip-audit или Dependency-Track — уже написано; сюда эти job не копируйте.

Статья опирается на логику направления «Управление уязвимостями» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. NIST SP 800-218 относит поиск уязвимостей в коде и компонентах к практикам создания ПО, а не к разовому пентесту: SP 800-218. Это не российский закон.

Два потока, не один отчёт

Поток Что ищет Где на сайте инструмент Когда гонять
SAST Ошибки в вашем коде bandit, SonarQube в GitLab CI Каждый merge request и ветка по умолчанию
SCA Известные дыры в библиотеках pip-audit, Dependency-Track в той же статье про GitLab CI Каждый MR, где меняется lock-файл, и ночной прогон на основной ветке
Образ Пакеты и секреты в контейнере Trivy Сборка образа, не вместо SCA приложения

Инфраструктурный скан хостов — другой цикл: управление уязвимостями. Не складывайте CVE nginx на сервере и CVE в requirements.txt в одну очередь без пометки источника.

Порог, который реально краснеет

На старте для небольшой команды достаточно такого правила (запишите его в README репозитория, не в голове ИБ):

Сигнал Merge Что делать
SAST: высокая уверенность и высокая серьёзность, находка в новом коде ветки Блок Исправить в этом MR или вырезать кусок
SCA: критичность высокая или критическая и есть исправление в новой версии Блок, если зависимость добавили или обновили в этом MR Поднять версию или не добавлять пакет
Та же SCA-находка уже была на основной ветке Не блок этого MR Отдельная задача со сроком, как для хостовых CVE
Секрет в диффе Блок всегда Отзыв и хранение в CI: секреты для CI
Низкая серьёзность, стиль, «полезно подумать» Не блок Не кормите очередь

Не блокируйте все исторические находки в первый день: конвейер станет красным навсегда, и его обойдут. Сначала «новое в ветке», потом отдельным спринтом — долг на основной. Quality gate в SonarQube настраивайте под это правило, а не под «ноль issues».

Владелец находки и исключение

Владелец — автор merge request, пока находка в его диффе. Находка на основной ветке — владелец компонента из CODEOWNERS или ведущий команды. ИБ не закрывает SQL-инъекцию за разработчика и не копит сотни тикетов «на потом».

Исключение — одна строка в таблице репозитория (файл вроде security-exceptions.md): идентификатор правила или CVE, почему не чиним, дата пересмотра, кто разрешил (ИБ плюс владелец продукта). Без даты это не исключение, а вечный mute. nosec и аналог в коде без строки в таблице — обход процесса; на ревью такое отклоняйте.

Риск: исключение «чтобы успеть релиз» без даты. Через месяц никто не вспомнит. Срок по умолчанию — 30 дней, иначе находка снова блокер. Что в итоге имеет право выйти в продуктив, решает приёмка: приёмка релиза службой ИБ.

Диагностика

Симптом Причина и что делать
Job с allow_failure: true вечно жёлтый Это не процесс, это декорация. Снимите allow_failure для порога из таблицы
Сканер есть, тикетов нет Нет владельца. Правило: красный MR без исправления не мержат, даже если «очень надо»
Сто тикетов с основной ветки в первый день Включили блок на историю. Сузьте порог до нового кода, долг заведите пачкой
Разные пороги в трёх репозиториях Скопируйте одну таблицу в шаблон группы GitLab, иначе команды разъедутся

Где это в модели зрелости

Материал относится к направлению «Управление уязвимостями» (хаб: уязвимости, карта: карта зрелости). Для SSDLC это гигиена: находка имеет владельца и срок, конвейер умеет сказать «нет». Это не замена сканера хостов и не обучение разработчиков: программа по коду закрывает навык, процесс — дисциплину merge.

Как проверить

  1. В README или шаблоне группы есть таблица порогов, совпадающая с quality gate.
  2. Контрольный MR с заведомо опасным новым кодом (на своём репозитории) не сливается, пока находка открыта.
  3. У SCA-находки на основной ветке есть задача, владелец и дата, а не только строка в UI сканера.
  4. Файл исключений без просроченных дат; просроченные снова блокеры.
  5. Секрет в диффе блокирует независимо от серьёзности SAST.

Источники

Комментарии закрыты.