Esteganografía

domingo, 10 de julio de 2011

La esteganografía es la disciplina en la que se estudian y aplican técnicas que permiten el ocultamiento de mensajes u objetos de modo que no se perciba su existencia (Wikipedia). Mientras que la criptografía intenta hacer ilegible el mensaje excepto para aquel que tiene que leerlo, la esteganografía intenta ocultar su existencia.

A lo largo de la historia ha habido trucos realmente ingeniosos para hacer trasladar un mensaje al destinatario de forma oculta, en esta entrada nos centraremos en algunas de las técnicas más usadas para ocultar información digital.
La esteganografía y el estegoanálisis conforman todo un estudio de técnicas más o menos sofisticadas y para hablar de ellas en profundidad se necesitaría entrar en ámbitos como la estadística. Esta entrada aspira a ser solo un esbozo general y además yo no soy especialista.

Técnica sustitutiva LSB
Empezaremos hablando sobre técnicas sustitutivas LSB (Least singnificant bit) en ficheros, que consiste en modificar el bit menos significativo de los bytes que conforman la secuencia de bytes de un fichero. Por ejemplo, si el mensaje a ocultar consiste en una cadena de caracteres codificada en n bytes, podemos ocultar el mensaje en un fichero de imagen RGB modificando los bits menos significativo de cada octeto en el rojo de un pixel por los bits del mensaje.

Veamos un ejemplo muy concreto obtenido de una práctica que realicé en la universidad:
Tenemos un fichero mp3, y queremos ocultar un mensaje en él. El proceso de ocultación consiste en ir cambiando el bit de menos peso de cada byte del fichero de audio por un bit del mensaje, hasta que se haya ocultado todo el mensaje. Es decir, para todos los caracteres del mensaje a ocultar, se irá cogiendo bit a bit, empezando siempre por el de mayor peso, y se irán incrustando como el bit de menos peso en el correspondiente byte del fichero de audio:

- Los primeros 2048 bytes del fichero de audio corresponden a la cabecera de un fichero mp3, la cabecera contiente información sobre el tamaño, tipo de fichero... Estos primeros 2048 bytes no se alteran y pasan directamente al fichero resultante.
- Los dos primeros bytes a ocultar, aunque no forman parte, propiamente hablando, del mensaje, indicarán el nº total de bytes del mensaje que se va a ocultar.
- Para todos los caracteres del mensaje de texto, se irán tomando grupos de dos bits, que sustituirán a los dos bits de menos peso del correspondientes byte del fichero de audio y se dejará el siguiente byte de éste sin modificar.
Este proceso se repetirá hasta ocultar todos los bits del fichero que contiene el mensaje. Es decir, cada byte de texto se ocultará en 8 bytes del fichero de audio, pero de éstos, sólo 4 ocultarán bytes y los otros 4 permanecerán sin alterar.

En la siguiente figura se muestra gráficamente el proceso:



Para obtener el mensaje se irán obteniendo, de dos en dos bits, los bits ocultos según el método anterior y se reconstruirá el mensaje, que se irá almacenando en el fichero resultante.

He subido los ficheros fuente escritos en C y compilados con GCC al siguiente enlace para quien quiera echarlos un vistazo o probarlos http://www.megaupload.com/?d=H54D1W4.

Alterar los bits menos significativos de los bytes que conforman un pixel o un mp3 no es detectable por la vista ni el oído humano respectivamente, cualquiera puede hacer la prueba con los programas que he subido.
La detección de técnicas sustitutivas consisten en algorítmicos estadísticos que usan estimadores y test basados en distribuciones para estudiar frecuencias en los valores de los bytes. Cuanto menos sea la información a ocultar y se hayan elegido de manera más aleatoria los bits a modificar, más difícil es la detección. De hecho, los programas actuales de estegoanálisis funcionan bastante mal.

Esteganografía de red
Consiste en ocultar información a nivel de protocolo de comunicación, algunos de los cuales permiten introducir cierta redundancia, que nos facilitan la elaboración de un canal secreto.

Uno de los algoritmos esteganográficos puede ser la manipulación de los campos sobrantes en las cabeceras del paquete. Con frecuencia no todos los campos en la cabecera de un protocolo son necesarios a lo largo de toda la transmisión, como por ejemplo el campo de FLAGS (banderas) del protocolo TCP. Incluso se puede ocultar información en los campos obligatorios para hacer más difícil su detección.

Una técnica muy útil que además permite enviar datos a redes protegidas es la siguiente:
El destinatario se encuentra en una red protegida y puede recibir solamente datos de cierto servidor, pero no establecer conexión con el remitente. El remitente puede enviar el paquete con números IP falsos poniendo como dirección de origen la del destinatario, y números falsos como puertos de origen y de destino, y oculta el mensaje a enviar en el segmento SYN.
Envía este paquete a un servidor que responde con el segmento SYN/RST o SYN/ACK junto con los datos modificados contenidos en un segmento SYN aumentado en uno a la dirección falsa de origen, que es como hemos dicho la dirección del destinatario, y este recibe el paquete y descifra el mensaje.

Un programa sencillo que nos permite ocultar información en protocolos de comunicación es la aplicación covert_tcp, creada por Craig H. Rowland.

4 comentarios:

Anónimo dijo...

Sin duda muy interesante tu articulo la verdad que no sabia que en un fichero mp3 pudiera ocultar informacion. Quien se piensa que una cancion mp3 puede actuar de tapadera... muy ingenioso un saludo!!!

Mikeollie dijo...

Hola! Muxas gracias! Puedes hacer la prueba con los ficheros que he subido.

Antonio Gil dijo...

Hola, que mal que ya no existe megaupload. tu archivo me seria muy util.

Mikeollie dijo...

Hola Antonio, intentaré buscar otra vez los archivos entre mis prácticas de la universidad y subirlos cuando pueda, un saludo.

Publicar un comentario