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.
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).
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.
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.
¿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.