lunes, 22 de junio de 2009

Pyflag, instalación

Animado por Pedro Sanchez, y en respuesta a su caja de herramientas para Windows, se me ocurrió probar una alternativa a las funcionalidades de Encase para sistemas Linux, y hete aquí que le ha tocado el turno a PyFlag.

Para utilizar PyFlag necesitaremos varios paquetes, la mayoría interesantes herramientas por sí mismas. En este artículo comenzaremos con el proceso de instalación de todas ellas en un sistema Ubuntu 9.0.4.

Instalando libewf

Este paquete contiene una librería y aplicaciones que permiten leer y crear imágenes Encase E0* y SMART s0*. El producto EnCase, pues eso, una aplicación ampliamente utilizada para análisis forense de sistemas bajo entornos Windows, comercial, y podría afirmarse un imprescindible en el toolset de cualquier profesional que se precie. EnCase utiliza el formato EWF como predeterminado para las imágenes de disco que maneja, el cual, a su vez, se basa en el estandard abierto ASR Data's Expert Witness Compression Format.

Creado originalmente por Joachim Metz en 2006, el paquete libewf ha sido reescrito por Michael Cohen, parte integrante del proyecto pyflag, para ampliar sus funcionalidades.

Ahora que ya sabemos para qué nos vá a servir vamos a instalarlo. Lo primero las dependencias. En ubuntu tan fácil como:

$ apt-get update

$ apt-get -y install build-essential automake autoconf libtool \
lib1g-dev uuid-dev libssl-dev python-fuse

Ahora crearemos un directorio donde guardaremos las fuentes para todos los juguetes que vamos a probar:
$ mkdir /usr/local/forensics

Descargaremos libewf desde sourceforge, en concreto el paquete libewf-20080501, por ejemplo en el escritorio de nuestro usuario. Una vez descargado lo desempaquetaremos y lo compilaremos e instalaremos:
$ cd /usr/local/forensics

$ tar xvzf /home/javi7Escritorio/libewf-20080501.tar.gz
$ cd libewf-20080501/
$ ./configure
$ make
$ make install
$ make clean

Como resultado de la instalación éstas son algunas de las aplicaciones de que dispondremos:
  • ewfacquire nos permitirá crear una imagen en formato EWF del dispositivo de entrada que le indiquemos. Los datos referentes al nombre del fichero destino y metadatos asociados al "caso" al que pertenezca la evidencia se proporcionan de forma interactiva.

  • ewfacquirestream se diferencia del anterior en que no requiere de interactividad y el dispositivo de entrada es stdin de forma predeterminada.

  • ewfexport nos permitirá convertir ficheros ewf a diferentes formatos como son raw (dd), encase1 a encase6, ftk, smart, linen5, linen6 y el nuevo estandard ewfx.

  • ewinfo nos mostrará los metadatos contenidos en el fichero de imagen indicado. Para muestra, un comando:
    $ ewfinfo -m P01FAT16.E01
    
    ewfinfo 20080501 (libewf 20080501, zlib 1.2.3.3, libcrypto 0.9.8, libuuid)
     
    Media information
    Media type: removable disk
    Media is physical: no
    Amount of sectors: 625
    Bytes per sector: 512
    Media size: 312 KiB (320000 bytes)
    MD5 hash in file: 870b9682f9e282d4e25747960243cadb
  • ewfverify comprueba que los datos almacenados en la imagen son consistentes, es decir, verifica que los datos no han sido alterados desde su captura, utilizando para ello la firma md5 que acompaña, en forma de metadatos, al fichero:
    $ewfverify P01FAT16.E01
    
    ewfverify 20080501 (libewf 20080501, zlib 1.2.3.3, libcrypto 0.9.8, libuuid)
     
    Verify started at: Sun Jun 21 13:00:27 2009
     
    This could take a while.
     
    Verify completed at: Sun Jun 21 13:00:27 2009
     
    Read: 312 KiB (320000 bytes) in 0 second(s).
     
    MD5 hash stored in file: 870b9682f9e282d4e25747960243cadb
    MD5 hash calculated over data: 870b9682f9e282d4e25747960243cadb
     
    ewfverify: SUCCESS

Para información detallada del uso de cada una de las herramientas el inestimable comando man, y si lo queremos guardar para imprimirlo después:
$ man manpage | col -b -x > manpage.txt

Mencionar también la utilidad mount_ewf.py no contenida en el paquete libewf, pero que puede descargarse fácilmente desde la página del proyecto en sourceforge. Nos vá a permitir montar imágenes de disco en formato ewf y su instalación, una vez descargada en el escritorio de nuestro usuario, sería:
$ mv /home/javi/Escritorio/mount_ewf-20090113.py /usr/local/bin/mount_ewf.py

$ chown root. /usr/localbin/mount_ewf.py
$ chmod 755 /usr/local/bin/mount_ewf.py

Y un ejemplo de su uso para montar el fichero P01FAT16.E01 en el directorio /mnt/tmp:
$ mount_ewf.py P01FAT16.E01 /mnt/tmp

Para desmontar la imagen nuestro amigo umount.


Instalando afflib

Éste paquete se lo debemos a Simson L. Garfinkel y contiene un conjunto de utilidades y librerías necesarias para manejar imágenes de disco en formato AFF (Advanced Forensics Format). Más información sobre este tipo de formato:

Providing Cryptographic Security and Evidentiary Chain-of-Custody with the Advanced Forensic Format, Library, and Tools
Simson L. Garfinkel


AFF: The Advanced Forensics Format
Brian Carrier


Disk Imaging with the Advanced Forensics Format, Library and Tools
Garfinkel, S., Malan, D., Dubec, K., Stevens, C, Pham, C.


AFF: A New Format for Storing Hard Drive Images
Garfinkel, S.


Como antes, lo primero, las dependencias:
$ apt-get update

$ apt-get -y install libtool libreadline5-dev libncurses5-dev \
libexpat1-dev libfuse-dev python-dev

Descargaremos las fuentes desde el sitio oficial, en concreto el paquete afflib-3.3.4, y las desempaquetaremos con el resto de juguetes, compilando e instalando el paquete incluyendo las python bindings:
$ cd /usr/local/forensics

$ tar xvzf /home/javi/Escritorio/afflib-3.3.4.tar.gz
$ cd afflib-3.3.4/
$ apt-get -y install python-dev
$ ./configure --enable-python=yes
$ make
$ make install
$ make clean

Programas interesantes que forman parte del paquete:
  • afcat vuelca el contenido de un fichero AFF por la salida estandard, stdout.
  • afcompare compara dos ficheros AFF o un fichero AFF y un fichero en formato raw (dd).
  • afconvert convierte entre formatos AFF->raw, raw->AFF comprimiendo opcionalmente el resultado.
  • affix informa y soluciona posibles errores en ficheros AFF.
  • afinfo muestra información sobre ficheros AFF.
  • afstats muestra información estadística sobre uno o más ficheros AFF.
  • aftest realiza todas las pruebas para comprobar el funcionamiento de la instalación.
  • afxml vuelca los metadatos contenidos en un fichero AFF en formato XML.

Instalando sleuthkit

Ahora le toca el turno al sleuthkit, un imprescindible para el análisis forense desde sistemas Linux. Basado en el pionero 'The Coroner's Toolkit' comprende un conjunto de utilidades para manejar imágenes de disco en formato raw (dd), encase (mediante libewf) y AFF (mediante afflib). Permite analizar particiones con sistemas de ficheros NTFS, FAT, UFS 1, UFS 2, EXT2FS, EXT3FS e ISO 9660. ¡Casi ná!

Esta maravilla se la debemos a Brian Carrier, autor del libro "File System Forensic Analysis", con el que nos ayudará a comprender la estructura de los diferentes sistemas de ficheros y de paso a utilizar sleuthkit para ello. Más que recomendable, imprescindible.

Y también imprescindible el Taller de analisis forense publicado (y esperemos pronto continuado) por Vic_Thor en las tierras de Wadalbertia. Nos ayudará a conocer internamente los sistemas de ficheros FATXX y NTFS aprendiendo, de paso, a utilizar Encase en un entorno Windows.

No voy a comentar mucho más acerca del sleuthkit, requeriría algún que otro artículo para el sólo, además de que ya existen interesantes recursos en español:

Jugando con sleuthkit

Una curiosidad a destacar es que pyflag no lanza los comandos del sleuthkit para parsear los datos analizados, al menos no en sus ultimas versiones. En su lugar enlaza con las librerias del sleuthkit directamente y se encarga de completar inicialmente el contenido de una base de datos con toda la informacion del sistema de ficheros, incluyendo los famosos metadatos. Mas informacion aquí.

Pues ahora toca instalar el sleuthkit. Descargaremos primero la última versión (la 3.0.1 en el momento de escribir estas líneas), y la desempaquetaremos en nuestro almacén; luego compilaremos e instalaremos:
$ cd /usr/local/forensics

$ tar xvzf /home/javi/Escritorio/sleuthkit-3.0.1.tar.gz
$ cd sleuthkit-3.0.1/
$ ./configure
$ make
$ make install
$ make clean

Vale, ya lo tenemos todo, podemos pasar a instalar pyflag.

Instalando pyflag

PyFlag (Python Forensic and Log Analysis GUI) es una aplicación del estilo de Encase, open source y con un interfaz web. La lista de funcionalidades:
  • Network Forensics
    Es capaz de analizar capturas de tráfico de red en formato TCPDump además de soportar varios tipos de protocolos: HTTP, MSN Chat, SMTP, POP, SIP, VOIP, DNS, IRC y Yahoo messenger.

  • Log Analysis
    Potente sistema de análisis de logs, soportando varios formatos.

  • Disk Forensics
    Permite el análisis de imagenes de disco para todos los formatos mencionados hasta el momento, incluyendo capacidades de file carving y un gran número de formatos de ficheros soportados.

  • Memory Forensics
    Soporte para el análisis de imágenes de la memoria física utilizando para ello el Framework Volatility.

El proceso de instalación, como hasta ahora, comienza con las dependencias:
$ apt-get update

$ apt-get -y install libz-dev libmagic-dev python-mysqldb python-imaging \
python-pexpect python-dateutil python-urwid libmagic-dev \
python-crypto python-pyparsing python-sqlite mysql-server \
darcs libgeoip-dev libjpeg62-dev clamav-daemon

Cuando se nos solicite la password de mysql la indicamos y anotamos. Yo he utilizado 'rootpass'.

Incluiremos también las tablas para las distintas timezone en mysql lanzando el siguiente comando:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -uroot -p mysql

Enter password:

Obtendremos ahora las fuentes disponibles desde el repositorio darcs (paciencia) y las prepararemos para el proceso de instalación, compilando e instalando a continuación:
$ cd /usr/local/forensics

$ darcs get http://www.pyflag.net/pyflag/
$ cd pyflag
$ sh autogen.sh
$ ./configure
$ make
$ make install

Vamos a modificar los parámetros por defecto para los directorios result, upload y report que utilizará pyflag para almacenar los resultados, ficheros analizados e informes, respectivamente, por lo que tendremos que crearlos:
$ mkdir -p /var/pyflag/{result,upload,report}

Ya estamos preparados para iniciar pyflag por primera vez, asi que allá vamos:
$ pyflag

Obtendremos algunas advertencias dado que no existe la base de datos utilizada por pyflag, siguiente paso a dar accediendo mediante un navegador al interfaz web en ejecución:

http://127.0.0.1:8000

Establezco, en mi caso, los siguientes parámetros de configuración:
uploaddir       /var/pyflag/upload

datadir /usr/local/share/pyflag
flag_bin /usr/local/bin
resultdir /var/pyflag/result
conf_file /usr/local/etc/pyflag.conf
dbpasswd rootpass
reporting_dir /var/local/report

dejando el resto por defecto. Una vez terminado tendremos que pulsar 'Submit' por dos veces para inicializar la base de datos de pyflag.

Y eso es todo, ahora ya podemos empezar a trastear ;-)

Addendum:

No he probado todavía pyflag en Windows, el cual parece bastante funcional, pero en todo caso una buena alternativa podría ser instalarlo sobre portable ubuntu para ejecutarlo directamente desde Windows, y con toda la portabilidad del mundo (p.e. mediante un pendrive).

2 comentarios:

delfi dijo...

Como siempre neofito excelente trabajo, muchas gracias por todos tus artículos...

Saludos!

Pedro Sánchez dijo...

Sublime...Eres un figura!!!