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.).
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.
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.
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 "/".
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.
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. |