Ocultando archivos en otros – LSB

Siguiendo con la esteganografía, Rafael Páez, antiguo compañero de S2 Grupo y colaborador ya habitual en este blog, cierra la semana con una entrada sobre el método LSB para ocultar información en imágenes.

En esta ocasión vamos a seguir hablando sobre esteganografía, concretamente sobre una de las técnicas que se pueden utilizar para ocultar cualquier tipo de información dentro de ciertos tipos de archivo, como por ejemplo imágenes o audio.

El método en cuestión es conocido como LSB (Least Significant Bit) y como su nombre indica consiste en aprovechar el bit menos significativo de cada byte para guardar información en él. En la introducción que se hizo en este mismo blog sobre esteganografía ya se comentó esta técnica, pero esta vez vamos a entrar un poco más en detalle y para hacer más comprensible la técnica vamos utilizar un ejemplo basándonos en una imagen en formato png (llamada “A”) en la que queremos ocultar un documento de texto (llamado “B”), creando la imagen “A+B”.

Para utilizar esta técnica, lo que se debe hacer es almacenar todos los bits del documento B en los bits menos significativos de cada uno de los colores que componen los píxeles de la imagen A, sustituyendo los de la propia imagen por los del documento B y añadiendo 0s una vez se ha completado el documento B. Al ser los bits que proporcionan menos información de color al píxel, los cambios realizados en los colores de la imagen no serán apreciables por el ojo humano.

Tal y como se puede apreciar en la imagen anterior, vemos como los bits menos significativos de la imagen A+B contendrán todos los bits del documento B.

Sabiendo esto, podemos ver que un requisito que requiere este método (aplicado a imágenes) es que el archivo a ocultar tiene que ser tres veces más pequeño que el número total de píxeles de la imagen portadora (en la que ocultaremos el archivo). Esto es debido a que para cada 3 bits del documento B, necesitaremos un píxel de la imagen (suponiendo que el píxel está formado por los tres bytes de RGB).

Una vez se tiene la imagen A+B, para poder recuperar el archivo oculto, únicamente deberemos acceder a cada uno de los píxeles de la imagen y volcar el contenido del bit menos significativo de cada uno de ellos en un nuevo archivo, obteniendo así el documento B tal y como estaba antes de ser ocultado.

Por último comentar que para que este método sea efectivo una vez se ha ocultado el archivo en la imagen, esta no puede ser editada, ya que si se vuelve a codificar/comprimir, la información de los bits cambiaría y por tanto no se podría recuperar el archivo.

En el siguiente post veremos un caso mucho más práctico de esta técnica, así que estad atentos. :) Pasen, como no podría ser de otra manera, un buen fin de semana.

Comments

  1. uhm, si siguiendo la tradicion hubieras llamado Alice al conjunto A y Bob al conjunto B, entonces Alice finalmente habria conocido a Bob e incluso habria puesto los cuernos a su marido con Bob…

    Como es viernes y hay que relajarse, os dejo un corto ensayo muy ameno sobre la vida privada de estos dos curiosos personajes, ademas del comienzo del texto, por si la URL desapareciera en el futuro que pueda ser localizable en la red:

    http://downlode.org/Etext/alicebob.html
    ———cut cut cut———
    The Alice and Bob After Dinner Speech

    given at the Zurich Seminar, April 1984,
    by John Gordon, by invitation of Professor James Massey

    Good evening Ladies and Gentlemen.
    ———cut cut cut———

  2. Gracias vlan7 por tu comentario y la recomendación de esa, seguro que interesante, lectura para este viernes :)

    Quería aprovechar también para agradecer la entrada que has dedicado en tu blog a Hijos Digitales ya que,como bien dices, a veces es un poco complicado encontrar información práctica (sin demasiados tecnicismos) para el usuario de “a pie”.

    Enhorabuena por tu blog y enhorabuena a Rafa por sus entradas sobre esteganografía, son muy interesantes.

    Saludos

  3. Gracias Maite. Me alegro que te gusten :)

    Saludos

  4. Hace años existió un programita que se llama o llamaba camouflaje..que hacia eso…ocultar un archivo dentro de otro..creo que lo sigo guardando..si les interesa me dicen

  5. Hola Chaneque. Gracias por la aportación.

    El programa sigue existiendo por ahí sí, pero usa una técnica totalmente diferente. Camouflage añade información extra codificada en el archivo portador, por lo que el tamaño del archivo inicial y el que oculta la información es diferente.

    Saludos

  6. Genial estaré esperando la próxima entrada. Me ganaron yo también haré una en mi blog pero sera un poco extensa ya que la información de LSB esta un poco dispersa, haré una “guía definitiva” =P

    Por cierto Lo del software “Camouflage” hay una curiosidad y VULNERABILIDAD que permite saber el pass. Por cierto esta la descubrió un paisano mexicano =)

    Pueden ver la entrada en:

    “Breaking a steganography software” Camouflage

    http://www.guillermito2.net/stegano/camouflage/index.html

    Saludos ;)

  7. Muy bueno el aporte Hecky ;)

    Por Internet hay algún reto en el que se aprovecha esto, yo lo había visto por ahí, jeje. Aprovechando esto, por si nos da pereza hacer la conversión con XOR, podemos modificar directamente los bytes del password por 0x20 para indicar “no password” y poder obtener directamente el archivo oculto.

    Saludos

  8. Rafa

    Tienes razon hay un reto que por ahi vi y pase =P Pero no queria decirlo xD Y la manera de bypassearlo tambien es muy valida. Por eso yo nunca recominedo usar Soft de Esteganografia (Ni los mios =P) Nada como hacerlo a mano ^.^

    Un saludo!!

  9. Hola amigos, una pregunta con respecto a un filtro de imagenes. Como puedo mostrar mediante una imagen solo los bist LSB que aparentemente se usaron para esconder un mensaje?? O sea quiero comparar y ver el comportamiento de dos imagenes (la primera imagen real y la seguna la estego-imagen) mostrarndo solo los bits LSB. Cual seria el algoritmo de filtrado de bits LBS en java? Gracias por tu tiempo….

  10. Rafael Páez says:

    Hola livioinf,

    yo personalmente nunca he usado Java para hacer operaciones de este tipo, pero si buscas un poco seguro que hay alguna librería que te permita acceder a las imágenes a nivel de píxel :)

    De todas formas, en el siguiente post de la serie (https://www.securityartwork.es/2012/02/28/ocultando-archivos-en-otros-%E2%80%93-lsb-ii/) tienes el código que buscas en PHP (para que puedas ver como se realiza el proceso interno).

    Si tienes más dudas, puedes consultar mis otros artículos, que hay algunos que también hablan de LSB.

    Saludos
    fikih888

  11. Mas o menos la pregunta que hice esta relacionada al filtrado de los bits LSB de una imagen bmp de 24 bits. En realidad queria saber como es esa logica de filtrado LSB. Te paso una referencia de lo que quiero hacer:
    https://www.dropbox.com/s/jq2izr8a40oa8yn/LSB_img_original.jpg

  12. Rafael Páez says:

    Hola de nuevo livioinf.

    La verdad que yo no le encuentro mucho sentido a esa información, más bien sería al revés. Si te miras el segundo artículo de LSB (https://www.securityartwork.es/2012/02/28/ocultando-archivos-en-otros-%E2%80%93-lsb-ii/) tal y como te dije en el anterior mensaje, verás que cuando hay información oculta el los bits menos significativos, una vez que se ha acabado de escribir la información oculta, se suele rellenar con “0” para indicar que no hay más información “interesante”. Y recuerda que los LSB simplemente son el último bit de cada uno de los colores del píxel, y al contener muy poca información, no representan al color en absoluto.

    Saludos
    fikih888

  13. Hola Rafael, mas o menos te decia que queria analizar los bits menos significativos y ver si alguna distorcion o no? Por eso era la pregunta….
    Y lo staba probando y me salio asi:
    https://www.dropbox.com/s/lu2u4a6ccr2s9zk/diferencia.jpg
    Ahi se puede ver claramente una distorcion que causa el ocultar un mensaje en una imagen. Saludos….