Hesperbot – Análisis técnico 1 de 2

El siguiente artículo es una traducción y adaptación del publicado por nuestro compañero Robert Lipovsky en el blog oficial de ESET WeLiveSecurity.

Win32/Spy.Hesperbot es un nuevo troyano bancario que ha estado afectando a usuarios de banca online en Turquía, la República Checa, Portugal y el Reino Unido. Para más información acerca de las campañas de propagación de este malware y sus víctimas se puede consultar el primer post publicado al respecto. En este artículo descubriremos los detalles técnicos del malware, incluyendo la arquitectura general así como también su componente móvil.

Visión general

Como otras familias de malware, Win32/Spy.Hesperbot posee una arquitectura modular. En el primer paso de la infección, la víctima descarga y ejecuta un componente de descarga de ficheros (dropper). Este dropper se encuentra protegido por un empaquetador de malware personalizado y distribuido en un archivo ZIP.

1_Diagramy-01

Imagen 1 – Visión general de los módulos iniciales de Hesperbot

La función del dropper es inyectar el componente principal (core) en el fichero explorer.exe. A continuación, el core descarga y carga módulos adicionales, complementos utilizados para realizar acciones maliciosas.

Screen-Shot-2013-09-06-at-11.00.35

Imagen 2 – Descripción de los módulos de Win32/Spy.Hesperbot

Los distintos módulos se encuentran disponibles en variantes x86 y x64, de acuerdo con el sistema anfitrión.

También están disponibles algunas funciones internas de módulos individuales para que otros módulos puedan usarlo a través de una tabla de métodos virtual (vtable).

Hemos aplicado ingeniería inversa a los componentes del malware y resaltaremos las características más interesantes en los siguientes párrafos. La mayoría de componentes del malware fueron compilados usando Visual Studio 2010 y escritos en el lenguaje de programación C, pero sin utilizar la librería  Run-Time de C. Aun sin ser el malware más sofisticado que hayamos analizado, Win32/Spy.Hesperbot no puede ser considerado una obra de aficionados.

Módulos principales

Dropper

El dropper puede utilizar uno entre varios métodos para inyectar el componente core en la dirección de espacio de explorer.exe:

  • Iniciando una nueva instancia de explorer.exe y modificando su punto de entrada usando NtGetContextThread para apuntar a su propio código (escrito utilizando WriteProcessMemory). Esto puede hacerse bien directamente o a través de un proceso intermedio attrib.exe.
  • Inyectándose a sí mismo en el fichero existente explorer.exe utilizando el elaborado truco Shell_TrayWnd/SetWindowLong/SendNotifyMessage usado en PowerLoader y otro malware (Aleks Matrosov ha publicado varios artículos en el blog recientemente, así que no nos extenderemos en este punto).
  • Inyectándose a sí mismo en el archivo explorer.exe utilizando la aproximación común con CreateRemoteThread.

De forma interesante, el método de inyección también está basado dependiendo de si los drivers cmdguard.sys (Comodo) o klif.sys (Kaspersky) se encuentran presentes en el sistema.

Core

El módulo core, ejecutándose ahora en el context del explorer.exe, controla las comunicaciones con el servidor C&C y lanza otros módulos complementarios. La funcionalidad del malware típico, como la de escribir en la llave Run del registro de Windows, también es controlada por core.

Para poder acceder al servidor C&C, Win32/Spy.Hesperbot.A utiliza bien una dirección URL integrada en el código (se observaron varias diferentes en las variantes utilizadas en las botnets de la República Checa, Turquía y Portugal) o genera nuevas direcciones URL del C&C utilizando un algoritmo de generación de dominios en caso de que el primer servidor se encuentre inaccesible.

La siguiente información se envía al servidor de mando y control (C&C):

  • Nombre del bot basándose en el nombre del ordenador
  • Nombre de la botnet – hasta el momento hemos observado “cz-botnet”, “tr-botnet”, “pt-botnet”, “uk-botnet” y “super-botnet” (utilizada en versiones beta tempranas)
  • Direcciones IP de los adaptadores de red presentes
  • Nombres de las Smart-cards activas

Información acerca de los complementos de Hesperbot instalados

31

Imagen 3 – Identificador de la botnet en el código de Hesperbot

De vuelta, el servidor puede enviar:

  • Un archivo de configuración
  • Módulos de complementos
  • Un ejecutable arbitrario para ejecutar
  • Una nueva versión de sí mismo

Varios detalles técnicos sobre  la funcionalidad que acabamos de nombrar son dignos de mención. En  primer lugar, el malware es capaz de numerar las smart cards presentes en el sistema utilizando las funciones API SCardEstablishContext, SCardListReaders y SCardConnect. A diferencia de ataques más sofisticados contra smart-cards (descritos por Aleks aquí y aquí), Win32/Spy.Hesperbot solo recopila nombres de smart-cards y no posee la habilidad para interactuar con ellas.

En segundo lugar, los datos descargados (es decir, el archivo de configuración y los módulos de complementos) están cifrados usando Twofish cipher. La clave de 256 bits es un hash basada en:

  • Nombre del ordenador
  •  [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] “InstallDate”
  • Versión de Windows
  • Arquitectura del procesador (x86, x64 o IA64)
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography] “MachineGuid”
  • [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion] “DigitalProductId”

Para almacenar los datos descargados así como también otros binarios auxiliares (p.ej. el registro creado por el módulo keylogger), Hesperbot utiliza un subdirectorio nombrado de forma aleatoria en la ruta %APPDATA%.

El módulo core puede inyectarse a sí mismo en todos los procesos en ejecución. Más aun, un truco no documentado de engancharse al UserNotifyProcessCreate se usa cuando se ejecuta dentro de csrss.exe para asegurarse de que el código del troyano se inyectará en todos los nuevos procesos.

Componente Móvil

Actualmente es común que los troyanos bancarios utilicen componentes móviles (como ZitMo y SpitMo, por ejemplo) para poder saltarse las medidas de autenticación bancaria que usan mTANs (Mobile Transaction Authentication Number).

En los scripts de inyección en web que hemos visto hasta ahora, el malware introduce código en el sitio web, lo que invita al usuario a instalar una aplicación en su teléfono móvil. A la víctima se le ofrece un listado de modelos de teléfono y, tras introducir su número de teléfono, se envía un enlace a su móvil para descargar el componente móvil. Se soportan tres plataformas de móviles: Android, Symbian y Blackberry.

41

Imagen 4 – Plataformas móviles soportadas en un Javascript inyectado en web

Hemos analizado las versiones para Symbian y Android, pero no hemos podido obtener una muestra del malware para Blackberry. La versión para Symbian soporta una amplia variedad de dispositivos, incluyendo Symbian S60 3ª edición, Symbian S60 5ª edición y la más reciente, Symbian 3.

Ambos troyanos móviles analizados muestran una funcionalidad similar. Primero se realiza un “procedimiento de activación”. El Javascript de inyección web en el ordenador infectado por Hesperbot genera un “número de activación” aleatorio, que se muestra al usuario. Seguidamente, se le indica al usuario que reintroduzca este número cuando se lo pida la aplicación móvil. Esta aplicación muestra entonces un código de respuesta, que se calcula a partir del número de activación. A continuación se le pide al usuario que introduzca este código en la página web que se muestra en su ordenador para realizar la verificación (el script inyectado contiene el mismo algoritmo para calcular el código de respuesta que el utilizado en el componente móvil). Esta funcionalidad proporciona a los atacantes la confirmación de que la víctima ha instalado el componente móvil con éxito y lo liga con la infección.

51

Captura de pantalla del componente de Android – Android/Spy.Hesperbot.A

Tal y como era de suponer, el código de las versiones Symbian y Android (y muy probablemente también en la versión para Blackberry), registra un servicio que espera a recibir mensajes SMS entrantes y los envía al número de teléfono del atacante. De esta forma, el atacante consigue el código mTAN necesario para registrarse en la cuenta bancaria secuestrada.

El código instalado en el móvil también proporciona al atacante la habilidad de controlar el servicio remotamente a través de comandos SMS.

El componente para Android es detectado por ESET como Android/Spy.Hesperbot.A y la versión Symbian como SymbOS9/Spy.Hesperbot.A

Otras funcionalidades

Keylogger

El modulo keylogger intercepta las pulsaciones de teclas al anclarse en las funciones GetMessage y TranslateMessage en la librería user32.dll. Estas pulsaciones se guardan en un fichero de registro, junto con el nombre del módulo del proceso original y un texto con el título de la ventana. Tras esta operación, el registro se envía al servidor C&C.

Capturas de pantalla y vídeo

Las capturas de pantalla y vídeo se realizan por el módulo httpi si así se especifica en el fichero de configuración.

La funcionalidad de captura de vídeo ha sido usada por el malware Citadel, modificado a partir de Zeus, y proporciona a los atacantes una mejor visión general de lo que está sucediendo en la pantalla de la víctima. Se implementa utilizando funciones Avifil32.dll: AVIFileCreateStream, AVIFileMakeCompressedStream, AVIStreamWrite, etc.

61

Imagen 6– Parte del código de captura de vídeo de Hesperbot

La funcionalidad más común de captura de pantalla se implementa utilizando las funciones de Gdi32.dll BitBlt, GetDIBits, etc.

VNC oculto

La funcionalidad VNC ha sido usada con anterioridad por el infame malware Carberp (de hecho, Carberp ha podido servir como inspiración a los creadores de Hesperbot tras el filtrado de su código fuente). Permite al troyano crear un servidor VNC oculto, al cual se puede conectar remotamente el atacante. Debido a que VNC no desconecta al usuario tal y como hace RDP, el atacante puede conectarse al ordenador de la víctima sin levantar sospechas mientras esta se encuentra trabajando. La sesión de VNC se ejecuta en un escritorio aparte (consulte CreateDesktop en MSDN), de forma invisible para el usuario. El módulo también proporciona al atacante la posibilidad de lanzar un navegador que se encuentre instalado en el sistema anfitrión. De esta forma, el atacante también tendrá acceso a todos los datos asociados con los navegadores (cookies, sesiones, etc.).

En nuestro 3er post hablando sobre Win32/Spy.Hesperbot, comentaremos los detalles técnicos que tienen relación con la interceptación de la red y la funcionalidad de inyección web. Permaneced atentos.

Detectando malware II: la tecnología heurística