domingo, 13 de diciembre de 2009

Analizando capturas de red

De paseo por la blogosfera orientada al análisis de la (in)seguridad de los sistemas informáticos un artículo en pentester.es confirma mis sospechas de que no existe una única forma de hacer la misma cosa o, expresado en lenguaje más popular, que todos los caminos conducen a Roma.

En este caso el detonante es la web del instituto SANS para los cursos de análisis
forense de capturas de red y más concretamente su segundo puzzle. ¿Y de qué va esto? Simple, publican una captura de red en formato pcap, nos cuentan una historia relacionada con el origen de la misma y formulan una serie de cuestiones a extraer como resultado de las pesquisas. Sirve cualquier método para resolver el reto, pero solo el más original será el llamado a erigirse como vencedor y, por lo tanto, merecedor del premio.

Yo voy a proponer aquí un método que si bién no es muy original en cuanto a que la herramienta utilizada no es propia, sí me parece válido para aprender y, lo más importante, es muy sencillo de llevar a cabo. La primera opción que utilicé fué pyflag, pero la que paso a describir me parece aún más simple.

Para gustos sabores, y si además lo preferimos más dulce, recomiendo consultar el método utilizado por Chema García (a.k.a. sch3m4) en su blog opensec; para quitarse el sombrero. Seguro que la solución de Jose Selvi también será de "chuparse los dedos", ... paciencia.

Una de entre todas las posibles

Voy a utilizar una herramienta diseñada explícitamente para estos propósitos: xplico. Relacionada, y de hecho incluida, con el proyecto DEFT Linux, un live cd orientado al análisis forense made in italy.

Desde la página del proyecto alojada en sourceforge tenemos varias opciones: el tarball para la instalación desde las fuentes, una imagen de un sistema debian 5.0 para ejecutar en VirtualBox y, el que yo he escogido, un paquete binario preparado para instalarlo en Ubuntu 9.10.

Una vez descargado y satisfechas las dependencias lo instalo con un simple:

# dpkg -i xplico_0.5.3_i386.deb

Reiniciado apache2 e iniciado el servicio si es que ya no lo estuviera:
# /etc/init.d/apache2 restart

# /etc/init.d/xplico start

accederemos al interfaz web (que por otra parte no es el único modo de ejecución), utilizando preferentemente firefox, apuntando a la siguiente url:
http://localhost:9876/

Usuario por defecto deft con password xplico y a continuación en el menú de la izquierda NewCase. Las opciones a completar pasan por el tipo de datos (fichero de captura o generar una nueva captura), nombre del caso y otros datos de interés para situar el análisis dentro de una investigación más amplia.


Una vez agregado el caso llega el momento de añadir el/los ficheros de captura así que en el menú de la izquierda NewSession e incluimos un nombre descriptivo que nos permita identificar la sesión de captura, para el caso de que hubieran varias.

Ahora subiremos a la aplicación el fichero pcap para que se ponga a trabajar, así que utilizando el formulario de upload subimos nuestra captura, evidence02.pcap, le damos un lapso de tiempo para que complete el análisis de la misma y para contemplar el resultado de nuevo a través del menú de la izquierda, Session:


En esta pantalla, y de un solo vistazo, observamos que la captura contiene una resolución de host mediante DNS y 2 correos electrónicos enviados desde la máquina de la sospechosa. Para acceder a esta información podemos utilizar nuevamente el menú de la izquierda, así que empezaremos por la resolución DNS.

Los datos aparecen listados en forma de tabla incluyendo cada una de las filas la fecha y hora de la petición, el nombre de host, su cname, la dirección IP obtenida como resultado de la consulta y por último un resumen de los campos del stream (info.xml) y la posibilidad de descargar un fichero pcap incluyendo únicamente los datos relacionados con el mismo.

Vamos ahora a analizar los correos, así que menú de la izquierda, Email. En la tabla resultante, y en orden cronológico inverso, observamos los siguientes campos relativos a cada uno de los correos enviados: fecha y hora, emisor, receptor y tamaño en bytes.

Simplemente accediendo a cada uno de los correos ya tendremos la mayor parte de las preguntas planteadas contestadas de forma inmediata:
  • ¿Cual es la dirección de correo de Ann?
    sneakyg33k@aol.com
  • ¿Cual es la dirección de correo del amante secreto de Ann?
    mistersecretx@aol.com
  • ¿Qué dos cosas le dijo Ann que llevase a su amante?
    Un bañador y un pasaporte falso
  • ¿Cual es el nombre del adjunto que Ann le envió a su amante secreto?
    secretrendezvous.docx
  • ¿En qué ciudad y país está el punto de encuentro?
    Playa del Carmen, Mejico

Para obtener los datos de usuario y contraseña utilizados por Ann para acceder a su correo electrónico utilizaremos la captura pcap que nos proporciona xplico, y un poquito (muy poco) de Wireshark.

Mediante cualquiera de los correos, personalmente he utilizado el que no incluye adjunto, situamos el cursor sobre info.xml y activamos el enlace de descarga abriendo el fichero email_1.pcap. Una vez descargado y abierto, utilizando para ello Wireshark, botón derecho sobre el primer registro, Follow TCP stream, con lo que obtendremos únicamente los datos de la sesión SMTP en texto claro.


Ahora utilizaremos el comando base64 proporcionándole como entrada la cadena de la contraseña:
# echo NTU4cjAwbHo= | base64 -d -

558r00lz

Para obtener el MD5 del adjunto, y de nuevo mediante el interfaz de xplico, lo descargaremos activando el enlace correspondiente, lo renombraremos adecuadamente, y calcularemos el digest del fichero:
# mv 3 secretrendezvous.docx

# md5sum secretrendezvous.docx
9e423e11db88f01bbff81172839e1923 secretrendezvous.docx

Por último sólo nos queda obtener la suma MD5 de la imagen embebida en el documento anterior. Si para ello tenemos en cuenta que el nuevo formato utilizado por Office 2007 está basado enteramente en XML podemos extraer cualquiera de los elementos que lo componen cual si de un fichero comprimido se tratase:
# unzip -l secretrendezvous.docx

Archive: secretrendezvous.docx
Length Date Time Name
--------- ---------- ----- ----
1495 1980-01-01 00:00 [Content_Types].xml
590 1980-01-01 00:00 _rels/.rels
1082 1980-01-01 00:00 word/_rels/document.xml.rels
2648 1980-01-01 00:00 word/document.xml
194124 1980-01-01 00:00 word/media/image1.png
6992 1980-01-01 00:00 word/theme/theme1.xml
2161 1980-01-01 00:00 word/settings.xml
260 1980-01-01 00:00 word/webSettings.xml
23084 1980-01-01 00:00 word/styles.xml
727 1980-01-01 00:00 docProps/core.xml
6603 1980-01-01 00:00 word/numbering.xml
2182 1980-01-01 00:00 word/fontTable.xml
985 1980-01-01 00:00 docProps/app.xml
--------- -------
242933 13 files
# unzip -p secretrendezvous.docx word/media/image1.png | md5sum
aadeace50997b1ba24b09ac2ef1940b7 -

Y con esto ya tenemos las respuestas que nos faltaban:
  • ¿Cual es la contraseña para el correo de Ann?
    558r00lz
  • ¿Cual es la suma MD5 del adjunto enviado por Ann a su amante secreto?
    9e423e11db88f01bbff81172839e1923
  • ¿Cual es la suma MD5 de la imagen embedida en el documento?
    aadeace50997b1ba24b09ac2ef1940b7

Y esto ha sido todo, en breve más, y mejor, espero.

2 comentarios:

sch3m4 dijo...

buen post neofito, y gracias! :)

flypixx dijo...

Enhorabuena, muy claro y útil.