GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo evaluar la seguridad del motor Docker

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

Comprender 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 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 puede estar expuesta 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 Docker. Los comandos se procesan para determinar la acción a realizar.

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

La superficie de ataque

El demonio Docker presenta la mayor superficie de ataque. Obtener el control del daemon proporciona acceso al host y a todos sus contenedores. El demonio generalmente 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 Docker (/var/run/docker.sock ) no es accesible para nadie que no sea el root usuario. Como el daemon 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 de la red. Si habilita esta función, se ofrecerá comunicación sin cifrar sin ninguna autenticación.

Evite usar conexiones TCP a menos que esté 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 socket de Docker en el contenedor. Esto lo usan 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 de Docker a menos que esté seguro de que la carga de trabajo lo requiere.

Modo sin raíz

Docker ahora admite un modo sin raíz que le 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 existen algunas limitaciones.

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

El uso del modo sin raíz puede ser ú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 de manipular el sistema en general.

Seguridad API REST

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

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 sus controles de acceso a la red estén configurados para que el tráfico solo pueda originarse en hosts aprobados.

Debe auditar sus políticas de firewall para no pasar por alto un dispositivo que podría interactuar con la API de Docker. Recuerda 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 deseada.

Limitación de la comunicación entre contenedores

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

Deshabilitar la comunicación entre contenedores mejora su postura de seguridad al mejorar el aislamiento del contenedor. Deberá vincular explícitamente los contenedores mediante --link=ContainerName bandera o su propia red Docker.

Ejecute el demonio Docker con --icc=false bandera para deshabilitar la comunicación sobre el docker0 puente.

Restringir capacidades de contenedor

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 contenedores 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 SYSLOG capacidad. El --cap-drop flag hace caso omiso de la lista de capacidad predeterminada. Luego, las capacidades se vuelven a agregar con --cap-add , creando una lista blanca.

Vale la pena evaluar su contenedor contra la 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.

Habilitar 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 políticas de sistema SELinux predefinidas que aumentan la seguridad de Docker. Puede agregar compatibilidad con SELinux manualmente ejecutando el demonio Docker con --selinux-enabled bandera. Esto activa una política de Docker para establecer etiquetas de SELinux en sus contenedores. SELinux proporciona un mejor aislamiento de los procesos de contenedor de los procesos de host, lo que mejora su postura de seguridad.

Los conceptos básicos

Es fácil fijarse en los aspectos complicados de la seguridad de Docker:modo sin raíz, acceso a daemon y comunicaciones de contenedores. Sin embargo, no pase por alto los conceptos básicos:la práctica de seguridad estándar aún se aplica.

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 una buena práctica 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 de host exitoso.

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


Docker
  1. Cómo instalar el motor Docker en Debian 9 Stretch Linux

  2. Cómo instalar Docker Engine en Ubuntu:una guía paso a paso

  3. Cómo instalar Docker Engine en Debian 11

  4. Cómo cambiar la configuración de seguridad de FTP

  5. Cómo configurar el acceso remoto a Docker Daemon

Cómo administrar los complementos del motor Docker

Cómo configurar el acceso remoto a Docker Daemon [Guía detallada]

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo acceder a archivos fuera de un contenedor Docker

Cómo instalar Docker en Mac