Cómo evaluar la seguridad del motor de Docker – CloudSavvy IT

Docker permite a los desarrolladores de software e ingenieros de DevOps empaquetar rápidamente aplicaciones para producción. Los contenedores Docker operan en gran medida independientemente de su host, pero no son inmunes a las amenazas de seguridad. A continuación, te mostramos cómo auditar la instalación de Docker Engine para garantizar la máxima seguridad para su host y sus cargas de trabajo.

Comprensión de la arquitectura de Docker

El primer paso para evaluar los riesgos de Docker es comprender cómo funciona realmente la tecnología. Docker funciona con tres componentes distintos:

  • Demonio del motor de Docker – El servicio en segundo plano que gestiona las operaciones entre bastidores con contenedores e imágenes.
  • API REST – Docker Engine proporciona una API REST que envía comandos al demonio Docker. La API generalmente se proporciona a través de un socket REST, pero también se puede exponer a través de HTTP.
  • Cliente de línea de comandos de Docker – La CLI de Docker se ejecuta cuando usa docker en una terminal. Envía comandos al demonio de Docker. Los comandos se procesan para determinar la acción a realizar.

Un atacante que comprometa cualquiera de estos componentes podría obtener acceso a su entorno. Mediante una configuración adecuada, puede proteger sus cargas de trabajo y incrementar seguridad en comparación con la ejecución de aplicaciones directamente en el host.

La superficie de ataque

El demonio de Docker presenta la mayor superficie de ataque. Obtener el control del demonio proporciona acceso al host y a todos sus contenedores. El demonio normalmente se ejecuta como root, por lo que una infiltración exitosa puede otorgar acceso sin restricciones a su máquina física.

Debe asegurarse de que el socket del demonio de Docker (/var/run/docker.sock) no es accesible para nadie más que el root usuario. Dado que el demonio puede acceder al host, proporcionar acceso al zócalo transfiere efectivamente el control de su máquina.

El demonio de Docker admite un socket TCP que permite el control remoto a través de la red. Si habilita esta función, se ofrecerá comunicación no cifrada sin autenticación.

Evite el uso de conexiones TCP a menos que se encuentre en un entorno de red que haya configurado específicamente para ser seguro. Debe configurar TLS y asegurarse de que solo los clientes autorizados puedan conectarse.

Algunas imágenes de Docker pueden requerir que monte el zócalo de Docker en el contenedor. Esto lo utilizan a menudo las herramientas de administración de Docker que proporcionan una interfaz para los contenedores que se ejecutan en su host. Al montar el zócalo de esta manera, cualquier cosa dentro del contenedor podría obtener el control de su sistema. Los contenedores nunca deben recibir un socket Docker a menos que esté seguro de que la carga de trabajo lo requiere.

Modo sin raíz

Docker ahora admite un modo desarraigado que te permite ejecutar Docker sin root acceso. Esto ayuda a mejorar la seguridad, pero conlleva una complejidad adicional en el momento de la configuración.

El uso del modo sin raíz ejecuta Docker y sus contenedores dentro de un espacio de nombres de usuario. La mayoría de las funciones de Docker funcionarán, aunque hay algunas limitaciones.

No todos los controladores de almacenamiento están disponibles, las redes superpuestas no son compatibles y las redes de contenedores tienen un espacio de nombres completo. Esto significa que no puede acceder directamente a las direcciones IP del contenedor desde el host sin antes ingresar al espacio de nombres de red dedicado.

El uso del modo sin root puede resultar útil en entornos de alta seguridad donde la integridad del host es primordial. Ayuda a disminuir el impacto de un ataque exitoso al restringir las oportunidades para manipular el sistema en general.

Seguridad de la API REST

Por lo general, se accede a la API de REST de Docker a través de un socket UNIX. Las comprobaciones de permisos se realizan utilizando mecanismos estándar de UNIX.

Puede exponer la API a través de un socket TCP, lo que permite el acceso a través de HTTP. Esto aumenta el riesgo de compromiso. Debe asegurarse de que los controles de acceso a la red estén configurados para que el tráfico solo pueda originarse en hosts aprobados.

Debe auditar las políticas de su firewall para no pasar por alto un dispositivo que podría interactuar con la API de Docker. Recuerde que limitar las conexiones a localhost no es suficiente: esto aún permitiría el acceso desde los contenedores de Docker que se ejecutan en su máquina, lo que podría permitir una escalada de privilegios no intencional.

Limitar la comunicación entre contenedores

Docker permite que todos los contenedores se comuniquen entre sí a través de la configuración predeterminada docker0 red puenteada. Un contenedor comprometido podría husmear en esta red para conocer su entorno. Podría usar la red de puentes como un punto de vista para comenzar una infiltración más amplia de sus cargas de trabajo.

La desactivación de la comunicación entre contenedores mejora su postura de seguridad al mejorar el aislamiento del contenedor. Necesitarás explícitamente contenedores de enlace juntos usando el --link=ContainerName flag o su propia red Docker.

Ejecute el demonio de Docker con el --icc=false bandera para deshabilitar la comunicación a través del docker0 puente.

Restringir las capacidades de los contenedores

Las capacidades del kernel de Linux definen las acciones disponibles para los usuarios con root acceso. Las capacidades ayudan a bloquear los procesos que se ejecutan como root, como los contenedores de Docker. A cada proceso se le debe dar el conjunto mínimo de capacidades que necesita.

Docker ejecuta automáticamente contenedores con una selección limitada de capacidades. Incluso esta lista suele ser excesiva para una carga de trabajo simple, como un servidor web. Puede restringirlo aún más especificando su propia lista de capacidades disponibles para un contenedor.docker run –cap-drop all –cap-add SYSLOG example-image:latest

El comando anterior ejecutará un contenedor con solo el SYSLOG capacidad. La --cap-drop La bandera ignora la lista de capacidades predeterminada. Luego, las capacidades se vuelven a agregar con --cap-add, creando una lista blanca.

Vale la pena comparar su contenedor con el lista de capacidades del kernel. Elimine las capacidades no utilizadas de los contenedores que se ejecutan en producción. Esto ayuda a limitar el daño que puede causar un contenedor comprometido.

Habilite las funciones integradas del kernel

No ignore las funciones de seguridad integradas en su kernel. Docker funciona con tecnologías existentes como AppArmor y SELinux.

Algunas distribuciones, como RedHat Linux, vienen con predefinidos Políticas del sistema SELinux que aumentan la seguridad de Docker. Puede agregar manualmente compatibilidad con SELinux ejecutando el demonio Docker con el --selinux-enabled bandera. Esto activa un Política de Docker para establecer etiquetas SELinux en sus contenedores. SELinux proporciona un mejor aislamiento de los procesos del contenedor de los procesos del host, mejorando su postura de seguridad.

Los basicos

Es fácil concentrarse en los aspectos complicados de la seguridad de Docker: modo sin root, acceso a demonios y comunicaciones de contenedores. Sin embargo, no pase por alto los conceptos básicos: todavía se aplican las prácticas de seguridad estándar.

Mantenga siempre actualizado Docker Engine para que tenga las últimas correcciones de errores. También debe asegurarse de que el kernel de su host esté completamente parcheado. Como los contenedores comparten el mismo kernel que su host, sus aplicaciones en contenedores podrían aprovechar cualquier vulnerabilidad.

Es buena práctica para dedicar una máquina física o VM específica para ejecutar Docker. No ejecute ningún otro servicio directamente en el host. En su lugar, puede ejecutarlos como contenedores, lo que reduce el impacto de un compromiso exitoso del host.

Cuando se configura correctamente, Docker aumenta la seguridad al aislar las aplicaciones. Tomarse el tiempo para evaluar su posición lo ayuda a identificar los riesgos potenciales y comprender cómo podrían comenzar los ataques. Bloquear los privilegios de los contenedores, proteger el demonio de Docker y mantener actualizado su host le ayudará a fortalecer sus contenedores.

Leave a Comment

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *