Gymterview
middle

Что такое OWASP Docker Top 10?

OWASP Docker Top 10 — список десяти наиболее критичных рисков безопасности при использовании Docker, подготовленный OWASP (Open Web Application Security Project). Аналогично знаменитому OWASP Top 10 для веб-приложений, этот документ помогает расставить приоритеты при обеспечении безопасности контейнеров.

D01 — Secure User Mapping (Безопасное сопоставление пользователей):

Контейнеры не должны запускаться от root. Необходимо использовать USER в Dockerfile для указания непривилегированного пользователя и runAsNonRoot: true в Kubernetes для принудительной проверки.

Пример
RUN addgroup -S app && adduser -S app -G app
USER app

Если процесс в контейнере работает от root и атакующий эксплуатирует уязвимость контейнерной изоляции (container escape), он получает root-доступ к хосту.

D02 — Patch Management Strategy (Стратегия управления патчами):

Регулярное обновление базовых образов и зависимостей приложения. Включает: автоматическое сканирование образов (Trivy), автоматические PR с обновлениями (Renovate/Dependabot), пересборку образов по расписанию и SLA по времени устранения уязвимостей в зависимости от CVSS-балла.

D03 — Network Segmentation and Firewalling (Сегментация сети):

Применение Network Policies в Kubernetes для ограничения сетевого взаимодействия между подами. Принцип deny-by-default: начинать с полного запрета, затем явно разрешать только необходимые коммуникации.

Пример
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes: [Ingress, Egress]

Без Network Policies любой под в кластере может обратиться к любому другому поду — компрометация одного сервиса даёт доступ ко всем остальным.

D04 — Secure Defaults and Hardening (Безопасные настройки по умолчанию):

Hardening Docker daemon: отключение ICC (icc: false), включение user namespace remapping, применение seccomp и AppArmor профилей. Регулярная проверка с помощью CIS Benchmark (Docker Bench for Security).

D05 — Maintain Security Contexts (Поддержание контекста безопасности):

Настройка Security Context для каждого пода в Kubernetes: capabilities.drop: ALL (удалить все привилегии), readOnlyRootFilesystem: true (запретить запись в файловую систему), allowPrivilegeEscalation: false (запретить повышение привилегий), seccompProfile: RuntimeDefault (ограничить системные вызовы).

D06 — Protect Secrets (Защита секретов):

Секреты никогда не должны находиться в образах (Dockerfile), переменных окружения (env) или репозитории Git. Правильные решения: HashiCorp Vault (enterprise-уровень), Sealed Secrets (для хранения зашифрованных секретов в Git), External Secrets Operator (для интеграции с внешними хранилищами).

D07 — Resource Protection (Защита ресурсов):

Обязательное ограничение CPU, памяти, PID и disk I/O для каждого контейнера. На уровне namespace: LimitRange (значения по умолчанию) и ResourceQuota (суммарные ограничения).

Пример
resources:
  limits:
    memory: "512Mi"
    cpu: "1"
  requests:
    memory: "256Mi"
    cpu: "250m"

Без ограничений один контейнер с утечкой памяти или бесконечным циклом может вывести из строя весь хост.

D08 — Container Image Integrity and Origin (Целостность и происхождение образов):

Подпись образов с помощью Cosign или Docker Content Trust, верификация подписей при деплое через admission controller (Kyverno, OPA Gatekeeper). Использование только проверенных реестров (private registry), запрет на скачивание образов из публичных источников без проверки.

D09 — Follow Immutable Paradigm (Неизменяемая парадигма):

Контейнеры должны быть неизменяемыми (immutable) после запуска. Read-only файловая система, запрет модификации файлов в runtime. Обновление — это всегда замена контейнера новой версией, а не изменение существующего (не docker exec + apt install).

D10 — Logging (Логирование):

Централизованный сбор и анализ логов с помощью ELK/EFK stack (Elasticsearch + Logstash/Fluentd + Kibana), аудит действий Docker daemon и Kubernetes API, мониторинг runtime-событий с помощью Falco.

Чек-лист OWASP Docker Top 10 для банковского проекта:

Пример
[  ] D01: Все контейнеры запускаются от non-root пользователя
[  ] D02: Настроено автоматическое сканирование и обновление образов/зависимостей
[  ] D03: Network Policies применены ко всем namespace-ам, deny-by-default
[  ] D04: Docker daemon hardened, CIS Benchmark пройден без FAIL
[  ] D05: Security Context настроен для всех подов (drop ALL, read-only FS)
[  ] D06: Секреты хранятся в Vault/Sealed Secrets, не в Git и не в env
[  ] D07: Resource limits установлены для всех контейнеров
[  ] D08: Образы подписаны Cosign и верифицируются при деплое
[  ] D09: Read-only FS, контейнеры immutable, без ручных изменений
[  ] D10: Централизованное логирование, Falco для runtime security