Solución al reto 1 del muñeco de nieve

Ha llegado el momento de presentamos la solución al reto del muñeco de nieve, un sencillo desafío con el que queríamos introducir al personal en el fascinante mundo de la esteganografía.

Comenzando desde el principio, deciros (por si hay algún despistado) que la esteganografía es el arte de transmitir información de modo que la presencia de la misma pase inadvertida, típicamente escondida dentro un texto o una imagen. Proviene de las palabras griegas steganós (cubierto) y graptos (escrito), literalmente escrito cubierto, en el sentido de escondido.

Bien, pues precisamente escondido guarda un secreto nuestro simpático muñeco de nieve y nuestra misión es desvelarlo.

Nos ponemos manos a la obra y en primer lugar descargamos las imágenes, primero la original (muñecodenieve1.jpg) y posteriormente la modificada (muñecode
nieve2.jpg).

Lo primero que observamos a simple vista es que la imagen con el texto oculto tiene un tamaño mayor, concretamente 0,9KB.

Esto puede evidenciar que el método seguido para ocultar la información ha sido de inyección en lugar de técnicas como la del bit menos significativo (LSB)
que no incrementarían el tamaño del original.

Estegoanálisis manual

A continuación y dado que tenemos el fichero original (sin modificaciones) podemos realizar en primera instancia un estegoanálisis manual que, como su nombre indica, consiste en buscar de forma manual diferencias entre el fichero original y el ‘esteganografíado’, identificando cambios en la estructura para localizar datos ocultos.

Pero antes de compararlos, aprovechando que tenemos los ficheros abiertos con nuestro editor hexadecimal favorito y, como además somos bastante desconfiados, comprobaremos si realmente se trata de una imagen con formato jpg.

Observamos el valor FF D8, que indica el comienzo de un fichero de imagen jpg. Normalmente estos dos bytes bastan para certificar que se trata realmente de un jpg, por lo que parece que no nos han engañado. Los siguientes bytes indican el fabricante de la aplicación y corresponden al formato típico de un jpg:

Y además al final del fichero observamos los bytes FF D9, que precisamente nos indican el final de la imágen "end of JPG file".

Continuamos con el análisis de ambos ficheros y, comparándolos, observamos que al final de la segunda imagen modificada se evidencia claramente la presencia de datos ocultos. Además aparecen múltiples bytes 20 (espacio) que podrían indicar un buffer vacío.

Ya sabemos que se trata de una imagen jpg y que la herramienta utilizada para ocultar el texto en la imagen ha inyectado al final del fichero (algoritmo EOF) un buffer en el que se encuentra la información oculta que queremos desvelar.


Estegoanálisis automático

El siguiente paso es intentar descubrir cual ha sido la herramienta esteganográfica utilizada buscando alguna huella (footprint).

Para automatizar el proceso existen algunas herramientas de esteganoanálisis que automatizaran la búsqueda. Entre nuestras favoritas está Stegsecret de Alfonso Muñoz (UPM), por cierto un excelente ponente que vimos en el Asegúr@IT IV de Getafe (2008).

Stegsecret es un proyecto de código abierto hecho en Java que detecta EOF, LSB, DCTs y otras técnicas, e incluye una base de datos de fingerprints para más de 40 herramientas de esteganografía.

Al analizar la imagen modificada, Stegsecret detecta que la imagen contiene 73 bytes de información oculta al final del fichero (EOF) y ¡también descubre la herramienta utilizada!

Se trata de Camouflage 1.2.1 y lo ha descubierto a través del siguiente el patrón:

Una vez que conocemos la herramienta utilizada, procedemos a instalarla para hacer más pruebas e intentar obtener el texto oculto.

Posicionamos el cursor sobre el fichero modificado ‘muñecodenieve2.jpg’, pulsamos el botón derecho de nuestro ratón y seleccionamos ‘Uncamouflage’.

Como podemos ver en la imagen anterior, Camouflage nos solicita contraseña para acceder al contenido oculto: no podía ser tan fácil.

Análisis de la herramienta Camouflage

El siguiente paso será estudiar el funcionamiento de Camouflage para intentar romper esa contraseña. Para ello, creamos un fichero ‘pruebas.txt’ con el texto ‘Esto es una prueba’ y procedemos a ocultarlo en el fichero original ‘muñecodenieve1.jpg’.

Posicionamos el cursor sobre el fichero de texto creado ‘prueba.txt’, pulsamos el botón derecho de nuestro ratón y seleccionamos ‘Camouflage’.

Seleccionamos el fichero imagen que contendrá el fichero de texto oculto (portador),

guardamos el fichero resultante como ‘muñecodenieve_prueba.jpg’,

Y asignamos la password ‘1234’

A continuación repetimos la misma operación pero ocultamos el fichero de texto sin asignar contraseña.

El resultado es que tenemos dos ficheros ‘muñecodenieve_prueba.jpg’ y ‘muñecodenieve_prueba_sinpassword.jpg’ que podemos comparar.

Y con esta comparación descubrimos algo que llama poderosamente la atención: cuando la contraseña cambia (‘1234’ o vacía ‘ ‘) la mayoría de los datos no son modificados, por lo que nos percatamos inmediatamente de uno de los grandes fallos de diseño de Camouflage: ¡el cifrado no depende directamente de la contraseña!

Obteniendo la posición y sobrescribiendo la contraseña

Centrándonos en la búsqueda de la clave y sabiendo que nuestra contraseña de pruebas es ‘1234’ es fácilmente deducible que su posición es seguramente esos 4 bytes aislados que cambian:

‘muñecodenieve_prueba.jpg’ : 33 A7 49 16
‘muñecodenieve_prueba_sinpassword.jpg’ : 20 20 20 20 (contraseña en blanco)

Si sobrescribimos esos bytes por espacios, podremos obtener el fichero secreto sin problemas:

Si repetimos estas operaciones para identificar la posición y sobre escribir la contraseña del fichero “muñecodenieve2.jpg” habremos resuelto el reto.

Obteniendo la contraseña

Ahora queremos ir más allá: queremos además saber la contraseña que se ha utilizado para generar el fichero ‘muñecodenieve2.jpg’.

Al pasar la supuesta clave 6A E5 03 13 de hexadecimal a ASCII obtenemos ‘jå ’ y, evidentemente, no parece ser la contraseña real.

Esto nos hace suponer que Camouflage debe realizar una operación intermedia para codificar nuestra contraseña.

A través del análisis de varias imágenes cifradas con la misma clave es posible deducir que Camouflage utiliza cifrado XOR, un cifrado muy vulnerable que nos permitirá obtener la clave.

Brujuleando por Internet encontramos herramientas que automatizan este proceso de descifrado, como Camouflage_Password_Finder de Guillermito, cuyo artículo (¡del 2002!) nos ha servido para la creación de este reto.

Simplemente lo ejecutamos, seleccionamos el fichero ‘muñecodenieve2.jpg’ y terminanos de destripar completamente el reto:

El camino fácil

Muchas veces le decía a un amigo que para cruzar un río y llegar a la otra orilla lo antes posible no hacía falta bucear por todo su caudal.

Lejos de ser un proclama ‘lammer’, lo que quiero decir es que quizás algunos de vosotros hayáis resuelto el reto sin necesidad de realizar ningún análisis manual y sin conocer exactamente el funcionamiento de Camouflage.

Digamos que la forma rápida hubiese sido:

- Analizar la imagen con una herramienta de estegoanálisis (por ej. StegSecret) y descubrir que ha sido tratada con Camouflage 1.2.1.

- Buscar un poco por Internet y utilizar alguna de las herramientas capaces de crackear Camouflage: Camouflage_Password_Finder, CamouflageCrack, CamouflageCrack o Camodetect

Ganador del reto

Si bien, Jose Manuel fue el primero en resolverlo, el mismo reconoce que recibió demasiada ayuda para ser nombrado ganador del reto ;-), por tanto asignamos tal reconocimiento a…

Juanma Merino nXpected http://juanma.wordpress.com/

Por último sólo nos queda dar las gracias a Juanma y a todos los demás que hayan intentado o resuelto el reto.

Por favor, participar y mandarnos vuestros nuevos retos o propuestas a Hackplayers (contacto).

Comentarios

  1. Gracias a vosotros por dedicar parte de vuestro tiempo libre a fomentar el conocimiento y permitirnos divertirnos un rato trasteando.

    ResponderEliminar
  2. el reto nos ha tenido "ocupados" un buen rato, ¡gracias por el trabajo!
    pero sólo por curiosidad: ¿el hecho de que fuesen imágenes jpeg con extensión gif era para despistar o ha sido accidental? gracias a esta tontería hemos descubierto un nuevo "comportamiento" de la última versión de FF para linux... jeje

    ResponderEliminar
  3. Si, era para despistar ;-). Simplemente renombré los ficheros de jpg a gif para que previamente identificárais el formato real de la imágen. Sin embargo al descargarlo al disco duro, por defecto lo salva con la extensión jpg. ¿Es el comportamiento que comentas con FF? En caso afirmativo, deciros que también pasa con IE8.. ¿será cosa de Blogger?

    ResponderEliminar
  4. despistar? que mala baba :)
    lo que nos despistó fue el "renombrado automático" que hacen ALGUNOS navegadores... wget pasa pilas.

    creemos que el FF 3.7 interpreta el content-type y toma "decisiones" como "renombrar" sin previo aviso. Nos pillamos un buen rebote :(

    ResponderEliminar
  5. Mira cuantas semejanzas
    http://blogs.eset-la.com/laboratorio/2010/03/10/solucion-decimo-desafio-eset/

    ResponderEliminar
  6. ¿coincidencia o Cristian Borghello leyó antes nuestro blog? ;-)

    ResponderEliminar
  7. Sea como sea parece que no le gustó que lo comentará en su blog :( Me borró el comentario.

    ResponderEliminar
  8. Vaya, pues tampoco es para eso. A mi personalmente no me importa que se basen en nuestros retos, de hecho me enorgullece. Lo que ya no mola es que moderen comentarios por esta razón..
    Ánimo y muchas gracias por contarnos!

    ResponderEliminar
  9. Hola que tal! Mi nombre es Gabriel, comenzé a estudiar seguridad informatica el año pasado, acabo de terminar un curso..., y en este curso me dieron algunos retos de esteganografia incluido este del muñeco de nieve, les comento que empezé a hacerlo hace como una semana pero tranquilo, de a ratos mirandolo, y les cuento que ahora hace 3 diassss que estoy a full con esto y no lo puedo sacar!!! Probé como lo hacen en este post con imagenes limpias, que no tenian previamente ningun tratamiento y a ellas escondí un txt con camouflage y les puse contraseña, las compare con un editor hexa, y pude hacerlo sobrescribiendo la contraseña en el hexa, pero con las imagenes que me pasan que ya estan camoufladas no me sale!!! Aca en el post parece muy clara la solución pero no logro sacarla! Me podrán dar una mano por favor? Desde ya muchas gracias! Saludos!!!

    ResponderEliminar

Publicar un comentario