Как организован процесс проверки безопасности приложений перед их внедрением?

«Как организован процесс проверки безопасности приложений перед их внедрением?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Безопасность (Security) интегрирована в каждый этап CI/CD-пайплайна (DevSecOps). Мы не проводим разовую проверку, а постоянно сканируем на всех уровнях.

1. Код (SAST - Static Application Security Testing): На этапе сборки MR запускаются статические анализаторы. Для Go-проектов использую gosec, для Python — bandit. Эти инструменты ищут уязвимости в самом коде, например, возможность SQL-инъекции.

# Этап в GitLab CI
sast:
  stage: test
  image: securego/gosec:latest
  script:
    - gosec ./...
  artifacts:
    reports:
      sast: gl-sast-report.json

Критические и высокие уязвимости блокируют мерж кода в основную ветку.

2. Зависимости (SCA - Software Composition Analysis): Сканирую зависимости приложения на известные уязвимости (CVE). Использую Trivy или GitLab Dependency Scanning.

trivy fs --severity HIGH,CRITICAL .

Этот этап выявляет проблемы в используемых библиотеках (например, в log4j).

3. Контейнерные образы: Каждый собранный Docker-образ сканирую тем же Trivy на наличие уязвимостей в базовом образе (OS packages) и в установленных пакетах.

container_scanning:
  stage: test
  image: aquasec/trivy:latest
  script:
    - trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

Образ с критическими уязвимостями не попадает в registry.

4. Инфраструктура как код (IaC Scanning): Проверяю конфигурации Terraform, Kubernetes manifests, Dockerfile на соответствие best practices и стандартам безопасности (CIS Benchmarks). Использую Checkov.

checkov -d . --framework terraform kubernetes

Он, например, обнаружит, что в SecurityGroup открыт порт 22 для всех (0.0.0.0/0) и предложит ограничить доступ.

5. Динамическое тестирование (DAST - Dynamic Application Security Testing): После деплоя приложения в staging-окружение запускается автоматическое сканирование работающего приложения с помощью OWASP ZAP. Оно имитирует атаки (инъекции, XSS) и выявляет уязвимости, которые не видны в коде.

6. Секреты (Secrets Management): Использую git-secrets или TruffleHog на этапе pre-commit, чтобы предотвратить попадание паролей, ключей API в Git. В рантайме секреты подаются через HashiCorp Vault или Kubernetes Secrets (хотя последние — base64, не шифрование).

Все отчеты агрегируются в единой панели (например, DefectDojo), что дает полную картину безопасности приложения перед релизом. Без этого «зеленого света» автоматический деплой в production не запустится.