Linux/Moose es una familia de malware que ataca principalmente a los routers basados en Linux, pero que también puede infectar otros tipos de dispositivos con sistemas Linux a los que obtenga acceso. Los dispositivos infectados se utilizan para robar tráfico de red no cifrado y ofrecer servicios de proxy al operador de la botnet. En la práctica, estas capacidades se utilizan para robar cookies HTTP en sitios de redes sociales populares y llevar a cabo acciones fraudulentas, tales como hacer clics no legítimos en "Seguir", "Visto" y "Me gusta".

En mayo de 2015, ESET publicó un whitepaper sobre esta familia de malware. Tras la publicación del artículo, los servidores de comando y control (C&C) de Linux/Moose cayeron y perdimos la pista del malware. Unos meses después, en septiembre de 2015, recibimos una nueva muestra de Linux/Moose, que, como era de esperar, había evolucionado desde nuestra publicación.

Durante el último año, ESET y la empresa de seguridad GoSecure sumaron esfuerzos para investigar más a fondo a Linux/Moose. GoSecure investigó el aspecto del fraude en redes sociales y arrojó algo de luz sobre un mercado hasta ahora desconocido, al que llamaron "The Ego Market". Este mercado se describe en un nuevo whitepaper publicado por GoSecure.

En este artículo explicamos los cambios técnicos detectados entre las variantes de Moose que describimos inicialmente en el whitepaper y las nuevas variantes que aparecieron en septiembre de 2015.

Ocultamiento de las direcciones de C&C

Lo primero que notamos en la nueva muestra es que ya no había más direcciones IP del servidor de C&C en el archivo binario. Parece que, tras leer nuestro informe, los operadores decidieron dificultarnos un poco más las cosas. En esta nueva versión, la dirección IP del servidor de C&C figura como un argumento de línea de comandos cifrado, como se muestra en la siguiente imagen:

linea de comandos moose

Esta nueva característica implica que ya no podemos seguir ejecutando la muestra nosotros mismos; ahora, nuestras máquinas de pruebas tienen que infectarse mediante un dispositivo incrustado que propague la amenaza activa en el mundo real para poder recuperar la dirección IP del servidor de C&C. El lector atento observará que la dirección IP mostrada está en el formato de enteros de 32 bits.

El propósito de cifrar la dirección IP es el siguiente: en caso de que se detecte el archivo binario solo, será inútil sin el valor que se pasa como argumento. Por otra parte, el valor por sí solo tampoco tiene sentido si el binario no cuenta con el valor correcto para descifrar el argumento. El valor está codificado con XOR con un valor estático, como se muestra en el siguiente fragmento de código:

Resultado del descompilador

Resultado del descompilador

Por lo que sabemos, este valor sigue siendo el mismo de los últimos meses. El siguiente es un fragmento de código en Python para descifrar el valor del entero de 32 bits correspondiente al servidor de C&C:

Descifrado de la dirección IP del servidor de C&C

Descifrado de la dirección IP del servidor de C&C

Comunicación de red

Otra de las cosas que cambiaron es el protocolo de red: aunque la base se mantuvo, se agregaron nuevas capas. A continuación se ve una captura de paquetes de ambas muestras. Al parecer, el cambio principal es que, en lugar de usar el protocolo binario, se pasó al protocolo de caracteres ASCII imprimibles. En la Imagen 1, a la izquierda figura el antiguo protocolo de red y, a la derecha, el nuevo.

Imagen 1: Diferencias en los protocolos de red

Imagen 1: Diferencias en los protocolos de red

En la muestra más antigua, el servidor de C&C enviaba la configuración al malware con varios campos: un campo de bits para determinar qué característica se iba a habilitar, varios campos de direcciones IP, un campo de listas blancas y un campo de listas de contraseñas. Aunque estos campos siguen presentes en la nueva versión, se entregan por separado, bajo tres claves distintas (ver Tabla 1).

Los operadores usan los campos de encabezado HTTP Cookie:Set-Cookie: para enviar la configuración. Esta configuración está cifrada con un simple bucle XOR similar a la primera versión, pero también está codificada para poder imprimirse en los encabezados HTTP mediante la siguiente función:

Resultado del descompilador

Resultado del descompilador

La Tabla 1 (tabla de valores de clave) resume la configuración principal de la versión 2 de Moose:

Clave Valor
PHPSESSID Configuración principal (exploración local/externa, robo de datos, finalización de procesos)
LP Lista de contraseñas
WL Listas blancas

La clave PHPSESSID contiene el valor cifrado de los campos de bits que permiten activar o desactivar algunas funciones de Moose (exploración local/externa, robo de datos, finalización de procesos). La clave LP contiene la lista de contraseñas. Linux/Moose sigue tratando de propagarse adivinando las credenciales de Telnet mediante ataques de fuerza bruta. Hubo un gran cambio en esta lista, que pasó de tener alrededor de 300 inicios de sesión y contraseñas en 2015, a tener solo alrededor de 10 en 2016:

inicios de sesión

La clave WL contiene las listas blancas. Una vez más, la lista se redujo de 50 a 10 direcciones IP, que están en la sección de indicadores de sistemas comprometidos. Linux/Moose aún mantiene su capacidad de ejecutar un servicio proxy escuchando en el puerto TCP 20012. La variante anterior escuchaba en el puerto 10073. La función de proxy permite que las direcciones IP en la lista blanca interactúen con el malware.

Conclusión

Es claro que los autores de Linux/Moose trabajaron mucho para permanecer bajo el radar con su nueva versión, ya que ocultaron la ubicación del servidor de C&C de manera más efectiva y cambiaron el protocolo de red. De esta forma, Moose evita los indicadores de sistemas comprometidos (IoC) que se publicaron en el whitepaper de ESET en 2015. La estrategia de Moose de acortar la lista blanca y la lista de contraseñas muestra que ahora usa un enfoque más comedido. Sin embargo, hay algunos rastros dentro del binario que se usan para engañar a los investigadores, como el dominio falso www.challpok.cn, que se encuentra en la lista de cadenas de texto sin codificar, o incluso nombres de archivo que pueden corresponder a programas extractores de Bitcoins o a malware para ejecutar ataques de DDoS. La amenaza Linux/Moose sigue alojándose exclusivamente en memoria; por lo tanto, reiniciar el dispositivo incrustado finalizará su ejecución.

Indicadores de sistemas comprometidos

Hashes

versión 0x1F (31)

c6edfa2bf916d374e60f1b5444be6dbbee099692
c9ca4820bb7be18f36b7bad8e3044b2d768a5db8
5b444f1ac312b4c24b6bde304f00a5772a6a19a4
f7574b3eb708bd018932511a8a3600d26f5e3be9

versión 0x20 (32)

34802456d10efdf211a7d486f7108319e052cd17
0685cb1d72107de63fa1da52930322df04a72dbc
2876cad26d6dabdc0a9679bb8575f88d40ebd960
f94b6cc5aea170cee55a238eaa9339279fba962f
274ef5884cb256fd4edd7000392b0e326ddd2398
c3f0044ffa9d0bc950e9fd0f442c955b71a706b6
f3daea1d06b1313ec061d93c9af12d0fe746839a

versión 0x21 (33)

7767c8317fb0bbf91924bddffe6a5e45069b0182
1caac933ae6ca326372f7e5dd9fff82652e22e34
5dea6c0c4300e432896038661db2f046c523ce35
e8dc272954d5889044e92793f0f637fe4d53bb91
0843239b3d0f62ae6c5784ba4589ef85329350fa
1d1d46c312045e17f8f4386adc740c1e7423a24a
d8b45a1114c5e0dbfa13be176723b2288ab12907

versión 0x22 (34)

c35d6812913ef31c20404d9bbe96db813a764886

Direcciones IP

Servidores de C&C primarios

192.3.8.218
192.3.8.219

Lista blanca

155.133.18.64
178.19.111.181
151.80.8.2
151.80.8.19
151.80.8.30
62.210.6.34

Los indicadores de sistemas comprometidos de Moose también están disponibles y se actualizan en el repositorio de ESET de indicadores de sistemas comprometidos de malware, en Github.