Detectados contenedores maliciosos distribuidos a través de Docker Hub para cryptojacking
Linea de tiempo del ataque. Obtenida de Kromtech Security Center. |
¿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.
Pero los usuarios de Docker no ejecutan una imagen desde Docker Hub así como así…
No deberían. 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.
Detalle de uno de los scripts utilizados para desplegar los contenedores maliciosos. Obtenida de Kromtech Security Center. |
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.
Cryptojacking invades cloud. How modern containerization trend is exploited by attackers:
Powered by WPeMatico