Как вы проводите security-тестирование инфраструктуры и что лежит в основе этого процесса?

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

Ответ

В DevOps-контексте security-тестирование инфраструктуры — это непрерывный процесс, интегрированный в CI/CD, а не разовая акция. Мой подход включает несколько уровней:

1. Статический анализ (SAST) и зависимостей:

  • Инфраструктура как код (Terraform, Ansible): Использую tfsec, checkov или terrascan для поиска небезопасных конфигураций (открытые S3 buckets, security groups с правилом 0.0.0.0/0).
  • Контейнеры: trivy или grype для сканирования образов Docker на наличие уязвимостей в базовых слоях и зависимостях.
  • Зависимости приложений: OWASP Dependency-Check или snyk в пайплайне сборки.

2. Динамический анализ и сканирование конфигураций (DAST/CIS):

  • Сканирование запущенных кластеров K8s: Инструменты вроде kube-bench проверяют соответствие кластера рекомендациям CIS Benchmark для Kubernetes.
  • Сетевое сканирование: Использую nmap в рамках утвержденных пентестов для проверки открытых портов на неожиданных сервисах.
  • Сканирование веб-приложений: Интегрирую OWASP ZAP в пайплайн для базового автоматизированного тестирования развернутых в staging-окружении приложений.

3. Практические примеры и "алгоритм под капотом": Инструменты работают на основе:

  • Базы уязвимостей (CVE): Сравнивают версии ПО в вашей системе с публичными базами уязвимостей.
  • Политики/бенчмарки: Сравнивают ваши конфигурации с набором правил безопасности (например, "контейнер не должен работать от root", "pod должен иметь securityContext" ).

Пример пайплайна GitLab CI:

security_scan:
  stage: test
  image: alpine:latest
  script:
    - apk add trivy
    - trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - wget -qO- https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml | kubectl apply -f - && kubectl wait --for=condition=complete job/kube-bench

Ключевой принцип — Shift Left: находить и фиксировать уязвимости как можно раньше, на этапе написания кода инфраструктуры и сборки образов, а не в продакшене.