lunes, 20 de enero de 2014

Analizando un troyano DElephant no detectado

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.

El nombre en clave “DElephant” es un nombre interno usado en nuestro laboratorio para nombrar a ejemplares de este tipo. Otras características son que 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 bytes (incluso megas) considerable.


Llevamos 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. Vamos a estudiar un caso curioso, sobre todo debido a que no ha sido detectado por ningún antivirus en el momento de ser analizado por nuestro laboratorio y observar porque no fue 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 concluimos 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 de nuestro 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. Hemos extraído las imágenes con el programa Foremost (Linux) 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.

Recapitulando, 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 a nuestro análisis.

Los hashes de los archivos analizados:

SHA256 del dropper: d8d11c657fd2c7c71cbadb2cace5e18ff9c87516bea9044a91cdc4fba107259a

SHA256 del DElephant: f5bab65dce3be4c094ea840840ac37437f56c0aa916cb016d53d1b5769329c27


Laurent Delosières