Sin título

Es cierto que ya ha pasado un mes, pero no quería dejar pasar la oportunidad de contaros un poco a lo que he dedicado una buena parte de las pasadas vacaciones navideñas. Resulta que sobre el veintitantos de diciembre el compañero Jorge me habló de un CTF bastante popular que SANS Institute lleva organizado desde hace unos años el SANS Holiday Hacks Challenge.

La verdad es que no estaba muy por la labor de meterme en un berenjenal de este tipo en Navidad pero el caso es que le echamos un vistazo y el CTF estaba TAN currado que no pudimos dejarlo pasar.

El challenge como tal consistía en un videojuego con estética de aventura gráfica multijugador y una historia bastante elaborada por detrás en la que tenemos que recorrer un pequeño mundo recopilando pistas que, efectivamente, estaban ocultas tras pruebas de diferente tipo y dificultad.

image043

Aunque la idea final es que el participante logre descubrir quien a secuestrado a Papa Noel y por qué, la gracia del asunto es que había que elaborar un informe de todo el proceso desarrollado para resolver cada una de las pruebas y remitírselo a SANS para poder optar a algún premio. En mi caso el informe ocupo algo mas de 40 páginas, y a día de hoy no sé si he ganado algún premio o no… lo que si que tengo claro es que he logrado cubrir algunas lagunas de conocimiento mientras me lo pasaba bastante bien y conocía a gente interesante.

El juego estaba estructurado en varías partes, podríamos decir capítulos:

  • En primer lugar teníamos que descubrir el contenido de un fichero a partir de información en el Twitter y en el Instagram de Papa Noel. Tras resolver el desafío descubríamos que el contenido era un APK (la cual se utilizaría mas adelante). Para que os hagáis una idea, el fichero, una vez encontrado, estaba protegido por un password que podíamos encontrar en la cuenta de Twitter de la siguiente manera..

image001

Si te descargabas todos los tuits… magia!!!

image004

image003

  • Tras ello teníamos que fabricar una Cranberry Pi (recolectando piezas en el juego) esta era la parte mas arcade.
  • Con nuestra cranpi virtual montada tocaba encontrar a Papa Noel, para ello había que acceder a diferentes terminales en distintas habitaciones del juego las cuales nos proponían desafíos que daban acceso a su vez a nuevas habitaciones donde había que buscar a Santa Claus. Estas pruebas eran relativamente sencillas, a modo de ejemplo os enseño esta en la unicamente había que llegar a un fichero oculto en una estructura de directorio bastante peculiar (había que saber algo de linux simplemente)

image027

Esta otra me emociono bastante al estar diseñada al mas puro estilo “Ready Player One”. Tras conectarte al terminal directamente te lanzaba un “GREETINGS PROFESSON FALKEN.”… MI-TI-CO

image028

  • La última parte fue la mas laboriosa, había que descubrir quien era el secuestrador y sus motivaciones. Para ello había que hacer un reversing al APK, descubrir los servidores a los que se conectaba la aplicación y hacerles un pentesting hasta lograr acceder a un archivo oculto en algún punto. Estos archivos eran clips de audio de corta duración, combinándolos todos obteníamos la frase que daba acceso a la última habitación en la que se resolvía todo el misterio.  uno de los 7 que había que resolver.

Tan solo os dejo uno de los 7 desafíos que había que resolver. En esta prueba nos proponemos atacar el servidor usado en el desarrollo del APK (http://dev.northpolewonderland.com), básicamente a este servidor se le remite cierta información de debugging desde el APK a través de un JSON

image061

Aquí podemos ver como se construye el JSON en la una de las clases del APK.

image062

Como no fui capaz de emular la estructura del objeto de tal forma que pudiera ver lo que el servidor me devolvía, lo que hice fue activar la opción de debugging en el APK y tratar de capturar el tráfico con Wireshark

image063

Al modificar el flag, no solo tenemos que recompilar el APK si no que también tenemos que volver a firmar la aplicación ya que el emulador que usamos de Android (Genymotion) lo requería. Para autofirmar la aplicación usamos las herramientas keytool y jarsigner.

Una vez que la aplicación reportaba al servidor fuimos capaces de ver la traza de salida en Wireshark…

image064

… y la de vuelta, la cual era otro JSON (que incluía el JSON que nosotros habíamos enviado)…

image065

… y aquí es donde estaba el chiste, efectivamente en el JSON de respuesta estaba el JSON enviado, pero este incluía un campo que nosotros no le habíamos pasado (lamentablemente en la imagen de arriba no se ve claro) el campo era verbose=false.

Así pues lo único que tuvimos que hacer es usar ZAP (o cualquier otro programa) para enviar un JSON preparado por nosotros y que incluyera verbose=true (a ver que pasaba). Este es el mensaje enviado…

image066

… y este el recibido…

image067

¡Bingo! Aparece un fichero de audio como el que buscábamos. Tan solo quedaba bajarlo.

image068

Este en concreto sonaba así:

Como he comentado existían un total de 7 pruebas de este tipo. Si juntábamos los 7 trozos y lo editábamos un poco (o mucho) obteníamos esto…

Os animo, no, os reto,  a que adivineis que coj… dice, a mi me llevo un par de dias… hasta que al final sacando partes de la frase y buscando bastante vi que venía de AQUI, flipalo.

En fin, explicar todas las pruebas en este blog llevaría mucho tiempo. Espero que lo aportado os haya gustado y en cualquier caso, si alguien quiere el report completo que me ponga un DM por twitter a mi cuenta @_m1tz_ y amablemente se lo hago llegar.