ShadowPad: la nueva variante del malware Winnti

En noviembre del pasado año los investigadores de ESET descubrieron una nueva campaña de malware llevada a cabo por el Grupo Winnti, la cual tenía como objetivos varias universidades de Hong Kong. Lo que los investigadores encontraron fue una variante de la puerta trasera ShadowPad (insignia del grupo), implementada usando un nuevo sistema de inicialización (launcher), la cual contenía numerosos módulos. El malware Winnti también fue encontrado en las universidades afectadas unas semanas antes del descubrimiento de ShadowPad.

El Grupo Winnti, activo desde al menos el año 2012, es responsable por ataques en cadena de perfil alto contra industrias de videojuegos y software, habiendo causado la distribución de software infectado (como por ejemplo CCleaner, ASUS LiveUpdate y varios videojuegos) que es usado para luego comprometer a más víctimas. También se le conoce por haber comprometido a varios objetivos en los sectores de la educación y la sanidad.

ShadowPad ha sido encontrado en varias universidades en Hong Kong

Como se indicó anteriormente, en noviembre de 2019 los investigadores en ESET, mediante el uso de su tecnología de machine-learning Augur, detectaron una muestra maliciosa y única que estaba presente en numerosos ordenadores de dos universidades de Hong Kong, donde el malware Winnti ya había sido encontrado a finales de octubre de ese mismo año. La muestra maliciosa detectada por Augur es un nuevo sistema de inicialización de 32 bit. Las muestras tanto de ShadowPad como de Winnti descubiertas en estas universidades contienen identificadores de campaña y URLs de C&C con los nombres de las universidades, lo que indica que se trata de un ataque específico para estas entidades.

Además de las dos universidades comprometidas, gracias al formato usado por los atacantes para las URLs del C&C se sospecha que al menos otras tres universidades de la misma región se han visto afectadas por estas mismas variantes de ShadowPad y Winnti.

Sistema de inicialización actualizado

A diferencia de otras variantes de ShadowPad, el sistema de inicialización utilizado en este caso no se encuentra ofuscado con VMProtect. Además, el payload cifrado tampoco se encuentra dentro del código ni en un conjunto de datos alternativo como COM1:NULL.dat. Asimismo, el cifrado habitual RC5 con una clave derivada de la ID del volumen del equipo víctima tampoco está presente. En este caso el sistema de inicialización resulta ser mucho más simple.

Carga lateral de DLL

El sistema de inicialización es una DLL de 32 bit llamada hpqhvsei.dll, el cual es el nombre de una DLL legítima cargada por hpqhvind.exe. Este ejecutable es de HP y normalmente es instalado con su software de impresión y escaneo llamado «HP Digital Imaging». En este caso el ejecutable legítimo hpqhvind.exe fue lanzado por los atacantes junto a la DLL maliciosa hpqhvsei.dll en la ruta C:WindowsTemp.

La presencia de estos archivos, según ESET, podrían indicar que la ejecución inicial de este sistema de inicialización se hace mediante la carga lateral de DLL. Cuando la DLL maliciosa se carga al inicio de hpqhvind.exe, se llama a la función DLLMain y se comprueba el proceso padre para la siguiente secuencia de bytes en el offset 0x10BA:

85 C0 ; test eax, eax
0F 84 ; jz

En el caso en el que el proceso padre es hpqhvind.exe, esta secuencia de bytes está presente en ese mismo lugar y la DLL maliciosa procederá a parchear el proceso padre en la memoria. Se reemplazan así las instrucciones originales en 0x10BA con un salto incondicional (jmp – 0xE9) hacia el lugar donde se encuentra la función de hpqhvsei.dll que descifra y ejecuta el payload cifrado incluido en el sistema de inicialización.

La función descompilada responsable de parchear el proceso padre se muestra en la siguiente figura. Si hpqhvsei.dll es cargado por un proceso diferente a hpqhvind.exe, el código malicioso no será descifrado ni ejecutado.

Figura 1: Función responsable de parchear el proceso padre descompilada
Fuente: WeLiveSecurity

La diferencia entre el ejecutable hpqhvind.exe original y parcheado se muestra a continuación en la Figura 2.

Figura 2: Diferencia entre el proceso hpqhvind.exe original (izquierda) y parcheado (derecha)
Fuente: WeLiveSecurity

La parte del código que es parcheada se encuentra al principio de la función principal de hpqhvind.exe. Como se observa en la Figura 2, el código parcheado se encuentra justo después de que se produzca la carga de hpqhvsei.dll. Esto significa que la función responsable de descifrar y ejecutar el payload se ejecuta inmediatamente después de la carga de la DLL maliciosa.

Descifrado del payload

El payload cifrado se encuentra en la sección .rdata de hpqhvsei.dll y el algoritmo de descifrado se realiza mediante una función XOR iterativa, donde la variable XOR_key se actualiza en cada iteración, como se muestra en la Figura 3.

Figura 3: Pseudocódigo del bucle de descifrado del payload
Fuente: WeLiveSecurity

El payload descifrado es la shellcode responsable de que se inicie ShadowPad (ofuscada usando saltos condicionales falsos para hacer más difícil el proceso de desensamblado).

Persistencia

Después de haber sido descifrada, la shellcode de ShadowPad es ejecutada. Primero conseguirá persistencia en el sistema escribiendo el proceso padre parcheado en memoria en una ruta específica en la colección de cadenas de configuración. En el caso investigado por ESET, esto se hizo en la ruta C:ProgramDataDRMCLRCLR.exe. Luego se creó un servicio llamado clr_optimization_v4.0.30229_32, responsable de ejecutar CLR.exe.

Figura 4: Flujo del proceso de ShadowPad

La enumeración se corresponde con el orden cronológico de la secuencia de eventos.

Módulos

ShadowPad es una puerta trasera con múltiples módulos a los que se hace referencia desde el módulo Root con una lista circular desde la cual se puede extraer la localización de un módulo en cuestión, la fecha de UNIX (probablemente incluida automáticamente durante el proceso de compilación del módulo) y un identificador para el módulo. Desde este también se puede extraer el nombre que el desarrollador le dio. Esta versión de ShadowPad incluye los 17 módulos que se muestran en la siguiente tabla:

Tabla 1: Módulos usados en esta versión de ShadowPad

El número de módulos incluidos en esta variante de ShadowPad es muy superior al de otras versiones, que incluían entre 8 y 10.

Por defecto, cada pulsación queda registrada mediante el uso del módulo Keylogger y es guarda en el disco en el archivo %APPDATA%PAGMOEYXWWEYGWAOUE.

El archivo de log es cifrado usando el mismo algoritmo utilizado para cifrar las cadenas estáticas del módulo. El haber usado este módulo por defecto indica que los atacantes están interesados en robar la información que se encuentra en los equipos vulnerados.

Configuración

Al igual que en otras variantes de ShadowPad, el módulo Config contiene una colección de cadenas cifradas a las que se puede acceder desde cualquier otro módulo. La colección de cadenas nunca se almacena totalmente descifrada en memoria, sino que el campo de interés es descifrado cuando se necesita e inmediatamente liberado a posteriori (dejando así de estar disponible con rapidez). El tamaño de la configuración es de 2180 bytes y las cadenas cifradas se encuentra en el offset 0x84. El algoritmo usado para descifrar las cadenas es el mismo que el utilizado para descifrar las cadenas estáticas del módulo. El contenido descifrado de la colección de cadenas es el siguiente:

  • 0x84: 2019/11/7 16:28:36
  • 0x99: CAMPAIGN_ID_REDACTED
  • 0xa1: %ALLUSERSPROFILE%DRMCLRCLR.exe
  • 0xc5: clr_optimization_v4.0.30229_32
  • oxe6: clr_optimization_v4.0.30229_32
  • 0x107: clr_optimization_v4.0.30229_32
  • 0x128: SOFTWAREMicrosoftWindowsCurrentVersionRun
  • 0x158: CLR
  • 0x15e: %ProgramFiles%Windows Media Playerwmplayer.exe
  • 0x197: %windir%system32svchost.exe
  • 0x1b7: TCP://b[redacted].dnslookup.services:443
  • 0x1db: UDP://b[redacted].dnslookup.services:443
  • 0x202: SOCKS4
  • 0x21e: SOCKS5

El ID de esta campaña se encuentra en el offset 0x99, tratándose del nombre de la universidad a la que tiene por objetivo. Tener una ID de campaña relacionada con el objetivo es bastante común en los casos de ShadowPad y Winnti.

Comunicaciones en red

Una vez instalado en el sistema, ShadowPad inicia un proceso escondido y suspendido de Microsoft Windows Media Player, wmplayer.exe, y se incluye a sí mismo en dicho proceso. Comenzará entonces a escuchar las conexiones en el puerto 13567 después de haber actualizado las reglas del cortafuegos.

Llave de registro: HKLMSYSTEMControlSet001servicesSharedAccessParametersFirewallPolicyFirewallRules{816381AB-1400-45E5-B560-B8E11C5988CF}

Valor: v2.10|Action=Allow|Active=TRUE|Dir=In|Protocol=6|Profile=Public|LPort=13567|Name=Network Discovery (TCP)|

El malware Winnti también estaba presente en el ataque

Además de ShadowPad, el malware Winnti también fue encontrado en algunas máquinas de estas dos universidades a finales de octubre (dos semanas antes de ShadowPad) en el archivo C:WindowsSystem32oci.dll and is detected by ESET products as Win64/Winnti.CA.

Winnti normalmente incluye una configuración que especifica una ID de campaña y una URL de C&C. El ID de campaña coincide en todas las máquinas con el nombre de la universidad objetivo. Las URLs de C&C son:

  • w[eliminado].livehost.live:443
  • w[eliminado].dnslookup.services:443

donde las partes eliminadas se corresponden con el nombre de la universidad.

Formato de la URL de C&C

Es posible observar que la URL de C&C usada tanto por Winnti como por ShadowPad se ajusta al esquema [backdoor_type][target_name].domain.tld:443, donde [backdoor_type] es una letra única («w» en el caso de Winnti y «b» en el caso de ShadowPad).

Gracias a dicho formato se encontraron las tres universidades adicionales a las que se ha hecho referencia previamente en este artículo. Los identificadores de campaña encontrados en las muestras analizadas coinciden con el subdominio que forma parte del servidor C&C, lo que verifica que estas muestras son realmente específicas para las universidades afectadas.

Conclusión

El Grupo Winnti todavía usa con asiduidad una de sus puertas traseras insignia, ShadowPad, esta vez contra universidades en Hong Kong. En esta campaña se ha reemplazado el sistema de inicialización protegido con VMProtect, usado con ShadowPad y con la puerta trasera PortEuse, así como skip-2.0 fue reemplazado por un método más simple. El hecho de que estas muestras, además de haber sido encontradas en estas universidades, contengan IDs de campaña que coincidan con el nombre de las instituciones y usen URLs de C&C que contienen el nombre de estas últimas son indicadores fiables de que esta campaña es muy específica.

Indicadores de Compromiso (IoCs)

  • Nombres de detección de ESET
    • Win32/Shadowpad.C trojan
    • Win64/Winnti.CA trojan
  • Nombres de archivos
    • %ALLUSERSPROFILE%DRMCLRhpqhvsei.dll
    • %ALLUSERSPROFILE%DRMCLRCLR.exe
    • C:windowstemphpqhvsei.dll
    • C:windowstemphpqhvind.exe
    • %ALLUSERSPROFILE%DRMCLRhpqhvsei.dll
    • %SYSTEM32%oci.dll
    • %APPDATA%PAGMOEYXWWEYGWAOUE
  • Nombre del servicio
    • clr_optimization_v4.0.30229_32
  • Servidores C&C
    • b[org_name].dnslookup[.]services:443
    • w[org_name].livehost[.]live:443
    • w[org_name].dnslookup[.]services:443
  • Launcher ShadowPad
    • Similar sample to avoid disclosing targeted universities.
    • 693f0bd265e7a68b5b98f411ecf1cd3fed3c84af

Más información:

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.