In this article
Seguridad de Docker: desafíos y mejores prácticas
Seguridad de Docker explicada
¿Qué es la seguridad de Docker?
La seguridad de Docker consiste en proteger los contenedores, las aplicaciones, los sistemas host y todo lo demás relacionado con Docker. Aunque la contenerización puede mejorar la seguridad de las aplicaciones, también existe el riesgo de configuraciones incorrectas que podrían introducir vulnerabilidades. Si siguen las mejores prácticas de seguridad de Docker y usan herramientas de seguridad automatizadas, los equipos de desarrollo pueden reducir los riesgos asociados con los contenedores Docker.
¿Por qué es importante la seguridad de Docker?
La seguridad de Docker es fundamental porque hoy en día la mayoría de las organizaciones usan contenedores para crear e implementar aplicaciones. Con tantos contenedores en producción, una vulnerabilidad en cualquiera de ellos puede afectar la postura de seguridad general de las aplicaciones y la infraestructura de una organización. Por eso es importante buscar vulnerabilidades en las imágenes (tanto en las imágenes base iniciales como en los paquetes y el software que se les agregan), identificar posibles configuraciones incorrectas, implementar una seguridad eficaz en tiempo de ejecución y seguir otras prácticas recomendadas de seguridad de Docker.
Seguridad de contenedores para DevSecOps
Encuentra y corrige vulnerabilidades en contenedores gratis con Snyk.
Desafíos de la seguridad de Docker
La seguridad de Docker presenta cinco áreas principales de preocupación:
Capacidades del kernel
El kernel es el núcleo de cualquier sistema host: se encarga de administrar las interacciones entre el hardware y el software. Como tiene tanto control, Docker busca limitar las capacidades que se otorgan a cada contenedor a solo las necesarias. Sin embargo, las capacidades y los montajes de volúmenes que se asignan a un contenedor aún pueden ofrecer un aislamiento incompleto, lo que podría ampliar considerablemente la superficie de ataque.
Espacios de nombres
Otro aspecto de la seguridad de Docker y del kernel es el uso de espacios de nombres del kernel para aislar los procesos que se ejecutan en contenedores de Docker de otros contenedores o del host. Esto es fundamental para evitar que se escape un contenedor y minimizar el daño que un contenedor comprometido puede causar al resto de la infraestructura.
Superficie de ataque del daemon de Docker
El daemon de Docker es un proceso en segundo plano que administra todos los contenedores que se ejecutan en un mismo host. Como requiere privilegios de root (a menos que elijas el modo sin root), es importante limitar el control del daemon de Docker exclusivamente a usuarios de confianza. Así se evita que actores maliciosos inicien contenedores arbitrarios con privilegios elevados en el sistema host.
Vulnerabilidades en la configuración de contenedores
Las configuraciones de los contenedores de Docker (como los Dockerfiles) son una de las fuentes más comunes de vulnerabilidades de seguridad, pero también una de las áreas de riesgo más fáciles de mejorar. Con herramientas de análisis automatizado, los equipos de desarrollo pueden encontrar y corregir problemas de seguridad o configuraciones incorrectas de Docker antes de que lleguen a producción.
Funciones de fortalecimiento del kernel
Además de configurar las capacidades y los espacios de nombres del kernel, hay otras funciones de seguridad que se pueden usar para fortalecer un host y mejorar la seguridad de Docker. Por ejemplo, se puede ejecutar un kernel con grsecurity y PaX para agregar una capa adicional de seguridad. Las comprobaciones de seguridad adicionales que ofrecen estas soluciones pueden proteger contra muchos exploits sin necesidad de cambiar la configuración de Docker.
Herramientas para fortalecer la seguridad de Docker
Estas son cuatro herramientas que puedes usar hoy para fortalecer tus implementaciones de Docker.
1. Snyk
Snyk es una herramienta de análisis que puede detectar automáticamente posibles vulnerabilidades no solo en tus imágenes de contenedor, sino también en el código de la aplicación y las dependencias dentro de tus contenedores, así como en la infraestructura como código (IaC) que se usa para implementarlos. Esto permite a los equipos de desarrollo implementar la seguridad de Docker de extremo a extremo con una sola herramienta.
2. AppArmor
AppArmor es un sistema de seguridad de aplicaciones para Linux que protege el sistema operativo y las aplicaciones frente a amenazas. Al restringir los procesos vulnerables, AppArmor puede limitar los posibles daños de un exploit.
3. SELinux
SELinux, o Linux con seguridad mejorada, es una arquitectura de seguridad para el sistema operativo Linux que ofrece a los administradores más control sobre los permisos de acceso. Mediante un conjunto de políticas de seguridad, SELinux puede impedir el acceso no autorizado a aplicaciones, procesos y archivos en un sistema host.
4. grsecurity
grsecurity es un amplio conjunto de parches para el kernel de Linux que mejora la seguridad frente a amenazas mediante controles de acceso inteligentes, defensas contra la corrupción de memoria y otras técnicas de fortalecimiento del sistema. A diferencia de otras soluciones para fortalecer el kernel, grsecurity se especializa en vulnerabilidades de día cero.
Mejores prácticas de seguridad de Docker
Hay cuatro categorías principales de mejores prácticas para la seguridad de Docker:
Seguridad de Dockerfile
Como los Dockerfiles usan una imagen base que suele provenir de repositorios públicos, parte de integrar la seguridad de Docker desde el inicio consiste en elegir imágenes base seguras desde el principio. Además de usar una imagen base segura, es importante analizar continuamente cualquier otra dependencia de imagen para detectar vulnerabilidades. Consulta nuestros 3 pasos para proteger contenedores, creados junto con Docker.
Seguridad de Docker en tiempo de ejecución
Durante el tiempo de ejecución, las consideraciones de seguridad más importantes son garantizar que los contenedores estén debidamente aislados y que el kernel del host esté fortalecido frente a posibles amenazas. Esto evita que se escape un contenedor y que se eleven los privilegios, lo que permitiría a los atacantes tomar el control del host.
Seguridad de la cadena de suministro
Como mencionamos antes, muchas imágenes provienen de fuentes públicas, como Docker Hub u otros registros de contenedores. Antes de usarlas, es necesario verificar que las imágenes ofrezcan un nivel adecuado de seguridad y confiabilidad. Firmar y verificar las imágenes también es una excelente forma de evitar ataques de intermediario al enviar imágenes a los registros y descargarlas.
Seguridad de la orquestación de contenedores
La mayoría de las aplicaciones contenerizadas se ejecutan en una plataforma de orquestación como Kubernetes, que administra la implementación de cada contenedor. También es importante analizar los archivos de configuración relacionados con la orquestación de contenedores para detectar posibles vulnerabilidades. Una de las API de configuración clave para Pods y contenedores es SecurityContext, que explicamos en detalle en esta guía rápida: 10 configuraciones de contexto de seguridad de Kubernetes que debes conocer.
Si buscas consejos más específicos, consulta nuestra guía rápida de seguridad de Docker: 10 mejores prácticas de seguridad de Docker
Seguridad de contenedores para DevSecOps
Encuentra y corrige vulnerabilidades en contenedores gratis con Snyk.
Snyk para la seguridad de Docker
La completa plataforma de análisis de vulnerabilidades de Snyk protege todos los componentes de las cargas de trabajo en Docker, desde el código fuente de la aplicación y sus dependencias hasta los contenedores y las configuraciones de IaC. De hecho, el comando `docker scan` de la CLI de Docker funciona con tecnología de Snyk gracias a la creciente colaboración y las integraciones entre ambos ecosistemas.
A medida que la industria del software avanza hacia las aplicaciones contenerizadas, Snyk y Docker trabajan en conjunto para agilizar y facilitar la creación y la implementación de contenedores seguros. Para comenzar a proteger tus imágenes de contenedor, visita: https://snyk.co/SignUp
Preguntas frecuentes sobre la seguridad de Docker
¿Docker representa un riesgo de seguridad?
Docker en sí no representa un riesgo de seguridad, pero las organizaciones deben tomar precauciones para configurar de forma segura sus contenedores, hosts y todo lo relacionado con Docker. Esto incluye proteger los Dockerfiles al crear imágenes y garantizar la seguridad de todos los elementos durante la ejecución, como los puertos de red, los privilegios de usuario, el acceso a sistemas de archivos montados y más.
¿Cómo proteger Docker?
Proteger Docker requiere un enfoque integral que abarque no solo el contenedor, sino también su contenido (código fuente y dependencias), las configuraciones para ejecutarlo y mucho más. Al implementar medidas de seguridad sólidas en cada una de estas áreas de riesgo, los equipos de desarrollo pueden usar Docker de forma segura para implementar sus aplicaciones críticas para el negocio.