Vadokrist es un troyano bancario que ESET ha estado rastreando desde 2018 y que está activo casi exclusivamente en Brasil. En este artículo que forma parte de nuestra serie sobre Troyanos Bancarios de América Latina, examinamos sus principales características y algunas conexiones con otras familias de troyanos bancarios latinoamericanos.

Vadokrist comparte varias funcionalidades importantes con otras de las familias de troyanos bancarios que hemos descrito anteriormente como parte de la serie, como Amavaldo, Casbaneiro, Grandoreiro y Mekotio. Recientemente publicamos un whitepaper en el que documentamos solo las similitudes presentes entre troyanos bancarios de América Latina, mientras que en esta serie de artículos nos centramos más en el análisis técnico de una familia a la vez.

Características de Vadokrist

Vadokrist está escrito en Delphi. Una de las características más notables es la cantidad inusualmente grande de código en los binarios que no es utilizado. Después de un análisis más detenido, creemos que se trata de una estrategia para evadir la detección y disuadir o ralentizar el análisis. Pudimos vincular parte del código a proyectos existentes de Delphi, como QuickReport.

Vadokrist almacena strings dentro de tablas de strings. Solía ​​contener una implementación de una tabla de strings idéntica a Casbaneiro (observe la Figura 1); sin embargo, algunas versiones recientes de este troyano bancario cambiaron al uso de múltiples tablas de strings, cada una con un propósito diferente (lista de blancos de ataque, configuración general, nombres de comandos de backdoor, etc.).

Figura 1. Implementación de la tabla de strings en anteriores binarios de Vadokrist

Cuando se ejecutan por primera vez, la gran mayoría de los troyanos bancarios de América Latina recopilan información de la máquina de la víctima (generalmente el nombre de la computadora y la versión del sistema operativo Windows). Sin embargo, la única información que recopila Vadokrist es el nombre de usuario de la víctima y, a diferencia de la mayoría de los otros troyanos bancarios latinoamericanos que lo hacen en el momento de la instalación, lo hace solo después de iniciar un ataque a una institución financiera apuntada.

Para garantizar la persistencia, Vadokrist utiliza una Run key o crea un archivo LNK en la carpeta de inicio.

Sus capacidades de backdoor son las típicas de este tipo de malware, pudiendo manipular el mouse y simular pulsaciones de teclado, registrar pulsaciones del teclado, tomar capturas de pantalla y reiniciar la máquina. También puede impedir el acceso a algunos sitios web, lo que hace de una manera bastante torpe al terminar el proceso del navegador cuando la víctima intenta visitar dichos sitios web. Creemos que esta técnica se utiliza para evitar que las víctimas accedan a sus cuentas bancarias en línea una vez que los atacantes las han comprometido, ayudándolos a mantener el control.

Criptografía

La mayoría de los binarios de Vadokrist implementan un algoritmo criptográfico que hemos visto en otros troyanos bancarios latinoamericanos (Amavaldo y Casbaneiro) que hemos denominado TripleKey. Vadokrist usa este algoritmo para proteger sus strings y, ocasionalmente, también los payloads y las configuraciones remotas (profundizaremos en este tema más adelante). Para mayor claridad, hemos implementado el algoritmo en Python, como se ve en la Figura 2.

def decrypt_payload(data_enc, key1, key2, key3):
    data_dec = str()

    for c in data_enc:
		x = data_enc[i] ^ (key3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((x + key3) & 0xFF) * key1 + key2

    return data_dec

def decrypt_string(data_enc, key1, key2, key3):
    data_dec = str()

    for c in data_enc:
		x = data_enc[i] ^ (key3 >> 8) & 0xFF
		data_dec += chr(x)
		key3 = ((data_enc[i] + key3) & 0xFFFF) * key1 + key2

    return data_dec

Figura 2. Esquema de cifrado TripleKey utilizado por Vadokrist para proteger strings, payloads y configuraciones remotas

Además de eso, hemos visto a Vadokrist usando RC4 en algunos de sus binarios recientes y, en el pasado, también TwoFish. Esto es bastante raro entre los troyanos bancarios latinoamericanos, ya que la mayoría de ellos nunca utilizan algoritmos criptográficos conocidos.

Distribución

"MSI overload"

Los correos de spam recientes que distribuyen Vadokrist contienen dos archivos ZIP anidados que contienen dos archivos: un instalador MSI y un archivo CAB. Si una víctima ejecuta el instalador MSI, localiza el archivo CAB y extrae su contenido (un loader MSI) en el disco. Luego ejecuta un archivo JavaScript embebido que agrega una entrada de Run key, asegurándose de que el loader MSI se ejecute al iniciar el sistema. Finalmente, el script reinicia la máquina. Al iniciarse, el loader MSI ejecuta una DLL incorporada: el troyano bancario Vadokrist. Todo el proceso se ilustra en la Figura 3. Observe que no existe un downloader; el troyano bancario se distribuye directamente a través de estos correos electrónicos no deseados.

Figura 3. Cadena de ejecución utilizada recientemente por Vadokrist

Vale la pena mencionar el archivo JavaScript debido a su ofuscación. Aprovecha cómo funciona el operador de coma (,) en JavaScript y abusa de él para reducir en gran medida la legibilidad y posiblemente para omitir la emulación. Ofusca condiciones utilizando el operador lógico AND (&&) de una manera similar. Vea un ejemplo en la Figura 4.

Figura 4. Instalador de JavaScript utilizado por Vadokrist. La parte inferior muestra el script con operadores transformados para una mejor legibilidad.

Técnicas de distribución y ejecución más antiguas

Observamos que Vadokrist, al igual que la mayoría de los otros troyanos bancarios latinoamericanos, utiliza varias implementaciones de la cadena de distribución típica. No los cubriremos todos, pero vale la pena mencionar dos. Hemos visto a Vadokrist compartir un downloader en Delphi con Grandoreiro y una cadena de distribución completa con Mekotio; más específicamente, la que está marcada como Cadena 1 en nuestro artículo acerca de Mekotio.

Vadokrist ocasionalmente se apoya en la carga lateral de DLL con un injector específico para descifrar y ejecutar el troyano bancario. Este injector es idéntico al utilizado por Amavaldo e implementa el antes mencionado algoritmo TripleKey para el descifrado de datos.

Configuración remota

Vadokrist utiliza configuración remota tanto en downloaders como en el propio troyano bancario, generalmente alojado en servicios de almacenamiento público como GitHub.

El archivo de configuración generalmente está cifrado, ya sea por TripleKey o por RC4. En la Figura 5 se puede observar que en ambos casos los datos se pueden descifrar sin ningún conocimiento adicional; en el caso del método TripleKey, pudimos extraer las tres claves del final de la string, y en el caso de RC4, pudimos derivar la clave de la contraseña. En el caso de la última, los datos cifrados son además codificados en base64.

El delimitador también cambia de vez en cuando. Hasta ahora, hemos visto tres caracteres diferentes utilizados: "|", "!" y "/".

Figura 5. Archivos de configuración remota cifrados usados ​​por Vadokrist

Ahora que sabemos cómo descifrar el archivo de configuración, examinemos su contenido. En el caso del troyano bancario, el resultado es fácil de entender, ya que es la dirección IP de un servidor de C&C. Para los downloaders, el formato es un poco más complejo, como se ilustra en la Figura 6.

Figura 6. Diferentes formatos de configuración remota utilizados por los downloaders de Vadokrist

Para simplificar, reconocemos una configuración con un ID opcional y seis campos:

  • [obligatorio] La URL desde la que se descarga el troyano bancario
  • [opcional] Carpeta especial (primera parte de la ruta de instalación)
  • [opcional] Indicador de instalación (descrita a continuación)
  • [opcional] Ruta (segunda parte de la ruta de instalación)
  • [opcional] Nombre de archivo (tercera y última parte de la ruta de instalación)
  • [obligatorio] URL de notificación

Dos de estos campos pueden requerir una explicación más detallada. Si el indicador de instalación se establece en "T", se utilizarán las tres partes de la ruta de instalación; de lo contrario, se ignorará la primera. Lo único que se envía a la URL de notificación es si se está ejecutando una aplicación Core.exe –una comprobación similar a la que realizan otros troyanos bancarios latinoamericanos que intentan detectar la presencia del software antifraude Warsaw GAS Tecnologia.

Puede ver que la primera variante usa todos los campos, la segunda no usa el ID y la tercera solo usa los dos campos obligatorios de URL. El uso de delimitadores aquí es un poco más complejo, ya que un delimitador se usa para separar diferentes entradas y otro diferente para separar campos de una entrada. Además, puede ver que los delimitadores también cambian aquí.

El dinámico cambio de formato del archivo de configuración indica que Vadokrist está en desarrollo activo y continuo.

Conclusión

En esta publicación analizamos Vadokrist, un troyano bancario de América Latina que se centra en Brasil. Hemos demostrado que tiene las características típicas de los troyano bancario de América Latina: está escrito en Delphi, cuenta con funcionalidad de backdoor y se dirige a instituciones financieras. Su principal desviación de la implementación típica es que no recopila información sobre las víctimas justo después de comprometer con éxito sus máquinas.

Hemos cubierto sus esquemas de cifrado, métodos de distribución y ejecución y formatos de configuración remota. Vadokrist parece estar conectado con Amavaldo, Casbaneiro, Grandoreiro y Mekotio, otros de los troyanos bancarios latinoamericanos que hemos analizado en otros artículos que forman parte de nuestra serie.

Por cualquier consulta, escríbanos a threatintel@eset.com. Los Indicadores de Compromiso también se pueden encontrar en nuestro repositorio de GitHub.

Indicadores de Compromiso (IoCs)

Hashes

Campaña “MSI overload”

SHA-1 Description ESET detection name
D8C6DDACC42645DF0F760489C5A4C3AA686998A1 MSI installer JS/TrojanDownloader.Banload.ABD
01ECACF490F303891118893242F5600EF9154184 MSI loader Win32/Spy.Vadokrist.T
F81A58C11AF26BDAFAC1EB2DD1D468C5A80F8F28 Vadokrist banking trojan Win32/Spy.Vadokrist.T

Otro

SHA-1 Description ESET detection name
8D7E133530E4CCECE9CD4FD8C544E0913D26FE4B Vadokrist banking trojan Win32/Spy.Vadokrist.AF
AD4289E61642A4A724C9F44356540DF76A35B741 Vadokrist banking trojan Win32/Spy.Vadokrist.T
BD71A9D09F7E445BE5ACDF412657C8CFCE0F717D Vadokrist banking trojan Win32/Spy.Vadokrist.AD
06C0A039DEDBEF4B9013F8A35AACD7F33CD47524 Downloader (MSI/JS) JS/TrojanDownloader.Banload.AAO
FADA4C27B78DDE798F1E917F82226B983C5B74D8 Downloader (Delphi) Win32/Spy.Vadokrist.Y
525FCAA13E3867B58E442B4B1B612664AFB5A5C0 Injector shared with Amavaldo Win32/Spy.Amavaldo.L

Servidores C&C recientes

  • 104.41.26[.]216
  • 104.41.41[.]216
  • 104.41.47[.]53
  • 191.232.212[.]242
  • 191.232.243[.]100
  • 191.235.78[.]249
  • 191.237.255[.]155
  • 191.239.244[.]141
  • 191.239.245[.]87
  • 191.239.255[.]102

Técnicas de MITRE ATT&CK

Nota: esta tabla fue creada utilizando la versión 8 del framework de MITRE ATT&CK.

Tactic ID Name Description
Resource Development T1583.001 Acquire Infrastructure: Domains Vadokrist registers its own domains to be used as C&C servers.
T1587.001 Develop Capabilities: Malware Vadokrist is operated by the same group that develops it.
Initial Access T1566.001 Phishing: Spearphishing Attachment Vadokrist is distributed as a spam attachment.
Execution T1059.001 Command and Scripting Interpreter: PowerShell Vadokrist uses PowerShell in some distribution chains.
T1059.005 Command and Scripting Interpreter: Visual Basic Vadokrist uses VBScript in some distribution chains.
T1059.007 Command and Scripting Interpreter: JavaScript/JScript Vadokrist uses JavaScript in its recent distribution chains.
T1204.002 User Execution: Malicious File Vadokrist relies on the user to execute the malicious binary.
Persistence T1547.001 Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder Vadokrist ensures persistence via Run key or LNK file in the startup folder.
Defense Evasion T1140 Deobfuscate/Decode Files or Information Vadokrist is often distributed encrypted and encrypts its remote configuration.
T1574.002 Hijack Execution Flow: DLL Side-Loading Vadokrist is sometimes executed by this technique.
T1036.005 Masquerading: Match Legitimate Name or Location Vadokrist masquerades as legitimate software.
T1218.007 Signed Binary Proxy Execution: Msiexec Vadokrist uses the MSI format for execution.
Credential Access T1056.001 Input Capture: Keylogging Vadokrist can capture keystrokes.
Discovery T1010 Application Window Discovery Vadokrist looks for bank-related windows based on their names.
T1057 Process Discovery Vadokrist tries to discover anti-fraud software by process name.
T1082 System Information Discovery Vadokrist discovers victim’s username.
T1113 Screen Capture Vadokrist can take screenshots.
Command and Control T1132.002 Data Encoding: Non-Standard Encoding Vadokrist communicates via a custom protocol encrypted with the TripleKey algorithm.
Exfiltration T1041 Exfiltration Over C2 Channel Vadokrist exfiltrates data via C&C server.