lunes, 2 de marzo de 2009

Volatility y RegRipper, ¡juntos!

Acabo de enterarme hoy de la noticia, y como no, tenía que probarlo por mí mismo. Creo que conocemos de sobra el framework Volatility, pero para los que no lo conozcan decir que se trata de un entorno de análisis escrito en Python que permite examinar volcados de la memoria de Windows en formato raw.

El otro componente del tándem es RegRipper, del que todavía no hemos hablado nada pero del que estoy preparando un artículo que espero tener listo muy pronto. A modo de resumen decir que se trata de un script en perl desarrollado por Harlan Carvey que facilitará el análisis del registro de Windows de forma offline.

Ahora imaginad que juntamos las capacidades de ambos, ¡podríamos analizar y obtener información de las diferentes claves del registro contenidas en una imagen de la memoria de un sistema Windows!

Pues bien, gracias a Brendan Dolan-Gavitt (aka Moyix), esto ya es posible. Indicar que yo no he descubierto nada, unicamente me he limitado a probarlo y contarlo a lo largo de estas lineas. Para obtener detalles técnicos acerca del proceso y las modificaciones en el código necesarias recomiendo leer detenidamente el artículo original.

Entorno utilizado para las pruebas

A pesar de que tanto Volatility como RegRipper funcionan en Windows el tándem desarrollado por Brendan deberá ejecutarse obligatoriamente en un sistema Linux. Esto es debido a que para enlazar Volatility, escrito en Python, y RegRipper, desarrollado en perl, se utiliza el módulo de perl Inline:Python, el cual sólo está disponible actualmente para el sistema del pingüino.

Bien, hechas las aclaraciones oportunas decir que yo lo he probado en una Fedora release 10 (Cambridge) y ha funcionado perfectamente. Es fundamental tener instalado tanto python como perl, los cuales ya vienen de serie con el sistema. Será preciso también tener instalado el módulo de perl Inline:Python, el cual podremos descargar desde la siguiente url:

http://search.cpan.org/CPAN/authors/id/N/NI/NINE/Inline-Python-0.28.tar.gz

Suponiendo que lo tenemos descargado en el home del usuario root el proceso de instalación sería como sigue:

[root@ulises ~]# cd /usr/local

[root@ulises local]# tar xvzf /root/Inline-Python-0.28.tar.gz
[root@ulises local]# cd Inline-Python-0.28/
[root@ulises Inline-Python-0.28]# perl Makefile.PL
[root@ulises Inline-Python-0.28]# make
[root@ulises Inline-Python-0.28]# make install

Por otra parte, y para que el uso de volatility no muestre ningún mensaje de error también instalaremos el modulo de python Pycrypto, el cual descargaremos de la siguiente url:

http://www.amk.ca/files/python/crypto/pycrypto-2.0.1.tar.gz

De nuevo, y suponiendo que lo tenemos descargado en el home del usuario root el proceso de instalación sería como sigue:
[root@ulises ~]# cd /usr/local

[root@ulises local]# tar xvzf /root/pycrypto-2.0.1.tar.gz
[root@ulises local]# cd pycrypto-2.0.1/
[root@ulises pycrypto-2.0.1]# python setup.py build
[root@ulises pycrypto-2.0.1]# python setup.py install

Para realizar las pruebas utilizaremos una de las imágenes contenidas en el set de imágenes de la memoria de Windows publicadas por el NIST, y que podremos descargar de la siguiente url:

http://www.cfreds.nist.gov/mem/memory-images.rar

Dado que las imágenes vienen empaquetadas en un fichero rar también será preciso disponer al menos del binario unrar. Podremos instalarlo de forma sencilla siguiendo las instrucciones publicadas aqui.

Suponiendo que ya hemos instalado unrar y que tenemos el conjunto de imágenes descargado en el home del directorio root podremos extraer su contenido utilizando el siguiente comando:
[root@ulises ~]# unrar e memory-images.rar

Instalando volatility y los plugins necesarios

Bién, ya tenemos instaladas las dependencias, sigamos ahora con el framework Volatility, el cual podremos descargar de la siguiente url:

https://www.volatilesystems.com/volatility/1.3/Volatility-1.3_Beta.tar.gz

y ya que estamos descargaremos tambien las versiones actualizadas de los plugins para volatility necesarios para realizar las pruebas:

http://kurtz.cs.wesleyan.edu/%7Ebdolangavitt/memory/volreg-0.3.tar.gz
http://kurtz.cs.wesleyan.edu/%7Ebdolangavitt/memory/volrip-0.1.tar.gz

Vale, suponiendo que lo tenemos todo descargado en el directorio home del usuario root el proceso de instalación no podría ser más sencillo:
[root@ulises ~]# cd /usr/local

[root@ulises local]# tar xvzf /root/Volatility-1.3_Beta.tar.gz
[root@ulises local]# ln -s Volatility-1.3_Beta/ volatility
[root@ulises local]# cd volatility/
[root@ulises volatility]# tar xvzf /root/volreg-0.3.tar.gz
[root@ulises volatility]# tar xvzf /root/volrip-0.1.tar.gz

Ya lo tenemos todo preparado, bueno, casi todo. Copiemos en el directorio de volatility la imagen de la memoria que utilizaremos para las pruebas:
[root@ulises volatility]# cp /root/xp-laptop-2005-07-04-1430.img .

Ahora ya estamos listos.

Usando el tándem

El primer paso consistirá en obtener los offsets dentro de la imagen de la memoria donde se ubican las estructuras CMHIVE, es decir, las representaciones para las diferentes claves del registro. Veamos a continuación el comando necesario así como los resultados obtenidos:
[root@ulises volatility]# python volatility hivescan 

-f xp-laptop-2005-07-04-1430.img
Offset (hex)
42168328 0x2837008
42195808 0x283db60
47598392 0x2d64b38
155764592 0x948c770
155973608 0x94bf7e8
208587616 0xc6ecb60
208964448 0xc748b60
234838880 0xdff5b60
243852936 0xe88e688
251418760 0xefc5888
252887048 0xf12c008
256039736 0xf42db38
269699936 0x10134b60
339523208 0x143cb688
346659680 0x14a99b60
377572192 0x16814b60
387192184 0x17141578
509150856 0x1e590688
521194336 0x1f10cb60
523667592 0x1f368888
527756088 0x1f74eb38

Ahora utilizaremos uno de los offsets anteriores, y mediante el comando hivelist, localizaremos las direcciones virtuales para todas las claves del registro almacenadas en la memoria. El comando necesario junto con los resultados sería:
[root@ulises volatility]# python volatility hivelist -o 0x2837008 

-f xp-laptop-2005-07-04-1430.img
Address Name
0xe2610b60 \Documents and Settings\Sarah\Local Settings\
Application Data\Microsoft\Windows\UsrClass.dat
0xe25f0578 \Documents and Settings\Sarah\NTUSER.DAT
0xe1d33008 \Documents and Settings\LocalService\Local Settings\
Application Data\Microsoft\Windows\UsrClass.dat
0xe1c73888 \Documents and Settings\LocalService\NTUSER.DAT
0xe1c04688 \Documents and Settings\NetworkService\Local Settings\
Application Data\Microsoft\Windows\UsrClass.dat
0xe1b70b60 \Documents and Settings\NetworkService\NTUSER.DAT
0xe1658b60 \WINDOWS\system32\config\software
0xe1a5a7e8 \WINDOWS\system32\config\default
0xe165cb60 \WINDOWS\system32\config\SAM
0xe1a4f770 \WINDOWS\system32\config\SECURITY
0xe1559b38 [no name]
0xe1035b60 \WINDOWS\system32\config\system
0xe102e008 [no name]

Hasta aquí nada nuevo, pero lo siguiente es pura magia. Utilizaremos el offset para la clave system y se lo pasaremos a la versión "modificada" de regripper. Dado que el resultado mostrado es bastante largo redirigiremos la salida a un fichero de texto que podremos analizar posteriormente. El comando necesario sería:
[root@ulises volatility]# perl rip.pl 

-r xp-laptop-2005-07-04-1430.img@0xe1035b60 -f system > system.output.txt
Parsed Plugins file.
Launching compname v.20080324
compname complete.
Launching shutdown v.20080324
shutdown complete.
Launching shutdowncount v.20080709
shutdowncount complete.
Launching timezone v.20080324
timezone complete.
Launching termserv v.20080418
termserv complete.
Launching mountdev v.20080324
mountdev complete.
Launching network v.20080324
network complete.
Launching nic_mst2 v.20080324
nic_mst2 complete.
Launching fw_config v.20080328
fw_config complete.
Launching usbstor v.20080418
usbstor complete.
Launching devclass v.20080331
devclass complete.
Launching ide v.20080418
ide complete.
Launching shares v.200800420
shares complete.
Launching svc v.20080610
svc complete.
Launching imagedev v.20080730
imagedev complete.

Si analizamos el contenido del fichero system.output.txt entenderemos la importancia de esta nueva funcionalidad de Volatility, así como la potencia de la herramienta regripper, que como ya he dicho, tendremos oportunidad de conocer mas a fondo dentro de poco.