Seguridad para contenedores Docker

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:

  1. Medidas necesarias dentro del sistema operativo host cuando se trabaja con Docker;
  2. Instrucciones relacionadas con el archivo de configuración del ensamblaje y la creación de contenedores;
  3. 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 :

  • "icc":false : deshabilita el intercambio de datos entre contenedores para evitar fugas de información innecesarias.
  • log-level: "info" : captura todos los registros, excepto la depuración.
  •  { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } } 

    - conecta el registro remoto, los reenvía a la dirección especificada. Solo funciona si el demonio syslog se está ejecutando. TCP y UDP son aceptados como opciones. La conexión para cada contenedor específico también es posible. Para hacer esto, se establece un indicador especial al iniciar Docker ( --log-opt syslog-address=ADDRESS ).
  • "userns-remap": "Your_User" : evita la escalada de privilegios al aislar el espacio de nombres para un usuario específico.

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 ".

  1. 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.

  2. 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.
  3. 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.
  4. 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.
  5. 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 .
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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:

Source: https://habr.com/ru/post/474012/


All Articles