DevSecOps для самых маленьких: 6\n. Как запустить Bounty Hunter в свой кластер
Сканирование кода и зависимостей: как запустить Bounty Hunter в свой кластер.
В прошлый раз мы разобрались с микросегментацией — построили стены внутри кластера. Теперь следующий слой. И тут мне в голову пришёл Bounty Hunter из Dota.
Этот герой не убивает в лоб. Он выслеживает. Идёт по следам, находит то, что спрятано, и приносит команде золото за голову. Сканирование кода работает так же: оно не чинит уязвимости, оно их находит. До того, как сломают трон они попадут в прод.
Что такое сканирование кода и зависимостей
Если совсем коротко — это автоматическая проверка кода, библиотек и конфигов на уязвимости, ошибки и секреты. До того, как они доедут до продакшена.
Есть несколько видов проверок, и их важно не путать.
SAST — статический анализ кода. Проверяет исходный код на типовые ошибки: SQL-инъекции, XSS, небезопасную работу с файлами, хардкод паролей. Работает без запуска приложения. Пример: Semgrep, Bandit.
SCA — анализ зависимостей. Проверяет библиотеки и пакеты, которые ты используешь. Ищет известные CVE. Работает по манифестам: package.json, requirements.txt, go.mod. Пример: Trivy, OWASP Dependency-Check.
Поиск секретов — отдельная категория. Проверяет код и историю Git на пароли, токены, ключи. Пример: Gitleaks, TruffleHog.
DAST — динамический анализ. Проверяет уже запущенное приложение. Стучится в него как атакующий. Пример: OWASP ZAP.
IaC и образы — проверка Terraform, Kubernetes-манифестов, Dockerfile, контейнерных образов. Пример: Trivy, Checkov.
Почему дефолт — это дыра
В обычном пайплайне сканирования нет. Разработчик написал код, закоммитил, собрал, задеплоил. Всё работает — и ладно.
А потом выясняется, что в одной из зависимостей критическая уязвимость, которую опубликовали месяц назад. Или что в коде есть SQL-инъекция, которую никто не заметил. Или что пароль от базы лежит в Git с прошлого года.
Проблема в том, что уязвимости не видны глазами. Их нужно искать автоматически. Человек не может вручную проверить 500 зависимостей и 50 тысяч строк кода. А сканер может.
Что конкретно сканировать
Первое — исходный код. SAST на каждом коммите. Пусть пайплайн падает, если находит критичное.
Второе — зависимости. SCA на каждом коммите. Проверять все пакеты, которые тащит проект.
Третье — секреты. Gitleaks в pre-commit и в CI. Чтобы пароли не уходили в Git.
Четвёртое — IaC. Terraform, Kubernetes-манифесты, Helm-чарты. Trivy и Checkov это умеют.
Пятое — контейнерные образы. Trivy, Grype. Проверять базовые образы и слои.
Шестое — запущенное приложение. DAST, но это уже на стенде, не в пайплайне.
Инструменты
Open source: Semgrep — SAST с простыми правилами. Trivy — SCA, контейнеры, IaC, secrets, один бинарь на всё. OWASP Dependency-Check — классика SCA. OWASP ZAP — DAST. Bandit — SAST для Python. Gitleaks и TruffleHog — поиск секретов.
Российские решения: AppSec.Code от AppSec Solutions — среда разработки со встроенными функциями ИБ. PT Application Inspector 4.0 — SAST, DAST, SCA. Solar appScreener — SAST, DAST, SCA, SCS в одном. AppSec.Wave — статический анализ. PVS-Studio и SASTAV — SAST-системы. СКАТмен от Инферит — бесплатный поиск уязвимостей по БДУ ФСТЭК.
С чего начать
Первое — добавить Gitleaks в pre-commit. Это самое простое и самое важное. Секреты не должны уходить в Git.
Второе — добавить Trivy в CI. Пусть проверяет зависимости и образы. Начни с режима «только отчёт», потом сделай так, чтобы критичное ломало сборку.
Третье — добавить Semgrep. Хотя бы с community-правилами. Посмотреть, что найдёт.
Четвёртое — добавить SAST для твоего языка. Bandit для Python, gosec для Go, Brakeman для Ruby.
Пятое — не пытайся чинить всё сразу. Сканер найдёт много. Начни с критичного. Остальное — в бэклог.
Главное
Сканирование — это не про то, чтобы запретить всё. Это про то, чтобы находить проблемы раньше, чем их найдут другие. Bounty Hunter не убивает врага — он его находит и показывает команде. Сканер делает то же самое: находит уязвимость и говорит, где она.
Без сканирования остальные практики DevSecOps работают вполсилы. Можно харденить контейнеры, но если в зависимости критическая CVE, толку мало. Можно сегментировать сеть, но если в коде SQL-инъекция, атакующий всё равно пройдёт.
Начни с Gitleaks. Потом Trivy. Потом Semgrep. Через месяц твой пайплайн будет проверять код и зависимости, и ты будешь спать спокойнее.
В следующий раз разберём supply chain. Приходите в Telegram-канал «DevSecOps здорового человека» — там мы это всё обсуждаем.
Безопасность может быть без пафоса и с юмором.
