Explorando la seguridad (faltante) de las instalaciones típicas de Docker y Kubernetes

Explorando la seguridad (faltante) de las instalaciones típicas de Docker y Kubernetes
He trabajado en TI durante más de 20 años, pero de alguna manera nunca llegué a dedicarme a los contenedores. En teoría, entendí cómo estaban estructurados y cómo funcionaban. Pero como nunca los había encontrado en la práctica, no estaba seguro de cómo giraban y giraban exactamente los engranajes debajo de su capó.

Además, no tenía idea de cómo era su seguridad. Pero, una vez más, la teoría suena bien y la vieja canción “a medida que aumenta la seguridad, disminuye la usabilidad” se me quedó grabada en la cabeza. Entonces pensé que como todo es tan fácil de hacer con los contenedores, entonces la seguridad allí es inferior a la media. Resulta que tenía razón.

Para comenzar rápidamente, me inscribí en cursos Sombrero Negro 2020 titulado "De la pobreza a la riqueza: penetración y protección de los entornos Docker Swarm y Kubernetes".

El curso, impartido por Sheila A. Berta y Sol Ozzan, comenzó inmediatamente con una descripción de cómo funcionan los contenedores Docker y el viaje que realizan cuando se implementan en Kubernetes. Esta fue una clase completamente práctica: los estudiantes tuvieron que instalar Docker y microk8 en sus máquinas antes de la clase; una excelente manera de ver cómo las herramientas interactúan entre sí, encontrar puntos débiles y, lo más importante, intentar bloquearlos.

Desafortunadamente, aunque los cursos prometían convertirme en un “príncipe” después de dos días, sentí que todo apenas comenzaba y todavía tenía mucho que aprender.

Explorando la seguridad (faltante) de las instalaciones típicas de Docker y Kubernetes

Antes de profundizar en mis elevadas observaciones, es importante explicar qué es un contenedor. En el mundo del desarrollo, se considera normal que el código escrito en su máquina personal funcione perfectamente, pero cuando intenta ejecutarlo en algún servidor, simplemente no funciona. Los contenedores intentan superar este problema proporcionando máquinas autónomas que se pueden mover fácilmente de un servidor a otro, sabiendo que siempre funcionarán. Como sugiere el nombre, contienen el código, las bibliotecas y otro software necesario para realizar el trabajo. Kubernetes, por otro lado, es plataforma de orquestación para contenedores. En principio, se puede utilizar para gestionar sin problemas cientos o miles de contenedores diferentes.

A continuación se presentan algunos de mis hallazgos desde la perspectiva del equipo rojo y azul.

equipo rojo

La mayor parte del contenido del contenedor se ejecuta como raíz: Esto significa que si el contenedor se ve comprometido, tendrá acceso completo al contenedor. Esto hace que los siguientes pasos sean mucho más fáciles.

Montar docker.sock dentro de un contenedor es peligroso: Si tiene root dentro de un contenedor y también instaló Docker dentro de un contenedor que tiene un socket Docker (/var/run/docker.sock), tiene el potencial de explorar todo el clúster, incluido el acceso a cualquier otro contenedor. Dicho acceso no puede impedirse mediante el aislamiento de la red u otros medios.

Las variables de entorno suelen contener datos secretos.: En la mayoría de los casos, las personas envían contraseñas al contenedor utilizando variables de entorno normales. Entonces, si tienes acceso a la cuenta, podrás espiar estas variables de entorno para luego ampliar tus poderes.

La API de Docker puede proporcionar mucha información: La API de Docker, cuando está configurada de forma predeterminada, se ejecuta sin autorización y puede producir una gran cantidad de información. Con Shodan, puede encontrar fácilmente una lista de puertos abiertos, luego obtener información detallada sobre el clúster y proceder a su captura completa. TrendMicro escribió sobre esto artículo más interesante.

Equipo azul

No ejecute el contenido del contenedor como root: Aunque es más fácil ejecutarlo como root, no deberías hacerlo. En su lugar, ejecute aplicaciones con permisos de reinicio mostrando el uid, ya sea usando la opción --user cuando se ejecuta desde la CLI o especificando USER en el Dockerfile.

No permitir que se instale software en contenedores: Casi todos los ataques comienzan plantando algo. Desde nmap hasta ifconfig y el propio Docker (dentro de un contenedor), instalar cualquier cosa en un contenedor ha sido algo común. Por la misma razón, siempre debes bloquear todos los puertos no utilizados. Esto también ayuda a evitar que se transmitan comandos de control cuando su máquina está infectada. Además de impedir la instalación de programas, conviene asegurarse de que en el propio contenedor estén instaladas el número mínimo de aplicaciones necesarias para completar la tarea.

Proteger docker.sock: Debe estar protegido porque la comunicación entre el contenedor y el clúster se procesa a través de este socket. Como no quiero entrar en detalles en este artículo, lea nota de Docker, qué puede pasar y también cómo bloquearlo todo.

Utilice secretos de Docker en lugar de variables de entorno: Hay secretos desde aproximadamente 2017. Aunque esto no es seguro, sigue siendo mejor que las variables de entorno para pasar datos secretos al contenedor.

Si el artículo ha despertado su interés en los contenedores, puede instalar fácilmente Docker o microk8s (una versión pequeña de Kubernetes). es hay instrucciones para instalar Docker para Linux y MacOS, y aquí — instrucciones para instalar microk8s para Windows, Linux y MacOS.

Después de la instalación puedes ir esta es una guía de inicio rápido desde Docker, opción similar propuesto y para microk8.

Si desea o necesita realizar un curso completo sobre Docker, en el que oradores prácticos examinen todas sus herramientas: desde abstracciones básicas hasta parámetros de red, matices del trabajo con varios sistemas operativos y lenguajes de programación, intente "Videocurso de Docker" Se familiarizará con la tecnología y comprenderá dónde y cómo utilizar mejor Docker. Y al mismo tiempo, obtenga casos de mejores prácticas: es mejor aprender de forma segura y con el apoyo de los profesionales a partir de historias sobre rastrillos que personalmente de los propios rastrillos con mangos con púas.

Fuente: habr.com

Añadir un comentario