Dentro de HAVEX

Hemos analizado una muestra de Havex y, a partir de ella, hemos elaborado un informe de comportamiento. A lo largo del informe encontraréis todos los detalles de funcionamiento que hemos localizado en nuestro análisis.

Un agradecimiento especial a Manu Quintans y Andriy Brukhovetskyy, que nos ayudaron durante ciertas fases del análisis.



1.- Registro de cambios

Fecha de versiónAutorModificación
15/07/2014Jose PalancoCreación del documento
15/07/2014Guillermo CampilloAnálisis del instalador
18/07/2014Carlos AntoniniAnálisis estático
22/07/2014Jose PalancoAnálisis estático y dinámico
23/07/2014Guillermo CampilloAnálisis estático y dinámico
23/07/2014Jose PalancoRevisión final

2.- Información general

El procedimiento de instalación se lleva a cabo mediante la instalación de una versión modificada del software mbcheck

El original fue sustituido por la versión con puerta trasera y se ofrecía desde un servidor para clientes.

Según la web de mbconnectline:

MB Connect Line GmbH ofrece soluciones universales para el mantenimiento remoto de maquinaria y equipos en todo el mundo. Werner Belle y Siegfried Müller fundaron la empresa en 1997. La sede central, incluido el departamento comercial, se encuentra en Ilsfeld. El desarrollo técnico y la producción se realizan en Dinkelsbuehl.

Los especialistas de MB Connect Line cuentan con años de experiencia y amplios conocimientos. Las soluciones a medida para tareas específicas de cada cliente son uno de los puntos fuertes de MB Connect Line. Por ejemplo, la implementación de protocolos propietarios y la integración de hardware especial (p. ej., Cisco ASA) son algunas de las tareas que hemos resuelto en el pasado. Máquinas de envasado, líneas de producción, plantas solares o plantas de biogás: MB Connect Line ha desarrollado soluciones de mantenimiento remoto que se adaptan a numerosos ámbitos de aplicación.

3.- Información general

El siguiente informe analiza el comportamiento de una muestra de Havex, concretamente la versión 043. El instalador de mbcheck descomprime un fichero dll, lo guarda en %TEMP%\mbcheck.dll y lo ejecuta de forma silenciosa.

En resumen, la muestra realiza las siguientes acciones:

  1. Se autoinstala de forma persistente en el sistema
  2. Escanea los equipos de la misma red
  3. Detecta si alguno de los equipos tiene instalado un servidor OPC
  4. Escanea los servicios OPC disponibles y obtiene los nombres de sus tags
  5. Cifra la información obtenida
  6. Envía la información a los servidores de control

4.- Análisis estático

4.1 Información del fichero

Nombre
mbCHECK.dll

Nombre original
7CFC9E59D3A.dll

Importaciones

  • kernel32.dll
  • user32.dll
  • advapi32.dll
  • shell32.dll
  • ole32.dll
  • wininet.dll
  • crypt32.dll

imphash
a85560a14f8135bb751c39cfa37081ae

MD5
51502d7d6d188ad87213ca5942f232cf

SHA1
317fd58d53aa3fe0fec209702a879aefb77c148c

SHA256
d5687b5c5cec11c851e84a1d40af3ef52607575487a70224f63458c24481076c

ssdeep
12288:x+Y5rLl9CywddByZqwgaatNgdaLEhjKdT: AY5rLl9Cyw/ByEwTatNgdYEhjKdT

Tamaño del fichero
427.0 KB ( 437248 bytes )

Tipo de fichero
Win32 DLL

Literal mágico
PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit

TrID
InstallShield setup (48.1%)

  • Win32 Executable MS Visual C++ (generic) (34.9%)
  • Win32 Dynamic Link Library (generic) (7.3%)
  • Win32 Executable (generic) (5.0%)
  • Generic Win/DOS Executable (2.2%)

Máquina objetivo
Procesadores Intel 386 o posteriores y procesadores compatibles

Marca de tiempo de compilación
2014-04-11 05:37:36

Fecha de enlazado
6:37 AM 4/11/2014

Punto de entrada
0x00024A7D

4.2 Secciones PE

| Nombre | Dirección virtual | Tamaño virtual | Tamaño en bruto | Entropía |MD5
----------------- | ---------------------------- | ------------------ | .text | 4096|323011|323072|6.70 |ced183458a2afdd2b540df062885dfc4| | .rdata | 323011| 62607 |62976 |4.76 | 9a30e2cc0b8b39737b645163349100a7| | .data | 393216|31356 | 23040 |5.13|19e085a7a23b4f281b2879d13a0ee5bf| | .rsrc | 425984|1208 |1536| 6.77|25d94bb318bf564a26b8e3db16d0ec4b| | .reloc | 430080|25274 |25600| 5.24 |9b44df053516303f2012e1c9768af11a|

4.3 Recursos

  • Nombre MANIFEST

  • Nombre de fichero MANIFEST

  • Tipo de fichero Text

  • Md5 24D3B502E1846356B0263F945DDD5529

  • Nombre ICT

  • Nombre de fichero ICT.bz2

  • Tipo de fichero bzip2 compressed data, block size = 900k

  • Md5 e99d7d4bfc9eeb316ac7a5e4a29b7035

4.3.1 ICT – descomprimido

Al descomprimir el recurso, obtenemos un fichero cifrado. Los detalles para descifrarlo están disponibles en el Anexo “Configuración de la muestra”.

  • Nombre ICT.dump
  • Tipo de fichero data
  • Md5 e7e25cceb1a85945f484ab0d2ff61bf8

4.4 Exportaciones

La biblioteca exporta una única función: RunDLLEntry

4.5 VirusTotal

Ratio de detección: 31/53

| Fabricante AV | Firma del malware |
----------------- | ---------------------------- | ------------------ | AVG | Generic36.PAN Ad-Aware| Trojan.Generic.11277511 AntiVir |TR/Bublik.clgx.1 Antiy-AVL |Trojan/Win32.Bublik Baidu-International| Trojan.Win32.Bublik.apZR BitDefender |Trojan.Generic.11277511 Comodo| UnclassifiedMalware DrWeb |Trojan.Inject1.42303 ESET-NOD32 |Win32/Gertref.E Emsisoft |Trojan.Generic.11277511 F-Secure |Backdoor:W32/Havex.A Fortinet |W32/Bublik.CLGX!tr GData |Trojan.Generic.11277511 Ikarus |Trojan.Bublik K7AntiVirus |Riskware K7GW |Trojan Kaspersky |Trojan.Win32.Bublik.clgx McAfee |RDN/Generic.bfr!gf McAfee-GW-Edition |RDN/Generic.bfr!gf MicroWorld-eScan |Trojan.Generic.11277511 Microsoft| Trojan:Win32/Malagent!gmb Norman| Troj_Generic.UCKCK Panda |Trj/OCJ.E Qihoo-360| Win32/Trojan.880 Sophos| Mal/Generic-S Symantec |WS.Reputation.1 TrendMicro| TROJ_GEN.R0CBC0DEF14 TrendMicro-HouseCall |TROJ_GEN.R0CBC0DEF14 VBA32| Trojan.Bublik VIPRE |Trojan.Win32.Generic!BT nProtect |Trojan.Generic.11277511

4.6 Funciones

Función svcprocess043.dll!W_CreateFileqln_dbx

Esta función se encarga de escribir el fichero qln.dbx en el directorio %TEMP%; también se encarga de enviar la ruta completa.

Función svcprocess043.dll!W_ConnectoCnC

Esta función se divide en tres partes:

  1. Prepara los datos en bruto y comprueba la conexión a internet.
  2. Obtiene los parámetros.
  3. Guarda y cierra las conexiones.
  1. Comprueba y prepara la conexión para la API: InternetConnectW

  1. Prepara los parámetros que se enviarán a la URL, utilizando después la API HttpOpenRequest para enviar peticiones al C&C

Como podemos ver, realiza una petición a un C&C y capturamos el flujo TCP con Wireshark

  1. Si el servidor envía una orden para descargar algún fichero, en esta parte obtiene el fichero del servidor y lo almacena mediante la API InternetReadFile. A continuación, cierra las conexiones mediante la API.

Grafo completo

Función svcprocess043.dll!W_CreateFileXmd

Crea un fichero cifrado con extensión xmb. Los ficheros se descargan del C&C.

Grafo completo:

Función svcprocess043.dll!W_CoInterface

Inicializa la biblioteca COM en el hilo que realiza la llamada y crea un nuevo hilo. Esta función devuelve un CLSID que se utiliza para comunicarse mediante el protocolo OPC con los dispositivos PLC.

| CLSID | Nombre |
----------------- | ---------------------------- | ------------------ 9DD0B56C-AD9E-43EE-8305-487F3188BF7A | IID_IOPCServerList2 13486D51-4821-11D2-A494-3CB306C10000| CLSID_OPCServerList

Grafo completo:

Función svcprocess043.dll!W_RegisterClassExW

Esta función crea una nueva clase y le asigna el método. El nombre de la clase es “button” y apunta a la dirección svcprocess043.dll! W_CreateMainWind.

Crea una nueva clase con el nombre “21f34” y la siguiente estructura:

typedef struct tagWNDCLASSEX {
UINT      cbSize;
UINT      style;
WNDPROC   lpfnWndProc;
int       cbClsExtra;
int       cbWndExtra;
HINSTANCE hInstance;
HICON     hIcon;
HCURSOR   hCursor;
HBRUSH    hbrBackground;
LPCTSTR   lpszMenuName;
LPCTSTR   lpszClassName;
HICON     hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

En esta estructura, lo más importante es el nombre de la clase y el procedimiento que se ejecutará.

El método de esta clase es:

Tras crear y registrar la nueva clase, lanza una ventana oculta con dicha clase.

Función svcprocess043.dll!W_injectDll

Esta función carga la dll descargada previamente y la ejecuta.

Paso 1

Mediante la función svcprocess043.dll!W_GetLibraryW, carga la dll descargada a través de LoadLibraryW

Paso 2

Tras cargar la dll en memoria, llama al método rundll

Grafo completo:

5.- Análisis dinámico

5.1 Entorno

Para ejecutar la muestra, necesitamos un PLC que exporte mediante OPC el estado de los tags. Durante el análisis utilizamos el servidor OPC de Matrikon.

Y el navegador para verificar que el servidor funcionaba correctamente.

5.2 Persistencia

Para iniciar la ejecución, la muestra exporta la función RunDLLEntry. La muestra se instala en el sistema en %SYSTEMROOT%\System32\svcprocess043.dll

A partir de Windows 7, la muestra se copia en %ALLUSERSPROFILE%\svcprocess043.dll

El malware utiliza el registro para conseguir persistencia.

Valor:

Durante la ejecución de este malware, se crean nuevos hilos, llamándose a sí mismo durante la ejecución e inyectándose en los procesos definidos según la configuración. Esta muestra se inyecta en Explorer.exe. Más adelante veremos cómo la configuración de la muestra permite seleccionar el proceso en el que se inyectará.

El proceso modifica el registro creando nuevas claves.

5.3 Diagrama de flujo de la instalación

5.4 Comportamiento

Durante la ejecución, la muestra crea varios ficheros *.XMD,.* DAT, *.DLLs, que se eliminan tras ser utilizados.

Las DLL generadas también contienen recursos que pueden descifrarse con la técnica del Anexo “Extractor de configuración”.

La muestra obtiene mucha información del sistema, información de los servicios OPC y credenciales de Acceso Remoto; después cifra y envía la información al servidor de informes.

5.5 Cambios en el sistema de ficheros

[a-fA-F0-9].tmp | vacío
----------------- | ---------------------------- | ------------------ [a-fA-F0-9].dat | log del escáner [a-fA-F0-9].tmp.xmd | fichero cifrado descargado del C&C [a-fA-F0-9].tmp.yls | informe cifrado [a-fA-F0-9].tmp.dll |

Ejemplo:

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\10.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\10.tmp.yls

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\7.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\7.tmp.xmd

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\8.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\8.tmp.dll

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\9.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\9.tmp.yls

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\A.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\A.tmp.xmd

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\B.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\B.tmp.dll

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\C.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\C.tmp.xmd

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\D.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\D.tmp.dll

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\E.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\E.tmp.dat

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\F.tmp

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\F.tmp.yls

C:\\Documents and Settings\\sandbox\\Configuración local\\Temp\\qln.dbx

5.5.1 Fichero *.dat:

El fichero DAT contiene un log del análisis de los servicios OPC.

Fichero DAT antes de ser eliminado:

Program was started at 23:43:45

**************************************************************************

23:43:56.0593: Start finging of LAN hosts…

23:44:11.0906: Was found 1 hosts in LAN:

   01) [\\FALETE]

**************************************************************************

23:44:22.0046: Start finging of OPC Servers…

23:46:13.0375: Was found 1 OPC Servers.

   1) [\\FALETE\Matrikon.OPC.Universal.1]

   CLSID:            {D7CA0556-C317-4512-8B8C-7543DD7F1626}

   UserType:         MatrikonOPC Universal Connectivity Server

   VerIndProgID:     Matrikon.OPC.Universal

   OPC version support: +++

**************************************************************************

23:46:20.0484: Start finging of OPC Tags…

23:46:20.0546: Thread 01 running…

23:46:22.0140: Thread 01 finished.

   1)[\\FALETE\Matrikon Inc +1-780-945-4011 http://www.matrikonopc.com]

   Saved in ‘OPCServer01.txt’

5.5.2 Ficheros *.dll:

Dllinformación
225.tmp.dllPE32 executable (DLL) (GUI) Intel 80386, for MS Windows
225.tmp.dllMD5 7cff1403546eba915f1d7c023f12a0df
Recursoe5bad153e3c3ee1b735f1926ba573
Dllinformación
228.tmp.dllPE32 executable (DLL) (GUI) Intel 80386, for MS Windows
228.tmp.dll MD5840417d79736471c2f331550be993d79
Recurso900adffc5180c10d463530e3753a3
Dllinformación
228.tmp.dllPE32 executable (DLL) (GUI) Intel 80386, for MS Windows
22A.tmp.dllPE32 executable (DLL) (GUI) Intel 80386, for MS Windows
22A.tmp.dll MD5ba8da708b8784afd36c44bb5f1f436bc
Recursof84dd5aca779592badc5f55ac6c63

NOTA: Este fichero se descarga del servidor.

Esta dll exporta una función con el nombre “rundll” que inicia, mediante hilos, un escaneo de los servicios OPC del equipo. Este escaneo genera un fichero de log en el que se almacena toda la información relativa a los servicios OPC. Esto se realiza mediante la llamada a la API WNetEnumResourceW. Los ficheros se almacenan en la carpeta temporal con extensión .dat.

Como se ve en la imagen, cuando se inicia el proceso de escaneo, la función abre el fichero en modo escritura para añadir los resultados. A continuación, se escanea cada uno de los hosts encontrados por la función WNetEnumResourceW para localizar los servidores OPC.

El resultado es un fichero dat con un informe del proceso de escaneo; este fichero está en texto plano y puede leerse fácilmente.

Program was started at 13:04:57

**************************************************************************

13:08:11.0468: Start finging of LAN hosts…

13:11:52.0156: Was found 1 hosts in LAN:

   01) [\\FALETE]

**************************************************************************

13:12:01.0484: Start finging of OPC Servers…

13:12:29.0796: Was found 1 OPC Servers.

   1) [\\FALETE\Matrikon.OPC.Universal.1]

   CLSID:            {D7CA0556-C317-4512-8B8C-7543DD7F1626}

   UserType:         MatrikonOPC Universal Connectivity Server

   VerIndProgID:     Matrikon.OPC.Universal

   OPC version support: +++

**************************************************************************

13:16:19.0546: Start finging of OPC Tags…

13:16:51.0734: Thread 01 running…

13:16:59.0109: Thread 01 finished.

13:17:07.0531: Thread 01 return error code: 0x00000103

   1)[\\FALETE\Matrikon Inc +1-780-945-4011 http://www.matrikonopc.com]

   Saved in ‘OPCServer01.txt’

Tras completar el escaneo, lee el fichero y lo almacena en memoria antes de eliminarlo; después cifra el contenido y lo guarda como un fichero con extensión yls.

Esta dll no parece subir el fichero que acaba de generar.

Análisis de 228.dll

Esta dll genera un informe completo del sistema en formato xml (Anexo) y después lo guarda cifrado con extensión yls.

Lo primero que hace es crear la cabecera xml:

La muestra añade un nodo “receipt”, que es el nodo raíz en el que se almacena toda la información:

Comprueba si el usuario es administrador; en ese caso, escribe adm. Recorre varias funciones para obtener la información de la máquina, tanto los procesos como los datos del hardware y de las conexiones a internet.

Por último, crea un fichero con extensión yls que contiene los datos xml cifrados

5.5.3 Fichero *.xmd:

Este fichero está cifrado mediante XOR con 1312312, comprimido con bzip2 y codificado en base64. En el Anexo “Scripts” podéis encontrar el script utilizado para descifrarlo.

Proceso de extracción del XMD:

$ file 227.tmp.xmd

227.tmp.xmd: ASCII text, with very long lines, with no line terminators

$ base64 -d 227.tmp.xmd > 227.tmp.bz2

$file 227.tmp.bz2

227.tmp.bz2: bzip2 compressed data, block size = 900k

$ bzip2 -d 227.tmp.bz2

bzip2: Can’t guess original name for 227.tmp.bz2 -- using 227.tmp.bz2.out

$ python decodeResource.py 227.tmp.bz2.out

Good Job Mama!

$ strings -e l 227.tmp.bz2.out.decode

jjjjj

$ file 227.tmp.bz2.out.decode

227.tmp.bz2.out.decode: x86 executable (TV) not stripped

5.6 Cambios en el registro

Creadas:

ClaveValor
HKEY_LOCAL_MACHINE\software\microsoft\Internet Explorer\InternetRegistry fertger49321511259132175120161FD80-c8a7af419640516616c342b13efab”
HKEY_LOCAL_MACHINE\software\microsoft\Windows\CurrentVersion\Explorer\BitBucket NukeOnDelete00000001
HKEY_LOCAL_MACHINE\software\microsoft\Windows\CurrentVersion\Run svcprocess rundll32”C:\WINDOWS\system32\svcprocess043.dll”, RunDllEntry Update
HKEY_CURRENT_USER\software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections SavedLegacySetting3C00000022000000010000000000000000000000000000000400000000000000105CAB43C5A4CF0101000000C0A8018E0000000000000000
HKEY_CURRENT_USER\software\Microsoft\Windows\CurrentVersion\Run svcprocess rundll32”C:\WINDOWS\system32\svcprocess043.dll”
HKEY_CURRENT_USER\software\SandboxAutoExec (Default)31

5.7 Servicios de red

La muestra verifica que exista conexión a internet antes de ejecutar ciertas funciones.

5.7.1 Peticiones DNS

DominioTipoIP
sinfulcelebs.freesexycomics.comA198.63.208.206
rapidecharge.gigfa.comA185.27.134.100

5.7.2 Peticiones HTTP

PUERTONombre de hostRuta
80sinfulcelebs.freesexycomics.com/wp05/wp-admin/includes/tmp/tmp.php id=49321511259132175120161FD80c8a7af419640516616c342b13efab&v1=043&v2=170393861&q=45474b a5c3a10c8e94e56543c2bd
80rapidecharge.gigfa.com/blogs/wp-content/plugins/buddypress/bp-settings/bp-settings-src.php?id=49321511259132175120161FD80 c8a7af419640516616c342b13efab&v1=043&v2=170393861&q=45474bca5c3a10c8e94e56543c2bd

5.8 Información del proceso

5.8.1 Evasión

  • Comprueba la presencia de depuradores.

  • Elimina los rastros de actividad.

5.8.2 Información recopilada

  • Obtiene información del nombre de usuario.

  • Obtiene el nombre del equipo.

  • Comprueba si el usuario es administrador.

  • Utiliza una tubería (pipe) para la comunicación entre procesos.

  • Enumera los procesos en ejecución.

Si detecta conexiones de Acceso Remoto, abre un servicio llamado “TAPISRV” para obligar al usuario a introducir sus credenciales.

5.8.3 Mutex

  • CTF.LBES.MutexDefaultS-1-5-21-789336058-436374069-1343024091-1003
  • CTF.Compart.MutexDefaultS-1-5-21-789336058-436374069-1343024091-1003
  • CTF.Asm.MutexDefaultS-1-5-21-789336058-436374069-1343024091-1003
  • CTF.Layouts.MutexDefaultS-1-5-21-789336058-436374069-1343024091-1003
  • CTF.TMD.MutexDefaultS-1-5-21-789336058-436374069-1343024091-1003
  • CTF.TimListCache.FMPDefaultS-1-5-21-789336058-436374069-1343024091-1003MUTEX.DefaultS-1-5-21-789336058-436374069-1343024091-1003
  • !MSFTHISTORY!
  • c:!documents and settings!sandbox!configuración local!archivos
  • temporales de internet!content.ie5!
  • c:!documents and settings!sandbox!cookies!
  • c:!documents and settings!sandbox!configuración
  • local!historial!history.ie5!
  • ZonesCounterMutex
  • MSCTF.Shared.MUTEX.AJI (relacionado con RAS)

6.- Conclusiones

Nos enfrentamos a una amenaza que, en este caso, estaba destinada a instalarse en entornos industriales. Se ha observado que han existido distintas versiones, que se han ido refinando con el tiempo. A estas alturas, puede considerarse que ha madurado lo suficiente como para llevar a cabo el robo de información sensible de organizaciones del sector industrial.

7.- Anexo

7.1 Configuración de la muestra

Dentro de la dll principal, podemos encontrar la configuración de Havex en la sección de recursos. Mediante la herramienta PeStudio, obtenemos el recurso haciendo un volcado de dicha sección.

El resultado es un fichero bzip2 que contiene datos cifrados.

Tras descomprimirlo, podemos descifrar el fichero con el script decryptResource.py (Anexo). Este script crea un nuevo fichero llamado % file% .decode

~/virus/Havex$ python decodeResuocer.py setting

Después, con el comando strings podemos ver la configuración:

~/virus/Havex$ strings -e l setting.decode

7.2 Resultados


MTMxMjMxMg==
base64(1312312)

Havex
nombre

14400000
desconocido

Explorer.EXE
Proceso en el que se inyecta

sinfulcelebs.freesexycomics.com/wp05/wp-admin/includes/tmp/tmp.php rapidecharge.gigfa.com/blogs/wp-content/plugins/buddypress/bp-settings/bp-settings-src.php URL de los C&C

AATXn+MiwLu+xCoMG7SqY1uQxAk1qLdyoED9LxIVQr2Z/gsrHIsgTvK9AusdFo+9fzAxf1zXj42880+kUmktmVb5HSYi8 27Q54eQ4ZLUFKPKZstgHcwPVHGdwpmmRmk09fL3KGd9SqR60Mv7QtJ4VwGDqrzOja+Ml4SI7e60C4qDQAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB Clave pública

c8a7af419640516616c342b13efab
desconocido

45474bca5c3a10c8e94e56543c2bd
desconocido

600000
desconocido

2000
desconocido

323000
desconocido

svcprocess
Nombre del fichero de instalación (svcprocess+043.dll)

7.3 Servidores C&C

Nombre | Dirección| Nombre de host | IP | País
----------------- | ---------------------------- | ------------------ freesexycomics.com| 198.63.208.206| x-screensaver.com| 198.63.208.206| Estados Unidos gigfa.com| 209.51.192.246| f6.c0.33.static.xlhost.com| 209.51.192.246 | Estados Unidos

7.4 Análisis del panel

El panel se encuentra en:

hxxp://sinfulcelebs.freesexycomics.com/wp05/wp-admin/includes/tmp/

Podemos ver los ficheros reportados:

  • 13277210503045816459002FFD18-c8a7af419640516616c342b13efab.ans
  • 3818240600384801751700ACF830-c8a7af419640516616c342b13efab.ans
  • 2152223526142981681400EEFD80-c8a7af419640516616c342b13efab.ans
  • 425788980415205193170035FD58-c8a7af419640516616c342b13efab.ans
  • 3332619927293187450087FA50-c8a7af419640516616c342b13efab.ans

También encontramos una shell protegida con contraseña:

  • hxxp://sinfulcelebs.freesexycomics.com/wp05/wp-admin/includes/tmp/tfdl.php

El otro panel se encuentra en:

  • hxxp://rapidecharge.gigfa.com/blogs/wp-content/plugins/buddypress/bp-settings/

Estos son algunos de los informes:

Havex utiliza 2 ficheros PHP: uno de ellos es la consola de administración y el otro es el recolector de informes.

7.4.1 Panel del C&C

Este panel verifica el usuario y la contraseña, y además guarda la contraseña en la sesión.

La contraseña se almacena como hash md5.

Análisis de las órdenes del C&C:

Orden vx

Orden new

Genera un nuevo fichero que contiene los logs

Orden hash

Esta orden recibe el nombre del fichero y devuelve su md5.

Orden download

Esta orden se utiliza para descargar ficheros.

Orden delete

Esta orden se utiliza para eliminar ficheros.

Orden newans

Orden list

Esta orden lista un directorio.

8.- Scripts

8.1 Extractor de configuración

decryptResource.py

#!/usr/bin/env python

#=============================================================================
#
# Nombre del fichero : decryptResource.py
# Autor              : Guillermo Campillo Perez <guillermo.campillo@drainware.com>
# Fecha de creación  : Jul 2014
#
#=============================================================================
#
# PRODUCTO        : Havex Resource Decrypter
# DEPENDENCIAS    : sys, base64,Crypto
#
# —————————————————————————
# Este documento es propiedad de Drainware: cualquier
# parte del mismo puede reproducirse o transmitirse.
#
# 2014, Drainware, Inc.
# —————————————————————————
#
#=============================================================================

import os
import sys
import base64
from Crypto.Cipher import XOR

def _read(file_name):
   try:
    file_ = open(file_name, 'rb')
    buffer_ = file_.read()
    ss = XOR.XORCipher('1312312')
    y = ''
    for j in buffer_:
        y+=ss.decrypt(j)
    file_restul = open(file_name+'.decode','wb')
    file_restul.write(y)
    print 'Good Job Mama!'
    raw_input()
   except Exception as e:
    print '![x]Error:',e

if len(sys.argv) < 2:
   print '![-]Usage: '+sys.argv[0]+' '
else:
   _read(sys.argv[1])
Blog

¿Hablamos de seguridad?

Charlas, prensa o colaboraciones: escríbeme.