544.74 Monero, lo que al cambio son
unos 67.863€ a la hora de escribir este artículo. Es la cantidad que el
atacante detrás de la cuenta de Docker Hub "docker123321" ha sido
capaz de minar a lo largo de un año a través de imágenes maliciosas distribuidas
a sistemas expuestos y, lo que es peor, usando la propia plataforma de Docker.
Durante el último año, investigadores
de varias empresas (Kromtech, Fortinet y Sysdig) han estado siguiendo de cerca
este caso, hasta que finalmente el pasado 10 de mayo Docker Hub cerró la cuenta
maliciosa. Detrás deja un total de 17 imágenes Docker maliciosas que habían
sido descargadas en más de 5 millones de ocasiones.
¿Cómo
funciona Docker Hub?
Para explicar qué es Docker Hub,
primero tenemos que ver algunos conceptos básicos de Docker. Sabemos que se
basa en la ejecución de contenedores que aíslan, o al menos lo intentan, un
proceso particular del sistema operativo base (ojo, no se trata de
virtualización). La especificación de estos contenedores corre a cargo de las
llamadas imágenes, que son plantillas donde se define qué hace exactamente un
contenedor. En definitiva, un contenedor es una instancia en ejecución de una
imagen.
Aunque se puede construir una imagen
desde cero, lo ideal es basarse en otra ya definida y personalizarla. Por ejemplo, se puede crear
una imagen que ejecute Apache 2 basándose en una imagen del sistema operativo
Debian, instalando paquetes y configuraciones, ya sea a mano o a través de un
Dockerfile. Este fichero contiene un conjunto de directivas que va a definir
exactamente como queremos que se comporte el contenedor que genera esa imagen.
Se pueden definir, entre otras, la imagen en la que se basa, los puertos que
queremos que el contenedor abra, los paquetes que va a tener instalados o el
comando que va a ejecutar.
Una vez configurada y construida la
nueva imagen, se pueden distribuir utilizando repositorios. Docker Hub es el
repositorio oficial y, de hecho, está totalmente integrado en el motor Docker.
Hagamos una prueba y ejecutemos 'sudo docker run -ti hello-world':
La ejecución de este contenedor nos
dice exactamente qué ocurre entre bambalinas: en resumen, se busca la imagen
local del contenedor que queremos ejecutar. De no existir, se busca
automáticamente en Docker Hub, se descarga y se ejecuta.
¿Y quién puede publicar imágenes en
Docker Hub? Cualquiera, siempre que tengamos una cuenta cuya creación es
gratuita. De hecho, es el principal distribuidor de imágenes para Docker.
Medidas
de seguridad en Docker Hub
Existen con ciertos "peros".
Por un lado, desde Docker 1.8 se implementa el firmado de imágenes, que nos
permite asegurar que la imagen que estamos descargando es precisamente la que
queremos. Sin embargo, esta medida debe configurarse en el cliente y no está
activada por defecto.
En segundo lugar, hasta hace poco se
realizaban análisis automatizados de seguridad para las imágenes subidas a
Docker Hub, aunque solo estuvo disponible para los contenedores propios. Desde
hace unos meses la funcionalidad no está disponible. En la descarga, ahora
mismo, no hay ningún sistema ni señal que te indique si la imagen que descargas
puede tener un comportamiento malicioso o no.
Al final, es como
ejecutar un proceso desconocido en nuestro equipo y, lo que es peor, con
permisos de superusuario y acceso a nuestro sistema base. Por ejemplo, una de
las imágenes maliciosas que se han encontrado montaba como volumen el
directorio '/etc' del sistema base y añadía entradas en el fichero crontab para
ganar persistencia. Pero por supuesto, un usuario sin experiencia podría
encontrar una imagen que se promete interesante y ejecutarla sin una revisión
de lo que hace en realidad.
Más allá de las posibles estrategias
de ingeniería social, lo que sí señalan los investigadores mencionados es que
existen gran cantidad de sistemas Docker y Kubernetes (una plataforma de
orquestación para Docker) que presentan fallos de configuración y están
totalmente expuestos, permitiendo que reciban comandos de administración
externos.
En
resumen, ¿qué ha ocurrido?
Un señor con no muy buenas intenciones
ha creado un repositorio en Docker Hub y ha ido publicando varias tandas de
imágenes maliciosas, algunas para minar criptomonedas, a lo largo de un año.
Aunque la distribución en este caso
concreto no está clara, los investigadores manejan datos de otros ataques en
los que se buscaban sistemas Docker y Kubernetes expuestos a Internet (a través
de escaneos automatizados y/o mediante plataformas como Shodan) y con una
configuración de autenticación pobre. Una vez localizados, se les lanzaba
automáticamente comandos de gestión que permitieran la descarga desde Docker
Hub de las imágenes maliciosas en el sistema.
Los contenedores se hacían pasar por
sistemas como Tomcat o MySQL para pasar desapercibidos. Además de aquellos que
minan Monero, otros contenedores publicados buscaban tomar el control de la
máquina base a través de la apertura de shells inversas o añadiendo las claves
de acceso SSH del atacante a las permitidas para el usuario root.
Con este esquema, el usuario
"docker123321" ha conseguido más de 5 millones de descargas de sus
contenedores, minando un total de 544.74 Monero a lo largo de un año. Después
de varias notificaciones de particulares y empresas de seguridad, el usuario ha
sido finalmente eliminado.
Más
información:
·
Cryptojacking
invades cloud. How modern containerization trend is exploited by attackers:https://kromtech.com/blog/security-center/cryptojacking-invades-cloud-how-modern-containerization-trend-is-exploited-by-attackers
Fuente: Hispasec.com