Según Wikipedia:
La esteganografía trata el estudio y aplicación de técnicas que permiten ocultar mensajes u objetos, dentro de otros, llamados portadores, para que no se perciba su existencia. Es decir, se procura ocultar mensajes dentro de otros objetos y de esta forma establecer un canal encubierto de comunicación, de modo que el propio acto de la comunicación pase inadvertido para observadores que tienen acceso a ese canal.
Básicos#
Strings#
La más básica de todas, permite buscar datos en el documento que puedan interpretarse como strings representables en varias codificaciones (ASCII, UTF16, UTF32, etc.). Si un archivo tiene strings estáticas dentro, el programa las detectará.
Por defecto, strings busca cadenas en ASCII. Un script básico que automatiza el buscarlas también en otras codificaciones puede ser este:
| |
| |
File#
Otra de las básicas, permite simplemente ver el tipo de archivo.
| |
Binwalk#
Va mirando los bytes del archivo de uno en uno buscando Magic Bytes (firmas de archivos). Si detecta que hay una firma de archivo específico dentro de otro archivo, avisa y marca en qué dirección está.
| |
Inserción y extracción#
Steghide (JPEG,BMP,WAV)#
La herramienta de esteganografía más habitual. Si hay algún archivo .jpg o .wav y se sospecha que hay algo dentro oculto con contraseña, es la herramienta adecuada.
- Soporta JPEG, BMP, WAV y AU.
Para esconder un archivo no sobrescribe directamente el LSB de cada píxel como otras herramientas básicas de esteganografía sino que intercambia píxeles o muestras de audio que tienen valores casi idénticos. Modifica ligeramente la distribución estadística de la imagen, un análisis podría detectar que hay algo escondido aunque no pueda descifrarlo.
Para ocultar datos (pide contraseña luego y cifra con AES el secreto):
| |
Para sacar datos:
| |
Siempre pide contraseña para descifrar porque de primeras no sabe si hay algo escondido o no. Recomendable probar primero con una contraseña vacía, si no funciona buscarla de alguna manera o sacarla a fuerza bruta con Stegseek.
Stegseek (Bruteforcing)#
Programa para sacar la contraseña de un archivo oculto cifrado con Steghide a fuerza bruta. Soporta los mismos tipos de archivo que Steghide.
Para intentar crackear una contraseña:
| |
Si no encuentra la contraseña, puede ser porque no esté en la wordlist o porque realmente no haya nada escondido en el archivo.
Outguess (JPEG)#
Otra herramienta como Steghide pero que usa un algoritmo diferente que le permite mantener las estadísticas de la imagen exactamente igual para evadir la detección mediante análisis. Fue usada en los puzzles de Cicada 3301.
En imágenes normales existe una correlación espacial alta entre píxeles vecinos (p.ej, una pared entera del mismo color). Cuando Outguess mete un bit oculto, modifica un coeficiente, y para mantener el histograma igual, busca otro pixel al azar y lo cambia en sentido inverso. Esto significa que se rompe la correlación local entre píxeles, y aunque herramientas con algoritmos clásicos no le pillen porque la distribución sigue igual, otras herramientas más avanzadas como Aletheia sí pueden detectarlo.
- Soporta JPEG
Ocultar datos:
| |
Extraer datos sin contraseña:
| |
Extraer datos con contraseña:
| |
Detección#
Nota: Herramientas
Para resolver un CTF, las herramientas hasta la inmediatamente anterior (Outguess) suelen ser más que suficientes, algunas de estas que siguen pueden ser útiles, pero otras son más avanzadas y generalmente no hará falta usarlas en un CTF.
Hay varios métodos para intentar detectar anomalías en archivos y poder centrar las sospechas en algunos de ellos.
Ejemplo: Test Chi-Cuadrado#
Por ejemplo, uno de los análisis que funcionan bien en archivos escondidos mediante la técnica de LSB en imágenes es el test de bondad de ajuste Chi-Cuadrado (\(\chi^2\)) de Pearson. Este test permite ver si, dada una muestra de datos, dichos datos se ajustan adecuadamente en frecuencia a los esperados que tendría la distribución estadística teórica con la que se les compara.
En una imagen digital normal (sin alterar), la frecuencia de un color oscuro (p.ej, valor de píxel 20) y de su siguiente inmediato (valor de píxel 21) suele ser bastante asimétrica. Uno puede aparecer 600 veces y el otro 30. Esto significa que el LSB suele tener un bit ganador (0 o 1) muy marcado.
Si alguien inyecta archivos en esos píxeles, los bits del archivo se meten en los bits menos significativos de la imagen (LSB), y, al haber tantos, tienden a terminar igualándose, la distribución se acerca a un 50/50.
El test de bondad de ajuste en este caso compara la frecuencia observada con la frecuencia esperada si el archivo tuviera datos ocultos. Si el p-valor resultante es alto de forma sostenida a lo largo de todo el archivo, es casi seguro que hay datos ocultos.
Ahora bien, este método solo funciona bien contra algoritmos LSB en formatos sin pérdida (PNG o BMP).
Zsteg (PNG, BMP)#
Detección de esteganografía en archivos sin pérdida. Ejecuta algoritmos estadísticos de forma automática, incluido el Chi-Cuadrado.
Para analizar con todos los métodos disponibles (-a):
| |
Aletheia (ML)#
Framework de código abierto. Usa modelos estadísticos y además machine learning con modelos disponibles para descargar para poder detectar esteganografía en cualquier tipo de archivo. Más info aquí.
Puede detectar imágenes con datos ocultos generados con Outguess.
Para buscar información en un archivo:
| |
Una herramienta para ocultar datos mediante esteganografía, del mismo autor, y que busca ser resistente incluso a Aletheia es HStego.

