El ataque utiliza el API del demonio de Docker. Normalmente, esta API no es accesible públicamente ya que se accede a través de socket /var/run/docker.sock, pero existe la posibilidad de que escuche en un puerto tcp, con la siguiente opción por ejemplo: -H tcp://0.0.0.0:1234 (esto configuraría el socket del demonio de docker para escuchar cualquier conexión al puerto 1234).
El atacante lo que ha hecho es encontrar una serie de máquinas con este puerto abierto públicamente y sin autenticación. De esta forma, de manera remota puede lanzar, detener y acceder a contenedores en la máquina anfitriona. Y no sólo eso... Montando volúmenes puede acceder al contenido completo del sistema de ficheros. Pero vayamos al ataque en cuestión.
Teniendo la posibilidad de lanzar contenedores de forma remota en las máquinas comprometidas, el atacante subió una imagen al registro de imágenes de Docker Hub, concretamente la pocosow/centos:7.6.1810. Esta imagen contenía tanto un cliente docker para comunicarse con otras máquinas comprometidas, como una serie de scripts que se encargaban de mandar información a las máquinas desde las que se gestionaba el ataque y otros que se dedicaban a encender y apagar los servicios de minado de criptomonedas en otros hosts infectados.
Imagen original de Unit 42
El ataque la verdad es que no ha sido muy efectivo ni malicioso. En primer lugar, porque al explotar una vulnerabilidad poco usual (que es la de tener accesible de forma pública el API del demonio de docker) no ha afectado a muchas máquinas. En el fichero de máquinas infectadas había 2.000 IPs.
En segundo lugar, el sistema de distribución de la imagen infectada ha sido el propio Docker Hub. En el momento en el que el equipo de la Unidad 42 ha detectado el ataque y la imagen comprometida se han puesto en contacto con Docker y han colaborado para eliminar las imágenes que servían para realizar el ataque.
Sin embargo, hay que tener en cuenta algunas cuestiones que sí que pueden ser interesantes. Este es el primer gusano conocido que explota el acceso público al API de Docker. En este caso se utilizaba para minar criptomonedas (y de forma no muy eficiente, la verdad). ¿Qué hubiera pasado si esta vulnerabilidad se utiliza para hacer ransomware? ¿O robo de información o secuestro del servidor? ¿Y si hubieran utilizado otro repositorio privado para distribuir las imágenes infectadas de forma que no se pudieran eliminar tan fácilmente?
En el artículo en el que explican este gusano, la Unidad 42 da algunos consejos para evitar este nuevo tipo de ataques:
- Nunca exponer la API del demonio Docker sin un mecanismo de autenticación.
- Usar directamente el socket de Unix (opción por defecto) o conectarse por ssh.
- Utilizar un firewall con listas blancas de IPs de acceso.
- Nunca utilizar imágenes de registros o namespaces desconocidos.
- Controlar frecuentemente los contenedores desconocidos (esto puede hacerse de forma automática con herramientas como Falco).
- Utilizar soluciones automatizadas como las de Prisma o Twistlock para la detección de contenedores o actividades sospechosas.
No hay comentarios:
Publicar un comentario