Ingeniería inversa de software

Inspeccionando un Malware

En este laboratorio vamos a explorar algunas de las herramientas que puede utilizar un reverse engineer para entender el funcionamiento de un malware. Como vamos a estar corriendo un malware (en específico un trojan Horse) es muy importante que leas las instrucciones y realices los pasos en orden para que no afectes la computadora huésped en que estás trabajando.

Parte A - Process Explorer

  1. Abre Virtual Box. Verás que una de las máquinas virtuales llamada IE11 - Win7. Corre esa máquina virtual. A menos que indiquemos lo contrario, el resto de las instucciones aplican al sistema operativo huesped (el que está corriendo en la máquina virtual).

  2. En C:\reverse\ProcessExplorer, abre la aplicación procexp.exe y observa cómo te muestra la lista de procesos organizados de forma jerarquica. Esto ayuda a visualizar, entre otras cosas, cuál proceso generó a cual.

    ¿Qué proceso generó al procexp.exe? En otras palabras, ¿quién es el proceso padre de procexp.exe? Tu contestación debe estar de acuerdo con lo que mencionó Alyssa Torres en su taller.

  3. Corre chrome, abre varios tabs y algún website dentro de cada tab. En Process Explorer, marca la primera fila que dice 'chrome.exe' y right-click "Properties". Observa todas las informaciones que te ofrece Process Explorer, entre ellas strings, los environment variables, una lista de los threads abiertos por el proceso, información de las conexiones por TCP/IP connections, etc. En particular observar la gran cantidad de conexiones TCP/IP que abre chrome, aun para conectarse a páginas sencillas.

  4. Al igual que en el Task Manager puedes apagar procesos directamente en el Process Explorer. Practica cerrando chrome desde el Process Explorer.

Parte B - Process Monitor

Process Monitor es una aplicación de Windows SysInternals que permite monitorear los recursos que utiliza un proceso que se está ejecutando: sus accesos y modificaciones al Registry, a archivos, al network y los threads creados.

  1. En C:\reverse\ProcessMonitor corre Procmon.exe. Esta aplicación está monitorea todos los procesos, así que guarda muchísimos eventos, lo cual puede saturar de información al usuario. El ícono en forma de lupa (o la opción del menú File - Capture Events o el atajo Ctrl-E) prende y apaga la recolección de eventos. El ícono en forma de filtro (o Filter - Filter o el atajo Ctrl-L) hace que la aplicación solo escuche eventos que cumplan con ciertas condiciones.

    Figura 1- Pantalla de Process Monitor resaltando algunos de los botones más utilizados.

  2. Detén la captura de eventos usando Ctrl-E.

  3. Crea un filtro para escuchar eventos de la aplicación notepad.exe. Tu pantalla de Filter debe lucir parecido al siguiente:

    Figura 2 - Filtros en Process Monitor.

  4. Enciende la captura de eventos usando Ctrl-E y corre notepad. Captura varios segundos de actividad y apaga la captura. Usando los botones que se muestran a continuación apaga el despliegue de todas las actividades excepto la de File System. Escribe algunos de los dlls que accesa el proceso notepad.exe.

  5. Puedes usar Ctrl-X para borrar la pantalla del Process Monitor.

  6. Repite el paso anterior para chrome.exe. Notarás que referencia muchos más DLLs, entre ellos algunos DLLs que contienen funciones para comunicación por red: mswsock.dll

Parte C - Preparación para correr el malware

Ahora vamos a correr pasos similares a los anteriores para investigar los efectos de un Trojan Horse llamado srvcp.

  1. En preparación, vamos a crear un snapshot de la máquina virtual. Ya que vamos a correr el malware y esto puede resultar en un sistema infectado, el snapshot nos permitirá (cuando hayamos terminado el experimento) regresar la máquina virtual a su estado pre-malware. Da shutdown a la máquina virtual. En la ventana de Oracle VM Virtual Box Manager, haz click en el botón Snapshots y verás los snapshots que se han tomado a esta máquina virtual. Marca "Current State" y right-click "Take Snapshot". Asigna un nombre al snapshot y créalo. Verás que el snapshot que creaste aparece en la lista jerárquica de snapshots. Aun no corras "Current State".

    Figura 3 -Snapshots en Virtual Box.

  2. Para prevenir que el malware se propague por la red o siquiera contacte algún sitio externo vamos a cambiar el modo de red de la máquina virtual a "Host-only adapter". Ese modo permite que la máquina se comunique con la computadora anfitrión y otras máquinas virtuales pero no permite que accese el internet. Primero, debemos asegurarnos que hemos configurado un "Host-only adapter". Ve a File - Preferences (o Virtual Box - Preferences en las mac), luego Networks -> Host-only Networks. Si no tienes al menos un Host-only network listado debes añadir uno usando el boton que tiene el símbolo de suma.

  3. De vuelta en la pantalla de los snapshots, marca el Snapshot "Current State": Machine --> Settings --> Network --> Attached to "Host-only adapter" (Ok).

  4. Corre la máquina "Current State".

  5. (Dentro de la maquina virtual) Vamos a asegurarnos que está en modo "Host-only adapter". La primera señal es que si corres chrome te mostrará un mensaje como "This site can't be reached", "DNS could not be found". La segunda evidencia es que si corres el comando ipconfig (en la línea de comando de Windows) te mostrará que tu IPv4 Address es 192.168.56.101, el address que asignado por el "Host-only adapter".

Parte D - Analizando el malware

  1. En el directorio reverse, verás un archivo comprimido llamado srvcp-trojan - pw is infected. Ábre el archivo y extrae solo el archivo srvcp.exe al desktop. La razón que lo removemos al desktop es para que en el futuro si abrimos esta versión de la máquina virtual sea inmediatamente evidente que hemos abierto la que infectamos.

  2. Corre ProcessExplorer y luego corre srvcp.exe. Escoge las opciones default de acceso en la ventana que aparece

    ¿Quién es el proceso padre del proceso srvcp.exe?

  3. Mira los "Properties" del proceso srvcp.exe. ¿Está tratando de escuchar por algún puerto de TCP/IP?

    ¿Cuántos threads crea?

  4. En el tab que muestra los strings, ¿puedes encontrar evidencia de que este proceso trata de alterar las entradas del registry?

    ¿que tal evidencia de que usa comandos de sockets tales como connect, socket, listen, htons?

  5. Mata el proceso desde ProcessExplorer.
  6. Vamos a inspeccionar la actividad del malware usando ahora ProcessMonitor. Detén la captura. Crea el filtro para el proceso srvcp.exe y activa la captura. Corre srvcp como administrador (para que haga más daño :-) ).

    ¿Puedes corroborar el acceso del malware acceso a la librería wsock32.dll? ¿Qué tipos de funciones contiene esa librería dinámica?

  7. Encuentra evidencia de que srvcp.exe modificó entradas del Registry. Cambió alguna entrada de "Windows/Current Version/Run"? Si es así, Windows tratará de correr el malware cada vez que haga restart.

  8. Observa la actividad de threads, este proceso ¿se mantiene con la misma cantidad de threads a través de su ejecución o está continuamente tratando de crearlos?

  9. Dado lo que observamos en Process Explorer y Process Monitor sospechamos que este malware está tratando de comunicarse con el exterior. Vamos a validar esta sospecha usando Wireshark. [De http://wireshark.org ] “Wireshark is the world's foremost network protocol analyzer. It lets you see what's happening on your network at a microscopic level. It is the de facto (and often de jure) standard across many industries and educational institutions”.

  10. Corre Wireshark (NO el Wireshark Legacy) como administrador. Cuando abra la ventana haz doble click sobre donde dice "Local area connection 2". Si estás corriendo srvcp.exe observarás mensajes tipo 'Name query' en Wireshark. Estos son generados por srvcp.exe tratando de averiguar el ip address de un servidor para conectarse y comenzar a hacer maldades. ¿Cuál es el nombre ese servidor?

    Figura 4 - Algunos de los botones más utilizados en Wireshark.

  11. Mata el proceso srvcp.exe. ¿Recuerdas que en el archivo comprimido de donde obtuvimos srvcp.exe había otro file? Averigua su nombre. Aun no lo extraigas del zip.

  12. Usando Process Monitor, averigua dónde es que srvcp.exe espera encontrar a ese file. Anótalo

  13. Descomprime ese file al directorio que averiguaste en el paso anterior. Abre el file a ver si descifras la información que contiene. ¿Qué es?

  14. Corre srvcp.exe nuevamente y observa la actividad en Wireshark. El file que acabas de descomprimir contiene (en formato cifrado) los nombres de otros servidores a los que srvcp.exe trata de conectarse. En base a lo que observas en Wireshark, escribe a continuación los nombres de tres de esos servidores.

Para regresar la máquina virtual al estado de cuando tomamos el snapshot, marca el snapshot (no el current state) y right-click “Restore”

Create a snapshot of the current machine state”

Referencias: