Charla "Docker, Infraestructuras seguras y Hardening", en el marco de las Jornadas CIBERHUB-UAL 2025, celebradas en la Universidad de Almería el 26 de noviembre de 2025.
= Desarrollo y Operaciones. • Metodología donde los desarrolladores y los equipos de operaciones trabajan juntos durante todo el ciclo de vida del software. • Antes de DevOps la entrega del software era un proceso manual y lento. • Ventajas: • Ha permitido acelerar la entrega continua y el despliegue del software. • Mejorar la calidad del software y reducir los errores debido a la automatización de los procesos. • ... 3 CI CD Imagen obtenida de Medium.
• Reducción de costes por detección temprana de errores. • Facilita el cumplimiento de la normativa (NIS2, DORA, ISO 27001, etc.). • ... • DevSecOps = Desarrollo, Seguridad y Operaciones. • Integra la seguridad en todo el ciclo de vida de desarrollo del software, automatizando controles para detectar y corregir vulnerabilidades lo antes posible. Imagen obtenida de CloudBolt
las aplicaciones en contenedores que incluyen todo lo necesario para que se puedan ejecutar en un entorno de manera aislada. • Permite tener un entorno de desarrollo limpio, seguro y portátil. • Facilita la automatización de pruebas, integración y empaquetado. • Elimina inconsistencias entre los entornos de desarrollo, pruebas y producción. • El proceso de despliegue es rápido y repetible. 8
Backdoor en el paquete XZ Utils (CVE-2024-3094) que permite a un usuario tener accesos no autorizados Marzo 2021 - [Ver noticia] Imágenes maliciosas que contenían criptominers
Docker 15 Septiembre 2025 - [Ver noticia] Uso de APIs de Docker mal configuradas en el puerto 2375 para acceder al host de Docker y lanzar un contenedor con software malicioso.
Docker Engine remoto 19 Una vez que nuestro CLI de docker usa la API del Docker Engine remoto podemos obtener una root shell en la máquina remota con este comando: docker run -it --privileged -v /:/mnt alpine chroot /mnt /bin/sh • --privileged: Le da al contenedor permisos equivalentes al root del host. • -v /:/mnt: Monta el sistema de archivos completo del host / dentro del contenedor, en el directorio /mnt. • chroot /mnt /bin/sh: Cambia el directorio raíz del proceso actual a /mnt y lanza un shell.
Host de Docker • Hardening de las imágenes • Hardening de los contenedores 20 ¿Qué es el Hardening? Conjunto de técnicas para reforzar la seguridad de un sistema, reduciendo al mínimo su exposición a ataques.
Docker Mantener actualizados el kernel del host y Docker Engine. No exponer el socket del Docker daemon. • El socket unix:///var/run/docker.sock es un socket propiedad de root. Sólo es accesible por root y el grupo docker. Quien pueda escribir en él tiene control total del Docker Engine y del host. • No exponga el socket por TCP de forma insegura, si tiene que hacerlo, hágalo por SSH o TLS. Utilizar Docker en modo rootless. • Tenga en cuenta que este modo no es adecuado para todos los escenarios. https://docs.docker.com/engine/security/rootless/ 22 ...
de seguridad conocidas, ya que pueden incluir paquetes mantenidos por terceros. • La mayoría suelen ser de bajo riesgo o difíciles de explotar en un contenedor, pero es importante analizarlas y mantenerlas actualizadas.
de las imágenes. Cuanto menor sea el código que se ejecute en el contenedor, menor será su superficie de ataque. Evita incluir librerías, paquetes y dependencias innecesarias. 29 Buenas prácticas para crear Imágenes Seguras
API keys, passwords, encryption keys, private keys en tus Dockerfiles. Algunas opciones para la gestión de secretos son: • Para la fase de build puedes utilizar los secretos de Docker BuildKit. • Para la fase de ejecución puedes utilizar gestores de secretos como Hashicorp Vault.
el flag --privileged si no está seguro de lo que está haciendo. Este flag asigna al contenedor todas las capacidades del kernel y elimina la mayoría de las medidas de seguridad del contenedor. Utilice el flag --cap-drop ALL para eliminar todas las capacidades el kernel y con --cap-add añada sólo las que necesite. • NET_BIND_SERVICE: Permite que un proceso escuche en puertos inferiores a 1024, como 80, 443, etc. • NET_ADMIN: Permite modificar la configuración de red, como interfaces, iptables, túneles. • ... 35 Limitar privilegios y capacidades del Kernel
no-new-privileges para evitar que ningún proceso pueda ganar más privilegios y capacidades del kernel de los que tenía en su inicio, aunque ejecute un binario con bits setuid y setguid. Los bits setuid y setgid permiten a los binarios ejecutarse con permisos de root. Por lo tanto, si esos binarios tienen vulnerabilidades, un atacante puede usarlos para escalar privilegios. 36 Limitar privilegios y capacidades del Kernel
of Service) limitando los recursos que puede usar el contenedor. docker run -d --memory=512m --cpus=1 --ulimit nofile=1024 --restart=on-failure:5 … • Límite de memoria: --memory • Límite de CPU: --cpus • Número máximo de archivos abiertos por proceso: --ulimit nofile • Número máximo de reintentos de inicio después de un error: --restart=on-failure • ... 37 Limitar los recursos del host
en el sistema de archivos del contenedor con el flag --read-only. Este flag monta el sistema de archivos raíz como inmutable y cualquier intento de modificación será bloqueado. Utilice el flag --tmpfs para crear sistemas de archivos temporales en memoria cuando necesite escritura sin persistencia. Utilice los volúmenes en modo de sólo lectura para limitar su acceso. Proteger el sistema de archivos y volúmenes
red del host de Docker con el contenedor, ya que elimina el aislamiento de red entre el host y el contenedor. Se recomienda utilizar redes bridge definidas por el usuario. docker run --network=host docker network create app-net docker run --network app-net ... Seguridad en la red
contenedores se recomienda segmentar la red para aislarlos. No comparta el socket del Docker daemon del host con los contenedores. docker run -v /var/run/docker.sock:/var/run/docker.sock …. 40 ... ... Seguridad en la red 1