Nota perev. : El tema de seguridad de Docker es quizás uno de los eternos en el mundo de TI de hoy. Por lo tanto, sin más explicaciones, presentamos la traducción de la próxima selección de recomendaciones relevantes. Si ya ha estado interesado en este tema, muchos de ellos le serán familiares. Y complementamos la selección en sí con una lista de utilidades útiles y varios recursos para seguir estudiando el tema.
Aquí hay una guía de seguridad de Docker. La retroalimentación es bienvenida, ya que es más bien una colección de extractos de varios recursos, y no todos han sido revisados a fondo. Las recomendaciones se dividen en tres categorías:
- Medidas necesarias dentro del sistema operativo host cuando se trabaja con Docker;
- Instrucciones relacionadas con el archivo de configuración del ensamblaje y la creación de contenedores;
- Herramientas de seguridad que pueden integrarse con características específicas de Docker Enterprise.
Una variedad de recursos se ha convertido en la base del liderazgo, muchos de los cuales se enumeran a continuación. No se puede llamar exhaustivo, pero cubre todos los conceptos básicos. Se puede encontrar información adicional en la descripción de las pruebas CIS (el enlace se encuentra al final de este manual), así como en la documentación de Docker.
Punto de referencia de seguridad de Docker
Docker Bench for Security verifica automáticamente que su Docker cumpla con las mejores prácticas más comunes. El script es una buena prueba de seguridad heurística, pero no debe considerarse como una herramienta de análisis integral.
Sistema operativo host
Obviamente, el contenedor Docker no puede protegerse si el sistema host en sí no está protegido. Por lo tanto, debe seguir las mejores prácticas en el campo de la seguridad del sistema operativo. Además, sería prudente realizar un análisis de vulnerabilidad además de las siguientes recomendaciones.
Reglas de auditoria
Cree y use reglas de auditoría para archivos asociados con Docker usando
auditctl
. Por ejemplo, puede agregar
-w /usr/bin/dockerd -k docker
a
/etc/audit.rules
y reiniciar el servicio de auditoría.
Modo FIPS
Habilitar el modo FIPS obliga a las herramientas criptográficas a cambiar a los algoritmos introducidos en FIPS
( Estándares federales estadounidenses de procesamiento de información - Transl. Aprox.) , Cumpliendo así con los estándares y requisitos federales e industriales. Si el sistema operativo host admite el modo FIPS, puede habilitarlo ejecutando los siguientes comandos:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
También debe habilitar FIPS en Docker Engine:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]\n Environment=\"DOCKER_FIPS=1\"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart docker
Consulte la documentación de
Docker y
Red Hat para obtener más información.
Docker secretos
Los datos confidenciales deben mantenerse como secretos. Puede iniciar el servicio correspondiente utilizando el comando docker service create:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginx
Consulte la
documentación para más detalles.
Archivo de configuración de Docker
Se pueden agregar las
/etc/docker/daemon.json
configuraciones al
/etc/docker/daemon.json
configuración
/etc/docker/daemon.json
:
Seguridad de transporte
Solo los usuarios con acceso a las credenciales del cliente TLS deben poder conectarse al demonio Docker (si es necesario el acceso remoto).
Complementos de autorización
Decida qué usuarios pueden ejecutar qué comandos y cree el complemento de autorización apropiado para Docker. Luego ejecute el demonio Docker y agregue el complemento:
dockerd --authorization-plugin=PLUGIN_ID
Para obtener más información sobre la creación de complementos de autorización, consulte la
documentación .
Opciones de demonio
El demonio Docker funciona con un conjunto de parámetros predeterminados.
--live-restore
: esta opción ayuda a reducir el tiempo de inactividad del contenedor durante el apagado o reinicio del sistema. Se hace más fácil parchearlos o actualizarlos con un tiempo de inactividad mínimo;--userland-proxy=false
: cuando los NAT de horquilla están disponibles o se usan, el proxy en el espacio del usuario se convierte en un servicio redundante, que solo aumenta el número de posibles vectores de ataque;--no-new-privileges
- evita que los contenedores obtengan privilegios adicionales usando suid o sguid;--seccomp-profile /path/to/profile
: si tiene su propio perfil seccomp, puede usarlo con este indicador. Obtenga más información sobre Seccomp y Docker aquí .
Configurar contenedores y archivos de ensamblaje
Creación de usuario
Asegúrese de que se haya creado un usuario para el contenedor y ejecútelo bajo ese usuario (NO ejecute el contenedor bajo root).
Acceso remoto
Negar el acceso remoto al demonio. Si aún es necesario, protéjalo con certificados.
Aislar espacio de nombre de usuario
Es especialmente importante asegurarse de que el espacio del nombre de usuario en Docker esté aislado, porque de forma predeterminada se comparte con el espacio del nombre del host. En algunos casos, esto se puede usar para elevar los privilegios o incluso para salir del contenedor. Puede aislar un espacio de nombres de usuario editando el archivo de configuración (como se describe anteriormente en la sección Archivo de configuración de Docker). Una mención adicional de este problema se debe a su importancia.
Healthcheck
Healthcheck (Health Check) es una herramienta poderosa para verificar la integridad del contenedor. Se configura en el Dockerfile utilizando la
HEALTHCHECK
. Healthcheck le permite verificar que el contenedor funciona correctamente. En el ejemplo a continuación, la comprobación de estado finaliza con 0 si el servidor se está ejecutando y 1 si se "bloqueó":
HEALTHCHECK CMD curl --fail http://localhost || exit 1
SELinux
Si SELinux es compatible con el sistema operativo host, cree o importe una política SELinux y ejecute Docker en modo daemon con SELinux habilitado:
docker daemon --selinux-enable
En este caso, los contenedores Docker se pueden iniciar con configuraciones de seguridad, por ejemplo:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash
Interfaces de red
Por defecto, Docker escucha en todas las interfaces de red. Dado que en la mayoría de los casos se espera tráfico solo en uno de ellos, este enfoque aumenta injustificadamente el riesgo de un ataque. Por lo tanto, al iniciar un contenedor, puede vincular sus puertos a interfaces específicas en el host:
docker run --detach --publish 10.2.3.4:49153:80 nginx
Versiones de imagen en caché
Al descargar imágenes, asegúrese de que la memoria caché local coincida con el contenido del repositorio. De lo contrario, puede recibir una versión desactualizada de la imagen o una imagen que contenga vulnerabilidades.
Puente de red
El modelo de red predeterminado,
docker0
, es vulnerable a ataques como falsificación de ARP e inundación de MAC. Para resolver este problema, cree un puente de red de acuerdo con sus especificaciones, como se describe
aquí .
Advertencia del zócalo del acoplador
Nunca arroje un enchufe Docker dentro de un contenedor. De lo contrario, el contenedor podrá ejecutar comandos Docker y, por lo tanto, comunicarse con el sistema operativo host y controlarlo. No hagas esto.
Configurar Docker Enterprise
Docker Trust
Docker Trust le permite generar claves que pueden usarse para verificar la integridad criptográfica de las imágenes. Las claves de Docker Trust se pueden usar para firmar imágenes de Docker con claves privadas, que se verifican mediante claves públicas en Notary Server. Más información
aquí . La habilitación de Docker Trust en Enterprise Engine se describe en detalle en
esta sección de la documentación .
Escaneo de vulnerabilidad
Docker Enterprise tiene un escáner de vulnerabilidades incorporado, que permite descargar la base de datos CVE para detectar vulnerabilidades de escaneo sin conexión en imágenes. El escaneo regular de imágenes ayuda a hacerlas más seguras: el usuario recibe inmediatamente advertencias sobre las vulnerabilidades encontradas. Para obtener más información sobre cómo hacer esto, consulte
aquí .
Nota perev. : También hay escáneres de vulnerabilidad de código abierto en las imágenes de Docker, consulte los ejemplos al final del artículo.Integración LDAP y UCP
Universal Control Plane se puede integrar con LDAP. El resultado será un sistema de autenticación simplificado para evitar duplicaciones innecesarias. Lea más sobre esto en el artículo
Integrar con un directorio LDAP .
Otros materiales
Para obtener más información sobre las mejores prácticas de seguridad de Docker, visite
docs.docker.com . También recomendamos descargar
Center for Internet Security tests para Docker .
Bono del traductor
Como complemento lógico de este artículo, estamos publicando una lista de
10 herramientas de seguridad de código abierto populares en Docker . Fue tomado de
otro artículo (escrito por Bill Doerrfeld de Doerrfeld.io).
NB : Lea más sobre muchos de los proyectos mencionados aquí en el artículo " 33+ Kubernetes Security Tools ".- Docker Bench for Security es un script ya mencionado al principio del artículo que verifica el cumplimiento de las prácticas de seguridad comunes en los contenedores Docker.

- Clair es probablemente la utilidad más popular para el análisis estático de vulnerabilidades en un contenedor. Utiliza numerosas bases de datos de vulnerabilidades CVE (incluidos rastreadores de distribuciones de Linux líderes como Red Hat, Debian, Ubuntu). Ofrece una API para desarrolladores y una oportunidad simple para expandir funciones (mediante la adición de "controladores"). Se utiliza en el registro público popular de imágenes de contenedor (similar al Docker Hub) - Quay.io.
- Cilium es una solución de seguridad de red a nivel de núcleo basada en la tecnología de filtrado de paquetes de red BPF.
- Anchore es una utilidad basada en CVE para analizar el contenido de las imágenes en busca de vulnerabilidades de seguridad. Además, le permite aplicar políticas personalizadas (basadas en diversos datos, incluidas listas blancas / negras, contenido de archivos, etc.) para evaluar la seguridad de los contenedores.
- OpenSCAP Workbench es un ecosistema completo para crear y mantener políticas de seguridad en todas las plataformas. Para verificar contenedores, ofrece la utilidad
oscap-docker
. - Dagda es una utilidad para escanear contenedores Docker en busca de vulnerabilidades, troyanos, virus y malware. Las bases de datos de CVE incluyen comprobaciones de dependencia de OWASP, base de datos de Red Hat Oval, repositorio de exploits de Exploit Database.
- Notary es un marco para firmar imágenes de Docker, creado originalmente por Docker Inc (y luego entregado a CNCF para su desarrollo). Su uso le permite delegar roles y distribuir responsabilidades entre contenedores, así como verificar la integridad criptográfica de las imágenes.
- Grafaes es una API de metadatos diseñada para administrar políticas de seguridad internas. Como ejemplo, mejora el rendimiento de los escáneres de seguridad de contenedores. Shopify usa esta API para administrar metadatos en sus 500,000 imágenes.
- Sysdig Falco : una utilidad para Kubernetes que monitorea el comportamiento del sistema: actividad en contenedores, en hosts, en la red. Le permite configurar comprobaciones continuas en la infraestructura, detectar anomalías y enviar alertas a cualquier llamada al sistema Linux.
- Banyanops Collector es otra herramienta para el análisis de imágenes estáticas de contenedores Docker. Le permite "mirar" los archivos de imagen, recopilar los datos necesarios, aplicar las políticas necesarias, etc.
Puede encontrar
otra buena selección de consejos prácticos para hacer que Docker sea más seguro en
este artículo de Aqua Security. Muchos de sus consejos se superponen con los mencionados anteriormente, pero hay otros. Por ejemplo, los autores proponen monitorear la actividad en contenedores e indican qué buscar cuando se usa Docker Swarm.
Para aquellos que quieran profundizar en este tema con más detalle el año pasado, se
publicó el
libro " Docker Security: Quick Reference " , cuyos fragmentos están disponibles gratuitamente
aquí .
Finalmente, para un conocimiento práctico de algunos aspectos de la seguridad de Docker: los perfiles de Seccomp y el uso de las capacidades del kernel de Linux en contenedores, puede realizar el
trabajo de laboratorio correspondiente
en el recurso Play with Docker *; consulte la sección Seguridad.
* Hablamos sobre este recurso hace dos años, y en noviembre de 2018, le sucedió una historia muy interesante (desde un punto de vista de seguridad). En resumen, especialistas de CyberArk Software Ltd. logró descifrarlo: para lograr la capacidad de ejecutar comandos fuera de los contenedores, es decir en el sistema host Una gran ilustración de los problemas de seguridad en Docker, ¿verdad? Lea todos los detalles de lo que sucedió aquí .PD del traductor
Lea también en nuestro blog: