Share
Embed
Docker, Infraestructuras seguras y Hardening
Esta charla forma parte de las XI Jornadas Oriéntate 2026, organizadas por el IES Aguadulce.
José Juan Sánchez Hernández
January 27, 2026
Transcript
45 slides
-
Docker, infraestructuras seguras y Hardening José Juan Sánchez Hernández IES
Celia Viñas (Almería) -
Í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 -
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. -
DevOps vs DevSecOPs 5 • Ventajas: • Mejora la seguridad.
• Reducción de costes por detección temprana de errores. • Facilita el cumplimiento de la normativa de seguridad (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 -
¿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 -
¿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 -
Imágenes vs Contenedores 11 FROM python:3.14-alpine WORKDIR /app COPY src/
. CMD ["python", "main.py"] -
Principales amenazas de Docker 13 OWASP: Proyecto de código abierto
dedicado combatir las causas que hacen que el software sea inseguro -
Noticias de imágenes inseguras 14 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 -
Noticia de exposición de secretos y claves 15 Septiembre 2023
- [Ver noticia] -
Noticia de mala configuración que permite acceder al host de
Docker 16 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. -
Búsqueda de puertos abiertos de Docker APIs inseguras sin TLS
17 https://www.shodan.io Es un motor de búsqueda que indexa servicios, puertos abiertos y dispositivos expuestos en Internet -
Configuramos nuestro CLI de Docker para usar la API del
Docker Engine remoto 18 El cliente usa la API de Docker local. unix:///var/run/docker.sock -
Configuramos nuestro CLI de Docker para usar la API del
Docker Engine remoto 19 El cliente usa la API insegura del Docker Engine remoto. tcp://34.53.26.90:2375 -
Configuramos nuestro CLI de Docker para usar la API del
Docker Engine remoto 20 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. -
¿Cómo podemos mejorar la seguridad de Docker? • Hardening del
Host de Docker • Hardening de las imágenes • Hardening de los contenedores 21 ¿Qué es el Hardening? Conjunto de técnicas para reforzar la seguridad de un sistema, reduciendo al mínimo su exposición a ataques. -
¿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 22 -
Buenas prácticas para mejorar la seguridad en el Host de
Docker Mantener actualizados el Kernel del host, el Docker Engine y el Sistema Operativo. 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/ 23 ... -
Buenas prácticas para crear Imágenes Seguras Utiliza siempre imágenes fiables
y mantenidas por fuentes confiables. 24 -
25 • 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. -
Buenas prácticas para crear Imágenes Seguras Utiliza herramientas de escaneo
de vulnerabilidades en imágenes Docker. 27 • 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 -
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, ... 28 https://dhi.io https://images.chainguard.dev/ -
Buenas prácticas para crear Imágenes Seguras No uses imágenes con
la etiqueta latest en tus Dockerfile, mejor usa versiones específicas. 32 Al fijar la versión, garantizas la reproducibilidad y la trazabilidad. -
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. Menos paquetes implican: • Menor complejidad. • Menos dependencias. • Imágenes más pequeñas. • Builds más rápidos. 33 Buenas prácticas para crear Imágenes Seguras -
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. 34 -
Utiliza archivos Dockerfile con múltiples etapas, para reducir el tamaño
de la imagen final y mejorar la seguridad. 35 -
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.) 36 -
Buenas prácticas para crear Imágenes Seguras 37 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. Los secretos estarán disponibles sólo durante la fase de build, no se copian en la imagen final. https://docs.docker.com/build/building/secrets/ • Para la fase de ejecución puedes utilizar gestores de secretos como Hashicorp Vault. https://hashicorp.com/vault -
38 Escanea tus Dockerfiles con herramientas como Trivy o Hadolint
para detectar configuraciones incorrectas. Las puedes instalar como plugins en Visual Studio Code. ... 1 Hadolint -
39 Utiliza el asistente de IA integrado en Docker Desktop
y Docker CLI. 1 -
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. • ... 40 Limitar privilegios y capacidades del Kernel -
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. 41 Limitar privilegios y capacidades del Kernel -
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 • ... 42 Limitar los recursos del host -
Buenas prácticas para crear Contenedores Seguros 43 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 -
Buenas prácticas para crear Contenedores Seguros 44 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 -
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 …. 45 ... ... Seguridad en la red 1