$30 off During Our Annual Pro Sale. View Details »

Docker, Infraestructuras seguras y Hardening

Docker, Infraestructuras seguras y Hardening

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.

https://ciberhub.ual.es

Avatar for José Juan Sánchez Hernández

José Juan Sánchez Hernández

November 30, 2025
Tweet

More Decks by José Juan Sánchez Hernández

Other Decks in Technology

Transcript

  1. Índice • Desarrollo y despliegue de aplicaciones siguiendo prácticas DevOps

    • Fundamentos básicos de Docker • Principales amenazas de Docker • Cómo mejorar la seguridad en Docker (Hardening) 2
  2. Desarrollo y despliegue de aplicaciones siguiendo prácticas DevOps • DevOps

    = 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.
  3. DevOps vs DevSecOPs 5 • Ventajas: • Mejora la seguridad.

    • 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
  4. ¿Dónde vamos a utilizar Docker? 7 • Servidores físicos •

    Máquinas virtuales • Cloud IaaS • Kubernetes • Serverlesss Containers • PaaS • Equipos de los desarrolladores Imagen obtenida de CloudBolt
  5. ¿Qué es Docker? • Es una tecnología que permite empaquetar

    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
  6. Principales amenazas de Docker 12 OWASP: Proyecto de código abierto

    dedicado combatir las causas que hacen que el software sea inseguro
  7. Noticias de imágenes inseguras 13 Agosto 2025 - [Ver noticia]

    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
  8. Noticia de mala configuración que permite acceder al host de

    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.
  9. Búsqueda de puertos abiertos de Docker APIs inseguras sin TLS

    16 https://www.shodan.io Es un motor de búsqueda que indexa servicios, puertos abiertos y dispositivos expuestos en Internet
  10. Configuramos nuestro CLI de Docker para usar la API del

    Docker Engine remoto 17 El cliente usa la API de Docker local. unix:///var/run/docker.sock
  11. Configuramos nuestro CLI de Docker para usar la API del

    Docker Engine remoto 18 El cliente usa la API insegura del Docker Engine remoto. tcp://34.53.26.90:2375
  12. Configuramos nuestro CLI de Docker para usar la API del

    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.
  13. ¿Cómo podemos mejorar la seguridad de Docker? • Hardening del

    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.
  14. ¿Qué técnicas de hardening aplico? • Documentación oficial de Docker.

    https://docs.docker.com/security/ • CIS Benchmarks para Docker. https://www.cisecurity.org/benchmark/docker • OWASP • OWASP Docker Top 10. https://owasp.org/www-project-docker-top-10/ • OWASP Docker Security Cheat Sheet. https://cheatsheetseries.owasp.org • NIST SP 800-190. Application Container Security Guide https://csrc.nist.gov/pubs/sp/800/190/final 21
  15. Buenas prácticas para mejorar la seguridad en el Host de

    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 ...
  16. 24 • Las imágenes oficiales de Docker pueden contener vulnerabilidades

    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.
  17. Buenas prácticas para crear Imágenes Seguras Utiliza herramientas de escaneo

    de vulnerabilidades en imágenes Docker. 26 • Docker Scout https://docs.docker.com/scout/ • Grype https://github.com/anchore/grype • Trivy https://github.com/aquasecurity/trivy • Clair https://github.com/quay/clair • Snyk https://github.com/snyk/cli
  18. Buenas prácticas para crear Imágenes Seguras Utiliza imágenes libres de

    vulnerabilidades. Zero CVE (Common Vulnerabilites and Exposures). • Docker Hardened Images • Chainguard Images, ... 27
  19. Buenas prácticas para crear Imágenes Seguras No uses imágenes con

    la etiqueta latest en tus Dockerfile, mejor usa versiones específicas. 28
  20. Utiliza imágenes ligeras como imágenes base y minimiza el contenido

    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
  21. Buenas prácticas para crear Imágenes Seguras Utiliza usuarios sin privilegios

    en tus imágenes. En la mayoría de las imágenes base, si no defines un usuario específico, el contenedor se ejecutará como root por defecto. 30
  22. Buenas prácticas para crear Imágenes Seguras Utiliza archivos .dockerignore para

    evitar que se copien archivos innecesarios a la imagen (secretos, dependencias locales, etc.) 32
  23. Buenas prácticas para crear Imágenes Seguras 33 No guardes secretos,

    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.
  24. 34 Escanea tus Dockerfiles con herramientas como Trivy o Hadolint

    para detectar configuraciones incorrectas. Las puedes instalar como plugins en Visual Studio Code. ... 1 Hadolint
  25. Buenas prácticas para crear Contenedores Seguros No cree contenedores con

    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
  26. Buenas prácticas para crear Contenedores Seguros Utilice el flag --security-opt

    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
  27. Buenas prácticas para crear Contenedores Seguros Evita ataques DoS (Denial

    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
  28. Buenas prácticas para crear Contenedores Seguros 38 Evite la escritura

    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
  29. Buenas prácticas para crear Contenedores Seguros 39 No comparta la

    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
  30. Buenas prácticas para crear Contenedores Seguros En entornos con múltiples

    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