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

Explorando la (ausente) seguridad de las instalaciones típicas de Docker y Kubernetes
He trabajado en IT durante más de 20 años, pero nunca me había decidido a abordar los contenedores. En teoría entendía cómo funcionaban y cómo se organizaban. Pero como nunca había trabajado con ellos en la práctica, no estaba seguro de cómo funcionaban realmente sus engranajes internos.

Además, no tenía idea de cómo manejaban la seguridad. Pero de nuevo, la teoría suena bien, y la antigua canción «a medida que aumenta la seguridad, disminuye la facilidad de uso» se me había quedado grabada en la cabeza. Así que pensé que dado que es tan fácil trabajar con contenedores, la seguridad debía ser deficiente. Resultó que tenía razón.

Para un inicio rápido, me inscribí en un curso Black Hat 2020 titulado «De la pobreza a la riqueza: penetración y protección de entornos Docker Swarm y Kubernetes».

El curso, impartido por Sheila A. Berta y Sol Ozzan, comenzó inmediatamente describiendo cómo funcionan los contenedores Docker y qué recorrido siguen al desplegarse en Kubernetes. Fue una clase completamente práctica: los estudiantes debían instalar Docker y microk8s en sus máquinas antes de las clases, una excelente manera de ver la interacción de las herramientas entre sí, identificar vulnerabilidades y, lo más importante, probar cómo bloquearlas.

Desafortunadamente, aunque el curso prometía que uno se convertiría en un «príncipe» en dos días, sentía que esto solo era el principio y que aún me quedaba mucho por aprender.

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

Antes de sumergirme en mis observaciones, es importante explicar qué es un contenedor. En el mundo del desarrollo, es normal que el código escrito en su máquina personal funcione a la perfección, pero al intentar ejecutarlo en algún servidor, simplemente no funcione. Los contenedores intentan superar este problema proporcionando máquinas autónomas que puede transferir fácilmente de un servidor a otro, sabiendo que siempre funcionarán. Como su nombre indica, contienen el código, las bibliotecas y otro software necesario para su funcionamiento. Kubernetes, por otro lado, es plataforma de orquestación para contenedores. En principio, con ello se puede gestionar sin problemas cientos o miles de diferentes contenedores.

A continuación, se presentan algunas de mis conclusiones desde la perspectiva del equipo rojo y del equipo azul.

Equipo rojo

La mayoría del contenido de los contenedores se ejecuta bajo root: esto significa que si comprometes el contenedor, obtendrás acceso completo al contenedor. Esto facilita considerablemente los pasos posteriores.

Montar docker.sock dentro del contenedor es peligroso: si obtienes root dentro del contenedor y también instalas Docker dentro del contenedor que tiene el socket Docker (\/var\/run\/docker.sock), tienes la posibilidad de explorar todo un clúster, incluyendo el acceso a cualquier otro contenedor. Este acceso no se puede prevenir ni con aislamiento de red ni de ninguna otra forma.

Las variables de entorno a menudo contienen datos secretos: en la mayoría de los casos, las personas envían contraseñas al contenedor utilizando variables de entorno comunes. Así que si tienes acceso a la cuenta, puedes ver estas variables de entorno con el fin de ampliar posteriormente tus privilegios.

La API de Docker puede proporcionar mucha información: la API de Docker, cuando se configura por defecto, funciona sin autorización y puede proporcionar mucha información. Usando Shodan, puedes 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 un artículo muy interesante.

Equipo azul

No ejecutes contenido de contenedores bajo root: aunque es más fácil ejecutar bajo root, no debes hacerlo. En su lugar, ejecuta aplicaciones con privilegios reducidos, ya sea mostrando uid o utilizando el parámetro —user al trabajar con CLI, o especificando USER en el Dockerfile.

No permitas la instalación de programas en los contenedores: casi cada ataque comienza con la instalación de algo. Desde nmap hasta ifconfig y el propio Docker (dentro del contenedor), instalar algo en el contenedor era una práctica común. Por esta misma razón, siempre debes bloquear todos los puertos no utilizados. Esto también ayuda a prevenir la transmisión de comandos de control durante la infección de tu máquina. Además de prevenir la instalación de programas, es fundamental asegurarse de que en el contenedor solo haya un número mínimo de aplicaciones necesarias para realizar la tarea.

Protege docker.sock: debes protegerlo, ya que a través de este socket se maneja la comunicación entre el contenedor y el clúster. Dado que no quiero entrar en detalles en este artículo, lee una nota de Docker, qué puede suceder y cómo bloquear todo esto.

Utiliza secretos de Docker en lugar de variables de entorno: Los secretos son aproximadamente desde 2017. Aunque no es seguro, sigue siendo mejor que las variables de entorno para transmitir datos secretos en un contenedor.

Si el artículo te ha interesado en los contenedores, puedes instalar Docker o microk8s (una versión liviana de Kubernetes) con bastante facilidad. Aquí 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 seguir esta guía de inicio rápido de Docker, con una opción similar se sugiere para microk8s.

Si tienes el deseo o la necesidad de seguir un curso integral sobre Docker, en el que oradores prácticos discuten todas sus herramientas: desde las abstracciones básicas hasta las opciones de red, matices de trabajo con diferentes sistemas operativos y lenguajes de programación, prueba “Curso de video sobre Docker”. Te familiarizarás con la tecnología y entenderás dónde y cómo usar mejor Docker. Además, recibirás casos de buenas prácticas: es mejor aprender de manera segura y con el apoyo de profesionales que hacerlo personalmente en situaciones difíciles.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster