Solución al reto 17 de Toulouse

En nuestro último reto de esteganografía (Reto 17: Toulouse) queríamos utilizar una técnica de Martin Fiedler que nos pareció muy pero que muy interesante: la posibilidad de ocultar volúmenes cifrados de Truecrypt dentro de vídeos en formato QuickTime/MP4.
Pensarlo un momento, está muy bien tener un volumen cifrado en el disco pero está aún mejor que además no se encuentre a la vista de miradas indiscretas... ;)

Una opción es crear un volumen oculto con Truecrypt pero es algo arriesgado si tenemos en cuenta la facilidad con la que podemos llegar a sobrescribirlo. Otra es utilizar nombres de ficheros como pagefile.sys o hiberfil.sys aunque cantaría demasiado su presencia en discos extraíbles. Pero hay otra mejor: hoy en día los vídeos están en todas partes y ocupan gigas y gigas con la llegada de la alta definición. Además gracias a los encoders actuales por mucho bitrate que tenga un video con respecto a otro es dificil de apreciar la diferencia de calidad, por no hablar de detectar un bloque de datos aleatorios dentro de un binario... ¡por todo eso los vídeos son una excelente alternativa!



La técnica en cuestión consiste en mantener más o menos la estructura del fichero de tal forma que sea usable por las dos aplicaciones: TrueCrypt y el reproductor de vídeo al uso. Para ello se pone el mdat (media data) justo después del final del volumen de TrueCrypt seguido de la cabecera moov (media header). Entonces se genera un nuevo mdat que abarca tanto el volumen TrueCrypt como los media data reales. Como se modifican los offsets durante este proceso es necesario ajustar la tabla, algo que es posible y manejable. Para conseguir la máxima credibilidad, se copian los primeros kilobytes del mdat original al principio del archivo. De esta manera, el archivo se ve inocuo incluso cuando se observa en un editor hexadecimal. Todo esto se explica en detalle en el post del autor y se ve más claramente en su gráfico:


Respecto a la detección de la información oculta podía hacerse 1/ comparando el vídeo con el de Youtube de Nicky Romero, 2/ monitorizando el bitrate y comprobando el tamaño del archivo o 3/ haciendo un análisis en profundidad de los datos del mdat (offsets o repeticiones de los primeros 64k). Tengo pendiente el desarrollo de una herramienta que automatice la segunda opción...

Además podréis descargar un script en Python 2.x para generar el híbrido TrueCrypt/QuickTime, que es el que hemos utilizado en nuestro reto. 

El vídeo como podéis ver puede reproducirse y si lo intentamos montar con Truecrypt con la contraseña TOULOUSE (tan evidente sí, porque no queríamos que perdierais tiempo con un ataque de diccionario)...

reto17# truecrypt --non-interactive --password=TOULOUSE stego.mp4 volume
reto17# head volume/CABLE_245612.txt
UNCLAS SECTION 01 OF 04 MADRID 000086

SENSITIVE
SIPDIS

STATE FOR EUR/WE, EEB/TPP/IPE, EEB/IFD/OIA, EEB/TRA/AN
STATE PASS USTR FOR D.WEINER
COMMERCE FOR 4212/DON CALVERT
ENERGY FOR PIA/K.BALLOU AND EERE/D.BIRNS
TREASURY FOR OIA/OEE/R.JOHNSTON AND OTP/M.CORWIN

voilà! accedemos al contenido del mismo, en este caso un cable del ex ministro Miguel Sebastián.

Agradecimientos y ganadores:

Lo primero excusarnos por la confusión de cuál era el video a analizar (para nosotros el "original" porque el que se reproducía incrustado era una conversión de Vimeo) y disculpas personalizadas a kami y t0n1 de hacktracking porque justo estuve de vacaciones y no avisé que el reto fue resuelto unos días antes por nuestro amigo Daniel Correa de Seguridad Colombiana. No obstante ellos no se apoyaron en ninguna pista y para mí son también justos ganadores, por lo que espero me permitáis compartir créditos en nuestro humilde "hall de la fama".

Por último daros las gracias a todos aquellos que hayáis invertido algo de tiempo en intentar resolver el reto. Sé que muchos sois anónimos y aunque no aparecéis en los títulos estáis ahí, intentando aprender y divertiros con nosotros. ¡Hasta el próximo!

Comentarios