Este proyecto es una imagen Docker útil para resolver retos de esteganografía como los que puedes encontrar en plataformas CTF como hackthebox.eu.La imagen viene preinstalada con muchas herramientas populares (ver lista más abajo) y varios scripts de detección que puedes utilizar para comprobar cosas sencillas (por ejemplo, ejecutar check_jpg.sh image.jpg
para obtener un informe de un archivo JPG).
Uso
Primero asegúrate de que tienes Docker instalado (cómo).Luego puedes usar los scripts de shell bin/build.sh
y bin/run.sh
de este repo para construir la imagen y ejecutar el contenedor.Te caerá un shell bash dentro del contenedor.Tendrá la carpeta data
montada, en la que puedes poner los archivos a analizar.
Si no usas los scripts, sigue estos pasos:
- Construye la imagen (
docker build -t <image_name> .
) o sácala del hub de Docker (docker pull dominicbreuker/stego-toolkit
) - Inicia un contenedor con tus archivos montados en la carpeta
/data
(docker run -it <image_name> -v /local/folder/with/data:/data /bin/bash
) - Usa las herramientas CLI y los scripts de análisis en tus archivos: por ejemplo, ejecute
check_jpg.sh image.jpg
para crear un informe rápido, o ejecutebrute_jpg.sh image.jpg wordlist.txt
para intentar extraer datos ocultos con varias herramientas y contraseñas - Si desea ejecutar herramientas GUI utilice una de estas dos formas:
- Ejecuta
start_ssh.sh
y conéctate a tu contenedor con X11 forwarding - Ejecuta
start_vnc.sh
y conéctate al Escritorio del contenedor a través de tu navegador
Consulta las siguientes secciones para más información:
- ¿Qué herramientas están instaladas? Ir aquí
- ¿Qué scripts puedo ejecutar para filtrar rápidamente los archivos de forma automática o por fuerza bruta? Ir aquí
- ¿Cómo puedo jugar con diferentes ejemplos de esteganografía para ver si puedo romperlos? Vaya aquí
- ¿Cómo puedo ejecutar herramientas GUI dentro del contenedor? vaya aquí
Demo
Inicie con docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash
.Se le dejará caer en un shell de contenedor en el dir de trabajo /data
.Su carpeta host $(pwd)/data
será montada y las imágenes dentro serán accesibles.
Herramientas
Muchas herramientas diferentes de Linux y Windows están instaladas.Las herramientas de Windows son compatibles con Wine.Algunas herramientas se pueden utilizar en la línea de comandos, mientras que otros requieren apoyo GUI!
Herramientas de interfaz de línea de comandos
Estas herramientas se pueden utilizar en la línea de comandos.Todo lo que tienes que hacer es iniciar un contenedor y montar los archivos de esteganografía que desea comprobar.
Herramientas de detección general
Herramientas para ejecutar en el principio.Permitir que usted consiga una idea amplia de lo que está tratando.
Herramienta | Descripción | Cómo usar |
---|---|---|
archivo | Comprueba qué tipo de archivo tienes | file stego.jpg |
exiftool | Comprobar los metadatos de los archivos multimedia | exiftool stego.jpg |
binwalk | Comprobar si hay otros archivos incrustados/anexados | binwalk stego.jpg |
cadenas | Comprobar si hay caracteres legibles interesantes en el archivo | strings stego.jpg |
foremost | Corte los archivos incrustados/anexados | foremost stego.jpg |
pngcheck | Obtener detalles sobre un archivo PNG (o descubrir que es en realidad otra cosa) | pngcheck stego.png |
identificar | Herramienta de GraphicMagick para comprobar qué tipo de imagen es un archivo. Comprueba también si la imagen está corrupta. | identify -verbose stego.jpg |
ffmpeg | ffmpeg se puede utilizar para comprobar la integridad de los archivos de audio y dejar que informe de infos y errores | ffmpeg -v info -i stego.mp3 -f null - recodificar el archivo y tirar el resultado |
Herramientas de detección de esteganografía
Herramientas diseñadas para detectar esteganografía en archivos.En su mayoría realizan pruebas estadísticas.Sólo revelarán los mensajes ocultos en casos sencillos. Sin embargo, pueden dar pistas sobre qué buscar si encuentran irregularidades interesantes.
Herramienta | Tipos de archivos | Descripción | Cómo usar |
---|---|---|---|
stegoVeritas | Imágenes (JPG, PNG, GIF, TIFF, BMP) | Una gran variedad de comprobaciones simples y avanzadas. Comprueba stegoveritas.py -h . Comprueba los metadatos, crea muchas imágenes transformadas y las guarda en un directorio, Fuerza bruta LSB, … |
stegoveritas.py stego.jpg para ejecutar todas las comprobaciones |
zsteg | Imágenes (PNG, BMP) | Detecta varios LSB stego, también openstego y la herramienta Camouflage | zsteg -a stego.jpg para ejecutar todas las comprobaciones |
stegdetect | Imágenes (JPG) | Realiza pruebas estadísticas para encontrar si se ha utilizado una herramienta stego (jsteg, outguess, jphide, …). Revisa man stegdetect para más detalles. |
stegdetect stego.jpg |
stegbreak | Imágenes (JPG) | Cracker de fuerza bruta para imágenes JPG. Afirma que puede crackear outguess , jphide y jsteg . |
stegbreak -t o -f wordlist.txt stego.jpg , usa -t o para outguess, -t p para jphide o -t j para jsteg |
Herramientas que realmente hacen esteganografía
Herramientas que puedes usar para ocultar mensajes y revelarlos después.Algunas encriptan los mensajes antes de ocultarlos.Si lo hacen, requieren una contraseña.Si tienes una pista de qué tipo de herramienta se utilizó o qué contraseña podría ser la correcta, prueba estas herramientas.Algunas herramientas son compatibles con los scripts de fuerza bruta disponibles en esta imagen Docker.
Herramienta | Tipos de archivo | Descripción | Cómo ocultar | Cómo recuperar |
---|---|---|---|---|
AudioStego | Audio (MP3 / WAV) | Los detalles de su funcionamiento están en esta entrada del blog | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 |
hideme stego.mp3 -f && cat output.txt |
jphide/jpseek | Imagen (JPG) | Herramienta bastante antigua de aquí. Aquí se instala la versión de aquí ya que la original se estrellaba todo el tiempo. Pide una frase de contraseña de forma interactiva. | jphide cover.jpg stego.jpg secret.txt |
jpseek stego.jpg output.txt |
jsteg | Imagen (JPG) | Herramienta stego LSB. No cifra el mensaje. | jsteg hide cover.jpg secret.txt stego.jpg |
jsteg reveal cover.jpg output.txt |
mp3stego | Audio (MP3) | Programa antiguo. Encripta y luego oculta un mensaje (¡encriptación 3DES!). Herramienta de Windows que se ejecuta en Wine. Requiere la entrada de WAV (puede lanzar errores para ciertos archivos WAV. lo que funciona para mí es por ejemplo: ffmpeg -i audio.mp3 -flags bitexact audio.wav ). Importante: ¡utiliza sólo la ruta absoluta! |
mp3stego-encode -E secret.txt -P password /path/to/cover.wav /path/to/stego.mp3 |
mp3stego-decode -X -P password /path/to/stego.mp3 /path/to/out.pcm /path/to/out.txt |
openstego | Imágenes (PNG) | Varios algoritmos LSB stego (mira este blog). Todavía se mantiene. | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png |
openstego extract -sf openstego.png -p abcd -xf output.txt (¡deja fuera -xf para crear un archivo con el nombre original!) |
outguess | Imágenes (JPG) | Usa «bits redundantes» para ocultar datos. Viene en dos versiones: old=outguess-0.13 tomada de aquí y new=outguess de los repos del paquete. Para recuperar, hay que usar la utilizada para ocultar. |
outguess -k password -d secret.txt cover.jpg stego.jpg |
outguess -r -k password stego.jpg output.txt |
Espectrología | Audio (WAV) | Codifica una imagen en el espectrograma de un archivo de audio. | TODO |
Usa la herramienta GUI sonic-visualiser |
stegano | Imágenes (PNG) | Oculta datos con varios métodos (basados en LSB). Proporciona también algunas herramientas de cribado. | stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png o stegano-red hide --input cover.png -m "secret msg" --output stego.png o stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png para varios generadores (stegano-lsb-set list-generators ) |
stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt o stegano-red reveal -i stego.png o stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt |
Steghide | Imágenes (JPG, BMP) y Audio (WAV, AU) | Herramienta versátil y madura para cifrar y ocultar datos. | steghide embed -f -ef secret.txt -cf cover.jpg -p password -sf stego.jpg |
steghide extract -sf stego.jpg -p password -xf output.txt |
Cloackedpixel | Imágenes (PNG) | LSB stego herramienta para imágenes | cloackedpixel hide cover.jpg secret.txt password crea cover.jpg-stego.png |
cloackedpixel extract cover.jpg-stego.png output.txt password |
LSBSteg | Imágenes (PNG, BMP, …) en formatos sin comprimir | Herramientas LSB simples con código Python muy agradable y legible | LSBSteg encode -i cover.png -o stego.png -f secret.txt |
LSBSteg decode -i stego.png -o output.txt |
f5 | Imágenes (JPG) | Algoritmo esteganográfico F5 con información detallada del proceso | f5 -t e -i cover.jpg -o stego.jpg -d 'secret message' |
f5 -t x -i stego.jpg 1> output.txt |
stegpy | Imágenes (PNG, GIF, BMP, WebP) y Audio (WAV) | Programa de esteganografía simple basado en el método LSB | stegpy secret.jpg cover.png |
stegpy _cover.png |
Herramientas GUI de esteganografía
Todas las herramientas que aparecen a continuación tienen interfaces gráficas de usuario y no pueden utilizarse a través de la línea de comandos.Para ejecutarlas, debe hacer que un servidor X11 esté disponible dentro del contenedor.Se admiten dos formas:
- ejecutar
start_ssh.sh
para disparar un servidor SSH. Conéctese después con el reenvío de X11. Requiere un servidor X11 en el host. - ejecuta
start_vnc.sh
para activar un servidor + cliente VNC. Conéctese después con su navegador al puerto 6901 y obtendrá un escritorio Xfce. No hay dependencias del host!
Alternativamente, encuentre otras maneras de hacer que X11 esté disponible dentro del contenedor.Muchas maneras diferentes son posibles (por ejemplo montar sockets UNIX).
Herramienta | Tipos de archivo | Descripción | Cómo empezar |
---|---|---|---|
Steg | Imágenes (JPG, TIFF, PNG, BMP) | Maneja muchos tipos de archivos e implementa diferentes métodos | steg |
Stegabara (El enlace original está roto) | Imágenes (???) | Transforma interactivamente las imágenes hasta que encuentres algo | steganabara |
Stegsolve | Imágenes (???) | Transforma interactivamente las imágenes, ve los esquemas de color por separado, … | stegsolve |
SonicVisualiser | Audio (???) | Visualizar archivos de audio en forma de onda, mostrar espectrogramas, … | sonic-visualiser |
Stegosuite | Imágenes (JPG, GIF, BMP) | Puede cifrar y ocultar datos en imágenes. Desarrollado activamente. | stegosuite |
OpenPuff | Imágenes, Audio, Video (muchos formatos) | Herramienta sofisticada con larga historia. Todavía se mantiene. Herramienta de Windows que se ejecuta en wine. | openpuff |
DeepSound | Audio (MP3, WAV) | Herramienta de stego de audio en la que confía el propio Mr. Robot. Herramienta de Windows que se ejecuta en wine (muy hacky, requiere VNC y se ejecuta en el escritorio virtual, MP3 roto debido a la falta de DLL!) | deepsound sólo en sesión VNC |
cloackedpixel-analyse | Imágenes (PNG) | Visualización de LSB stego para PNGs – utilícela para detectar valores LSB sospechosamente aleatorios en imágenes (valores cercanos a 0.5 pueden indicar que hay datos encriptados incrustados) | cloackedpixel-analyse image.png |
Scripts de cribado
Muchas de las herramientas anteriores no requieren interacción con una GUI.Por lo tanto, puede automatizar fácilmente algunos flujos de trabajo para realizar un cribado básico de archivos que puedan contener mensajes ocultos.Dado que las herramientas aplicables difieren según el tipo de archivo, cada tipo de archivo tiene diferentes scripts.
Para cada tipo de archivo, hay dos tipos de scripts:
-
XXX_check.sh <stego-file>
: ejecuta herramientas básicas de cribado y crea un informe (+ posiblemente un directorio con informes en archivos) -
XXX_brute.sh <stego-file> <wordlist>
: intenta extraer un mensaje oculto de un archivo stego con varias herramientas utilizando una lista de palabras (cewl
,john
ycrunch
se instalan para generar listas – mantenerlas pequeñas).
Se admiten los siguientes tipos de archivos:
- JPG:
check_jpg.h
ybrute_jpg.sh
(ejecución brutasteghide
,outguess
,outguess-0.13
,stegbreak
,stegoveritas.py -bruteLSB
) - PNG:
check_png.h
ybrute_png.sh
(ejecución bruta deopenstego
ystegoveritas.py -bruteLSB
)
Generación de listas de palabras
Los scripts de fuerza bruta anteriores necesitan listas de palabras.En mi opinión, es muy probable que no sirva de nada utilizar listas de palabras estándar enormes como las de Rockyou.Los scripts son demasiado lentos para ello y los retos stego parecen no estar diseñados para esto.Un escenario más probable es que tengas una corazonada de cuál podría ser la contraseña pero no lo sepas exactamente.
Para estos casos, se incluyen varias herramientas para generar listas de palabras:
- john: la versión mejorada por la comunidad de John the Ripper puede ampliar tus listas de palabras. Cree una lista de palabras base con unas cuantas contraseñas candidatas y utilice
john
para crear muchas variantes de las mismas. Utilicejohn -wordlist:/path/to/your/wordlist -rules:Single -stdout > /path/to/expanded/wordlist
para aplicar reglas extensas (~x1000)john -wordlist:/path/to/your/wordlist -rules:Wordlist -stdout > /path/to/expanded/wordlist
para un conjunto de reglas reducido (~x50). - crunch: puede generar pequeñas listas de palabras si tiene un patrón en mente. Por ejemplo, si sabe que las contraseñas terminan en 1984 y tienen 6 letras, el uso de
crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984
generará las 26 * 26 = 676 contraseñas aa1984, ab1984, … hasta zz1984. El formato escrunch <min-length> <max-length> <charset> <options>
y utilizamos la opción de plantillas. Eche un vistazo aless /usr/share/crunch/charset.lst
para ver los conjuntos de caracteres con los que viene Crunch. - CeWL: puede generar listas de palabras si sabe que un sitio web está relacionado con una contraseña. Por ejemplo, ejecute
cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump
si sospecha que una foto de Donald Trump contiene un mensaje oculto cifrado. El comando raspa el sitio y extrae cadenas de al menos 8 caracteres.
Ejemplos de esteganografía
La imagen contiene una imagen de muestra y un archivo de audio cada uno en diferentes formatos:
/examples/ORIGINAL.jpg
/examples/ORIGINAL.png
/examples/ORIGINAL.mp3
/examples/ORIGINAL.wav
También contiene un script /examples/create_examples.sh
que puedes ejecutar para incrustar un mensaje oculto («¡Este es un mensaje muy secreto!»Después de ejecutar este script, encontrará estos archivos en /examples/stego-files
con sus nombres indicando qué herramienta se utilizó para incrustar el mensaje.Puede ejecutar los scripts de detección para ver si encuentran algo en ellos o intentar romperlos de otra manera.
GUI y contenedores
Por defecto, no se pueden ejecutar herramientas GUI en un contenedor Docker ya que no hay ningún servidor X11 disponible.Para ejecutarlas, debe cambiar eso.Lo que se requiere para hacerlo depende de su máquina anfitriona.Si usted:
- corre en Linux, probablemente tiene X11
- corre en Mac OS, necesita Xquartz (
brew install Xquartz
) - corre en Windows, tiene un problema
Use el reenvío de X11 a través de SSH si quiere ir por este camino. Ejecute start_ssh
dentro del contenedor para iniciar el servidor, asegúrese de exponer el puerto 22 al iniciar el contenedor: docker run -p 127.0.0.1:22:22 ...
, luego usa ssh -X ...
al conectarte (el script imprime la contraseña).
Para no depender de X11, la imagen viene con un servidor TigerVNC y un cliente noVNC.Puedes usarlo para abrir una sesión VNC HTML5 con tu navegador para conectarte al escritorio Xfce del contenedor. Para ello, ejecute start_vnc.sh
dentro del contenedor para iniciar el servidor y el cliente, asegúrese de exponer el puerto 6901 al iniciar el contenedor docker run -p 127.0.0.1:6901:6901 ...
y vaya a localhost:6901/?password=<the_password>
(el script imprime la contraseña).
Usando SSH con reenvío a X11
Comandos en el GIF para copiar & pegar:
# in 1st host shelldocker run -it --rm -p 127.0.0.1:22:22 dominicbreuker/stego-toolkit /bin/bash# inside container shellstart_ssh.sh# in 2nd host shell (use it to launch GUI apps afterwards)ssh -X -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost
Usando Browser y VNC
Comandos en el GIF para copiar &pegar:
# in 1st host shelldocker run -it --rm -p 127.0.0.1:6901:6901 dominicbreuker/stego-toolkit /bin/bash# inside container shellstart_vnc.sh# in browser, connect with: http://localhost:6901/?password=<password_from_start_vnc>
Colección de enlaces
Esta es una colección de enlaces útiles de Esteganografía:
- Debes ser capaz de detectar códigos. Echa un vistazo a esta hoja de trucos de Eric Harshbarger, que contiene muchos códigos diferentes.
- Hoja de trucos que describe los flujos de trabajo, las cosas que hay que buscar y las herramientas comunes: haga clic en
- Guía de CTF forense con un montón de ideas para los desafíos stego: haga clic en
- Descripciones de formato de archivo como hermosos carteles: haga clic en
.