15 mar 2011

Sexy Steganography-Ofuscacion y Distraccion

 

Hola en esta entrada quiero compartir con ustedes técnicas usadas en esteganografia para hacer mas difícil detectar o extraer archivos ocultos. En esta entrada intentare usar imagenes muy agradables a la vista :)

¿Ofuscación?

No literalmente, por que la ofuscación busca hacer algo mas dificil de entender sin alterar el contenido. Y aqui si se altera. En mi precario vocabulario no recordé ninguna palabra descriptiva a esto (si alguien la tiene favor de hacermelo saber)

Bueno ¿de que va la cosa?

Fácil, en algunos casos como ya mencione anteriormente nos podemos enfrentar a ciertos obstaculos extras que los creadores del reto pueden poner. Ejemplo claro es que algunos hacen uso de tecnicas de programacion para hacer “dificil” la extraccion. Ayer mientras divagaba mi mente por “equis persona y una HORROROSA razon” me puse a navegar tridimensionalmente por mis archivos, llegando a una vieja carpeta con retos que cree hace mucho y con los que practicaba mi penosa programacion en php. Dentro de ellos encontré archivos “deshechos” o mal formados, y me puse a la tarea de analizarlos y ver que “ocultaban”.

 

Asi que veamos.

Ejemplo 1

El primer archivo es enrevesado.hex el cual como vemos en la siguiente imagen parece decir algo como el clasico “àÿøÿFIFJ” ¿Les suena? A mi se me parece a la cabecera de un JPG, aunque algo enredado no?

 

Lo mejor sera analizarlo hexadecimalmente.

Yo rápidamente encontre un patron, cada 6 bytes lo pusieron al revés.

 

Dificil? Para nada, ya que identificamos como esta hay que reacomodar las cosas. Para ello hago uso del siguiente script en python.

#!/usr/bin/env pythonfile = open("enrevesado.hex","rb").read() #Leo el archivo binariofinal = open("taylor.jpg","wb") #Creo un archivo llamado taylor.jpg en modo escrituraordenar = ""for i in range(0,len(file),6): #Recorro cada 6 bytes#Ordeno los bytes, por posicion los acomodo asi (6,5,4,3,2 y 1 byte)ordenar += file[i+5:i+6]+file[i+4:i+5] +file[i+3:i+4]+file[i+2:i+3]+ file[i+1:i+2]+file[i:i+1]#Los escribo en taylor.jpgfinal.write(ordenar)final.close()

Lo guardo como ordenar.py y lo ejecuto y me genera el archivo reconstruido con el nombre taylor.jpg

 

Y nos genera esta linda imagen de taylor.jpg :P

 

Ejemplo 2:

Nuestro siguiente ejemplo es apartir del archivo quesera.hex pareciera ser otro archivo sin sentido, sin embargo como en el ejemplo anterior se logra visualizar algo empero es algo raro.

Al abrirlo hexadecimalmente y analizarlo por algunos segundos, caeremos en cuenta de que se trata. Vemos algo como “PPNNGG” mas adelante “IIHHDDRR” lo cual me suena a “PNG” y el chunk “IHDR” cabecera del PNG. Empero la cuestion aqui es por que lo vemos repetido?

  • Una teoria es que hay dos PNG.
  • La segunda teoria es que es uno solo y repitieron cada byte delante de el mismo.

Sin embargo si seguimos analizando y llegamos al pie de formato, vemos que ya no se cumplo la teoria 2, puesto que vemos ahora adelante de cada byte, bytes nulos y no el repetido como suponiamos. Por lo que nos queda la teoria uno “Son dos imagenes PNG” y podemos complementar la teoria con que “Una imagen es mas chica que la otra y se relleno con byte nulos”.

Bueno aun todo sigue siendo una teoria, lo que haremos ahora ya que sabemos que sucede es recolecar cada dos bytes, empezando desde la posición 0(0,2,4,6,8…) y después la posición 1(1,3,5,7,9…)

Para ello haremos tambien un pequeño script, esta vez en PHP para demostrar la variedad.

#Abro el archivo a analizar$file=file_get_contents('quesera.hex');#Creo dos archivos de salida$salida1= fopen("SalidaSexy1.png","w");$salida2= fopen("SalidaSexy2.png","w");#Variables temporales$tmp1="";$tmp2="";#Recorro de principio a fin quesera.hex cada 2 bytesfor ($i=0;$i<=strlen($file);$i+=2) { #Guardo en la variable tmp1 cada segundo byte $tmp2.=$file[$i]; #Guardo en la variable tmp2 cada primer byte [($i-1)==(2-1)==1] $tmp1.=$file[$i-1]; } #Guardo el resultado en sus respectivos archivos fputs($salida1,$tmp1); fclose($salida1); fputs($salida2,$tmp2); fclose($salida2); ?>

Ejecutamos nuestro script y nos creara las imagenes PNG de salida. Veamos:

 

 

Imagen SalidaSexy1.png una imagen de gOOgle

Imagen SalidaSexy2.png una imagen de una “Love Fan de linux/ubuntu” :P

LISTO :)

Ahora a practicar un rato. A continuación les dejo 2 ejercicios para practicar ;)

Reto1:

¿Hermosa silueta?

Reto2:

¿Una ducha?

  • A cada imagen cuando encuentren lo que deben, deje un tipico “Pass:” para que sepan cuando termina el reto
  • Cada imagen tiene una imagen mayor o igual de agradable a la vista :P
  • El reto 1 (Silueta), es fácil, solo un poco de análisis y una trampa que puse por ahí
  • El reto 2 (Shower/Baño), es un poco mas complejo, pero si lo resuelven vale la pena :)(tambien el reto 1 vale mucho la pena)

Habiendo ya demostrado algunos casos, quiero decir una cosa mas. Las imagenes usadas aqui, a mas de uno les es agradable visualmente, y aunque ustedes no lo crean, son BUENISIMAS imagenes para ocultar algo ¿Por que?

  • Por el contexto de la imagen sirven principalmente como DISTRACCION
  • Lo que alguien menos va a hacer es ponerse a analizar si tiene algo :P

Asi que este tipo de imagenes sirve por si solas para ocultar, sin necesidad de hacer mucho.

P.D. Estas imagenes son tipicas de “Razones para usar linux” ¿Buenas razones no? yo uso linux :P

P.D.2. Ya habiendo aprendido esto, recomiendo darse una vuelta por EL RETO 7 de NUESTRA PRIMER SERIE DE RETOS y veran lo facil que es ;)

Sin mas, aparte de lo que pueda parecer este post, espero les sirva y se queden con la parte academica, y no solo con los wallpapers jeje.

Atte. hecky

hecky@neobits.org

 

21 comentarios:

  1. Mira que ya me lo habia leido al dedillo, pero con estas imagenes no me pude resistir a volver a leerlo.+1 para hecky Arriva a The Flus´boys!

    ResponderEliminar
  2. espectacular! Nunca había tenido contacto con la estenografía, pero voy a probar suerte. Por lo que se ve, parece que hay que andar bastante tiempo mirando imágenes con visores hexadecimales para empezar (así identificar al menos el tipo de archivo), pero bue, vamos a ver si saco algo.Empecé hace un ratito con el primero y ya pude aislar lo que es la imagen del resto, que por el momento no le encuentro nada de coherencia.A la espera de alguna pista :PSaludos!

    ResponderEliminar
  3. Hola eVeR te equivocas, lo primero es quitar los ojos de las imagenes xDDespues si viene la imagen :PSi ya tienes aislado la imagen del resto...identifica que es el resto...Si estas en linux pasale un "file resto"Si estas en windows intenta con este soft http://mark0.net/soft-trid-e.htmlUna vez identificado, busca como se compone el formato y solo hay que arreglar cierta cosilla me parece y listoSaludos ;)

    ResponderEliminar
  4. ah, y como un dato de color, los scripts de python que usaste solo funcionan en python2.¡Saludos!

    ResponderEliminar
  5. ¡gracias por hacerme conocer el comando "file"! Aunque la respuesta "data" no sea muy expresiva xD

    ResponderEliminar
  6. eVer tienes razon, no puntualice que mis scripts yo los hice en version 2.6Y bueno si andas en linux y te arrojo data con lo que extraiste de sobra del reto de silueta, algo andas haciendo mal, yo extraje lo que sobra y le pase el file y me identifico perfectamente lo que era...checalo!!!Saludos ;)

    ResponderEliminar
  7. ya está, había cortado mal el archivo... avanzo!

    ResponderEliminar
  8. ¡¡¡lo saqué!!!No me gusta, muy flaca :P

    ResponderEliminar
  9. Felicidades!!! jajaja lo importante no es lo flaca (sino lo demas del cuerpo :P) que diga....lo importante es el aprendizaje :PLe prometo que el otro reto es muuuucho mas DIFICIL,entretenido y la imagen esta mejor y no esta flaca :P

    ResponderEliminar
  10. ¿termina cuando encontramos el pass? Por que al primero sí no le encuentro mas, pero el segundo parece guardar algo mas a pesar de ya haber sacado una imagen...

    ResponderEliminar
  11. En ambos retos dice "Pass:" si ya los encontro ambos ya no hay mas ;)

    ResponderEliminar
  12. bueno, gracias entonces, me encantó, prometo visitar tu blog.Pero estoy seguro que en el "shower" hay algo mas que encontrar "artistic breast". Queda algo que parece ser texto encriptado en 705 kb, sin ningún formato ni patrón que yo reconozca... ¿seguro que no sigue?

    ResponderEliminar
  13. Daaaa que imbecil soy!!! xDEso que usted ve que sobra se supone es el reto...pero ahora veo que yo me equivoque al hacer el reto...la imagen que usted facilmente saco esta oculta en esa cadena pero yo al hacer el reto hice algo como estocat imagenportador imagenFinal reto > imagenDonde imagen portador es la que ve, imagen final es la respuesta y el reto es la imagenfinal obfuscada...Ahi esta de sobra imagenFinal...nose como se me fue a pasar eso...Mañana corrigo eso :PGracias por el avisoSaludos ;)

    ResponderEliminar
  14. así que hasta ud. puede cometer errores... jaja. Gracias por el aprendizaje

    ResponderEliminar
  15. jajaja si, y en cantidades masivas cometo...pero intente hacerlo como deberia :P

    ResponderEliminar
  16. Gran reto hecky para acercar la esteganografia al resto de mortales ;)

    ResponderEliminar
  17. esteganografia....que mal se me da.... XDbuenoo empezare a estudiarlo :)algun consejo para empezar? :P

    ResponderEliminar
  18. yo también recién empecé y me encantó. Como consejos, te puedo recomendar tener a mano un jpg y un png común para ver como suelen empezar y terminar, un buen editor hexadecimal (yo usé okteta), aprender un poco a usar el comando "file" (es lo mas), y un poco de paciencia y ojo fino :PMucha suerte

    ResponderEliminar
  19. Flu boy's xDD Muchas gracias d3n3k4Y bueno con usted la distraccion funciono :P

    ResponderEliminar
  20. @anbuitachi17 eVeR ya te ah dado muy buenos consejos :)A parte de esto que solo es tecnica EoF hay muchas mas tecnicas que ni te imaginas, pero poco a poco, lo primero las herramientas (yo en linux y todo en cli).-Visor hexa (hexdump).-Editor hexa (bvi).-Comandos basicos (file,grep,head,tail) y uso de expresiones regularesY despues a estudiar los formatos comunes (Jpg,Mp3,Gif,bmp,Png,zip,exe,,rar...)Y despues viene la paciencia y practica...Saludos :)

    ResponderEliminar