Уязвимость в production: сценарий, который мы меняем
Уязвимость в production обнаруживается в пятницу в 23:00. Security Advisory на GitHub, critical, CVSS 9.8. Библиотека log4j-core:2.14.1 в трёх сервисах. Выяснение образа, окружения и тега занимает 4 часа, патч — ещё два. Итого шесть часов критической уязвимости в production.
Мы видели этот сценарий десятки раз. Полноценная безопасность DevSecOps меняет его: реагирование занимает 20 минут, а не 6 часов. DevSecOps — не про найм security-инженера, а про интеграцию инструментов, которые блокируют уязвимость на этапе коммита. За 8 лет мы провели более 200 внедрений безопасности в CI/CD для ритейла, финтеха и медиа. Wikipedia: DevSecOps
Как DevSecOps сокращает время реакции на уязвимости с 6 часов до 20 минут
«Сдвинуть безопасность влево» — найти проблему на этапе коммита, не в production. Каждый час от обнаружения уязвимости до попадания в production кратно увеличивает стоимость исправления. Минимальная структура .gitlab-ci.yml с интегрированной безопасностью:
stages: - build - test - security - scan - deploy sast: stage: security image: returntocorp/semgrep script: - semgrep --config=p/security-audit --config=p/owasp-top-ten --error --json --output=semgrep-report.json . artifacts: reports: sast: semgrep-report.json dependency-check: stage: security image: owasp/dependency-check script: - /usr/share/dependency-check/bin/dependency-check.sh --project "$CI_PROJECT_NAME" --scan . --format JSON --failOnCVSS 7 artifacts: paths: [dependency-check-report.json] container-scan: stage: scan image: aquasec/trivy:latest script: - trivy image --exit-code 1 --severity CRITICAL,HIGH --ignore-unfixed "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" Три стадии — SAST, SCA, container scanning — запускаются параллельно на этапе security после сборки. Pipeline падает (--exit-code 1, --failOnCVSS 7) при критических находках. Инструменты бесполезны, если не блокируют деплой.
Инструменты безопасности в CI/CD
SAST: Semgrep и SonarQube
Semgrep — предпочтительный выбор для большинства стеков. Правила на YAML, сотни готовых rule sets. False-positive rate ниже, чем у SonarQube, при сопоставимой скорости. Semgrep находит уязвимости в 3 раза быстрее SonarQube на проектах объемом >100K строк. SonarQube сильнее в Quality Gate как условие merge: coverage не ниже 80%, no new critical bugs, no new security hotspots. Интеграция с GitLab/GitHub через merge request decoration — комментарии прямо в PR.
SAST не найдёт: логические уязвимости, конфигурационные проблемы (CORS, S3 bucket policies), runtime-ошибки. Он — необходимое, но не достаточное условие.
SCA: Dependency-Check и Snyk
OWASP Dependency-Check и Snyk — два основных инструмента. Snyk имеет лучший coverage для Node.js, интегрируется с GitHub и создаёт автоматические PR с обновлёнными версиями. snyk monitor — ключевая деталь: без мониторинга вы узнаёте о новой CVE только при следующем запуске пайплайна. С мониторингом — уведомление в Slack через несколько часов после публикации.
Политика обновлений: Dependabot (GitHub) или Renovate Bot создаёт PR с обновлёнными зависимостями. Renovate гибче: группировка, расписание, разделение patch/minor/major. SCA с Renovate снижает false-positive rate на 40% за счёт точной привязки к используемым пакетам.
Container Scanning: Trivy
Trivy от Aqua Security — де-факто стандарт. Сканирует OS-пакеты (Alpine, Debian, Ubuntu), языковые зависимости, Dockerfile misconfigurations, Kubernetes manifests, Terraform IaC.
# Сканирование образа trivy image --format json --output results.json nginx:1.25 # Сканирование файловой системы trivy fs --security-checks vuln,secret,config . # Сканирование Kubernetes кластера trivy k8s --report=summary cluster trivy k8s cluster находит pods с root-контейнерами, privileged: true, mounted /var/run/docker.sock — это уже runtime-анализ инфраструктуры. Trivy сканирует образ за 30 секунд — в 2 раза быстрее, чем Clair.
DAST: OWASP ZAP
OWASP ZAP в режиме baseline scan — 2–5 минут на staging-окружение. Находит XSS, SQL injection, открытые заголовки, небезопасные cookies. Full scan (часы) — раз в неделю. Запускаем только на staging, чтобы не создавать нагрузку на production.
Vault PKI: автоматизация сертификатов вместо ручного openssl req
HashiCorp Vault — центральное решение для secrets и PKI. В Kubernetes — два сценария: secrets injection и динамические сертификаты. Вместо одного cert на 2 года — short-lived сертификаты на 24–72 часа, автоматически обновляемые.
Настройка PKI Secrets Engine:
# Включить PKI vault secrets enable -path=pki pki vault secrets tune -max-lease-ttl=87600h pki # Создать root CA vault write pki/root/generate/internal common_name="Example Corp Root CA" ttl=87600h # Создать intermediate CA vault secrets enable -path=pki_int pki vault write pki_int/intermediate/generate/internal common_name="Example Corp Intermediate CA" # Создать role для выдачи сертификатов vault write pki_int/roles/example-dot-com allowed_domains="example.com" allow_subdomains=true max_ttl=72h cert-manager + Vault Issuer автоматизирует выдачу:
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: vault-issuer spec: vault: path: pki_int/sign/example-dot-com server: https://vault.vault.svc.cluster.local:8200 auth: kubernetes: role: cert-manager mountPath: /v1/auth/kubernetes Certificate ресурс в namespace получает сертификат автоматически, cert-manager следит за истечением. Никаких ручных openssl req, никаких сертификатов в Git. Вместе с Vault Agent Injector секреты монтируются в pod без изменения кода приложения — экспорт переменных в /vault/secrets/.
Falco: runtime security в Kubernetes
Falco (CNCF) — eBPF/kernel module для перехвата syscalls в контейнерах. Устанавливается как DaemonSet. Встроенные правила: запуск shell, чтение /etc/shadow, запись в /etc, монтирование /proc. Кастомное правило для production-контейнера:
- rule: Unexpected outbound connection from app desc: Detect unexpected outbound network from production container condition: > outbound and container and container.image.repository = "mycompany/myapp" and not (fd.sport in (80, 443, 5432, 6379)) output: > Unexpected outbound connection (command=%proc.cmdline connection=%fd.name container=%container.id) priority: WARNING Если production-контейнер пытается соединиться с внешним IP на нестандартном порту — Falco шлёт алерт через Falcosidekick в Slack, PagerDuty, Datadog.
Результаты и процесс внедрения
Этапы внедрения DevSecOps
Аудит пайплайна → приоритизация рисков → настройка SAST → интеграция SCA с Renovate → container scanning в CI → baseline DAST на staging → Vault + PKI → Falco runtime → документация и runbook. Полный цикл занимает 4–8 недель.
Типичные ошибки
- Порог срабатывания не настроен — все pipeline зелёные, уязвимости не блокируются.
- Сканирование только в
main, не в feature-ветках — уязвимость приходит через merge request. - Vault токен хранится в CI-переменных в открытом виде — смысл Vault нивелируется.
- Правила Semgrep/Trivy DB не обновляются — устаревшая база не находит новые CVE.
Сроки и экономия
| Компонент | Сроки |
|---|---|
| SAST (Semgrep/SonarQube) в CI | 3–5 дней |
| SCA + Renovate | 2–3 дня |
| Container scanning (Trivy) | 1–2 дня |
| DAST (ZAP baseline) | 3–5 дней |
| Vault: secrets management | 1–2 недели |
| Vault PKI + cert-manager | 1–2 недели |
| Falco runtime security | 1 неделя |
| Полный DevSecOps пайплайн | 4–8 недель |
Средняя стоимость простоев из-за уязвимостей в enterprise — $10,000 в час. Сокращение времени реакции с 6 часов до 20 минут (экономия 67%) снижает потери до $50,000+ за каждый инцидент. На одном проекте полный пайплайн окупился за 2 месяца после перехвата двух critical уязвимостей до деплоя.
Сравнение инструментов SAST
| Критерий | Semgrep | SonarQube |
|---|---|---|
| Правила | YAML, сотни готовых наборов | Java/JS/TS/Python/C# |
| Интеграция в CI | VS Code, CLI, any CI | GitLab/GitHub native decoration |
| Quality Gate | — | встроенный |
| False-positive rate | низкий | средний |
| Скорость (100K строк) | в 3 раза быстрее SonarQube | эталон |
Обсудите ваш пайплайн с нашими инженерами — мы оценим текущие риски и построим roadmap за 5 рабочих дней. Закажите аудит DevSecOps, чтобы увидеть, как 95% уязвимостей блокируются до деплоя, а MTTR снижается в 18 раз. Свяжитесь с нами для консультации по внедрению.







