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-1 Detección de ESET
2ff0b69bc5aaca82edb6a364ee9f6ad3c5fdd71c Linux/Remaiten.A
bd8256d469aa42c6c57e8e6f91ef5b4782bd2cb7 Linux/Remaiten.A
3b233834ee962adb111a002bb64e594175e7c1e2 Linux/Remaiten.A
52210b49c47c6ad6fe34c70d6faf49e2763c0d9d Linux/Remaiten.A
11807e5aa5dc1c14f8d509ea410eeb778896830d Linux/Remaiten.A

Versión 2.1

SHA-1 Detección de ESET
e097c882eda2bd508dd9a3be72efce6fd2971f11 Linux/Remaiten.B
d4d70d0022e06b391b31195c030ac9bc6e716cce Linux/Remaiten.B
2e901502263d50c1ab65e7516bb8534c28d41265 Linux/Remaiten.B
b9d8b993943872a19a1d4838570d7dcc9f374c20 Linux/Remaiten.B
977efab8a7cce22530c3bdeca860a342e232eeb3 Linux/Remaiten.B

Versión 2.2

SHA-1 Detección de ESET
0e5b982c8d55b78582da733d31e8b652c9da9f6e Linux/Remaiten.C
4e2dfcd4a3e14b05b268b4a6df76479984932675 Linux/Remaiten.C
9f5f24bda7af3ed95c72c9b77d5a9c5807ca1be9 Linux/Remaiten.C
35b00e2243157171be6a7d7bc9b32f98805dcd35 Linux/Remaiten.C
537f8847d786923a9401889e6ee23675d96f2692 Linux/Remaiten.C
eefa249de2f7f08bcf4629d3e2055b06f1d74ae3 Linux/Remaiten.C
f3c4a7e8785355894482bce4f791d92e1c1da5b2 Linux/Remaiten.C
46cd369bce4f6a41d8863c46dd778c1b1c4f8df0 Linux/Remaiten.C
efd3a698dda376333c2dd84714f92f25539d4589 Linux/Remaiten.C
f8354d8cc946e8b137f9013fc3d44720f321dc48 Linux/Remaiten.C
b912a07528e1afabbaa01d99bcbb66498dee0406 Linux/Remaiten.C
359dd2f9646eb3fad979f4a658bc2ff74488c457 Linux/Remaiten.C
898e2d91d64ebb26cc049d78bdeeda87f2bc4f1a Linux/Remaiten.C
17d3c799e7f1c77be5d7b3d03eaa630a2f261449 Linux/Remaiten.C
17dcfdcc39b21ad64864a386070cc633e9965c3d Linux/Remaiten.C
d1c6511a84ca27e2c08b89a683db9878e83c8637 Linux/Remaiten.C
024136cbc562cff6f3ce31d213fc9fe7a78510f9 Linux/Remaiten.C
a2432461d56c7beec98e4a15ddf91a1ea6d41c1b Linux/Remaiten.C
9f795334a7201b2c6c0ad9ffeb2103ed464f0c5f Linux/Remaiten.C
e375ecd544368b77f686fb3f3a000844782a647b Linux/Remaiten.C
0ca049baf56a6c4d01c6d183ef1acfa65d2be1e3 Linux/Remaiten.C

Muestras de downloaders

Versión 2.0

SHA-1 Detección de ESET
25a7cf2969ce154aa90891e844a6af84fc89d396 Linux/Remaiten.A
1fe1872cf18cd0101f0870ca58f68d6686010326 Linux/Remaiten.A
1cc2b57978ba2e611403ba11bf9129fb810fae5c Linux/Remaiten.A
c552edd72495514765f6a8f26aee8a6da2a57992 Linux/Remaiten.A

Versión 2.1

SHA-1 Detección de ESET
e875f54b7bd967c4f9ae59d85ed60991561b097b Linux/Remaiten.A
ebf2bc43b6b5a4b8933f4ed8ed4a4beaceaecff5 Linux/Remaiten.A
11a13d2eeb71573178d7686930340c51c8f3ce26 Linux/Remaiten.A
8d26cd7d34d84745a897d474aa2ac9b8d1943d68 Linux/Remaiten.A

Versión 2.2

SHA-1 Detección de ESET
e80aba63ba30a2048ba780c35eae65e8b95627f7 Linux/Remaiten.A
e280b220c2ea2668d1a2ad82bdc64922e8b9ec86 Linux/Remaiten.A
8decb1f0e94497ef31f13c6e07ff2a021cf0972f Linux/Remaiten.A
17006c899fbce3f86ddfb93539033c363816ad19 Linux/Remaiten.A

C&C

Versión 2.0

Bot 185.130.104.131:443
Downloader 185.130.104.131:25566

Versión 2.1

Bot 185.130.5.201:53
Downloader 185.130.5.201:25566

Versión 2.2

Bot 185.130.5.202:23
Downloader 185.130.5.202:443