Milum: un troyano que apunta al sector industrial

Milum un troyano que apunta a los sensores remotos

Milum un troyano que apunta a los sensores remotos

En agosto de 2019, Kaspersky descubrió una campaña maliciosa que distribuía un troyano C++ completo que llamamos Milum.

Todas las víctimas de Milum que registramos fueron organizaciones de Medio Oriente.

Al menos algunos de ellos están relacionados con el sector industrial.

Nuestro motor de atribución de amenazas de Kaspersky (KTAE) no muestra similitudes de código con campañas conocidas.

Tampoco hemos visto ninguna intersección objetivo.

De hecho, encontramos solo tres muestras casi únicas, todas en un solo país.

Por lo tanto, consideramos que los ataques están dirigidos y actualmente hemos llamado a esta operación WildPressure.

Las marcas de tiempo de compilación para todos estos archivos son las mismas: marzo de 2019.

Esto es consistente con el hecho de que no registramos infecciones antes del 31 de mayo de 2019, por lo que las fechas de compilación no parecen ser falsas.

Para su infraestructura de campaña, los operadores utilizaron servidores privados virtuales (VPS) OVH y Netzbetrieb alquilados y un dominio registrado en los Dominios por el servicio de anonimización Proxy.

El malware utiliza el formato JSON para los datos de configuración y también como protocolo de comunicación C2 a través de HTTP.

Dentro de las comunicaciones encriptadas dentro de las solicitudes HTTP POST, encontramos varios campos interesantes.

Uno de ellos muestra la versión de malware: 1.0.1. Un número de versión como este indica una etapa temprana de desarrollo.

Otros campos sugieren la existencia de, como mínimo, planes para versiones que no sean C ++.

El único cifrado implementado es el algoritmo RC4 con diferentes claves de 64 bytes para diferentes víctimas.

Además, los desarrolladores tuvieron la amabilidad de dejar los datos RTTI dentro de los archivos.

Los productos de Kaspersky detectan este malware como Backdoor.Win32.Agent.

Por qué lo llamamos Milum y por qué es de interés

Todos los troyanos C ++ mencionados anteriormente se compilan como archivos PE independientes, originalmente llamados Milum46_Win32.exe.

La palabra ‘milum’ se usa en los nombres de clase C ++ dentro del malware, por lo que le pusimos el nombre de troyano.

Otra característica distintiva es que el malware exporta muchas funciones de compresión zlib, como zlibVersion (), inflate () o deflate ().

Esta compresión es necesaria para la comunicación C2, pero en realidad no es necesario exportarlos en el caso de una aplicación independiente.

Los campos de configuración JSON no se limitan solo a la versión y al lenguaje de programación; los operadores de campaña también usan ID de objetivos que se encuentran en las muestras.

Entre ellos, encontramos HatLandM30 y HatLandid3, ninguno de los cuales estamos familiarizados.

La siguiente tabla proporciona ejemplos de Milum que tienen marcas de tiempo de compilación de encabezado PE similares pero diferentes ID de destino:

Milum46_Win32.exe muestra hash MD5Marca de tiempo (GMT)Identificación del cliente
0C5B15D89FDA9BAF446B286C6F97F5352019.03.09 06:17:19839ttttttt
17B1A05FC367E52AADA7BDE07714666B2019.03.09 06:17:19SombreroLandid3
A76991F15D6B4F43FBA419ECA1A8E7412019.03.09 06:17:19HatLandM30

En lugar de describir todos los campos de configuración uno por uno, los hemos reunido en la siguiente tabla, con todas las características principales de esta familia de malware:

Lenguaje de programaciónC ++ con funciones STL utilizadas principalmente para analizar datos JSON y manejo de excepciones.
Datos de configuraciónDatos JSON codificados en Base64 en recursos PE. Incluye tiempos de espera, URL de C2 y claves para la comunicación, incluida la clave RC4 de 64 bytes.
Protocolo de redTrojan transmite datos JSON comprimidos en solicitudes HTTP POST con gzip, codificado en base64 y cifrado con RC4.
Datos de balizaJSON cifrado contiene la versión de malware “1.0.1”, la marca de tiempo de Epoch y la identificación del cliente. También tiene campos específicos como “vt” y “ext” que corresponden al lenguaje de programación “c ++” y la extensión de archivo “exe”. Si nuestra hipótesis es correcta, esto sugiere que se pueden planificar versiones de troyanos que no sean C ++, si aún no se han implementado.
PersistenciaClaves de registro del sistema de ejecución automática HKCU Run y ​​RunOnce.
CifradoEl cifrado de comunicación utilizado es RC4 con la clave de 64 bytes almacenada en los datos de configuración.
CompresiónPara la compresión, el troyano utiliza un código gzip incrustado. Por alguna razón, las funciones de gzip se exportan desde PE, aunque las muestras son ejecutables independientes, no DLL.

Profundicemos un poco más adentro

La muestra más popular en nuestra telemetría fue:

MD50c5b15d89fda9baf446b286c6f97f535
Compilado2019.03.09 06:17:19 (GMT)
Talla520704
Nombre internoMilum46_Win32.exe

Esta aplicación existe como una ventana invisible de la barra de herramientas. Las principales funciones maliciosas se implementan en un hilo separado. Milum decodifica sus datos de configuración y, además de los tiempos de espera, obtiene los parámetros “clientid” y “encrypt_key” para usar en el cifrado RC4.

Ejemplo de los datos de configuración decodificados y embellecidos. El campo “clientid” difiere en cada muestra observada

La siguiente tabla describe los diferentes parámetros de configuración:

Parámetro de configuraciónCaracterísticas de los parámetros
shortwaitPausa en milisegundos entre ciclos de trabajo de comunicación C2
Identificación del clienteNombre de objetivo ASCII exclusivo
encrypt_keyClave de cifrado RC4 para comunicaciones C2 basadas en JSON
relés – urlURL completa para enviar balizas HTTP POST y comandos GET
relés – llaveClave ASCII única para que cada C2 se comunique con ella

Los operadores pueden ejecutar el troyano utilizando la clave (“b” o “B”) como primer argumento y el nombre del archivo como segundo.

En este caso, Milum eliminará el archivo enviado como parámetro.

Luego, el troyano creará el directorio C: \ ProgramData \ Micapp \ Windows \ y analizará sus datos de configuración para formar la baliza para enviar a su C2.

Para enviar la baliza, Milum usa la solicitud HTTP POST con tres parámetros que se enumeran en la tabla a continuación.

Parámetro de balizaValores paramétricos
MarylandClientid de config, con prefijo 01011 y sufijo ASCII aleatorio de cinco caracteres
nkLa clave de la configuración para comunicarse con C2 difiere para cada servidor
valDatos JSON de comandos comprimidos, cifrados y codificados

Los dos primeros parámetros se toman de los datos de configuración. El tercero está encriptado y después de descifrar, descomprimir, decodificar y embellecer, se ve así:

Decodificado y embellecido baliza JSON a C2. En este caso, la conexión al primer servidor no tuvo éxito

Hay varios campos que vale la pena mencionar aquí.

Nos referimos anteriormente a diferentes lenguajes de programación además de C ++: “vt” parece hacer referencia a un lenguaje de programación y “ext” a una extensión de archivo.

La única razón por la que podríamos pensar para mantenerlos es si los atacantes tienen varios troyanos, escritos en diferentes idiomas, para trabajar con el mismo servidor de control.

Con respecto al campo “comando”, los servidores de control eran inaccesibles en el momento del análisis, por lo que no tenemos comandos de ellos.

Sin embargo, analizamos los controladores de comandos en el código de Milum como se describe a continuación:

CódigoSentidoCaracteristicas
1EjecuciónEjecute en silencio el comando del intérprete recibido y devuelva el resultado a través de la tubería
2Servidor a clienteDecodifique el contenido recibido en el campo JSON de “datos” y colóquelo en el archivo mencionado en el campo “ruta”
3Cliente a servidorCodifique el archivo mencionado en el campo “ruta” del comando recibido para enviarlo
4Información del archivoObtenga atributos de archivo: oculto, solo lectura, archivo, sistema o ejecutable
5LimpiarGenere y ejecute script por lotes para eliminarse
6Resultado del comandoObtener el estado de ejecución del comando
7Información del sistemaValide el destino con la versión de Windows, la arquitectura (32 o 64 bits), el host y el nombre de usuario, los productos de seguridad instalados (con la solicitud WQL “Seleccione de AntiVirusProduct WHERE displayName <> ‘Windows Defender'”)
8Lista de directorioObtenga información sobre los archivos en el directorio: oculto, solo lectura, archivo, sistema o ejecutable
9ActualizarObtenga la nueva versión y elimine la anterior

¿Quién fue atacado?

Según nuestra telemetría, el troyano Milum se usó exclusivamente para atacar objetivos en el Medio Oriente desde al menos finales de mayo de 2019.

Número de detecciones para una de las muestras desde septiembre de 2019

Pudimos hundir uno de los dominios WildPressure C2 (upiserversys1212 [.] Com) en septiembre de 2019.

Además la gran mayoría de las IP de los visitantes también eran del Medio Oriente, y creemos que el resto eran escáneres de red, nodos de salida TOR o conexiones VPN .

El hundimiento del dominio C2 también muestra infecciones activas principalmente del Medio Oriente

¿Y quién está detrás?

Hasta la fecha, no hemos observado ninguna similitud fuerte basada en códigos o víctimas con ningún actor o conjunto de actividades conocido.

Su código C ++ es bastante común, con respecto a los datos de configuración y el protocolo de comunicación, el malware utiliza datos de configuración con formato JSON codificados en base64 almacenados en la sección de recursos del binario y los analiza con las funciones de la Biblioteca de plantillas estándar (STL).

Además, estos puntos en común no son lo suficientemente concluyentes para la atribución y nuestra hipótesis es que son meras coincidencias. Continuaremos monitoreando esta actividad

Para resumir

Hasta la fecha, no tenemos datos sobre el mecanismo de propagación de Milum.

Una campaña que, aparentemente, se dirige exclusivamente a entidades en el Medio Oriente (al menos algunas de ellas están relacionadas con la industria) es algo que automáticamente llama la atención de cualquier analista.

Además cualquier similitud debe considerarse débil en términos de atribución, y puede ser simplemente una técnica copiada de casos conocidos anteriores.

De hecho, este ciclo de “aprender de atacantes más experimentados” ha sido adoptado por algunos actores nuevos e interesantes en los últimos años.

También debemos ser cautelosos con respecto a la verdadera focalización de este nuevo conjunto de actividades, ya que probablemente sea demasiado pronto para llegar a conclusiones.

La naturaleza objetivo parece ser clara, pero el objetivo en sí podría estar limitado por nuestra propia visibilidad.

Además el malware no está diseñado exclusivamente contra ningún tipo de víctima en particular y podría reutilizarse en otras operaciones.

Indicadores de compromiso

Archivos MD5
0C5B15D89FDA9BAF446B286C6F97F535
17B1A05FC367E52AADA7BDE07714666B
A76991F15D6B4F43FBA419ECA1A8E741
Los nombres de archivo originales son Milum46_Win32.exe; en el lado de destino existen como system32.exe

URL
upiserversys1212 [.] Com / rl.php
37.59.87 [.] 172 / page / view.php
80.255.3 [.] 86 / page / view.php

 

 

Por Marcelo Lozano – General Publisher IT Connect Latam