Para garantizar la mejor experiencia de navegación, active JavaScript en su navegador web. Sin él, muchas funciones del sitio web no estarán disponibles.


Total de pruebas:

¿Qué es la seguridad de contenedores Docker?

Tiempo de lectura:3 min.

Docker es una herramienta estupenda que puede ahorrarle mucho tiempo y esfuerzo.
Aprenda a utilizar Docker de la forma más segura posible y detecte las posibles amenazas con antelación para garantizar la seguridad de los contenedores Docker.

¿Qué es la seguridad de contenedores Docker?
¿Qué es la seguridad de contenedores Docker?
Demo

Ya le hemos explicado cómo asegurar la popular solución de orquestación de contenedores Kubernetes. Esta vez profundizaremos más y en este artículo descubrirá cómo garantizar la seguridad de la reconocida plataforma de contenedores Docker. Si usted aún está buscando diferencias entre estas dos tecnologías, le sugerimos leer este artículo Kubernetes vs Docker de Ubuntu.

¿Desea tener una comprensión profunda de todos los aspectos modernos de la seguridad de contenedores Docker? Lea atentamente este artículo y marquelo para volver a él más tarde, ya que actualizamos esta página con regularidad.

Docker irrumpió rápidamente en el mundo de los contenedores y, en un par de años, ha evolucionado de un complemento a un sistema para lanzar, orquestar, agrupar, configurar, entregar y crear contenedores con software, por lo que la cuestión de la seguridad de los contenedores Docker ha cobrado gran relevancia. Docker también cuenta con una interfaz sencilla para controlar las restricciones de recursos. Docker se basa en los espacios de nombres de Linux, que permiten aislar y virtualizar recursos del sistema como la red, los procesos, los puntos de montaje y los usuarios.

Como resultado, podemos lanzar cualquier proceso completamente aislado, tanto del sistema mismo como de otros contenedores, en nuestro entorno de software único, con nuestra propia red, árbol de procesos, sistema de archivos y red. En primer lugar, conviene entender qué son los contenedores. Se trata de un objeto resistente que soporta el estrés durante el almacenamiento, carga, transporte y protege el contenido interior.

También puede aparecer en su mente la imagen de un muelle portuario, donde miles de contenedores se apilan en filas unos encima de otros. La mayoría de las mercancías se transportan en este tipo de contenedores, ya que no solo son duraderos, sino que también son estándar, fáciles de almacenar y transportar, mientras que la mayoría de las personas involucradas en el transporte no tienen idea de lo que hay dentro, ya que no importa para el transporte.

La idea de los software containers es similar, ya que son software containers images inmutables y aisladas con software, cuya funcionalidad generalmente está disponible a través de API. Es una solución moderna para ejecutar software de manera fiable en casi cualquier entorno. Docker-based container virtualization es extremadamente popular porque permite desplegar rápidamente herramientas de desarrollo y prueba de software o proyectos completos compuestos por muchos componentes.

Y todo iría bien si no fuera por toda una clase de amenazas específicas. Se trata de la posibilidad de escapar del contenedor al sistema host, el apagado de la instancia como resultado de la denegación de servicio, casos de explotación de vulnerabilidades del kernel del sistema operativo, así como la introducción de imágenes de referencia previamente comprometidas en el repositorio, y ataques similares.

¿Qué es un contenedor Docker?

Docker es una plataforma para automatizar el despliegue y la gestión de aplicaciones en entornos de contenedores. Esta solución permite empaquetar cualquier aplicación junto con todo su entorno y dependencias dentro de un contenedor.

De este modo, cada contenedor que creamos ya incluye todo lo necesario para que la aplicación funcione: bibliotecas, herramientas del sistema, código y el entorno de ejecución. Con Docker, los administradores y desarrolladores de DevOps pueden desplegar, escalar y ejecutar rápidamente sus aplicaciones en cualquier entorno, al tiempo que aseguran que el código que escriben se ejecute sin problemas.

Docker tiene muchas de las características que los sistemas de virtualización tradicionales poseen, como la independencia, cuando un contenedor puede trasladarse a cualquier sistema operativo con un servicio Docker previamente levantado e iniciarse con un solo comando, así como la autosuficiencia, cuando el contenedor realizará todas las funciones asignadas en cualquier lugar, sin necesidad de configuración ni servicios adicionales.

Sin embargo, a diferencia de la virtualización tradicional, donde normalmente creamos la imagen nosotros mismos, Docker funciona con imágenes tomadas de repositorios. Existen repositorios públicos y privados de imágenes oficiales y no oficiales. En la documentación, se denominan *docker registry* y el repositorio más popular y utilizado actualmente es Docker Hub.

Comparación entre Docker y VM

La imagen de Docker es un conjunto secuencial de capas de software. Cada capa es el resultado de un comando en el Dockerfile. Es decir, la imagen es la plantilla a partir de la cual lanzamos el contenedor. Pero todo lo que se lanza a partir de esta imagen es el contenedor en sí. Como resultado, Docker tiene una característica muy útil que permite ejecutar varias copias idénticas de esta imagen a partir de una imagen preparada, es decir, contenedores.

La seguridad de los contenedores Docker tiene sus propias vulnerabilidades y fallos, que pueden ser explotados por hackers, al igual que cualquier otro software, desafortunadamente. Cuentas root mal configuradas que exponen los contenedores a compromisos, imágenes legítimas con puertas traseras preinstaladas, exploits PoC funcionales y un error crítico muy reciente para el que aún no existe parche.

Problemas comunes de seguridad de Docker

1. Seguridad del sistema host. Una de las cuestiones de seguridad más sencillas y, al mismo tiempo, clave para Docker es la seguridad de la máquina host, en particular del kernel del sistema operativo. De hecho, en un sistema ya comprometido, es poco probable que el aislamiento y otros mecanismos de seguridad de contenedores que podríamos utilizar nos ayuden. Si el sistema operativo host no está debidamente protegido, el contenedor en Docker tampoco estará seguro. Por lo tanto, se deben seguir las mejores prácticas de seguridad del sistema operativo host.

Sería útil realizar varias comprobaciones para detectar la presencia de vulnerabilidades. Esto se debe a que Docker está diseñado de tal manera que todos los contenedores en ejecución utilizan el núcleo del host. Por lo tanto, el host debe ser una distribución Linux parcheada y actualizada, sin vulnerabilidades conocidas ni signos de infección por malware.

Un ejemplo clásico de este tipo de caso es escapar de un contenedor Docker. En la documentación oficial, este error se llama "container breakout" y describe una situación en la que un programa que se ejecuta dentro de un contenedor logra superar los mecanismos de aislamiento y obtener privilegios de root o acceso a información importante almacenada en el host. Para implementar la protección contra este tipo de situaciones, se utiliza la regla de reducir el número de privilegios del contenedor, que se le otorgan por defecto. Así, si el demonio Docker se ejecuta bajo root, creamos un espacio de nombres a nivel de usuario para él con privilegios mínimos.

2. Agotamiento de recursos, o DDoS por contenedor. Al comparar contenedores con máquinas virtuales, los primeros tienen un peso más ligero. Incluso en hardware antiguo y débil, se pueden ejecutar muchos contenedores. Sin embargo, errores en la configuración de demonios, la pila de red, fallos arquitectónicos y otros factores pueden llevar a una Denial of Service.

Por ejemplo, un contenedor determinado o todo un conjunto de contenedores puede consumir todos los recursos de CPU del host y degradar su rendimiento. Una situación similar puede ocurrir con las interfaces de red cuando el número de paquetes generados supera la banda ancha normal de la red. Pero la solución aquí es bastante simple: solo es necesario configurar adecuadamente los límites de recursos para el contenedor.

3. Una salida fuera del contenedor Docker. Esta situación es común en contenedores Docker que contienen una gran cantidad de software de terceros. Dado que es difícil analizar su contenido y pocas personas están interesadas en ello, pueden contener código malicioso capaz de escapar a través de todas las restricciones y políticas de seguridad implementadas.

Así es como se comprometen los datos con acceso limitado. Para abordar este problema de seguridad de Docker, se puede adoptar un enfoque serio para limitar los permisos a cada contenedor individual, también a expensas de un namespace personalizado.

4. La autenticidad de las imágenes de Docker. Tenga cuidado al utilizar imágenes de Docker disponibles en la web. Pueden contener código malicioso oculto. Siempre verifique su contenido.

Cabe señalar que el método de encapsulación es ineficaz en este caso. Incluso las imágenes autoconstruidas pueden ser modificadas por software de terceros después de su creación. Por lo tanto, siempre verifique dos veces la compilación final.

Cómo garantizar la seguridad de los contenedores Docker

Transport Layer Security. Restrinja las conexiones al demonio Docker para los usuarios con acceso a las cuentas TLS del cliente. Especifique qué comandos están permitidos para cada usuario y cree el complemento de autorización adecuado para Docker. Al iniciar el demonio Docker, señale al complemento creado.

Secretos en Docker. La información confidencial debe mantenerse como secretos creados con el comando `docker service create`. Si se añade la opción `"icc": false` al archivo de configuración ubicado en `/etc/docker/daemon.json`, se desactivará la comunicación entre contenedores para evitar fugas de información innecesarias.

Parámetros del demonio. El demonio Docker se inicia con una serie de opciones predeterminadas.

  • live-restore- contenedores sin demonios para maximizar la disponibilidad tras el apagado o reinicio. Esta opción facilita la instalación de actualizaciones y parches al minimizar el tiempo de inactividad.
  • userland-proxy = false Cuando se disponen de NAT en horquilla o se utilizan, los proxies personalizados se vuelven redundantes y solo aumentan el alcance de los ataques.
  • seccomp-profile/path/to/profile - esta opción permite agregar un perfil seccomp personalizado.
  • no-new-privileges- Prohibir que los contenedores obtengan privilegios adicionales mediante suid o sguid.

Archivo de configuración y contenedor. Asegúrese de que se ha creado un usuario para el contenedor y de que este se ejecuta como dicho usuario, no como root. Si se necesita acceso remoto, proteja este acceso con certificados; de lo contrario, no permita el acceso remoto al demonio.

Aislamiento de un espacio de nombres personalizado. Es especialmente importante asegurarse de que el espacio de nombres personalizado esté aislado en Docker, ya que por defecto se comparte con el espacio de nombres del host. En algunos casos, esta característica puede utilizarse para ampliar privilegios o incluso para salir del contenedor. Puede aislar su espacio de nombres personalizado editando el archivo de configuración tal como se describe en la sección Archivo de configuración de Docker anterior. El aislamiento se reitera para resaltar la importancia de esta medida.

Interfaces de red. Por defecto, Docker escucha en todas las interfaces de red. Dado que en la mayoría de los casos solo se espera tráfico en una interfaz, el alcance de un ataque se incrementa innecesariamente. De esta manera, al iniciar un contenedor, puede vincular los puertos del contenedor a interfaces de host específicas.

Socket. Nunca ejecutes sockets de Docker dentro de un contenedor, ya que esto permitirá ejecutar comandos de Docker en el contenedor y, como resultado, interactuar y gestionar el sistema operativo anfitrión.

Docker Trust. El uso de esta utilidad permite generar claves para verificar la integridad criptográfica de las imágenes. Estas claves se pueden utilizar para firmar imágenes con claves privadas que se verifican mediante claves públicas en el servidor Notary.

Comprobaciones preventivas. Healthcheck es una herramienta poderosa utilizada para verificar la integridad de un contenedor y puede configurarse en el dockerfile. Alternativamente, puedes usar ImmuniWeb Discovery, una herramienta universal para evaluar la superficie de ataque del sistema de información de tu organización. Este tipo de comprobaciones debe realizarse periódicamente para asegurarse de que el contenedor funcione correctamente y garantizar la seguridad de los contenedores Docker.

Escaneo de vulnerabilidades. Docker Enterprise cuenta con un escáner de vulnerabilidades integrado que permite descargar la base de datos de CVE y ejecutarlo sin conexión para escanear imágenes. El escaneo continuo de imágenes mejora el nivel de seguridad de los contenedores Docker cuando se responde de forma oportuna a la aparición de vulnerabilidades.

Política. Elegir una política específica según tus requisitos o incluso utilizar varias de ellas es una buena oportunidad para encontrar tantas vulnerabilidades como sea posible. Sin embargo, no todas las vulnerabilidades son iguales ni se aplican a aplicaciones, contenedores o entornos, por lo que debes considerar no solo su severidad, sino también los factores en los que se basa este cálculo.

Esto incluye el vector de ataque, la severidad del ataque, el impacto en la confidencialidad, el impacto en la integridad, entre otros. Estos factores generan entonces la puntuación final de severidad utilizando la calculadora CVSS. Los valores de las métricas son: ninguno, bajo, medio, alto y crítico. Puede encontrar más información al respecto en el sitio web de NIST.

Algunas vulnerabilidades de seguridad en contenedores Docker son fáciles de corregir, pero no en todos los casos. Cuando se trata de problemas con imágenes base o paquetes integrados en ellas, esta responsabilidad recae en los desarrolladores del software. Sin embargo, debes prevenir o al menos mitigar la explotación de vulnerabilidades existentes y futuras.

Resumen

Docker es una herramienta esencial para cada desarrollador moderno como base de la virtualización de aplicaciones hardware. Esta tecnología cuenta con amplia funcionalidad y capacidades para el control de procesos. Docker permite no solo desplegar contenedores, sino también escalar rápidamente sus instancias, trabajar con aplicaciones multi-contenedor de Docker Compose y combinar varios hosts Docker en un solo clúster Docker Swarm.

Docker se caracteriza por una sintaxis bastante sencilla, por lo que es muy fácil de aprender tanto para profesionales de TI con experiencia como para principiantes. El software es compatible con todas las versiones de los sistemas operativos Linux y Windows, por lo que el alcance de Docker es prácticamente ilimitado. Sin embargo, cualquier componente puede crear una vulnerabilidad: los paquetes instalados en el contenedor Docker, las bibliotecas utilizadas e incluso la imagen base.

Cuando se trata de problemas de seguridad de contenedores Docker, siempre es preferible ocuparse de ellos con antelación e intentar evitar vulnerabilidades antes de que se conviertan en un problema real. Estas herramientas son fáciles de usar, por lo que cualquier desarrollador puede integrarlas en su flujo de trabajo diario o en su pipeline de compilación e implementación.

Recursos adicionales

  • Aprenda más sobre la gestión de la superficie de ataque con IA con ImmuniWeb® Discovery
  • Más información sobre pruebas de penetración de aplicaciones con IA en ImmuniWeb.
  • Más información sobre las oportunidades del programa de partners de ImmuniWeb.
  • Síganos en LinkedIn, X, Telegram y WhatsApp.
Demostración gratuita Compartir en Twitter Compartir en LinkedIn

Reduce sus riesgos cibernéticos ahora

Rellene los campos resaltados en rojo a continuación.

Obtenga su demostración gratuita
de ImmuniWeb®Plataforma
IA

  • Obtenga su evaluación gratuita de exposición al riesgo cibernético.
  • Comience una prueba gratuita de los productos ImmuniWeb.
  • Reciba precios personalizados
  • Hable con nuestros expertos técnicos.
  • Sin compromiso.
Gartner Cool Vendor
SC Media
Innovador de IDC
*
*
*
*
Privado y confidencialSus datos permanecerán privados y confidenciales.
Hable con un experto