Páginas

domingo, 2 de junio de 2013

Esteganografía: ocultar archivos de texto dentro de un medio multimedia

Esteganografía (del griego steganos=encubierto, oculto y graphos=escritura nace el término esteganografía ) es la técnica de ocultar archivos de texto dentro de un medio multimedia (audio, imagen), sirve para ocultar archivos importantes y/o privados alejándolos de miradas indiscretas. Esto se hace ocultando el archivo en cuestión en otro para pasar inadvertido para otros usuarios. La esteganografía trata de esconder un mensaje dentro de otro mensaje, de forma que el segundo mensaje pueda estar a la vista de todos, y sólo el receptor, procesándolo de alguna forma especial, pueda recuperar el mensaje codificado. Por un lado ocultamos la existencia del mensaje y por otro, en caso de ser descubiertos, el cifrado complicará su lectura en función del algoritmo empleado y la mayor o menor complejidad de la clave utilizada. La esteganografía es razonablemente segura para intercambiar información en la red, o para almacenar datos en la nube.

La esteganografía actual se basa en esconder datos binarios en la maraña de bits que supone un fichero.
Los bits que componen el mensaje a ocultar se introducen (bien sea añadiéndolos, o realizando operaciones aritméticas con los originales) en el fichero ya existente, procurando que el fichero resultante después de realizar los cambios parezca el original.

No se debe confundir la esteganografía con la criptografía, ya que mientras que la criptografía sirve para cifrar información de forma que no sea leible para un intruso, aun cuando éste sepa que existe la información, la esteganografía oculta la información en un archivo portador de tal forma que la misma existencia de dicha información pase desapercibida, de modo que un posible espía ni sospeche que se esta transmitiendo información. 

La esteganografía puede complementarse con la criptografía, obteniendo un mayor nivel de seguridad de la información, por lo que es muy frecuente , pero no absolutamente necesario, que el texto a esteganografiar sea cifrado a la vez o con anterioridad, de forma que un posible entrometido no sólo tendrá dificultades en advertir la presencia de información oculta, sino que además si aún así consiguiera apropiársela, la tendría que descifrar posteriormente.


1)- Con la terminal, con el comando cat:

A) Los pasos para esconder el archivo mis_telefonos.txt ( archivo_inicial ), en un archivo de imagen nubes.jpg, son:
- Comprimir dicho archivo en formato .rar  , creándose por tanto el archivo mis_telefonos.rar (archivo_comprimido).
- Sin tener que instalar ningún paquete, solo ejecutando una linea de comandos en la terminal: cat nubes.jpg mis_telefonos.rar > salida.jpg  ( es decir: cat archivo_inicial.jpg archivo_comprimido.rar > archivo_final.jpg con el archivo_inicial.txt ocultado en él).
Lo que hace esa linea es concatenar el archivo  nubes.jpg y el mis_telefonos.rar  y darnos como resultado el archivo salida.jpg . Una vez creado el archivo final salida.jpg, se puede borrar el archivo inicial  mis_telefonos.txt y el archivo intermedio mis_telefonos.rar , ya que el archivo ocultado esta en este momento comprimido y encriptado dentro del archivo salida.jpg, el cual es de mayor tamaño que el archivo de imagen inicial.

B) Ahora para ver el archivo oculto lo que tenemos que hacer es renombrar el archivo salida.jpg por la extensión del archivo comprimido en este caso a salida.rar , y descomprimir dicho archivo en una carpeta, en la que aparecerá de nuevo el archivo inicial mis_telefonos.txt . Este método sirve para archivos como 7z, bmp, gif entre otros.

La ventaja de comprimir en formato .rar es que se puede añadir una contraseña, de forma que aunque el comando cat no nos pida una para crear el archivo de imagen final, cuando queramos recuperar el archivo de texto, si que se nos pedirá una contraseña al descomprimir  el archivo: la que hayamos usado al crear el archivo comprimido .rar

Si usamos éste método creando un archivo .rar sin contraseña, ya que el comando cat en ningún momento nos pide una contraseña toda la seguridad descansa en el hecho de que nadie se de cuenta de que el archivo de imagen final no es solo un archivo de imagen.

2)- Con Steghide, un programa sin interfaz gráfica:

Steghide es un programa que esta en los repositorios y por lo tanto su paquete se puede instalar fácilmente con Synaptic. No es un programa con interfaz gráfica sino que se usa escribiendo unas lineas de comandos en la terminal.
A) Para esconder un archivo dentro de una imagen con Steghide : la línea de comandos que hay que escribir es del tipo: steghide embed -cf archivo_ocultador -ef archivo_oculto , por ejemplo steghide embed -cf nubes.jpg -ef mis_teléfonos.txt  (ambos archivos deben estar en la misma carpeta, desde la que se ejecutara la linea de comandos en la terminal ) Automáticamente os pedirá una contraseña que habrá que escribirse dos veces, para proteger el documento oculto.

-cf indica el archivo_ocultador: los archivos de ocultación deben tener la extensión .jpg .bmp .wav o .au
-ef Indica el archivo oculto: No hay restricciones en cuanto al formato del archivo de texto que se quiere ocultar.
Una vez creado el archivo ocultador imagen, se puede borrar el archivo ocultado ya que esta guardado en ella, el archivo ocultado esta en este momento comprimido y encriptado dentro de la imagen del archivo ocultador. El archivo de imagen final es de menor tamaño que el archivo de imagen inicial.

B) Y para extraer el contenido oculto lo único que tenemos que hacer es escribir una linea de comandos del tipo:  steghide extract -sf archivo_ocultador por ejemplo: steghide extract -sf nubes.jpg y ahora el programa nos pedirá la contraseña, una sola vez, para extraer el documento oculto ( mis_teléfonos.txt)  en la carpeta en la que estemos actualmente.

Hay que tener en cuenta el tamaño del archivo de ocultación y del ocultado. Si el segundo es demasiado grande para guardar en el primero, Steghide nos lo indica con un mensaje de error: steghide: the cover file is too short to embed the data.

Mas información sobre steghide, tecleando en la terminal: man steghide

3)- Con un programa gráfico: OpenStego:

Para ejecutar el programa hay que instalar el paquete OpenStego desde http://sourceforge.net/projects/openstego/?source=dlp   El programa tiene una ventana con dos pestañas:

En la pestaña Embed seleccionamos el algoritmo que vamos a usar para el proceso, y ocultamos el archivo de texto ( message file )  en otro ( cover file ; admite archivos con las extensiones: bmp, gif, jpeg, jpg, png, wbmp), con el resultado de crear un tercer archivo (output stego file, con extensión .png ) que aparentemente es como el segundo, pero que además contiene al primero. Nos permite crear el archivo con compresión de datos y asegurado con una contraseña. El archivo de imagen final que contiene el archivo de texto embebido es de mucho mayor tamaño que el archivo de imagen que se emplea.



En la pestaña Extract , seleccionamos el algoritmo que vamos a usar, y extraemos el archivo oculto desde el archivo (input stego file ) en el que lo hemos ocultado, en la carpeta que elijamos, tras poner la contraseña adecuada.


------------------------------------

Como prueba he usado un mismo archivo de texto y un mismo archivo de imagen para ir ejecutando los tres métodos para conseguir un archivo final de imagen en el que este oculto el archivo de texto, los resultados en cuanto a los tamaños son:

archivo de texto para ocultar:                               30.09 kb
archivo de imagen en donde ocultar:                 936,70 kb
                                                                                comando cat   steghide   openstego                       
archivo de imagen con archivo de texto oculto:  946,9 kb        919,3 kb   5,6 mb

El primer método, comando cat,  es el mas sencillo, no requiere la instalación de ningún programa,  y es fácil de recordar la línea de comandos, pero en principio toda su seguridad descansa en el hecho de que nadie se de cuenta de que el archivo de imagen final no es "solo" un archivo de imagen, ya que el comando cat no cifra el archivo de salida pidiendo una contraseña. Esto lo podemos subsanar creando un archivo comprimido .rar con contraseña.

Steghide: Tiene la ventaja de que pide una contraseña, y de que el archivo que crea es de menor tamaño que el de la imagen que se usa para esconder el archivo de texto, ya que además de cifrar, comprime. Me parece que si creamos un script para crear el archivo  de imagen final, y otro para volver a tener el archivo de texto inicial, Steghide puede ser el método mas sencillo y mejor en cuanto a relación tamaño inicial/tamaño final.

OpenStego: tiene la ventaja de ser un programa gráfico cuyo uso es muy intuitivo, que permite la compresión y cifrado, y cuya seguridad no solo descansa en que se usa una contraseña, sino que para extraer el archivo oculto hay que saber además el algoritmo usado al crear el archivo contenedor. Tiene el inconveniente de que el archivo de imagen final que crea es mucho mayor que el archivo de imagen que se usa para esconder el archivo de texto.

------------------------------------

4 comentarios:

  1. Hola, como siempre muy buen aporte.

    Ya sabía lo de ocultar archivos en imágenes pero lo poco que leí sobre el tema requería ver el archivo en binario y no sé qué historias más y por supuesto con Window$ :(

    ResponderEliminar
  2. Gracias!! Ya lo había visto antes , pero ni idea de como se hacia , Gracias ! Uno de mis misterios resueltos.! :)

    ResponderEliminar
  3. Me ha sido de gran utilidad. ¡Gracias!

    ResponderEliminar
  4. Excelente aporte. ya lo había hecho antes con windows pero se necesitaban unos programas. ahora que tengo Ubuntu es mucho mas facil. una vez mas me doy cuenta del poder de Linux. ¡Gracias!

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.