IDA es una herramienta muy poderosa para el análisis estático de malware. Puede configurarse también para realizar debugging de los ejecutables que estemos analizando, aunque no muchos lo utilizan de este modo, ya sea por desconocimiento o por no saber cómo configurarlo correctamente. Hoy vamos a ver los pasos necesarios para lograrlo.

Requisitos

  • Un equipo con IDA instalado. En nuestros ejemplos va a ser una máquina virtual con Windows 7.
  • Un equipo donde se va a ejecutar el malware. También usaremos otra VM.
  • Que ambos equipos se vean entre sí.
  • Que en los dos equipos haya una copia del malware que se quiere analizar.

Copia del debugger

El primer paso consiste en copiar el debugger que viene con IDA al equipo donde se va a correr el malware. Para ello, vamos a la carpeta donde tenemos instalado IDA y luego al directorio dbgsrv. Una vez ahí, elegimos el debugger correspondiente. En nuestro caso es win32_remote.exe, ya que vamos a analizar un ejecutable de Windows de 32 bits.

Una vez que se ha copiado en el otro equipo, hay que ejecutarlo y tomar nota de la dirección IP. También anotamos la ruta completa donde se encuentra el malware en el equipo de debugging.

Configuración

Nuevamente en el equipo de análisis estático, abrimos la muestra con IDA. En la barra de herramientas cambiamos de “No debugger” a “Remote Windows debugger”. Luego, en el menú Debugger vamos a Process options.

Ahí completamos con la ruta hasta el archivo ejecutable en el equipo remoto y la dirección IP que habíamos anotado. Luego colocamos un breakpoint en algún lugar del código con la tecla F2 e iniciamos el proceso de debugging con la tecla F9 (o el botón verde de play).

Cómo debuggear una DLL

El proceso para una DLL es el mismo, pero debemos tener en cuenta que en realidad no vamos a debuggear la DLL, sino el programa rundll32.exe. Debemos encontrar la ruta hasta rundll32.exe en el equipo remoto y elegir el export que queremos ejecutar de la DLL, ya sea por nombre o por ordinal.

Si no queremos empezar por ningún export en particular y nos interesa parar en el Entry Point, podemos elegir el ordinal cero (#0). Al colocar un breakpoint en el Entry Point de la DLL, IDA es lo suficientemente inteligente para hacer el mapeo de la dirección. Sin embargo, si esto no ocurre en versiones más viejas de IDA, lo que puede hacerse es ir a Debugger > Debugger options, y seleccionar la opción de Suspend on library load/unload. Luego vamos avanzando con F9 hasta que se carga la DLL maliciosa en memoria, y colocamos el breakpoint donde nos interese.