Esteganografía mindundi

Imagen de Agustín
Enviado por Agustín en

Foros: 

22/07/2013: Resuelto por flino. ¡Enhorabuena!

Por Agustín

Aprovecho que la Mengela se ha ido a pasar sus vacaciones en su amado Bergen-Belsen, para haceros llegar un pequeño entretenimiento.

Como estos días se ha estado hablando de esteganografía, usando un texto aparentemente inocuo como soporte de otro -cifrado o no-, he estado rebuscando en el almacén de trastos viejos y he encontrado una pequeña herramienta que hace años construí para esconder cualquier cosa en una imagen (en este caso un fichero .BMP), por una variante -la más simple- del algoritmo LSB, uno de los muchos existentes, como YASS (Yet Another Steganographic Scheme). En el método LSB se usa el último bit -el menos significativo- de cada byte de la imagen, para grabar todos los bits del fichero a esconder, en la esperanza de que ello no modifique significativamente su aspecto. Lógicamente, el fichero soporte ha de ser más de ocho veces mayor que el fichero oculto.

En realidad la sustitución se ha de hacer a partir de cierta posición y en determinadas zonas, según el formato del fichero utilizado. He elegido los ficheros .BMP, altamente ineficientes y poco utilizados, porque me resultaba más fácil implementar el algoritmo en ellos, dada la simpleza de su estructura. En la imagen soporte también viene grabado el nombre del fichero oculto, con su extensión, y su tamaño.

Yo no diría que esto sea verdaderamente un reto, porque estoy seguro de que os resultará muy fácil, pero os propongo, como pasatiempo:

a) Que determinéis cuál de las dos imágenes presentadas contiene algo oculto.
b) Que extraigáis lo escondido, que es un breve texto sin cifrar.

En principio se podría detectar el engaño mediante diversos métodos, y hay algunas herramientas comerciales que tratan de hacer este trabajo -por lo menos el apartado a)-. En su día probé algunas que me ofreció un amigo muy puesto en temas de seguridad, pero no tuvieron éxito. No puedo indicároslas porque ya no las tengo instaladas, después de varios accidentes informáticos en los que he perdido gran cantidad de información. Es como una metáfora de lo que le pasa también a mi cerebro.

Sigo pensando que esconder algo en una imagen es todavía una forma segura de burlar a los Filósofos-que-sólo-quieren-comprender-mejor-el-mundo. Aunque, como nos decía en su día admin, los Filósofos podrían esterilizar todas las imágenes que circulan por el éter machacando con basura el octavo bit de todos los bytes, que ya hay que ser brutos. Y no sé si eso valdría contra otros sistemas esteganográfico o, al menos, no es seguro que las imágenes no quedaran visiblemente alteradas.

Por otra parte, también se puede esteganografiar sobre ficheros de audio y de video, aunque el oído humano es más difícil de engañar que su vista. Estoy seguro de que un melómano notaría algo raro si a las Variaciones Goldberg interpretadas por Glenn Gould les hubieran metido bichos.

Como no se pueden subir ficheros .BMP, os pongo los enlaces, y una imagen .PNG de muestra, QUE NO SIRVE PARA LA TAREA.

Dibujo 1
Dibujo 2

 

Imágenes: 

Imagen de muestra (inútil para la tarea)

Algunas cosas

Mirando solo los dibujos y pasándoles un hexdump, poco he encontrado, mi análisis es sólo superficial y no me he puesto a investigar los "bits más bajos" o cualquier otro método común de estenografía.

Observaciones que quizás ayuden:

Me he fijado que el uno tiene alrededor de las letras en azul, unos puntos en rojo que las rodean. Podría ser que el uno ocultase algo.

Pero el número dos tiene una cabecera un poco peculiar, como si tuviera más datos.

Texto como tal no he encontrado. Espero que esto ayude más que despistar.

En todo caso es bueno

Editando las dos imágenes com GIMP seleccionando por color con tolerancia 0, salvo en las letras no hay nada que no sea de los colores visibles, con lo que no parece esté codificado como un color un algún bit más alto o más bajo en algunos píxeles.

En repetidas ocasiones,

En repetidas ocasiones, queremos mandar un mensaje, que puede ser a través de un correo o mensajería instantánea a alguna persona, pero esperamos que sea realmente la persona misma quien lo lea. Dicho de otra manera, no queremos que el mensaje sea leído por otros. Hay muchas maneras, de encriptar mensajes, cualquiera sea la vía, pero en esta ocasión les queremos presentar, una forma, que a mí en particular, me parece muy ingeniosa: esconder textos codificados en imágenes. textos imagenes | milbits Esto lo podremos realizar, mediante un programa llamado: Free Spy Message. Este programa te permitirá ocultar distintos textos, a través de una codificación en una imagen de formato BMP. Su funcionamiento es muy simple, lo que tendrás que hacer es: Cargar una imagen en la interfaz del programa, luego tendremos que agregar el texto, o archivo de texto, que queremos que contenga encriptado la imagen. Una vez concluido esto, debemos introducir la contraseña que contendrá la imagen, de manera que si alguien descubre que la misma contiene un texto escondido, no pueda verlo sin saber la contraseña. textos imagenes | milbits Para aquellos que se pregunten, ¿Qué tanta protección me ofrece este programa? Les decimos que éste contiene dos poderosos algoritmos de encriptación, y para que no se sospeche nada, no se crea ningún archivo temporal con la imagen.

http://free-spy-message.softonic.com/universaldownloader-launch (no tiene virus)

Imágenes: 

reto

Dices: Lógicamente, el fichero soporte ha de ser más de ocho veces mayor que el fichero oculto.
????

En los ficheros BMP, por cada pixel hay 3 bytes (uno por cada color RGB). Como las imágenes de muestra tienen 1000 x 750 pixeles, luego podemos escribir 1000 x 750 x 3 bits en esa imagen, asumiendo que representamos los caracteres con 8 bits, podremos esconder un texto de 1000 x 750 x 3 / 8 caracteres.

La puedo poner yo?

f@pc:~/kriptopolis$ inicio=58; fin=480; mensaje=$(hexdump -s "$inicio" -n "$fin" -v -e '/1 "%02X\n"' Dibujo1.bmp); while read byte; do echo "ibase=16; obase=2; $byte" | bc | grep -o ".$"; done< <(echo "$mensaje") | tr -d "\n" | sed -e "s/.\{8\}/& /g"

00101010 01110011 01011111 00101010 00000000 00000000 00100000 01000011 01100101 01101100 01100101 01100010 01110010 01100001 01100011 01101001 01101111 01101110 00101110 01110100 01111000 01110100 00100001 10100001 01000110 01100101 01101100 01101001 01111010 00100000 01100001 01101110 01101001 01110110 01100101 01110010 01110011 01100001 01110010 01101001 01101111 00101100 00100000 01001011 01110010 01101001 01110000 01110100 11110011 01110000 01101111 01101100 01101001 01110011 00100001 00101010 01011111 01110011 00101010 00101010

Hecho!

Binario:
00101010 01110011 01011111 00101010 00000000 00000000 00100000 01000011 01100101 01101100 01100101 01100010 01110010 01100001 01100011 01101001 01101111 01101110 00101110 01110100 01111000 01110100 00100001 10100001 01000110 01100101 01101100 01101001 01111010 00100000 01100001 01101110 01101001 01110110 01100101 01110010 01110011 01100001 01110010 01101001 01101111 00101100 00100000 01001011 01110010 01101001 01110000 01110100 11110011 01110000 01101111 01101100 01101001 01110011 00100001 00101010 01011111 01110011 00101010 00101010

Unicode/UTF-8:
*s_* Celebracion.txt!¡Feliz aniversario, Kriptópolis!*_s**

Bash + Super Cow Powers = Win!

Primero hice los dumps en hexadecimal de los dos archivos y a ojo resultaron ser demasiado "parecidos", verifique automaticamente y solo se diferenciaban en 480 bytes (el primer byte involucrado es el 58 y el ultimo el 538)

Deduje que el mensaje se encontraba en el primero (los valores hexadecimales del segundo terminaban casi todos en 0) despues de convertir los 480 bytes del Dibujo1 a binario, extraje solo los bits menos significativos de cada byte y los ordene en grupos de 8, despues los converti a caracteres y tachan!

Es mucho mas facil hacerlo que explicarlo =D

f@pc:~/kriptopolis$ inicio=58; fin=480; mensaje=$(hexdump -s "$inicio" -n "$fin" -v -e '/1 "%02X\n"' Dibujo1.bmp); while read
byte; do echo "ibase=16; obase=2; $byte" | bc | grep -o ".$"; done< <(echo "$mensaje") | tr -d "\n" | sed -e "s/.\{8\}/& /g"

Saludos!

P.S. Los acentos/tildes fueron omitidos intencionalmente.

Guillermito

Guillermito solía ser el mayor experto mundial en esteganografía pero se casó, tuvo hijos y lo dejó correr todo. Con paciencia en su web se puede encontrar un filón de información. Pero con mucha paciencia porque tiene depresiones y delirios continuos como los buenos genios.

http://www.guillermito2.net/stegano/
http://www.guillermito2.net/

opinar

Texto puro

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
Imágenes
Puedes añadir hasta 10 imágenes explicativas a tus comentarios (pantallazos, etc).
Los archivos deben ser menores que 8 MB.
Tipos de archivo permitidos: png gif jpg jpeg.
By submitting this form, you accept the Mollom privacy policy.