Home > Forense, Retos > Solución al reto forense del SANS Institute – Puzzle #2

Solución al reto forense del SANS Institute – Puzzle #2

He leído hace poco una entrada en el blog de Jose Selvi que el SANS Institute propuso otro reto de análisis forense de red del que no había tenido constancia (es lo que tiene estar tanto tiempo “offline”), y es que esta gente proponen con regularidad una serie de retos al público para que sean resueltos y ofrecen premios a las soluciones más elegantes, claro que lo que ellos consideran elegante es crear herramientas para resolver sus retos, que posteriormente ofreceran a los alumnos de los trainings que realizan en Orlando y Baltimore (¿solo a mí me suena esto de más de uno?).

http://forensicscontest.com/2009/09/25/puzzle-1-solution-anns-bad-aim

What we considered “elegant” was the construction of some automated process for solving the puzzle which was easy to use, easy to understand, very portable, and would easily be able to scale to much larger and more difficult problems.

Los trainings de análisis forense de red del SANS Institute y más concretamente el SEC 558 y el SEC 560 cuestan respectivamente $3,845 y $4,295 así que poquitas ganas me dan de hacerles las herramientas y mucho menos enviárselas, pero ya sabemos cómo es esto de la formación, ¿verdad?.

Después de esta pequeña reflexión vamos a ver cómo podemos solucionar el reto.

La url del mismo es http://forensicscontest.com/2009/10/10/puzzle-2-ann-skips-bail donde nos dicen:

After being released on bail, Ann Dercover disappears! Fortunately, investigators were carefully monitoring her network activity before she skipped town.

“We believe Ann may have communicated with her secret lover, Mr. X, before she left,” says the police chief. “The packet capture may contain clues to her whereabouts.”

You are the forensic investigator. Your mission is to figure out what Ann emailed, where she went, and recover evidence including:

1. What is Ann’s email address?
2. What is Ann’s email password?
3. What is Ann’s secret lover’s email address?
4. What two items did Ann tell her secret lover to bring?
5. What is the NAME of the attachment Ann sent to her secret lover?
6. What is the MD5sum of the attachment Ann sent to her secret lover?
7. In what CITY and COUNTRY is their rendez-vous point?
8. What is the MD5sum of the image embedded in the document?

Please use the Official Submission form to submit your answers. Prize TBD. Prize will be a Lenovo IdeaPad S10-2 – just like the free netbooks Sec558 students will get in Orlando.

Here is your evidence file:

http://forensicscontest.com/contest02/evidence02.pcap
MD5 (evidence02.pcap) = cfac149a49175ac8e89d5b5b5d69bad3

Así que empezamos, nos descargamos el archivo de captura, comprobaremos la firma MD5 y corremos p0f con algunas que otras herramientas y expresiónes regulares para filtrar la salida y ver qué hosts mantienen conexiones TCP/IP en la captura:

$ p0f -s evidence02.pcap 2>/dev/null | egrep “^[0-9]{1,3}” | tr -s ‘:’ ‘-’ | awk -F\- ‘{print $1,$3}’ | sort -u

192.168.1.159 Windows XP SP1+, 2000 SP3

Y vemos actividad de la IP 192.168.1.159, así que vamos a abrir el archivo de captura con Wireshark y aplicamos el filtro: ip.addr == 192.168.1.159

Nos vamos al paquete nº 45 que según nos dice Wireshark usa el protocolo “BROWSER” (anuncio smb), y obtenemos algunos datos del apartado “Microsoft Windows Browser Protocol” dentro de la cabecera NetBIOS, como son:


  • Host Name
  • OS Major Version
  • OS Minor Version
  • Host Comment

Con los datos de “OS Major Version” y “OS Minor Version”, nos vamos a http://msdn.microsoft.com/en-us/library/cc246960%28PROT.10%29.aspx y vemos que al tratarse de Major = 5 y Minor = 1, Ann usa un Windows XP (cosa que nos había estimado p0f).

Ahora cojemos cualquier paquete con IP de origen 192.168.1.159 y cuyo destino no sea el broadcast, por ejemplo el paquete nº 49 que es una petición DNS, y vemos en la cabecera ethernet la dirección MAC de destino “00:0c:29:9b:ee:14”, lo que quiere decir que esa es la puerta de enlace que está usando el PC de Ann Dercover, así que aplicamos un simple filtro “arp and eth.src == 00:0c:29:9b:ee:14” y vemos que la dirección MAC corresponde a la IP 192.168.1.10, luego ya tenemos los datos de la puerta de enlace. A simple vista si filtramos por dirección IP de origen vemos que la puerta de enlace usa un servicio de NTP (Network Time Protocol), y un Firewall con logs en remoto a 192.168.1.30. Todos estos datos podrían servirnos para crear una línea temporal de la actividad del PC de Ann en caso de que los paquetes no tuviesen timestamp, pero vamos a centrarnos de momento en la actividad de Ann.

Con las dos direcciones MAC que tenemos, nos vamos a http://anonsvn.wireshark.org/wireshark/trunk/manuf y buscamos los tres primeros campos de la dirección MAC, y tenemos que Ann usa un portátil Dell y la puerta de enlace es un sistema virtualizado sobre VMWare.

Por tanto, los datos del PC de Ann Dercover recopilados hasta ahora son:


  • IP: 192.168.1.159
  • MAC: 00:21:70:4d:4f:ae
  • Portátil: Dell
  • Nombre del equipo: ANN-LAPTOP
  • Grupo de trabajo: WORKGROUP
  • Sistema Operativo: Windows XP
  • Comentario del e quipo: ann’s laptop
  • Protocolos: NETBIOS, SMB, DNS, SMTP, SYSLOG
  • Servidor DNS: 10.1.1.20
  • Puerta de enlace:
    • IP: 192.168.1.10
    • MAC: 00:0c:29:9b:ee:14 (VMWare)

Seguimos analizando la captura, y vemos que Ann realiza una consulta dns a 10.1.1.20 preguntando por “smtp.aol.com” y justo después inicia una sesión SMTP, así que obtenemos:

Servidor SMTP:


  • Host: smtp.aol.com
  • Nombre primario: smtp.cs.com
  • IP: 64.12.102.142
  • Puerto: 587

Ahora vamos a ver cuánto duró y cuándo se estableció la conexión con el servidor SMTP, para ello seleccionamos con un click el paquete nº 56 que es cuando el cliente de correo de Ann ha finalizado la sincronización de la conexión con el servidor SMTP, y en la ventana de detalles del paquete (donde aparecen todas las cabeceras) desplegamos los datos de “Frame”, vemos que en el campo “Arrival Time” nos dice la fecha y hora de la recepción del paquete: Oct 10, 2009 15:35:31.101734000. Ahora vamos al paquete nº 564 que es cuando el cliente envía el comando “QUIT” al servidor SMTP y realizando la misma operación tenemos la fecha y hora de envío del paquete: Oct 10, 2009 15:38:14.908571000, así que la sesión SMTP duró 4 minutos aproximadamente, así que vamos a ver qué hizo Ann durante la sesión SMTP.

NOTA: Los datos de fecha y hora también podríamos haberlos sacado leyendo los paquetes NTP entre 192.168.1.10 y 192.168.1.30, la fecha y hora enviada por el servidor SMTP en el paquete nº 56, estableciendo un paquete como referencia y haciendo los cálculos.

Ahora, para ver la sesión SMTP hacemos click sobre un paquete de la conexión y le damos a “Analize Follow TCP Stream”, y veremos:

220 cia-mc06.mx.aol.com ESMTP mail_cia-mc06.1; Sat, 10 Oct 2009 15:35:16 -0400

EHLO annlaptop

250-cia-mc06.mx.aol.com host-69-140-19-190.static.comcast.net

250-AUTH=LOGIN PLAIN XAOL-UAS-MB

250-AUTH LOGIN PLAIN XAOL-UAS-MB

250-STARTTLS

250-CHUNKING

250-BINARYMIME

250-X-AOL-FWD-BY-REF

250-X-AOL-DIV_TAG

250-X-AOL-OUTBOX-COPY

250 HELP

AUTH LOGIN

334 VXNlcm5hbWU6

c25lYWt5ZzMza0Bhb2wuY29t

334 UGFzc3dvcmQ6

NTU4cjAwbHo=

235 AUTHENTICATION SUCCESSFUL

MAIL FROM: <[email protected]>

250 OK

RCPT TO: <[email protected]>

250 OK

DATA

354 START MAIL INPUT, END WITH “.” ON A LINE BY ITSELF

Message-ID: <[email protected]>

From: “Ann Dercover” <[email protected]>

To: <[email protected]>

Subject: lunch next week

Date: Sat, 10 Oct 2009 07:35:30 -0600

MIME-Version: 1.0

Content-Type: multipart/alternative;

.boundary=”—-=_NextPart_000_0006_01CA497C.3E4B6020″

X-Priority: 3

X-MSMail-Priority: Normal

X-Mailer: Microsoft Outlook Express 6.00.2900.2180

X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180

This is a multi-part message in MIME format.

——=_NextPart_000_0006_01CA497C.3E4B6020

Content-Type: text/plain;

.charset=”iso-8859-1″

Content-Transfer-Encoding: quoted-printable

Sorry– I can’t do lunch next week after all. Heading out of town. =

Another time! -Ann

——=_NextPart_000_0006_01CA497C.3E4B6020

Content-Type: text/html;

.charset=”iso-8859-1″

Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>

<HTML><HEAD>

<META http-equiv=3DContent-Type content=3D”text/html; =

charset=3Diso-8859-1″>

<META content=3D”MSHTML 6.00.2900.2853″ name=3DGENERATOR>

<STYLE></STYLE>

</HEAD>

<BODY bgColor=3D#ffffff>

<DIV><FONT face=3DArial size=3D2>Sorry– I can’t do lunch next week =

after all.=20

Heading out of town. Another time! -Ann</FONT></DIV></BODY></HTML>

——=_NextPart_000_0006_01CA497C.3E4B6020–

250 OK

QUIT

221 SERVICE CLOSING CHANNEL

De donde podemos extraer los siguientes datos:


  • Usuario (Codificado en Base64) : c25lYWt5ZzMza0Bhb2wuY29t [email protected]
  • Clave (Codificado en Base64): NTU4cjAwbHo= 558r00lz
  • Cliente de correo: Microsoft Outlook Express 6.00.2900.2180
  • Emisor: “Ann Dercover” <[email protected]>
  • Destinatario: [email protected]
  • Asunto del email: lunch next week
  • Cuerpo del mensaje: Sorry I can’t do lunch next week after all. Heading out of town. Another time! Ann

A continuación, en el paquete nº 113 se establece otra conexión, así que volvemos a hacer lo mismo, seleccionamos el paquete, y le damos a “Analize Follow TCP Stream”, de donde podemos extraer la siguiente información:


  • Usuario (Codificado en Base64) : c25lYWt5ZzMza0Bhb2wuY29t [email protected]
  • Clave (Codificado en Base64): NTU4cjAwbHo= 558r00lz
  • Cliente de correo: Microsoft Outlook Express 6.00.2900.2180
  • Emisor: “Ann Dercover” <[email protected]>
  • Destinatario: [email protected]
  • Asunto del mensaje: rendezvous
  • Cuerpo del mensaje: Hi sweetheart! Bring your fake passport and a bathing suit. Address attached. love, Ann

Y a continuación, en el mismo email, vemos lo siguiente:

Content-Type: application/octet-stream;

.name=”secretrendezvous.docx”

Content-Transfer-Encoding: base64

Content-Disposition: attachment;

.filename=”secretrendezvous.docx”


Así que lo siguiente es el adjunto del mail, y ya que está codificado en base64, vamos a copiar todo el “texto” siguiente y decodificarlo. En mi caso lo he guardado como “adjunto_email.base64”, así que para decodificarlo basta con hacer:

$ openssl enc -d -base64 -in adjunto_email.base64 -out adjunto_email

Obtendremos el MD5 del documento:

$ md5sum adjunto_email

9e423e11db88f01bbff81172839e1923 adjunto_email

Y ya podremos leer el documento adjunto, que vemos que dice:

Meet me at the fountain near the rendezvous point. Address below. I’m bringing all the cash.

Y adjunta una imagen de Google Maps con la localización de “Playa del Carmen” en la Av. Constituyentes 1 Calle 10 por la quinta avenida, 77780, México.



Algo interesante que probablemente no sepa más de uno, es que la mayoría (si no todos) los documentos de Office (pptx, docx, etc.), en realidad son archivos comprimidos en ZIP donde se guardan todos los elementos del documento, así que vamos a verificarlo y extraer todos los elementos:

$ file adjunto_email

adjunto_email: Zip archive data, at least v2.0 to extract


$ unzip adjunto_email

Archive: adjunto_email

inflating: [Content_Types].xml

inflating: _rels/.rels

inflating: word/_rels/document.xml.rels

inflating: word/document.xml

extracting: word/media/image1.png

inflating: word/theme/theme1.xml

inflating: word/settings.xml

inflating: word/webSettings.xml

inflating: word/styles.xml

inflating: docProps/core.xml

inflating: word/numbering.xml

inflating: word/fontTable.xml

inflating: docProps/app.xml

Y vemos ahí la imagen adjunta en “word/media/image1.png” y el texto del documento en “word/document.xml”, así que obtenemos el MD5 de la imagen PNG:

$ md5sum word/media/image1.png

aadeace50997b1ba24b09ac2ef1940b7 word/media/image1.png

Así que aprovechando las fechas y horas obtenidas anteriormente, podemos decir que:


  • El sábado 10 de Octubre de 2009 a las 15:35:31, Ann Dercover envió un mail a “[email protected] desde la dirección de email [email protected]cancelando la cita para almorzar a la semana siguiente.
  • El sábado 10 de Octubre de 2009 a las 15:38:11, Ann Dercover envió un mail a [email protected] desde la dirección [email protected] para confirmar la cita.

Estas horas y fechas se extrayeron del timestamp de los paquetes, y coinciden con la fecha y hora en los paquetes enviados de 192.168.1.10 a 192.168.1.30 mediante NTP, sinembargo, en los emails enviados por Ann, ponía fechas y horas diferentes, y si extraemos los metadatos del documento enviado por Ann a [email protected] vemos que las fechas y horas de creación y modificación son:


  • Creación: 10 OCT 2009 17:58:00
  • Última modificación: 10 OCT 2009 18:29:00
  • Veces editado: 1

Por lo que al parecer la fecha y hora “real” difieren de la fecha y hora del PC de Ann, lo cual es posible si Ann no tiene debidamente configurada la fecha y hora en su PC o bien, si ha viajado y se encuentra en otra zona horaria.


Así que con toda la información de la que disponemos vamos a tratar de responder a las preguntas del reto:


  • ¿Cuál es la dirección de correo de Ann Dercover?
    • [email protected]
  • ¿Cuál es la clave del correo?
    • 558r00lz
  • ¿Cuál es la dirección de correo del amor secreto de Ann Dercover?
    • [email protected]
  • ¿Qué dos elementos le dijo Ann Dercover a su amor secreto que llevase?
    • Un pasaporte falso y un traje de baño
  • ¿Cuál es el nombre del adjunto que Ann Dercover le ha enviado a su amor secreto?
    • secretrendezvous.docx

  • ¿Cuál es el MD5 del adjunto enviado por Ann Dercover a su amor secreto?
    • 9e423e11db88f01bbff81172839e1923

  • ¿En qué ciudad y pais se encuentra el punto de encuentro?
    • Playa del Carmen, 77780, México

  • ¿Cuál es el MD5 de la imagen embebida en el documento?
    • aadeace50997b1ba24b09ac2ef1940b7

Y como soy el “tonto de los scripts” aquí os dejo uno para p0f y otro para saber la versión de Windows con los datos de  Major/Minor Version.

#!/bin/bash

if [ ! $# -eq 1 ]
then
echo -e “\nUso: $0 archivo_captura\n”
exit 1
fi

POF=`which p0f`

if [ -z "$POF" ]
then
echo -e “\np0f no encontrado!\n”
exit 1
fi

$POF -s $1 2>/dev/null | egrep “^[0-9]{1,3}” | tr -s ‘:’ ‘-’ | awk -F\- ‘{print $1,$3}’ | sort -u

unset POF
exit 0

#!/bin/bash

if [ ! $# -eq 2 ]
then
echo -e “\nUso: $0 os_major_version os_minor_version\n”
exit 0
fi

case $1 in
4)
if [ $2 -eq "0" ]
then
echo “Windows NT 4.0″
fi
;;

5)
case $2 in
0)
echo “Windows 2000″
;;

1)
echo “Windows XP”
;;

2)
echo “Windows Server 2003 / Windows Server 2003 R2″
;;
esac
;;

6)
case $2 in
0)
echo “Windows Vista / Windows Server 2008″
;;

1)
echo “Windows Vista / Windows Server 2008 R2″
;;

esac
;;
esac

exit 0

De donde podemos extraer los siguientes datos:

  • Usuario (Codificado en Base64) : c25lYWt5ZzMza0Bhb2wuY29t [email protected]

  • Clave (Codificado en Base64): NTU4cjAwbHo= 558r00lz

  • Cliente de correo: Microsoft Outlook Express 6.00.2900.2180

  • Emisor: “Ann Dercover” <[email protected]>

  • Destinatario: [email protected]

  • Asunto del email: lunch next week

  • Cuerpo del mensaje: Sorry I can’t do lunch next week after all. Heading out of town. Another time! Ann

A continuación, en el paquete nº 113 se establece otra conexión, así que volvemos a hacer lo mismo, seleccionamos el paquete, y le damos a “Analize Follow TCP Stream”, de donde podemos extraer la siguiente información:

  • Usuario (Codificado en Base64) : c25lYWt5ZzMza0Bhb2wuY29t [email protected]

  • Clave (Codificado en Base64): NTU4cjAwbHo= 558r00lz

  • Cliente de correo: Microsoft Outlook Express 6.00.2900.2180

  • Emisor: “Ann Dercover” <[email protected]>

  • Destinatario: [email protected]

  • Asunto del mensaje: rendezvous

  • Cuerpo del mensaje: Hi sweetheart! Bring your fake passport and a bathing suit. Address attached. love, Ann

Y a continuación, en el mismo email, vemos lo siguiente:

Categories: Forense, Retos Tags:
  1. Thor
    December 12th, 2009 at 00:35 | #1

    Muy buena solución, enhorabuena!

  2. December 12th, 2009 at 00:38 | #2

    Gracias Thor! ;)

  3. December 12th, 2009 at 01:47 | #3

    Increible! Yo de mayor quiero ser como tu :)

    Saludos

  4. December 14th, 2009 at 13:20 | #4

    gracias neofito! buen post el tuyo también ;)

  5. December 15th, 2009 at 17:36 | #5

    ¡Aplausos! Qué bien explicado, Chema. Gracias por compartirlo.

  6. December 18th, 2009 at 02:35 | #6

    Excelente post!

  1. No trackbacks yet.