lunes, 4 de febrero de 2013

Libemu - Pylibemu 


Una de las herramientas más utilizadas para analizar e identificar posibles shellcodes es Libemu. La idea de esta librería, escrita en C e implementada en frameworks como Dionaea o PhoneyC, es emular instrucciones x86 e identificar/hookear llamadas a la API de Windows, con la que poder obtener información suficiente del código sin necesidad de llevar un análisis exhaustivo con debbugers como Inmunity u Olly.

Libemu utiliza técnicas heurísticas GetPC (Get Program Counter) para localizar shellcodes que utilizan encoders como shikata ga nai, fnstenv_mov, etc. Raro es encontrarse payloads que no utilicen algún tipo de cifrado o encoder para intentar evadir IDS/AV, por lo que esta característica lo hace realmente útil para buscar posibles shellcodes en ficheros .pcap, exploits, pdf, etc.

Instalacion : 

Primero vamos a abrir nuestra consola y voy en a digitar en mi caso, en el suyo solo sera copiar...xD!!!


Instalando algunas dependencias para el proceso de construcción.


 1.- ~# sudo apt-get install build-essential git-core autoconf libtool python-dev


Obtención libemu vía Git.


 2.- ~# cd /tmp/
 3.- ~# git clone git://git.carnivore.it/libemu.git


Configure e instale. 


 4 .- ~# cd /tmp/libemu/
 5 .- ~# autoreconf -v -i
 6 .- ~# ./configure --enable-python-bindings --prefix=/opt/libemu
 7 .- ~# sudo make install
 8 .- ~# sudo ldconfig -n /opt/libemu/lib


Ahora instale el pylibemu, el envoltorio de Python para la biblioteca Libemu.
Comenzamos con algunas dependencias para el proceso de construcción.


 9 .- ~# sudo apt-get install python-dev python-setuptools


Obtención pylibemu vía Git.


10 .- ~# cd /tmp/
11 .- ~# git clone https://github.com/buffer/pylibemu.git


Construir e instalar.


12 .- ~# cd /tmp/pylibemu/
13 .- ~# sudo sh -c "echo /opt/libemu/lib > /etc/ld.so.conf.d/pylibemu.conf"
14 .- ~# python setup.py build
15 .- ~# sudo python setup.py install


Listooo...!!!!!!!!!!!!!!

Bueno como ya lo hemos mencionado esta herramienta se encarga de analizar posibles shellcode ......Para poder probarlo vamos a jugar un poco con un payload de metasploit  .... =D ...

Pues es momento de abrir una vez mas nuestra gran y querida consola... =D


Podemos observar la  representacion de la salida generada por una de sus herramientas, sctest, la cual acepta como parámetro el binario que queremos analizar (S) y el número de pasos a ejecutar/emular (s).

Como vemos, la salida nos ofrece en detalle cada una de las APIs utilizadas por el shellcode, ofreciéndonos información más que suficiente para hacernos una idea del objetivo del mismo: descargar un binario (exploit.exe) de cierto sitio web mediante la llamada URLDownloadToFile y la ejecución del mismo con WinExec. Además, nos indica que dicha shellcode se encuentra a partir del offset 0×00000015.



Podemos observar la información que nos brinta del codigo con la ayuda de sctest, pero cabe decirles que tambien posee ciertas limitaciones, se podria decir que tiene un número limitado de APIs. Pero no se preocupen ya va a recibir apoyo de scbd, que se podria decir que es como una optimizacion de sctest.

Pues sin mas que decir vamos a poner a prueba a scdbg.....^_^



La salida muestra de forma más limpia cada una de las funciones utilizadas por el shellcode así como el offset de su decoded stub. Cabe resaltar que con scdbg podemos también desensamblar código a partir de un offset determinado (parámetros /disam y /foff) sin necesidad de utilizar herramientas externas.




Otra de las grandes ventajas de scdbg es la hacer un volcado de memoria una vez decodificado el shellcode (parámetro /d) lo que nos ahorra bastante tiempo para analizar el código usando cualquier otra herramienta.


Como podemos observar scdbg genera el fichero /tmp/shell.bin.unpack que posteriormente visualizamos con la opción /dump y donde ya podemos ver en claro ciertos strings correspondientes a las APIs llamadas por el shellcode. El dump también nos resaltará en amarillo los opcodes E8 (call) y E9 (jmp) así como el nop sled del comienzo para facilitar su lectura.

A parte de estas funcionalidades, una de las mayores ventajas de scdbg es su capacidad de debugging (ejecutar paso a paso instrucciones, fijar breakpoints, visualización de la pila, etc.).

Supongamos que queremos ejecutar paso a paso el código a partir de la dirección 4010FD, donde URLDownloadToFile es invocada, y visualizar el estado del stack. Para ello usaremos la opción laa (log after address), verbose 3 y el modo interactivo (-i).



Si vamos a interactuar con el código de forma interactiva, será realmente útil cuando necesitemos hookear llamadas a funciones que reciban parámetros por medio de sockets y con las que podremos enviar nuestros propios datos con herramientas externas para ver su comportamiento.

Para terminar, scdbg cuenta con un modo “report” (-r) ofreciéndonos un resumen generalizado de la  toda la información que se ha podido analizar del codigo...... ^_^......Pues sin mas que decir vamos a probar este parametro.....^_^



Aparte de informarnos de la API empleada por el código, podemos notar que nos entrega el return address de las mismas, cuya información no nos ofrecía sctest.

Sin lugar a dudas Scdbg nos facilita enormemente las cosas a la hora de analizar malware y porsupuesto que es una excelente modulo para el pentest de malware o codigo malicioso.....^_^

Bueno creo que eso es todo hasta el momento, espero que este post les sea de utilidad a la hora de enfrentarnos al un codigo sospechoso...... ^_^......Creo que ya no tengo nada mas que adiconar......Así que me despido y sera hasta la próxima.......Nos vemos.... =D








2 comentarios: