Gymterview
middle

Что такое 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.