Nota de traducción.: El tema de la seguridad de Docker es, sin duda, uno de los eternos en el mundo actual de TI. Por lo tanto, sin más preámbulos, presentamos la traducción de una nueva colección de recomendaciones relevantes. Si ya te has interesado en este tema, muchas de ellas te sonarán familiares. Además, hemos complementado la colección con una lista de herramientas útiles y varios recursos para explorar más a fondo el tema.

Te propongo un manual sobre la seguridad de Docker. Se agradecen los comentarios, ya que es más bien una recopilación de fragmentos de diferentes recursos, y no todos han sido verificados exhaustivamente. Las recomendaciones se dividen en tres categorías:
- Medidas necesarias dentro del sistema operativo host al trabajar con Docker;
- Instrucciones relacionadas con el archivo de configuración de la compilación y la creación de contenedores;
- Herramientas de seguridad que pueden integrarse con las funciones específicas de Docker Enterprise.
La base para el manual se han tomado de varios recursos, muchos de los cuales se enumeran a continuación. No se puede considerar exhaustivo, sin embargo, abarca todos los aspectos básicos. Se puede encontrar información adicional en la descripción de las pruebas CIS (enlace al final de este manual), así como en la documentación de Docker.
Docker Security Benchmark
verifica automáticamente tu Docker en relación con las mejores prácticas más comunes. El script sirve como una buena prueba heurística de seguridad, sin embargo, no debe considerarse como una herramienta de análisis integral.
Sistema operativo host
Es obvio que un contenedor Docker no puede estar seguro si el sistema host no lo está. Por lo tanto, es necesario seguir las mejores prácticas en materia de seguridad de sistemas operativos. Además, sería sensato realizar un análisis de vulnerabilidades en complemento a las siguientes recomendaciones.
Reglas de auditoría
Crea y utiliza reglas de auditoría para archivos relacionados con Docker utilizando auditctl.. Por ejemplo, se puede añadir -w /usr/bin/dockerd -k docker a /etc/audit.rules y reiniciar el servicio de auditoría.
Modo FIPS
Activar el modo FIPS hace que las herramientas criptográficas cambien a algoritmos incluidos en FIPS (Estándares de Procesamiento de Información Federal de EE. UU. — nota del traductor), cumpliendo así con las normas y requisitos federales y sectoriales. Si el sistema operativo del host admite el modo FIPS, se puede habilitar ejecutando los siguientes comandos:
sed -i 's\/GRUB_CMDLINE_LINUX="\/GRUB_CMDLINE_LINUX="fips=1 \/g' \/etc\/default\/grub\ngrub2-mkconfig -o \/boot\/grub2\/grub.cfg && rebootTambién es necesario habilitar FIPS en el Motor Docker:
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 dockerPara obtener más información, consulte la documentación y .
Docker Secrets
Los datos confidenciales deben almacenarse como secretos. Puede iniciar el servicio correspondiente con el siguiente comando:
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 nginxVea los detalles en .
El archivo de configuración de Docker
Las siguientes configuraciones se pueden agregar al archivo de configuración /etc/docker/daemon.json:
-
"icc":false— desactiva el intercambio de datos entre contenedores para evitar filtraciones innecesarias de información. -
log-level: "info"— captura todos los registros excepto los de depuración. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp:\/\/1.2.3.4:1111" } }— conecta el registro remoto, enviándolo a la dirección especificada. Solo funciona si se está ejecutando el demonio syslog. Se aceptan opciones TCP y UDP. También se puede conectar para cada contenedor en particular. Para esto, se establece una bandera especial al iniciar Docker (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Your_User"— previene el aumento de privilegios (privilege escalation) aislando el espacio de nombres para un usuario específico.
Seguridad de nivel de transporte
El acceso al demonio de Docker (si el acceso remoto es necesario) debe estar permitido solo a usuarios con acceso a las credenciales de TLS del cliente.
Plugins de autorización
Determine qué comandos pueden ejecutar los usuarios y cree el plugin de autorización correspondiente para Docker. Luego, inicie el demonio de Docker y añada el plugin:
dockerd --authorization-plugin=PLUGIN_IDPara saber más sobre cómo crear plugins de autorización, consulte .
Opciones del demonio
El demonio de Docker se ejecuta con un conjunto de parámetros predeterminados.
-
--live-restore— este parámetro ayuda a reducir el tiempo de inactividad de los contenedores al apagar o reiniciar el sistema. Facilita su parcheo o actualización con un tiempo de inactividad mínimo; -
--userland-proxy=false— cuando se utilizan hairpin NAT, 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 mediante suid o sguid; -
--seccomp-profile /path/to/profile— si tienes un perfil de seccomp propio, puedes aplicarlo con este flag. Aprende más sobre Seccomp y Docker. .
Configuración de contenedores y archivos de construcción
Creación de usuario
Asegúrate de que se haya creado un usuario para el contenedor y ejecútalo bajo ese usuario (NO ejecutes el contenedor como root).
Acceso remoto
Prohíbe el acceso remoto al demonio. Si es necesario, protege con certificados.
Aísla el espacio de nombres del usuario
Es especialmente importante asegurarse de que el espacio de nombres del usuario en Docker esté aislado, ya que por defecto se comparte con el espacio de nombres del host. En algunos casos, esto puede ser aprovechado para elevar privilegios o incluso salir del contenedor. Puedes aislar el espacio de nombres del usuario editando el archivo de configuración (como se describe anteriormente en la sección ‘Archivo de configuración de Docker’). Esta mención adicional a este problema se debe a su importancia.
Healthchecks
Healthcheck (verificación de estado) es una herramienta poderosa que permite verificar la integridad del contenedor. Se configura en el Dockerfile usando la instrucción HEALTHCHECK. Los healthchecks permiten asegurarte de que el contenedor está funcionando correctamente. En el siguiente ejemplo, la verificación de estado termina en 0 si el servidor está funcionando, y en 1 si ha ‘caído’:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Si SELinux es compatible con el sistema operativo del host, crea o importa una política de SELinux y ejecuta Docker en modo demonio con SELinux habilitado:
docker daemon --selinux-enableEn este caso, los contenedores de Docker se pueden ejecutar con parámetros de seguridad, por ejemplo:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashInterfaces 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 una de ellas, este enfoque aumenta injustificadamente el riesgo de ataque. Por lo tanto, al iniciar un contenedor, se pueden vincular sus puertos a interfaces específicas en el host:
docker run --detach --publish 10.2.3.4:49153:80 nginxVersiones de imágenes en caché
Al descargar imágenes, asegúrese de que la caché local coincida con el contenido del repositorio. De lo contrario, puede obtener una versión desactualizada de la imagen o una imagen que contenga vulnerabilidades.
Puente de red
Modelo de red predeterminado, docker0, es vulnerable a ataques de tipo ARP-spoofing y MAC-flooding. Para resolver este problema, cree un puente de red según sus especificaciones, como se describe .
Advertencia sobre el socket de Docker
Nunca exponga el socket de Docker dentro del contenedor. De lo contrario, el contenedor tendrá la capacidad de ejecutar comandos de Docker y, por lo tanto, interactuar con el sistema operativo host y controlarlo. No haga esto.
Configuración de Docker Enterprise
Docker Trust
Docker Trust permite generar claves que se pueden utilizar 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 el Notary Server. Más información — . La activación de Docker Trust en el Docker Enterprise Engine se detalla en .
Escaneo de vulnerabilidades
Docker Enterprise tiene un escáner de vulnerabilidades integrado que permite cargar una base de datos CVE para el escaneo offline de vulnerabilidades en imágenes. El escaneo regular de imágenes ayuda a hacerlas más seguras: el usuario recibe advertencias sobre las vulnerabilidades encontradas de inmediato. Más sobre cómo hacerlo, consulte .
Nota de traducción.: También existen escáneres de vulnerabilidades de código abierto en imágenes de Docker, ejemplos de los cuales se encuentran al final del material.
Integración de LDAP y UCP
Universal Control Plane se puede integrar con LDAP. Esto resultará en un sistema de autenticación simplificado que evita la duplicación innecesaria. Más sobre esto se puede leer en el artículo .
Otros materiales
Más información sobre las mejores prácticas en seguridad de Docker se puede encontrar en . También recomendamos descargar .
Bonificación del traductor
Como un complemento lógico a este artículo, publicamos una lista de 10 herramientas de código abierto populares para asegurar Docker. Se tomó de (escrito por Bill Doerrfeld de Doerrfeld.io).
NB: Para obtener más información sobre muchos de los proyectos mencionados aquí, lea también el artículo «».
- — el script mencionado al principio del artículo que verifica los contenedores de Docker en relación con las prácticas comunes de seguridad.

- — probablemente la herramienta más popular para el análisis estático de vulnerabilidades en contenedores. Utiliza numerosas bases de datos de vulnerabilidades CVE (incluyendo rastreadores de importantes distribuciones de Linux, como Red Hat, Debian, Ubuntu). Ofrece una API para desarrolladores y una sencilla opción para ampliar funciones (a través de la adición de «drivers»). Se emplea en el popular registro público de imágenes de contenedores (similar a Docker Hub) — Quay.io.
- — solución para la seguridad de red a nivel de núcleo, basada en la tecnología de filtrado de paquetes BPF.
- — herramienta para analizar el contenido de las imágenes en busca de vulnerabilidades de seguridad en la base de datos CVE. Además, permite aplicar políticas personalizadas (basadas en diferentes datos, incluyendo listas blancas/negras, contenido de archivos, etc.) para evaluar la seguridad de los contenedores.
- — un ecosistema completo para crear y mantener políticas de seguridad en diferentes plataformas. Ofrece la herramienta
oscap-docker. - — herramienta para escanear contenedores Docker en busca de vulnerabilidades, troyanos, virus y malware. Las bases de datos CVE incluyen comprobaciones basadas en dependencias de OWASP, la base de Red Hat Oval, el repositorio de exploits de Exploit Database.
- — marco para firmar imágenes de Docker, originalmente creado en Docker Inc (y luego transferido para su desarrollo en CNCF). Su uso permite delegar roles y distribuir responsabilidades en los contenedores, así como verificar la integridad criptográfica de las imágenes.
- — API para metadatos, diseñada para gestionar políticas de seguridad internas. Por ejemplo, permite mejorar el funcionamiento de los escáneres de seguridad de contenedores. Shopify utiliza esta API para gestionar metadatos de sus 500,000 imágenes.
- — herramienta para Kubernetes que supervisa el comportamiento del sistema: actividad en contenedores, en hosts, en la red. Permite configurar verificaciones continuas en la infraestructura, detección de anomalías y envío de alertas sobre cualquier llamada al sistema de Linux.
- — otra herramienta para el análisis estático de imágenes de contenedores Docker. Permite 'mirar' dentro de los archivos de la imagen, recopilando los datos necesarios y aplicando políticas adecuadas, etc.
Otra buena recopilación de recomendaciones prácticas sobre cómo hacer Docker más seguro se puede encontrar en la empresa Aqua Security. Muchos de sus consejos coinciden con los mencionados anteriormente, pero hay otros diferentes. Por ejemplo, los autores sugieren organizar el monitoreo de la actividad en los contenedores y señalan a qué prestar atención al usar Docker Swarm.
Para aquellos que desean profundizar aún más en este tema, el año pasado se publicó el libro '»', cuyos fragmentos están disponibles gratuitamente. .
Finalmente, para familiarizarse prácticamente con algunos aspectos de la seguridad de Docker: los perfiles Seccomp y el uso de capacidades del núcleo de Linux en contenedores, se pueden realizar los correspondientes laboratorios en * — ver la sección 'Seguridad'.

* Sobre este recurso, nosotros hace dos años, y en noviembre de 2018 ocurrió una historia muy interesante (desde la perspectiva de la seguridad). En resumen, los especialistas de CyberArk Software Ltd. lograron hackearlo: obtener la capacidad de ejecutar comandos fuera de los contenedores, es decir, en el sistema anfitrión. Una excelente ilustración del problema de seguridad en Docker, ¿no? Para todos los detalles de lo sucedido, lea .
P.D. del traductor
También puedes leer en nuestro blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Fuente: habr.com

