22 octubre 2012

Cuckoo Sandbox Open Source malware analysis

Muchos de vosotros habréis tenido ganas de poder realizar algún análisis de malware para saber que hacía algunas de las muestras que os han llegado, bien por correo electrónico, bien os lo habéis encontrado en aquel pen drive que algún familiar os dice "Toma copia estas fotos" y en el USB hay mas malware que fotos para copiar.

Si no habéis lidiado realizando un análisis dinámico de la muestra o bien, no tenéis práctica ni tiempo, al final acabas subiendo la muestra aquellos servicios que ya conocemos, Virus Total Jottis, Threat Expert o similares.

Pero, y si por un momento ¿No queremos subir la muestra a este tipo de servicios? Por ejemplo os encontráis en un caso en el que no podéis distribuir la muestra ya que estáis investigando un caso y la muestra no puedes subirla a cualquier sitio. En ese caso y otros, para hacerte con una idea general de lo que hace la muestra y poder realizar perfectamente un análisis dinámico tenemos entre otros proyectos Cuckoo.
El proyecto se encuentra MUY vivo y se va actualizando añadiendo nuevos módulos al sandbox y nuevas versiones cada cierto tiempo. Además las últimas versiones se instalan en no mas de 10 minutos, no como las primeras, que tenías que lidiar realizando mas pasos.

¿Como funciona Cuckoo?

El sandbox se apoya en el sistema de virtualbox o vmware con un sistema windows instalado como cliente para poder realizar los análisis.
La estructura de Cuckoo es así:



Desde tu máquina enviarás tus muestras a los diferentes clientes que tengas configurados con Cuckoo para poder hacer los análisis pertinentes.

Requerimientos de Cuckoo en el HOST

La instalación mas sencilla es en Ubuntu, por lo tanto yo haré la instalación en este sistema.
Si miramos la documentación de Cuckoo, necesitaremos:

  • Python
  • Magic (Highly Recommended): for identifying files’ formats (otherwise use “file” command line utility)
  • Dpkt (Highly Recommended): for extracting relevant information from PCAP files.
  • Mako (Highly Recommended): for rendering the HTML reports and the web interface.
  • Pydeep (Optional): for calculating ssdeep fuzzy hash of files.
  • Pymongo (Optional): for storing the results in a MongoDB database.
  • Yara and Yara Python (Optional): for matching Yara signatures.
  • Libvirt (Optional): for using the KVM module.
Algunos de los módulos se pueden instalar mediante:


sudo apt-get install python-magic python-dpkt python-mako python-pymongo



Máquina virtual para las pruebas


No me voy a parar a explicar como configurar una máquina en VirtualBox. Tan solo que en la máquina Windows instalada deberemos de configurar ciertas cosas:



Pondremos en OFF, el cortafuegos de windows y también las actualizaciones. Esto nos evitará en el caso del análisis de las trazas de red que no nos molesten las actualizaciones de red. Y el firewall lo desactivamos para que el malware se pueda conectar libremente a donde quiera.


Requerimientos de Cuckoo en la máquina virtual


Python, para poder ejecutar el agente en la máquina virtual. Además necesitaremos software vulnerable, es por eso que instalaremos el software que necesitemos.

Para versiones viejas de software, oldapps ;)

Configurando y poniendo en marcha Cuckoo

Solo configuraremos opciones básicas de cuckoo para hacerlo funcionar. Recomiendo recorrerse los archivos de configuración y adaptarlo a vuestras necesidades.

Bajamos Cuckoo :

seifreed@darkmac:~/tools/malware:git clone git://github.com/cuckoobox/cuckoo.git
Cloning into 'cuckoo'...
remote: Counting objects: 6324, done.
remote: Compressing objects: 100% (2048/2048), done.
remote: Total 6324 (delta 4101), reused 6214 (delta 4017)
Receiving objects: 100% (6324/6324), 4.88 MiB | 124 KiB/s, done.
Resolving deltas: 100% (4101/4101), done.


Ahora configuraremos varias cosas de Cuckoo para hacerlo funcionar:

Editamos el archivo cuckoo.conf:

seifreed@darkmac:~/tools/malware/cuckoo:nano conf/cuckoo.conf

De aquí lo que tendremos que cambiar es:


# Specify the name of the machine manager module to use, this module will
# define the interaction between Cuckoo and your virtualization software
# of choice.
machine_manager = virtualbox


# Enable or disable the use of an external sniffer (tcpdump) [yes/no].

use_sniffer = yes


# Specify the network interface name on which tcpdump should monitor the

# traffic. Make sure the interface is active.
interface = en0


Si usamos otro sistema que no sea Virtualbox, lo cambiamos. En mi caso dejo Virtualbox.
Si recordáis como requisito instalamos tcpdump, si queremos que se capture el tráfico de red con tcpdump, dejamos marcado yes.

En cuanto a la interfaz de red, esto es muy importante y ha dado varios problemas de que no haya funcionado la última versión de cuckoo.

En la documentación oficial de Cuckoo, aconsejan usar vboxnet0. La máquina virtual configurada con esta extensión NO tendrá acceso a internet por lo tanto si estamos estudiando algún tipo de troyano bancario, o un dropper no podrá hacerse el análisis dinámico correcto al no contar con el tráfico de red.
Si queremos poner la red en modo vboxnet0, lo configuramos en Virtualbox




En la máquina virtual especificamos que usaremos esa interfaz en concreto:


El poner la red en vboxnet0 nos sirve para poder controlar las conexiones que realice la máquina virtual. En mi caso me da igual por lo tanto, dejo la máquina en brigde y asigno la interfaz de la máquina. En el caso del mac, en0.

Ahora configuramos otro archivo:

seifreed@darkmac:~/tools/malware/cuckoo:nano conf/virtualbox.conf

[cuckoo1]
# Specify the label name of the current machine as specified in your
# VirtualBox configuration.
label = sandbox


# Specify the operating system platform used by current machine

# [windows/darwin/linux].
platform = windows


# Specify the IP address of the current machine. Make sure that the IP address

# is valid and that the host machine is able to reach it. If not, the analysis
# will fail.
ip = 192.168.1.113


Aquí especificamos el nombre que le hemos dado a la máquina virtual, la plataforma que usaremos y la dirección IP que tendrá la máquina virtual.

Comunicación de la máquina virtual y Cuckoo

Con la última versión de Cuckoo, lo que se necesita es un agente en python:


seifreed@darkmac:~/tools/malware/cuckoo:ls agent/
agent.py


El agente deberemos de colocarlo para que se inicie al arrancar Windows, o bien con una entrada del registro, o en la carpeta startup.

En este momento pausamos la máquina. Hacemos una instantánea y apagamos la máquina.
Restauramos la máquina al snapshot con la máquina virtual parada.
Arrancamos Cuckoo:


seifreed@darkmac:~/tools/malware/cuckoo:python cuckoo.py 


  eeee e   e eeee e   e  eeeee eeeee 

  8  8 8   8 8  8 8   8  8  88 8  88 
  8e   8e  8 8e   8eee8e 8   8 8   8 
  88   88  8 88   88   8 8   8 8   8 
  88e8 88ee8 88e8 88   8 8eee8 8eee8


 Cuckoo Sandbox 0.4.2

 www.cuckoosandbox.org
 Copyright (c) 2010-2012


2012-10-08 22:57:59,479 [lib.cuckoo.core.scheduler] INFO: Using "virtualbox" machine manager

2012-10-08 22:57:59,658 [lib.cuckoo.core.scheduler] INFO: Loaded 1 machine/s
2012-10-08 22:57:59,659 [lib.cuckoo.core.scheduler] INFO: Waiting for analysis tasks...


Cuckoo estará a la espera de que hagamos submit de una muestra:


seifreed@darkmac:~/tools/malware/cuckoo/utils:python submit.py /Users/seifreed/Dropbox/malware/zeus/AZz.exe 
SUCCESS: File "/Users/seifreed/Dropbox/malware/zeus/AZz.exe" added as task with id 1


Cuckoo empezará el análisis de la máquina virtual:


2012-10-08 22:58:22,694 [lib.cuckoo.core.scheduler] INFO: Starting analysis of file "/Users/seifreed/Dropbox/malware/zeus/AZz.exe" (task=1)
2012-10-08 22:58:22,785 [lib.cuckoo.core.scheduler] INFO: Task #1: acquired machine cuckoo1 (label=sandbox)
2012-10-08 22:58:22,823 [lib.cuckoo.core.sniffer] INFO: Started sniffer (interface=en0, host=192.168.1.113, dump path=/Users/seifreed/tools/malware/cuckoo/storage/analyses/1/dump.pcap)
2012-10-08 22:58:25,876 [lib.cuckoo.core.guest] INFO: Starting analysis on guest (id=cuckoo1, ip=192.168.1.113)
2012-10-08 22:59:14,744 [lib.cuckoo.core.guest] INFO: cuckoo1: analysis completed successfully
2012-10-08 22:59:20,010 [lib.cuckoo.core.processor] WARNING: The processing module "VirusTotal" returned the following error: VirusTotal API key not configured, skip
2012-10-08 22:59:22,147 [lib.cuckoo.core.scheduler] INFO: Task #1: reports generation completed (path=/Users/seifreed/tools/malware/cuckoo/storage/analyses/1)


Una vez acabado podremos ver el resultado en la parte web de Cuckoo, arrancamos la parte web:



seifreed@darkmac:~/tools/malware/cuckoo/utils:python web.py 
Bottle v0.11.dev server starting up (using WSGIRefServer())...
Listening on http://0.0.0.0:8080/
Hit Ctrl-C to quit.


Desde la parte web podremos hacer un submit nuevo de una muestra, además de indicarle la prioridad.




En el apartado Browse, encontraremos las muestras que ya hayamos subido.
Clicando en el MD5, encontraremos un report de la muestra:



Información que nos arroja Cuckoo




Podremos ver también la parte de red, y cambios a nivel de directorios.

Aquí tenéis una introducción al pedazo de proyecto que se está gestando, os animo a colaborar además de usar la herramienta.

Artículo cortesía de Marc Rivero López

6 comments :

Miguel dijo...

Alternativa http://bsa.isoftware.nl/

Madrikeka dijo...

Me ha gustado mucho el post y la herramienta está genial.

Muchas gracias por la explicación y el detalle.

Un saludo.

c1b3rh4ck dijo...

saludos cuckoo realmente es interesante yo lo eh estado probando por 1 mes,el trabajo de esta es fabuloso sin embargo,no mencionas algunos problemas ,como las gestiones de las conexiones rpc,algunas veces se cierra la conexion inexperadamente(con las configuraciones recomendadas en el manual)la maquina virtual se cierra tambien con algunos especimenes,algunas veces una vez termina el analisis no guarda bien el estado de la maquina,yo discuti esto en el irc oficial esperemos lo solucionen en la proxima release,como dice un amigo por ahi
es mejor hacer los analisis a pica y pala :D .

a dijo...

ad

Alvaro dijo...

¿Y si el malware detectara una maquina virtual e intentase disimular? Como se podría detectar que te estas ejecutando en un entorno virtual?

PepitoGrillo dijo...

http://labs.alienvault.com/labs/index.php/2012/hardening-cuckoo-sandbox-against-vm-aware-malware/