Como parte de nuestra serie sobre troyanos bancarios de América Latina, en esta oportunidad presentamos Mekotio, un troyano bancario que apunta principalmente a Brasil, Chile, México, España, Perú y Portugal cuya característica más notable en las variantes más recientes es el uso de una base de datos SQL como servidor de C&C. Si bien recientemente publicamos un artículo sobre Mekotio, el mismo es un análisis de una variante en particular de este troyano que en ese caso apunta principalmente a usuarios de Chile. Sin embargo, en esta publicación el objetivo es brindar panorama general a partir del análisis del comportamiento de un conjunto de variantes de Mekotio y destacar las principales características de este troyano bancario, así como su desempeño a lo largo del tiempo.
Al igual que ha ocurrido con muchos de los otros troyanos bancarios latinoamericanos que hemos descrito anteriormente en esta serie, el desarrollo de Mekotio a lo largo del tiempo ha seguido un camino bastante caótico y sus características han sido modificadas con mucha frecuencia. Según su versión interna, creemos que se están desarrollando múltiples variantes de este código malicioso de manera simultánea. Sin embargo, al igual que ocurre con Casbaneiro, estas variantes son prácticamente imposibles de separar entre sí, por lo que nos referiremos a todas ellas como Mekotio.
Características de Mekotio
Mekotio es un típico troyano bancario latinoamericano que ha estado activo desde al menos 2015. Como tal, su forma de atacar es desplegando a la víctima ventanas emergentes falsas con el objetivo de convencerla para que divulguen información confidencial. Estas ventanas emergentes están cuidadosamente diseñadas para suplantar la identidad de diferentes entidades bancarias latinoamericanos, así como otras instituciones financieras.
Mekotio recopila la siguiente información sobre sus víctimas:
- Configuración del firewall
- Si la víctima tiene privilegios de administrador
- Versión del sistema operativo Windows instalado
- Si están instalados productos de protección antifraude, más específicamente GAS Tecnologia Warsaw e IBM Trusteer [1]
- Lista de soluciones antimalware instaladas en el equipo
Mekotio garantiza la persistencia en el equipo de la víctima mediante el uso de una llave Run o creando un archivo LNK en la carpeta de inicio.
Como es común en la mayoría de los troyanos bancarios latinoamericanos que hemos analizado en esta serie, Mekotio cuenta con varias capacidades que son típicas de un backdoor. En este sentido, puede tomar capturas de pantalla, manipular ventanas, simular acciones del mouse y del teclado, reiniciar la máquina, restringir el acceso a varios sitios web bancarios y actualizarse. Algunas variantes también pueden robar bitcoins reemplazando una billetera bitcoin en el portapapeles y exfiltrar las credenciales almacenadas por el navegador Google Chrome. Curiosamente, uno de los comandos parece tener como objetivo paralizar la máquina de la víctima al intentar eliminar todos los archivos y carpetas en C:\Windows tree.
Una forma de identificar Mekotio es un cuadro de mensaje específico que el troyano muestra en varias ocasiones (consulte la Figura 2).
Para facilitar el robo de contraseñas mediante su función de keylogger, Mekotio desactiva la opción "Autocompletar" en Internet Explorer. Esta función, cuando está habilitada, ahorra tiempo a los usuarios de Internet Explorer al recordar campos que se han completado previamente. Mekotio desactiva esta función cambiando los siguientes valores del Registro de Windows:
- HKCU\Software\Microsoft\windows\CurrentVersion\Explorer\AutoComplete\
- AutoSuggest = “No”
- HKCU\Software\Microsoft\Internet Explorer\Main\
- Use FormSuggest = “No”
- FormSuggest Passwords = “No”
- FormSuggest PW Ask = “No”
Como mencionamos al comienzo de este artículo, para un análisis en profundidad de una variante en particular de Mekotio que apunta principalmente a Chile, lea este artículo publicado recientemente por ESET.
Distribución de Mekotio
Creemos que el principal método de distribución de Mekotio es el spam (consulte la Figura 3 para ver un ejemplo). Desde 2018, hemos observado 38 cadenas de distribución diferentes utilizadas por esta familia. La mayoría de estas cadenas constan de varias etapas y terminan descargando un archivo ZIP, lo cual es típico en los troyanos bancarios latinoamericanos. En las siguientes secciones analizamos las dos cadenas más utilizadas.
Cadena 1: pasando contexto
La primera cadena consta de cuatro etapas consecutivas, como se ilustra en la Figura 4. Un simple BAT droppea un downloader en VBScript y lo ejecuta usando dos parámetros de línea de comando: un verbo HTTP personalizado [2] ("111SA") y una URL desde la cual descarga la siguiente etapa. El downloader descarga la siguiente etapa (otro downloader) desde la URL proporcionada mientras usa un valor de User-Agent personalizado ("MyCustomUser" y sus variaciones). La tercera etapa descarga un script de PowerShell, corrigiendo la URL desde la cual descargar Mekotio dentro del cuerpo del script, antes de ejecutarlo. Luego, el script de PowerShell descarga Mekotio desde la URL corregida y lo instala y ejecuta (el proceso de ejecución se describe en detalle más adelante).
Hay dos cosas interesantes sobre esta cadena. La primera es el uso de valores personalizados tanto para el encabezado User-Agent como para el verbo HTTP. Estos se pueden utilizar para identificar parte de la actividad de la red de Mekotio.
El otro aspecto interesante es el paso de contexto (ya sea como argumentos de línea de comando o modificando el cuerpo de la siguiente etapa). Esta es una forma simple, pero efectiva, de antianálisis, porque si tiene el Downloader 1 sin el Dropper correspondiente, no tendrá ni la URL ni el verbo HTTP personalizado necesario para obtener la siguiente etapa del malware. Asimismo, tener Downloader 3 sin Downloader 2 es inútil, porque falta la URL. Este enfoque dificulta el análisis si no se tiene conocimiento del contexto.
Cadena 2: MSI con JavaScript embebido
Como ocurre con muchos otros troyanos bancarios latinoamericanos: Mekotio utiliza MSI en algunas de sus últimas cadenas de distribución. En este caso, la cadena es mucho más corta y menos robusta, ya que solo un único JavaScript, que sirve como etapa final, se integra en el MSI y se ejecuta.
En comparación con la etapa final de PowerShell de la cadena anterior, existen algunas similitudes visibles. La principal (que se muestra en la Figura 5) es la rutina de instalación, llamada después de descargar y extraer el archivo ZIP, que cambia el nombre de los contenidos del archivo ZIP extraído según el tamaño del archivo. Eso está estrechamente relacionado con el método de ejecución que se describe en la siguiente sección.
Ejecución mediante el abuso del intérprete de AutoIt
Mekotio se ejecuta más comúnmente abusando del intérprete legítimo de AutoIt. En este escenario, el archivo ZIP contiene (además del troyano bancario Mekotio) un intérprete legítimo de AutoIt y un pequeño script de injector o loader de AutoIt. La etapa final de la cadena de distribución ejecuta el intérprete de AutoIt y le pasa el script del loader o injector para que lo interprete. Ese script luego ejecuta el troyano bancario. La figura 6 ilustra todo el proceso.
Mekotio no es el único troyano bancario latinoamericano que utiliza este método, pero lo favorece significativamente más que sus competidores.
Criptografía
El algoritmo utilizado para cifrar strings en los binarios de Mekotio es esencialmente el mismo que utiliza Casbaneiro. Sin embargo, muchas variantes de Mekotio modifican cómo se procesan los datos antes de ser descifrados. Los primeros bytes de la llave de descifrado hardcodeada pueden ignorarse, al igual que algunos bytes de la string cifrada. Algunas variantes codifican aún más strings cifradas con base64. Los detalles de estos métodos varían.
Comunicación con el servidor de C&C
Base de datos SQL como servidor C&C
Algunas variantes de Mekotio basan su protocolo de red en Delphi_Remote_Access_PC , al igual que Casbaneiro. Cuando ese no es el caso, Mekotio utiliza una base de datos SQL como una especie de servidor C&C. Esta técnica no es desconocida en relación a los troyanos bancarios latinoamericanos. En lugar de un comando SELECT, Mekotio parece depender de la ejecución de procedimientos SQL. De esa forma, no queda claro de inmediato cómo se ve la base de datos subyacente. Sin embargo, la string de inicio de sesión todavía está hardcodeada en el binario.
Generación de direcciones de servidor C&C
Hemos observado tres algoritmos utilizados por Mekotio para obtener la dirección de su servidor C&C. Los describimos a continuación en el orden cronológico en que los encontramos.
Basado en listas hardcodeadas de "dominios falsos"
El primer método se basa en dos listas de dominios hardcodeadas: una para generar el dominio del C&C y la otra para el puerto. Se elige un dominio aleatorio de ambas listas y se resuelve. La dirección IP se modifica aún más. Al generar el dominio de C&C, se resta un número hardcodeado del último octeto de la dirección IP resuelta. Al generar el puerto de C&C, los octetos se unen y se tratan como un número. Para mayor claridad, hemos implementado ambos algoritmos en Python, como se observa en la Figura 7. Nótese que este enfoque es sorprendentemente similar al utilizado por Casbaneiro (método número 5).
def generate_domain(base_domains, num):
domain = to_ip(random.choice(base_domains))
octets = domain.split(".")
octets[3] = chr(int(octets[3]) - num)
return octets.join(".")
def generate_port(base_domains):
domain = to_ip(random.choice(base_domains))
return int(domain.split(".").join(""))
Figura 7. Código para generar dominio y puerto del C&C a partir de listas de dominios hardcodeadas
Basado en la hora actual
El segundo enfoque utiliza un DGA basado en la hora local actual (por lo tanto, la zona horaria de la víctima afecta el resultado). El algoritmo toma el día actual de la semana, el día del mes y la hora y los usa para generar una única string. Luego calcula el MD5 de esa string, representada como una string hexadecimal. El resultado unido con un sufijo hardcodeado es el dominio del servidor de C&C (su puerto está hardcodeado en el binario). La Figura 8 muestra nuestra implementación en Python de este algoritmo.
day_names = {
0: "MON",
1: "TUE",
2: "WED",
3: "THU",
4: "FRI",
5: "SAT",
6: "SUN",
}
hour_names = {
7: "AM02",
8: "AM03",
9: "AM04",
10: "AM05",
11: "AM06",
12: "PM01",
13: "PM02",
14: "PM03",
15: "PM04",
16: "PM05",
17: "PM06"
}
def get_hour_name(hour):
if hour <= 6 or hour >= 18:
return "AM01"
else
return hour_names[hour]
def generate_domain(suffix):
time = get_current_time()
dga_data = "%s%02d%s" % (day_names[time.dayOfWeek], time.day, hour_names[time.hour])
dga_data = hexlify(md5(dga_data))
return dga_data.lower() + suffix
Figura 8. Código para generar dominio de C&C basado en la hora actual
Basado en el día actual
El tercer algoritmo es algo similar al segundo. Se diferencia en el formato de la string creada a partir de la hora local y en el hecho de que utiliza un sufijo diferente cada día. Además, genera el puerto de C&C de manera similar. Una vez más, la reimplementación del código en Python se ilustra en la Figura 9.
def generate_domain(domains_list, subdomain):
time = get_current_time()
dga_data = "%02d%02d%s" % (time.day, time.month, subdomain)
dga_data = hexlify(md5(dga_data))
return dga_data[:20] + "." + domains_list[time.day - 1]
def generate_port(portstring):
time = get_current_time()
return int("%d%02d%d" % (time.day, time.dayOfWeek, time.month))
Figura 9. Código para generar puerto y dominio de C&C basado en el día actual
¿Múltiples variantes concurrentes?
Ya mencionamos que, al igual que otros troyanos bancarios latinoamericanos, Mekotio sigue un ciclo de desarrollo bastante caótico. Sin embargo, además de eso, hay indicadores de que hay múltiples variantes de Mekotio siendo desarrolladas de manera simultánea.
Los dos indicadores principales son el versionado interno y el formato de la string utilizada para extraer información sobre la máquina de la víctima recopilada por Mekotio. Hemos identificado cuatro esquemas de versiones diferentes:
- Numeración (001, 002, 072, 39A,…)
- Versión por fecha (01-07, 15-06, 17-10, 20-09,…)
- Versión por fecha completa (02_03_20, 13_03_20, 26_05_20,…)
- Numeración y fecha combinadas (103–30-09, 279–07-05, 293–25-05,…)
Cada uno de estos esquemas está asociado con un formato específico de la string de datos exfiltrados. Dado que vemos varios de estos esquemas simultáneamente, creemos que puede haber múltiples actores maliciosos utilizando diferentes variantes de Mekotio.
Conclusión
En esta publicación hemos analizado a Mekotio, un troyano bancario latinoamericano activo desde al menos 2015. Al igual que sucede con otros troyanos bancarios descritos en esta serie, Mekotio presenta características comunes con otros malware de este tipo, como es el hecho de estar escrito en Delphi, usar ventanas emergentes falsas, contar con una funcionalidad de backdoor y dirigirse a países de habla hispana y portuguesa.
Nos hemos centrado en las características más interesantes de este troyano bancario, como su principal método de ejecución al abusar del intérprete legítimo de AutoIt, utilizar la base de datos SQL como servidor de C&C o los diferentes métodos que utiliza Mekotio para generar la dirección de su servidor de C&C.
También hemos mencionado varias características que son sorprendentemente similares a Casbaneiro.
Para cualquier consulta, contáctenos en threatintel@eset.com. Los indicadores de compromiso también se pueden encontrar en nuestro repositorio de GitHub.
Indicadores de Compromiso (IoCs)
Hashes
Muestras de Mekotio
SHA-1 | Description | ESET detection name |
---|---|---|
AEA1FD2062CD6E1C0430CA36967D359F922A2EC3 | Mekotio banking trojan (SQL variant) | Win32/Spy.Mekotio.CQ |
8CBD4BE36646E98C9D8C18DA954942620E515F32 | Mekotio banking trojan | Win32/Spy.Mekotio.O |
297C2EDE67AE6F4C27858DCB0E84C495A57A7677 | Mekotio banking trojan | Win32/Spy.Mekotio.DD |
511C7CFC2B942ED9FD7F99E309A81CEBD1228B50 | Mekotio banking trojan | Win32/Spy.Mekotio.T |
47C3C058B651A04CA7C0FF54F883A05E2A3D0B90 | Mekotio banking trojan | Win32/Spy.Mekotio.CD |
Intérprete de AutoIt legítimo siendo abusado
SHA-1 | Description | ESET detection name |
---|---|---|
ACC07666F4C1D4461D3E1C263CF6A194A8DD1544 | AutoIt v3 Script interpreter | clean |
Comunicación de red
- User-Agent: “MyCustomUser”, “4M5yC6u4stom5U8se3r” (and other variations)
- HTTP verb: “111SA”
Billeteras de bitcoin
- 1PkVmYNiT6mobnDgq8M6YLXWqFraW2jdAk
- 159cFxcSSpup2D4NSZiuBXgsGfgxWCHppv
- 1H35EiMsXDeDJif2fTC98i81n4JBVFfru6
Técnicas de MITRE ATT&CK
Esta tabla fue creada utilizando la versión 7 del framework de MITRE ATT&CK .
Tactic | ID | Name | Description |
---|---|---|---|
Initial Access | T1566.002 | Phishing: Spearphishing Link | Mekotio distribution chains start with a malicious link in an email. |
Execution | T1059 | Command and Scripting Interpreter | Mekotio is most commonly executed by abusing the legitimate AutoIt interpreter. |
T1059.001 | Command and Scripting Interpreter: PowerShell | Mekotio uses PowerShell to execute its distribution chain stages. | |
T1059.005 | Command and Scripting Interpreter: Visual Basic | Mekotio uses VBScript to execute its distribution chain stages. | |
Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | Mekotio ensures persistence by using a Run key or creating a LNK file in the startup folder. |
Defense Evasion | T1218 | Signed Binary Proxy Execution | Mekotio is executed by running a legitimate AutoIt interpreter and passing a loader script for it to interpret. |
Credential Access | T1555.003 | Credentials from Password Stores: Credentials from Web Browsers | Mekotio steals credentials from the Google Chrome browser. |
Discovery | T1010 | Application Window Discovery | Mekotio discovers various security tools and banking applications based on window names. |
T1083 | File and Directory Discovery | Mekotio discovers banking protection software based on file system paths. | |
T1518.001 | Software Discovery: Security Software Discovery | Mekotio detects the presence of banking protection products. | |
T1082 | System Information Discovery | Mekotio collects information about the victim's machine, such as firewall status and Windows version. | |
Collection | T1056.001 | Input Capture: Keylogging | Mekotio is capable of capturing keystrokes. |
Command and Control | T1568.002 | Dynamic Resolution: Domain Generation Algorithms | Mekotio generates its C&C domain using a DGA. |
T1568.003 | Dynamic Resolution: DNS Calculation | Mekotio uses an algorithm to modify the resolved IP address to obtain the actual C&C address. | |
T1095 | Non-Application Layer Protocol | Mekotio’s network protocol in variants not using SQL is based on Remote_Delphi_Access_PC. | |
Exfiltration | T1041 | Exfiltration Over C2 Channel | Mekotio sends the data it retrieves to its C&C server. |
[1] Soluciones anti fraude utilizadas frecuente en América Latina.
[2] Verbos HTTP comunes son GET y POST.