Что такое Docker Bench for Security?
Docker Bench for Security — автоматизированный инструмент аудита безопасности, проверяющий конфигурацию Docker-хоста и контейнеров на соответствие рекомендациям CIS Docker Benchmark (Center for Internet Security). CIS Benchmark — это общепризнанный стандарт, используемый в том числе при аудитах PCI DSS.
Запуск Docker Bench for Security:
Пример
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /etc:/etc:ro \
docker/docker-bench-security
Инструмент запускается как контейнер с расширенными правами, потому что ему необходим доступ к конфигурации хоста, Docker daemon и работающим контейнерам для их анализа. Все тома монтируются в режиме read-only (:ro).
Категории проверок (секции CIS Docker Benchmark):
| Секция | Описание | Примеры проверок |
|---|---|---|
| 1 — Host Configuration | Конфигурация хоста | Аудит-логирование, отдельный раздел для /var/lib/docker, обновление ядра |
| 2 — Docker daemon configuration | Настройки Docker daemon | TLS для удалённого доступа, user namespace remapping, live-restore |
| 3 — Docker daemon configuration files | Права доступа к файлам | Права на docker.sock, daemon.json, TLS-сертификаты |
| 4 — Container Images and Build Files | Образы и Dockerfile | Наличие USER в Dockerfile, HEALTHCHECK, отсутствие секретов в слоях |
| 5 — Container Runtime | Параметры запуска контейнеров | Запрет privileged, запрет host network, read-only FS, ограничение capabilities |
| 6 — Docker Security Operations | Операционная безопасность | Регулярное обновление Docker Engine, мониторинг, бэкапы |
| 7 — Docker Swarm | Безопасность Swarm | Шифрование overlay-сети, ротация сертификатов, autolock |
Пример вывода Docker Bench:
Пример
[INFO] 1 - Host Configuration
[PASS] 1.1 - Ensure a separate partition for containers has been created
[WARN] 1.2 - Ensure the container host has been hardened
[PASS] 1.3 - Ensure Docker is up to date
[INFO] 4 - Container Images and Build File
[WARN] 4.1 - Ensure a user for the container has been created
[PASS] 4.2 - Ensure that containers use only trusted base images
[WARN] 4.6 - Ensure HEALTHCHECK instructions have been added to the container image
[WARN] 4.9 - Ensure that COPY is used instead of ADD in Dockerfiles
[INFO] 5 - Container Runtime
[WARN] 5.1 - Ensure AppArmor Profile is enabled
[PASS] 5.2 - Ensure SELinux security options are set
[WARN] 5.4 - Ensure privileged containers are not used
[WARN] 5.12 - Ensure the container's root filesystem is mounted as read only
[WARN] 5.25 - Ensure the container is restricted from acquiring additional privileges
Результаты бывают трёх типов: PASS (проверка пройдена), WARN (предупреждение — требует внимания), FAIL (грубое нарушение). Для банковских систем цель — устранить все FAIL и минимизировать WARN. Каждый WARN должен быть либо устранён, либо задокументирован как принятый риск (с обоснованием).
Автоматизация Docker Bench в CI/CD (Jenkinsfile):
Пример
stage('Docker Bench Audit') {
steps {
sh '''
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /etc:/etc:ro \
docker/docker-bench-security \
-l /dev/stdout 2>&1 | tee bench-results.txt
# Проверить наличие FAIL — если есть, прервать пайплайн
if grep -q "\\[FAIL\\]" bench-results.txt; then
echo "Docker Bench found FAIL results!"
exit 1
fi
'''
}
}
kube-bench — аналог для Kubernetes:
kube-bench выполняет проверку кластера Kubernetes на соответствие CIS Kubernetes Benchmark. Проверяет конфигурацию API-сервера, etcd, kubelet, controller-manager и scheduler.
Пример
# Запуск kube-bench как Job в кластере
kubectl apply -f https://raw.githubusercontent.com/aquasecurity/kube-bench/main/job.yaml
kubectl logs job/kube-bench
kube-bench проверяет, в частности: включено ли шифрование etcd, правильно ли настроен RBAC, используется ли TLS для всех компонентов control plane, включён ли audit logging.