
Docker Bench for Security es un script que verifica docenas de mejores prácticas comunes en torno al despliegue de contenedores Docker en producción.

Docker Bench for Security es un script que verifica docenas de buenas prácticas comunes en torno al despliegue de contenedores Docker en producción. Todas las pruebas están automatizadas y se basan en el CIS Docker Benchmark v1.6.0.
Lo ponemos a disposición como una utilidad de código abierto para que la comunidad Docker pueda tener una forma sencilla de autoevaluar sus hosts y contenedores Docker según este benchmark.
| Versión | CIS |
|---|
| 1.6.0 | 1.6.0 |
| 1.5.0 | 1.5.0 |
| 1.3.6 | 1.4.0 |
| 1.3.5 | 1.2.0 |
| 1.3.3 | 1.1.0 |
| 1.3.0 | 1.13.0 |
Puedes ejecutar este script simplemente desde tu host base con:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh
Nota:
jqes una dependencia opcional pero recomendada.
Tienes dos opciones si deseas construir y ejecutar este contenedor tú mismo:
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker build --no-cache -t docker-bench-security .
Seguido de un comando docker run adecuado como se indica a continuación.
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
docker-compose run --rm docker-bench-security
Ten en cuenta que la imagen docker/docker-bench-security está desactualizada y se requiere una compilación manual. Consulta #405 para más información.
Ten en cuenta que este contenedor se ejecuta con muchos privilegios: comparte el sistema de archivos, los espacios de nombres de PID y red del host, debido a que partes del benchmark se aplican al host en ejecución.
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
No olvides ajustar los volúmenes compartidos según tu sistema operativo. Algunos ejemplos son:
docker.service y docker.secret se encuentran en
la carpeta /lib/systemd/system por defecto.docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc:ro \
-v /lib/systemd/system:/lib/systemd/system:ro \
-v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
/etc/hostname falta en macOS, por lo que deberá crearse primero. Además, Docker Desktop en macOS no tiene /usr/lib/systemd ni los binarios de Docker mencionados anteriormente.sudo touch /etc/hostname
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
-v /etc:/etc \
-v /var/lib:/var/lib:ro \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
--label docker_bench_security \
docker-bench-security
Docker bench requiere Docker 1.13.0 o posterior para ejecutarse.
Ten en cuenta que cuando las distribuciones no contienen auditctl, las pruebas de auditoría verificarán /etc/audit/audit.rules para comprobar si hay una regla presente en su lugar.
-b optional No imprimir colores -h optional Mostrar este mensaje de ayuda -l FILE optional Registrar salida en FILE, dentro del contenedor si se ejecuta con docker -u USERS optional Lista separada por comas de usuarios docker de confianza -c CHECK optional Lista separada por comas de ID(s) de verificación específica(s) -e CHECK optional Lista separada por comas de ID(s) de verificación específica(s) a excluir -i INCLUDE optional Lista separada por comas de patrones dentro de un contenedor o nombre de imagen a verificar -x EXCLUDE optional Lista separada por comas de patrones dentro de un contenedor o nombre de imagen a excluir de la verificación -t LABEL optional Lista separada por comas de etiquetas dentro de un contenedor o imagen a verificar -n LIMIT optional En salida JSON, al informar listas de elementos (contenedores, imágenes, etc.), limitar el número de elementos informados a LIMIT. Por defecto 0 (sin límite). -p PRINT optional Deshabilitar la impresión de medidas de remediación. Por defecto: imprimir medidas de remediación.
Por defecto, el script Docker Bench for Security ejecutará todas las pruebas CIS disponibles y generará registros en la carpeta de registros del directorio actual, con los nombres docker-bench-security.log.json y docker-bench-security.log.
Si se usa el contenedor Docker, los archivos de registro se crearán dentro del contenedor en la ubicación /usr/local/bin/log/. Si deseas acceder a ellos desde el host después de que el contenedor se haya ejecutado, deberás montar un volumen para almacenarlos.
Las verificaciones basadas en CIS se denominan check_<section>_<number>, p. ej. check_2_6 y las verificaciones aportadas por la comunidad se denominan check_c_<number>.
sh docker-bench-security.sh -c check_2_2 solo ejecutará la verificación 2.2 Asegurar que el nivel de registro esté configurado a 'info'.
sh docker-bench-security.sh -e check_2_2 ejecutará todas las verificaciones disponibles excepto 2.2 Asegurar que el nivel de registro esté configurado a 'info'.
sh docker-bench-security.sh -e docker_enterprise_configuration ejecutará todas las verificaciones disponibles excepto el grupo docker_enterprise_configuration.
sh docker-bench-security.sh -e docker_enterprise_configuration,check_2_2 ejecutará todas las verificaciones disponibles excepto el grupo docker_enterprise_configuration y 2.2 Asegurar que el nivel de registro esté configurado a 'info'.
sh docker-bench-security.sh -c container_images,container_runtime ejecutará solo las verificaciones container_images y container_runtime.
sh docker-bench-security.sh -c container_images -e check_4_5 ejecutará solo las verificaciones container_images excepto 4.5 Asegurar que Content trust para Docker esté habilitado.
Ten en cuenta que al enviar verificaciones, proporciona información de por qué es una prueba razonable de agregar e incluye algún tipo de documentación oficial que verifique esa información.