La gente del SANS Institute publica, cada cierto tiempo, pequeños retos o concursos de análisis forense orientado principalmente al análisis de tráfico de red: (http://forensicscontest.com).
En este post os invitamos a que solucionéis con nosotros el último reto de los que han publicado, llamado Ann’s AppleTV. El límite de tiempo para enviar las soluciones al reto si se quería optar al premio que ofrecían (un Apple_TV) era hasta el día 1 de febrero de 2010 (Deadline is 2/01/10 (11:59:59PM UTC-11)), por lo que nosotros ya podemos publicar nuestra solución propuesta.
Para optar al premio la gente de SANS dejaba claro que iba a valorar principalmente dos cosas: la solución que fuera más elegante y la codificación de alguna herramienta que automatizara la extracción de las evidencias que nos permitan contestar correctamente a las preguntas planteadas. Esta no es la idea en la solución que os vamos a proponer en este post, únicamente nos centraremos en analizar el tráfico y buscar las evidencias necesarias para tratar de solucionar correctamente el reto.
Si queréis ir siguiendo la solución podéis descargaros aquí el fichero con la captura.
Lo primero que nos preguntan es la dirección MAC del dispositivo AppleTV de Ann. Analizando la captura con Wireshark podemos ver en el primer paquete que el origen de la comunicación tiene como dirección MAC: 00:25:00:FE:07:C4

Podemos comprobar aquí además que se trata de un dispositivo del fabricante Apple.
-------------------------------------------------------------------------------------
00-25-00 (hex) Apple, Inc
002500 (base 16) Apple, Inc
1 Infinite Loop
Cupertino CA 95014
UNITED STATES
-------------------------------------------------------------------------------------
Esta ha sido fácil, vamos a por la segunda. ¿Qué cadena usa el dispositivo Apple TV de Ann como User-Agent en las conexiones HTTP?
En nuestro analizador de tráfico favorito (Wireshark) buscamos una petición HTTP cualquiera que tenga como origen el dispositivo en cuestión que, por cierto, tiene como dirección IP la 192.168.1.10.
Buscamos en la parte del paquete que corresponde al nivel de aplicación y observamos que en la petición GET que realiza el dispositivo aparece la cabecera User-Agent con el siguiente valor: AppleTV/2.4

A continuación nos preguntan cuáles fueron los cuatro primeros términos que Ann buscó en su AppleTV, teniendo en cuenta que las búsquedas incrementales también cuentan.
La respuesta la podemos encontrar en los paquetes 43, 180, 230 y 276 de la captura. Observando el tráfico hemos llegado a la conclusión de que las búsquedas tienen la siguiente pinta: Son peticiones GET de esta forma:
/WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=term
Donde ‘term’ es lo que estamos buscando en ese instante. Y lo que nos devuelve el servidor de Apple es un fichero XML con los resultados de la búsqueda.
Por centrarnos en lo que nos preguntan, en el paquete 43 vemos que se realiza la siguiente petición:
GET /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=h
El XML de respuesta lo podemos ver completo en el paquete 56 (aunque lo hemos estado recibiendo desde el 45). Lo que contiene es el resultado de la búsqueda de términos que contengan la letra h : “The Hangover (Unrated)”, “Harry Potter and the Half-Blood Prince”, así hasta “Audrey Hepburn”. (Podéis obtener el XML de manera muy sencilla utilizando WireShark si marcáis el paquete 56, y en el menú contextual elegís la opción Copy / Bytes (Printable Text Only).
Volvamos a lo que nos preguntan. Los cuatro primeros términos que buscó Ann son:
h, ha, hac y hack (poco original ¿verdad).
Frame 43: /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=h
Frame 180: /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=ha
Frame 230: /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=hac
Frame 276: /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=hack
Vamos con la cuarta pregunta. ¿Cuál es el título de la primera película en la que Ann hizo click? Esta ya es un poco menos sencilla. Lo primero que debemos hacer es identificar el tipo de tramas en las que se están haciendo estas peticiones. Observando el tráfico HTTP vemos que existen unas peticiones GET al servidor en las que se solicita un ‘id’ concreto.
307 34.910097 192.168.1.10 8.18.65.67 HTTP GET /WebObjects/MZStore.woa/wa/viewMovie?id=333441649&s=143441 HTTP/1.1
Si buscamos en el XML obtenido anteriormente podemos ver la siguiente información relativa a este ‘id’:
<dict>
<key>type</key><string>link</string>
<key>title</key><string>Hackers</string>
<key>url</key><string>http://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewMovie?id=333441649&s=143441</string>
<key>url-page-type</key><string>list</string>
<key>artwork-urls</key>
<array>
<dict>
<key>box-height</key><integer>170</integer>
<key>url</key><string>http://a1.phobos.apple.com/us/r1000/032/Video/f0/48/dd/mzi.pizbdeal.170x170-75.jpg</string>
<key>box-width</key><integer>170</integer>
</dict>
</array>
<key>link-metadata</key>
<dict>
<key>is-hd</key><true/>
</dict>
<key>title2</key><string>Released 1998</string>
</dict>
Es decir, parece que la muchacha va a verse un clásico:

La pregunta número 5 es: ¿Cuál es la URL completa del trailer de esa peli? (está definida como “preview-url”). Vamos a buscar...
Lo que nos devuelve el servidor es un fichero comprimido en formato gzip que contiene de nuevo un XML con todos los datos relativos a la peli.
Lo más elegante sería extraer el fichero gzip, utilizando por ejemplo primero tcpflow para quitarnos tráfico innecesario, y luego usando xxd buscando por su cabecera que en este caso es 1F8B y cortando por el tamaño concreto. Esto sería en el caso en el que quisiésemos ganar un AppleTV pero como no es el caso (imagínate la que te montan si llegas a casa con otro gadget para el salón, juas) lo haremos de la forma rápida y sucia:
Desde Wireshark marcamos el paquete de la petición GET (frame 307) y en el menú contextual elegimos la opción “Follow TCP Stream”. Nos aparecerá una ventana como la siguiente:

En el desplegable del filtro “Select the stream direction to display”, elegimos que nos muestre únicamente el tráfico que va desde el servidor hasta el AppleTV.

A continuación, en modo RAW salvamos el contenido en un fichero al que llamaremos por ejemplo peli1.gzip. Ahora con tu editor de texto favorito abre dicho fichero y elimina las partes que corresponden a las cabeceras HTTP de las dos peticiones en las que se envía el fichero. (Ojo!! En la línea 42 del fichero no te olvides de eliminar también el texto “HTTP/1.1 200 OK”)

Vale, es muy cutre, pero he tardado 2 segundos. (¿Todavía estás haciendo man xxd?).
Guardamos el fichero nuevo, y al descomprimirlo aparece un fichero peli1 que es un XML que contiene los datos que nos ayudarán a contestar la quinta pregunta.
La respuesta a la pregunta 5, por tanto, es:
http://a227.v.phobos.apple.com/us/r1000/008/Video/62/bd/1b/mzm.plqacyqb..640x278.h264lc.d2.p.m4v
Para responder las preguntas 6 y 7 simplemente hemos seguido el mismo proceso que en los pasos 4 y 5. (Dejamos al lector que haga el desarrollo completo) Aquí van nuestras respuestas:
La segunda peli en la que pincha es: Sneakers y para poder verla en su maravilloso AppleTV tiene que aflojar: $9.99(otro de los motivos por los que no interesa el aparato).

Por último, nos preguntan cuál es el último término completo por el que ha buscado Ann. De nuevo sencillo. Busquemos otra vez una petición GET como la de la pregunta 3. En este caso nos piden el último término buscado con lo que la respuesta aparece en el paquete 1766: iknowyourewatchingme (nos han cazado!!)
1766 158.251617 192.168.1.10 8.18.65.89 HTTP GET /WebObjects/MZSearch.woa/wa/incrementalSearch?media=movie&q=iknowyourewatchingme HTTP/1.1
Esperamos que os haya resultado entretenido jugar un rato con el tráfico generado por un cacharro de esas características. Comentaros que el tráfico de iTunes es muy parecido con lo que podéis capturar tráfico de este software para ver en vivo este tipo de peticiones.
A modo de resumen, comentar simplemente que este tipo de juegos, o concursos no sirven únicamente para pasar el rato e intentar ganar el premio correspondiente sino que te permite practicar tus habilidades técnicas (no muchas en este caso) y conocer o estudiar protocolos que hasta ahora a lo mejor no habías visto.
Por último, destacar que no hemos enviado esta solución al concurso, ya que como habéis podido ver a lo largo del post no cumplimos ni la parte de la elegancia ni la del automatismo. Otra vez será.


Comentarios
@MeTalSluG No, si no he presentado las respuestas. Sin haber codeado nada no creo que tuviese opción alguna :) Just for Fun !!
Buen artículo. A ver si te dan el premio xD
Buen articulo vespadict! me ha gustado el estilo, para mi tienes elegancia :-P
@peter (barbas) Me alegro de que te haya gustado. Lo de aprender ya no creo que hayas aprendido tanto :) Por cierto, han publicado el Puzzle #4 con Deadline el 3/04/10 (11:59:59PM UTC-11)
Muy chulo! Siempre aprendiendo con Vespadict, y siempre cosas buenas :D
Añadir comentario