Remaiten, un bot de Linux que apunta a routers y otros dispositivos IoT

Los investigadores de ESET están monitoreando activamente los casos de malware que atacan a dispositivos integrados, como el router. Hace poco descubrimos un bot de IRC que combina las habilidades de Linux/Tsunami (también conocido como Kaiten) y Linux/Gafgyt, incorporando además algunas mejoras y un par de funcionalidades nuevas.

A esta nueva amenaza la llamamos Linux/Remaiten. Hasta el momento, detectamos tres versiones de Linux/Remaiten: 2.0, 2.1 y 2.2. Debido a los objetos presentes en el código, los autores llaman a este nuevo malware “KTN-Remastered“o “KTN-RM“.

En este post describiremos el mecanismo único de propagación de Linux/Remaiten, sus diversas funcionalidades y las diferencias entre sus distintas versiones.

Mejoras en el mecanismo de propagación

La característica más prominente de Linux/Gafgyt es la exploración mediante telnet. Cuando recibe instrucciones para realizarla, intenta conectarse a direcciones IP públicas aleatorias con el puerto 23. Si la conexión tiene éxito, intenta adivinar las credenciales de inicio de sesión siguiendo una serie de combinaciones predefinidas de nombre de usuario y contraseña, que están incrustadas en el archivo binario.

Una vez que logra iniciar la sesión, emite un comando de shell para descargar archivos bot ejecutables correspondientes a múltiples arquitecturas y luego intenta ejecutarlos. Esta es una táctica simple (pero estrepitosa a la vez) de infectar a la nueva víctima, ya que es muy probable que uno de los archivos binarios coincida con la plataforma utilizada.

Linux/Remaiten mejora este mecanismo de propagación, ya que también incluye archivos binarios ejecutables downloader para plataformas integradas, tales como ARM y MIPS. Luego de iniciar sesión desde el comando Telnet en el dispositivo de la víctima, intenta averiguar la plataforma y solo transfiere el archivo downloader apropiado. La tarea de este downloader es pedirle al servidor de C&C el bot binario Linux/Remaiten específico para la arquitectura empleada por el sistema. A continuación, se ejecuta y crea otro bot que será utilizado por los operadores maliciosos.

Análisis técnico del downloader

El downloader Linux/Remaiten es un pequeño archivo ejecutable ELF incrustado en el archivo binario bot. Cuando se ejecuta en un servidor de la víctima, se conectarán al mismo servidor de C&C en un puerto diferente y enviarán uno de estos comandos, seguido de una nueva línea:

  • “mips”
  • “mipsel”
  • “armeabi”
  • “armebeabi”

El servidor de C&C responderá con un archivo binario bot ELF para la plataforma requerida.

network_mips_payload

Imagen1: Downloader solicitándole al servidor de C&C que le envíe un archivo binario bot

Imagen2: Downloader conectándose al servidor de C&C

Imagen2: Downloader conectándose al servidor de C&C

La única tarea del downloader es enviar el comando “mips” al servidor de C&C y escribir la respuesta a stdout.

Imagen3: Downloader solicitándole al servidor de C&C que le envíe un archivo binario bot

Imagen3: Downloader solicitándole al servidor de C&C que le envíe un archivo binario bot

Análisis del bot

El bot se ejecuta como un daemon en forma predeterminada. Si se ejecuta con el modificador “-d“, indica que debe permanecer en primer plano. Una vez iniciado, el nombre del proceso se cambiará por algo que parezca legítimo, como “-bash” o “-sh“. Encontramos instancias en las que se usaba “-bash” en la versión 2.1 y “-sh” en la 2.2.

Imagen 4: Arranque del bot

Imagen 4: Arranque del bot

La función create_daemon creará un archivo llamado “.kpid” en uno de los directorios predefinidos de daemon, siempre y cuando pueda escribir dentro de él e insertar su PID en el archivo.

Imagen5: Directorios de archivos del daemon

Imagen5: Directorios de archivos del daemon

Si el archivo “.kpid” ya existe, el PID se leerá desde él; entonces el proceso finaliza y se elimina el archivo.

Imagen6: Creación del archivo pid del daemon

Imagen6: Creación del archivo pid del daemon

Conexión al servidor de C&C

El bot elegirá un servidor de C&C al azar a partir de una lista de direcciones IP cifradas en forma rígida y se conectará a él por el puerto definido.

Imagen7: Conexión del bot a un servidor de C&C

Imagen7: Conexión del bot a un servidor de C&C

El bot luego se registrará en el servidor de IRC. El servidor de C&C responderá con un mensaje de bienvenida y enviará más instrucciones. El dispositivo infectado analizará y ejecutará dichas instrucciones.

Imagen8: Mensaje de bienvenida del servidor de C&C al bot

Imagen8: Mensaje de bienvenida del servidor de C&C al bot

Respuesta a los comandos

El bot puede responder a varios comandos de IRC generales. Dichos comandos se encuentran enumerados en una matriz junto con su controlador de función:

Imagen 9: Comandos de IRC

Imagen 9: Comandos de IRC

Lo que resulta más interesante aquí es el comando “PRIVMSG“. Se utiliza para darle instrucciones al bot para que lleve a cabo sus diferentes acciones maliciosas, como los ataques de desbordamiento, la descarga de archivos, la exploración mediante telnet, etc. Los comandos que se pueden enviar a través de “PRIVMSG” también se encuentran en una matriz estática.

Imagen10: Comandos disponibles para el bot

Imagen10: Comandos disponibles para el bot

La mayoría de sus capacidades provienen de Linux/Tsunami y una parte de Linux/Gafgyt. Estos son algunos ejemplos de las cadenas en el archivo binario que tienen que ver con el comportamiento malicioso. Incluyen una descripción detallada, por lo que es muy fácil entender su propósito.

Imagen 11: Capacidad de desbordamiento

Imagen 11: Capacidad de desbordamiento

Imagen12: Exploración mediante telnet, descarga de un archivo, finalización de procesos de otros bots

Imagen12: Exploración mediante telnet, descarga de un archivo, finalización de procesos de otros bots

Downloader incrustado

Como mencionamos antes, Linux/Remaiten es único porque incluye varios downloaders pequeños y puede cargarlos en el dispositivo de la víctima si la arquitectura de su sistema coincide con uno de los downloaders disponibles. Cuando se ejecuta, el downloader le solicitará al servidor de C&C un archivo binario bot.

Imagen13: Payloads incrustados

Imagen13: Payloads incrustados

Imagen14: Estructura del payload

Imagen14: Estructura del payload

Exploración mediante telnet

Imagen15: Adivinando las credenciales de inicio de sesión con telnet

Imagen15: Adivinando las credenciales de inicio de sesión con telnet

El servidor de C&C emite el comando “QTELNET” para iniciar la exploración mediante telnet. La descripción del autor del malware sobre su creación es cierta: realmente es una versión mejorada del explorador para telnet Gafgyt.

La exploración mediante telnet se lleva a cabo en etapas. Dichas etapas se pueden resumir en las siguientes:

  1. Elegir una dirección IP pública al azar y conectarse a ella por el puerto 23
  2. Intentar combinaciones de nombre de usuario y contraseña
  3. Descubrir la arquitectura del sistema de la víctima
  4. Enviar y ejecutar el downloader correcto

Para descubrir la arquitectura, ejecuta el comando “cat $SHELL” en el dispositivo de la víctima y analiza el resultado. La variable de entorno SHELL contiene la ruta al ejecutable ELF que actúa como el intérprete real de línea de comandos. El bot buscará en el encabezado de ELF para encontrar el downloader correspondiente.

Imagen16: Determinar la plataforma de la víctima y comprobar si está disponible el downloader para esa plataforma

Imagen16: Determinar la plataforma de la víctima y comprobar si está disponible el downloader para esa plataforma

Imagen17: Una parte de la función que analiza el encabezado ELF

Imagen17: Una parte de la función que analiza el encabezado ELF

El bot luego elegirá el payload correcto para enviarlo a la nueva víctima.

Imagen18: La función que elige la carga útil de acuerdo con la plataforma de la víctima

Imagen18: La función que elige la carga útil de acuerdo con la plataforma de la víctima

Infección del otro dispositivo

El primer paso consiste en encontrar un directorio con permiso de escritura. Linux/Remaiten tiene una lista de las rutas más populares donde debería poder escribir.

Imagen19: Lista de directorios a los que podría transferirse el downloader

Imagen19: Lista de directorios a los que podría transferirse el downloader

Entonces, por una razón inexplicable, se crean los archivos ejecutables vacíos “.t“, “retrieve” y “binary“. El archivo “retrieve” contendrá el downloader y el archivo “binary“, el bot solicitado por el servidor de C&C. Al parecer, el archivo “.t” no se usa.

Imagen20: Etapa 10, hacer preparativos para la transferencia y la ejecución del payload

Imagen20: Etapa 10, hacer preparativos para la transferencia y la ejecución del payload

Linux/Remaiten tiene una extraña manera de crear el archivo ejecutable vacío: copia el archivo binario busybox (que se encuentra en la mayoría de los dispositivos integrados) y luego lo vacía con el comando “>file”.

El downloader se transfiere a través de telnet mediante el comando echo, donde cada byte se codifica con la secuencia de escape “\xHH”. Ya conocíamos esta técnica, antes utilizada por Linux/Moose para propagar las infecciones.

Imagen21: Etapa 11, transferir la cadena hexadecimal del payload con echo

Imagen21: Etapa 11, transferir la cadena hexadecimal del payload con echo

Ejecución del downloader y del bot de IRC

Ahora que el downloader ya ha sido transferido, se iniciará para completar el payload Linux/Remaiten. El downloader le pide un archivo bot binario al servidor de C&C y lo escribe en la salida estándar. Una vez iniciado, la salida estándar redirije al archivo binario “binary“. Por último, se inicia el archivo binario”binary” y se activa el bot de IRC.

Imagen22: Etapa 13, ejecutar el downloader y el bot

Imagen22: Etapa 13, ejecutar el downloader y el bot

Envío del estado al servidor de C&C

El último paso es informar al servidor de C&C si se ha infectado con éxito o no otro dispositivo. En ambos casos, también enviará las credenciales válidas. Quizás los operadores infecten el dispositivo en forma manual si falla el método automático.

Imagen23: Etapa 14, informarle al servidor de C&C sobre el estado de despliegue del bot

Imagen23: Etapa 14, informarle al servidor de C&C sobre el estado de despliegue del bot

Finalizar los procesos de otros bots

Otro comando interesante es “KILLBOTS“. Una vez ejecutado, el bot enumera los procesos activos y decide cuáles va a ignorar y cuáles va a finalizar; para ello se basa en varios criterios, principalmente en sus nombres. Estos nombres de procesos pueden diferir entre las dos versiones.

Imagen24: Lista de procesos para finalizar

Imagen24: Lista de procesos para finalizar

Imagen25: Lista de procesos para ignorar

Imagen25: Lista de procesos para ignorar

Linux/Remaiten solamente finalizará los procesos que se iniciaron a partir de una shell interactiva; para ello se fija en el número de dispositivo TTY del proceso. También informará el nombre del proceso finalizado, quizá para mejorar su lista blanca y negra de nombres de procesos.

Imagen26: Finalización de procesos de otros bots

Imagen26: Finalización de procesos de otros bots

Historial de cambios de Linux/Remaiten

Las diferencias que existen entre las versiones del cliente bot en su mayoría son solo menores, como el agregado de nombres de procesos que se deben finalizar/ignorar, o de directorios para el downloader. Es razonable suponer que estos y otros cambios pueden aparecer en cada generación, aunque la versión siga siendo la misma. Los binarios del downloader continúan siendo los mismos, a excepción de la dirección IP y del puerto, que están codificados en forma rígida.

Una diferencia importante en la versión 2.2 es el hecho de que también ejecuta un comando wget/tftp para descargar un script de shell que descarga los archivos binarios bot. Es lo mismo que suele hacer Gafgyt. Si este comando wget/tftp no funciona, intentará transferir un downloader.

Imagen27: Informar al servidor de C&C que el bot se desplegó mediante wget/tftp

Imagen27: Informar al servidor de C&C que el bot se desplegó mediante wget/tftp

El script de shell se distribuye a través de otro servidor, que suministraba el popular Gafgyt.

Imagen28: Script de shell que se distribuye a través de otro servidor

Imagen28: Script de shell que se distribuye a través de otro servidor

Luego de ver el archivo al.sh, notamos que es la primera vez que encontramos bots para plataformas como PowerPC y SuperH.

Imagen29: Bots descargados por el script de shell

Imagen29: Bots descargados por el script de shell

Imagen30: Inicio del script de shell

Imagen30: Inicio del script de shell

El servidor de C&C utilizado en la versión 2.0 tenía un mensaje de bienvenida extraño. Contenía una referencia al blog MalwareMustDie.

Imagen31: Referencia en el servidor de C&C de la versión 2.0 a MalwareMustDie

Imagen31: Referencia en el servidor de C&C de la versión 2.0 a MalwareMustDie

Tal vez es una manera de vengarse: MalwareMustDie está publicando muchos detalles sobre malware como Gafgyt, Tsunami, entre otros.

Indicadores de sistemas comprometidos

 Versión 2.0

SHA-1Detección de ESET
2ff0b69bc5aaca82edb6a364ee9f6ad3c5fdd71cLinux/Remaiten.A
bd8256d469aa42c6c57e8e6f91ef5b4782bd2cb7Linux/Remaiten.A
3b233834ee962adb111a002bb64e594175e7c1e2Linux/Remaiten.A
52210b49c47c6ad6fe34c70d6faf49e2763c0d9dLinux/Remaiten.A
11807e5aa5dc1c14f8d509ea410eeb778896830dLinux/Remaiten.A

Versión 2.1

SHA-1Detección de ESET
e097c882eda2bd508dd9a3be72efce6fd2971f11Linux/Remaiten.B
d4d70d0022e06b391b31195c030ac9bc6e716cceLinux/Remaiten.B
2e901502263d50c1ab65e7516bb8534c28d41265Linux/Remaiten.B
b9d8b993943872a19a1d4838570d7dcc9f374c20Linux/Remaiten.B
977efab8a7cce22530c3bdeca860a342e232eeb3Linux/Remaiten.B

Versión 2.2

SHA-1Detección de ESET
0e5b982c8d55b78582da733d31e8b652c9da9f6eLinux/Remaiten.C
4e2dfcd4a3e14b05b268b4a6df76479984932675Linux/Remaiten.C
9f5f24bda7af3ed95c72c9b77d5a9c5807ca1be9Linux/Remaiten.C
35b00e2243157171be6a7d7bc9b32f98805dcd35Linux/Remaiten.C
537f8847d786923a9401889e6ee23675d96f2692Linux/Remaiten.C
eefa249de2f7f08bcf4629d3e2055b06f1d74ae3Linux/Remaiten.C
f3c4a7e8785355894482bce4f791d92e1c1da5b2Linux/Remaiten.C
46cd369bce4f6a41d8863c46dd778c1b1c4f8df0Linux/Remaiten.C
efd3a698dda376333c2dd84714f92f25539d4589Linux/Remaiten.C
f8354d8cc946e8b137f9013fc3d44720f321dc48Linux/Remaiten.C
b912a07528e1afabbaa01d99bcbb66498dee0406Linux/Remaiten.C
359dd2f9646eb3fad979f4a658bc2ff74488c457Linux/Remaiten.C
898e2d91d64ebb26cc049d78bdeeda87f2bc4f1aLinux/Remaiten.C
17d3c799e7f1c77be5d7b3d03eaa630a2f261449Linux/Remaiten.C
17dcfdcc39b21ad64864a386070cc633e9965c3dLinux/Remaiten.C
d1c6511a84ca27e2c08b89a683db9878e83c8637Linux/Remaiten.C
024136cbc562cff6f3ce31d213fc9fe7a78510f9Linux/Remaiten.C
a2432461d56c7beec98e4a15ddf91a1ea6d41c1bLinux/Remaiten.C
9f795334a7201b2c6c0ad9ffeb2103ed464f0c5fLinux/Remaiten.C
e375ecd544368b77f686fb3f3a000844782a647bLinux/Remaiten.C
0ca049baf56a6c4d01c6d183ef1acfa65d2be1e3Linux/Remaiten.C

Muestras de downloaders

Versión 2.0

SHA-1Detección de ESET
25a7cf2969ce154aa90891e844a6af84fc89d396Linux/Remaiten.A
1fe1872cf18cd0101f0870ca58f68d6686010326Linux/Remaiten.A
1cc2b57978ba2e611403ba11bf9129fb810fae5cLinux/Remaiten.A
c552edd72495514765f6a8f26aee8a6da2a57992Linux/Remaiten.A

Versión 2.1

SHA-1Detección de ESET
e875f54b7bd967c4f9ae59d85ed60991561b097bLinux/Remaiten.A
ebf2bc43b6b5a4b8933f4ed8ed4a4beaceaecff5Linux/Remaiten.A
11a13d2eeb71573178d7686930340c51c8f3ce26Linux/Remaiten.A
8d26cd7d34d84745a897d474aa2ac9b8d1943d68Linux/Remaiten.A

Versión 2.2

SHA-1Detección de ESET
e80aba63ba30a2048ba780c35eae65e8b95627f7Linux/Remaiten.A
e280b220c2ea2668d1a2ad82bdc64922e8b9ec86Linux/Remaiten.A
8decb1f0e94497ef31f13c6e07ff2a021cf0972fLinux/Remaiten.A
17006c899fbce3f86ddfb93539033c363816ad19Linux/Remaiten.A

C&C

Versión 2.0

Bot185.130.104.131:443
Downloader185.130.104.131:25566

Versión 2.1

Bot185.130.5.201:53
Downloader185.130.5.201:25566

Versión 2.2

Bot185.130.5.202:23
Downloader185.130.5.202:443

Autor and , ESET

Síguenos