Inicio / Blog / Esteganografía y estegoanálisis básicos

Esteganografía y estegoanálisis básicos

Publicado el 21/04/2015, por Jesús Díaz (INCIBE)
Esteganografía y estegoanálisis básicos

La esteganografía, aunque ha tardado más que la criptografía en darse a conocer (a pesar de tener también muchos siglos de antigüedad), ya es bastante popular en el mundo de la seguridad informática. Igual que dentro de la criptografía, la esteganografía también tiene variantes. De hecho, el término «esteganografía» se utiliza muchas veces para englobar lo que en realidad es un campo más general, que es la ciencia de la «ocultación de información» y que abarca otros campos relacionados, como las marcas de agua, la anonimia o los canales encubiertos.

- Distintas ramas de la ocultación de información, según «Information Hiding – A survey»

No obstante, toda clasificación está sujeta a interpretaciones. Por establecer una base común, a continuación se asume que la esteganografía es la ciencia destinada a:

  • Transmitir información de manera imperceptible.
  • Transmitir cantidades razonablemente altas de información.
  • No ser necesariamente robusta ante modificaciones (intencionadas o no).
  • A través de un medio diseñado para transmitir otro tipo distinto de información.

Por ejemplo, estrictamente hablando, las marcas de agua no serían esteganografía, ya que:

  • No tienen por qué ser imperceptibles.
  • Suelen transmitir bajas cantidades de información.
  • Deben ser robustas ante cualquier tipo de modificación.

En concreto, los ejemplos que se muestran a continuación utilizan imágenes como medio de transmisión. Otros medios de transmisión pueden ser audio o texto.

Esteganografía LSB

En archivos multimedia, tanto sobre imagen como sobre audio (no en texto), los bits menos significativos (Least Significant Bits) suelen contener información que es difícilmente perceptible por el ojo o el oído humano, lo que los hace bastante atractivos para ocultar información, dando lugar a lo que se conoce como esteganografía LSB.

Una forma intuitiva de mostrar este principio es «pintando» los distintos niveles de bit de una imagen (donde, p.e., el nivel 7 es el bit más significativo de cada byte, y el nivel 0 es el bit menos significativo). Como se puede observar en la siguiente figura, en la que se muestran los distintos niveles de bit del componente R (Rojo) de la mítica figura de Lena, a partir del nivel 2 (empezando por 0 y recorriendo de izquierda a derecha y de arriba abajo) ya se empiezan a observar algunos patrones a simple vista, pero en los niveles 0 y 1 todo parece aleatorio, lo que indica que el sistema visual humano es poco sensible a esos niveles.

- Niveles de bit del componente R de Lena -

Por ello, una técnica bastante conocida de esteganografía consiste en modificar los bits menos significativos de una imagen o un clip de audio por los bits que se quieren transmitir de forma oculta. Al fin y al cabo, parece que esos cambios pasarán desapercibidos para ojo/oído humano.

No obstante, esta técnica es bastante básica y, si se aplica sin control, es fácilmente detectable estadísticamente. Esto es debido a que, al modificar indiscriminadamente los bits menos significativos, se alteran también las propiedades estadísticas de los mismos. Y es que, aunque se suele pensar que los bits menos significativos son aleatorios (como parece a partir de las figuras anteriores), no es así.

Estegoanálisis PoV

La técnica principal para detectar esteganografía LSB se conoce como análisis por pares de valores (PoV, del inglés «Pairs of Values») y fue propuesta en el año 2000 en «Attacks on steganographic systems». Se basa en una observación muy simple, aunque ocurrente.

En concreto, un byte puede representar 256 valores (de 0 a 255). Si se agrupan estos 256 valores por pares contiguos, se obtienen 128 posibilidades: [0,1], [2,3], [4,5], …, [252,253],[254,255]. La clave está en observar que, a pesar de modificar el último bit de cada byte, el valor resultante sigue estando dentro del mismo par, independientemente del nuevo valor del último bit.

Por ejemplo, supóngase que en la imagen original (sin información oculta), hay 100 píxeles con valor igual a 4 y 50 con valor igual a 5, haciendo un total de 150 píxeles en el par [4,5]. Tras aplicar esteganografía LSB para ocultar información cifrada (que, por lo tanto, tiene aproximadamente los mismos bits a 0 que a 1), habrá cerca de 75 píxeles con valor 4 y aproximadamente 75 píxeles con valor 5, sumando también 150.

Como la distribución total del par de valores es constante, a partir de la imagen a analizar se puede obtener la frecuencia esperada de cualquiera de los valores que toman los bytes, lo cual permite realizar un contraste de hipótesis Chi cuadrado sobre la distribución de las frecuencias observadas en la imagen a analizar. Este test permite descartar que la imagen analizada contenga información oculta mediante esteganografía LSB.

Para «jugar» con este método de estegoanálisis, se pueden utilizar los siguientes scripts en Python en nuestro perfil de Github:

  • imgrand.py <input> <percentage> <output>:
    • Aleatoriza el <percentage>% de los LSBs de la imagen en <input> y almacena el resultado en <output>.
  • imgchi2.py <input>:
    • Aplica el estegoanálisis PoV sobre la imagen en <input>. Como resultado, saca el p-valor asociado al test, para cada canal (el script utiliza formato R, G y B). Es decir, intuitivamente, la probabilidad de que la hipótesis nula (que en nuestro caso es «Hay información oculta») sea cierta.

Por ejemplo, ejecutando «./imgrand.py img/lena.bmp 100 img/lena_rand_100.bmp», se obtiene la imagen img/lena_rand_100.bmp, que se ha generado tras aleatorizar el 100% de los LSBs de la imagen img/lena.bmp (la inclusión de bits aleatorios simula la inclusión de bits cifrados). Como se puede observar en la siguiente figura, a simple vista no se nota la diferencia:

– lena.bmp (izquierda) y lena_rand_100.bmp (derecha) -

No obstante, si se utiliza el script ./imgchi2.py, se obtiene el siguiente resultado:

– Resultado de aplicar estegoanálisis PoV sobre lena_rand_100.bmp -

Es decir, es muy probable que se haya ocultado información en los 3 componentes (R, G y B) de la imagen.

Limitaciones del estegoanálisis

Este método es efectivo para detectar esteganografía LSB cuando la cantidad de información oculta es alta. No obstante, conforme baja el porcentaje de capacidad del canal subliminal utilizado (en este caso, usar todos los bits menos significativos sería utilizar el 100% de la capacidad del canal), la efectividad del test baja rápidamente. Por ejemplo, la siguiente imagen muestra los resultados para versiones de lena.bmp en las que se ha utilizado el 50% y el 25% de la capacidad del canal subliminal:

- Resultado de aplicar estegoanálisis PoV sobre versiones de lena.bmp con el 50% y el 25% de la capacidad subliminal utilizada –

Es decir, con el 50% de la capacidad subliminal utilizada, el estegoanálisis PoV dice que hay cerca de un 30% de probabilidad de que haya información oculta; y usando el 25%, devuelve que hay un 0,2% de probabilidad. Esto pese a que el 50% y el 25% supone bastante información: p.e., la imagen usada en el ejemplo es de 512x512, con 3 canales (R, G y B), con lo que el 50% de los LSBs equivale a 48 KB.

Una mejora directa es aplicar este análisis por «ventanas», es decir, a porciones de la imagen en lugar de a la imagen completa. La siguiente imagen, de «Attacks on steganographic systems» indica que, probablemente, la imagen analizada contiene información oculta en una mitad de la imagen, pero no en la otra mitad.

– Ejemplo de los resultados obtenidos al aplicar de PoV por «ventanas», de «Attacks on steganographic systems» -

En este aspecto, es importante tener en cuenta, por un lado, que para que haya suficiente evidencia estadística, no se deben utilizar ventanas muy pequeñas; y por otro lado (y esto aplica a cualquier análisis estadístico), siempre hay que tener en cuenta que lo que se obtiene es una estimación. Es decir, obtener un resultado positivo no es una prueba irrefutable de que haya información oculta.

En cualquier caso, la esteganografía LSB es probablemente la técnica más básica de esteganografía sobre multimedia (audio e imagen). Por ejemplo, técnicas más avanzadas permiten ocultar información, pero manteniendo las estadísticas de primer orden (como los histogramas, en los que se basa el método PoV para su estegoanálisis).