Questo progetto è un’immagine Docker utile per risolvere sfide di steganografia come quelle che puoi trovare su piattaforme CTF come hackthebox.eu.L’immagine è preinstallata con molti strumenti popolari (vedi lista sotto) e diversi script di screening che puoi usare per controllare cose semplici (per esempio, esegui check_jpg.sh image.jpg
per ottenere un rapporto per un file JPG).
Uso
Prima assicurati di avere Docker installato (come fare).Poi puoi usare gli script di shell bin/build.sh
e bin/run.sh
in questo repo per costruire l’immagine ed eseguire il contenitore. sarai portato in una shell bash all’interno del contenitore, che avrà la cartella data
montata, nella quale puoi mettere i file da analizzare.
Se non usi gli script, segui questi passi:
- Costruisci l’immagine (
docker build -t <image_name> .
) o estrai dal Docker hub (docker pull dominicbreuker/stego-toolkit
) - Avvia un contenitore con i tuoi file montati nella cartella
/data
(docker run -it <image_name> -v /local/folder/with/data:/data /bin/bash
) - Usa gli strumenti CLI e gli script di screening sui tuoi file: es, esegui
check_jpg.sh image.jpg
per creare un rapporto veloce, o eseguibrute_jpg.sh image.jpg wordlist.txt
per provare ad estrarre dati nascosti con vari strumenti e password - Se vuoi eseguire strumenti GUI usa uno di questi due modi:
- Esegui
start_ssh.sh
e connettiti al tuo contenitore con X11 forwarding - Esegui
start_vnc.sh
e connettiti al Desktop del contenitore attraverso il tuo browser
Guarda le seguenti sezioni per maggiori informazioni:
- Quali strumenti sono installati? Vai qui
- Quali script posso eseguire per schermare rapidamente i file automaticamente o forzarli? Vai qui
- Come posso giocare con diversi esempi di steganografia per vedere se posso violarli? Vai qui
- Come posso eseguire strumenti GUI all’interno del contenitore? vai qui
Demo
Inizia con docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash
.Verrai portato in una shell del contenitore nella cartella di lavoro /data
.La tua cartella host $(pwd)/data
sarà montata e le immagini all’interno saranno accessibili.
Strumenti
Molti strumenti diversi per Linux e Windows sono installati.Alcuni strumenti possono essere usati dalla linea di comando mentre altri richiedono il supporto della GUI!
Strumenti con interfaccia a linea di comando
Questi strumenti possono essere usati dalla linea di comando.Tutto quello che devi fare è avviare un contenitore e montare i file di steganografia che vuoi controllare.
Strumenti di screening generale
Strumenti da eseguire all’inizio.Ti permettono di avere un’idea generale di ciò che stai affrontando.
Tool | Descrizione | Come usare |
---|---|---|
file | Verifica che tipo di file hai | file stego.jpg |
exiftool | Controlla i metadati dei file multimediali | exiftool stego.jpg |
binwalk | Controlla se altri file sono incorporati/applicati | binwalk stego.jpg |
strings | Controlla se ci sono caratteri leggibili interessanti nel file | strings stego.jpg |
precedente | Taglia fuori i file incorporati/applicati | foremost stego.jpg |
pngcheck | Ottieni dettagli su un file PNG (o scopri che è in realtà qualcos’altro) | pngcheck stego.png |
identify | Strumento di GraphicMagick per controllare che tipo di immagine è un file. Controlla anche se l’immagine è corrotta. | identify -verbose stego.jpg |
ffmpeg | ffmpeg può essere usato per controllare l’integrità dei file audio e fargli riportare informazioni ed errori | ffmpeg -v info -i stego.mp3 -f null - ricodificare il file e buttare via il risultato |
Strumenti per rilevare la steganografia
Strumenti progettati per rilevare la steganografia nei file.Per lo più eseguono test statistici.Rivelano messaggi nascosti solo in casi semplici, ma possono fornire suggerimenti su cosa cercare se trovano irregolarità interessanti.
Tool | Tipi di file | Descrizione | Come usare |
---|---|---|---|
stegoVeritas | Immagini (JPG, PNG, GIF, TIFF, BMP) | Un’ampia varietà di controlli semplici e avanzati. Controlla stegoveritas.py -h . Controlla i metadati, crea molte immagini trasformate e le salva in una directory, Forza bruta LSB, … |
stegoveritas.py stego.jpg per eseguire tutti i controlli |
zsteg | Immagini (PNG, BMP) | rileva vari stego LSB, anche openstego e lo strumento Camouflage | zsteg -a stego.jpg per eseguire tutti i controlli |
stegdetect | Immagini (JPG) | Esegue test statistici per trovare se è stato usato uno strumento stego (jsteg, outguess, jphide, …). Controlla man stegdetect per i dettagli. |
stegdetect stego.jpg |
stegbreak | Images (JPG) | Brute force cracker per immagini JPG. Afferma che può craccare outguess , jphide e jsteg . |
stegbreak -t o -f wordlist.txt stego.jpg , usa -t o per outguess, -t p per jphide o -t j per jsteg |
Strumenti per fare steganografia
Strumenti che puoi usare per nascondere messaggi e rivelarli dopo.Alcuni criptano i messaggi prima di nasconderli; se lo fanno, richiedono una password; se hai un indizio su che tipo di strumento è stato usato o quale password potrebbe essere giusta, prova questi strumenti.Alcuni strumenti sono supportati dagli script di forza bruta disponibili in questa immagine Docker.
Tool | Tipi di file | Descrizione | Come nascondere | Come recuperare |
---|---|---|---|---|
AudioStego | Audio (MP3 / WAV) | I dettagli su come funziona sono in questo post del blog | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 |
hideme stego.mp3 -f && cat output.txt |
jphide/jpseek | Immagine (JPG) | Pretty old tool from here. Qui, la versione da qui è installata da quando quella originale si è bloccata per tutto il tempo. Chiede una passphrase in modo interattivo! | jphide cover.jpg stego.jpg secret.txt |
jpseek stego.jpg output.txt |
jsteg | Image (JPG) | Strumento stegoLSB. Non cripta il messaggio. | jsteg hide cover.jpg secret.txt stego.jpg |
jsteg reveal cover.jpg output.txt |
mp3stego | Audio (MP3) | Vecchio programma. Crittografa e poi nasconde un messaggio (crittografia 3DES!). Strumento per Windows che gira in Wine. Richiede input WAV (può dare errori per certi file WAV. quello che funziona per me è ad esempio: ffmpeg -i audio.mp3 -flags bitexact audio.wav ). Importante: usa solo il percorso assoluto! |
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 | Immagini (PNG) | Vari algoritmi stego LSB (controlla questo blog). Ancora mantenuto. | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png |
openstego extract -sf openstego.png -p abcd -xf output.txt (lascia fuori -xf per creare file con nome originale!) |
outguess | Images (JPG) | Usa “bit ridondanti” per nascondere dati. Esiste in due versioni: old=outguess-0.13 presa da qui e new=outguess dai repo del pacchetto. Per recuperare, devi usare quella usata per nascondere. |
outguess -k password -d secret.txt cover.jpg stego.jpg |
outguess -r -k password stego.jpg output.txt |
spectrology | Audio (WAV) | Codifica un’immagine nello spettrogramma di un file audio. | TODO |
Utilizza lo strumento GUI sonic-visualiser |
stegano | Immagini (PNG) | Nasconde dati con vari metodi (basati su LSB). Fornisce anche alcuni strumenti di screening. | 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 per vari generatori (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 | Immagini (JPG, BMP) e Audio (WAV, AU) | Strumento versatile e maturo per criptare e nascondere dati. | 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 | Immagini (PNG) | LSB stego strumento per immagini | cloackedpixel hide cover.jpg secret.txt password crea cover.jpg-stego.png |
cloackedpixel extract cover.jpg-stego.png output.txt password |
LSBSteg | Immagini (PNG, BMP, …) in formati non compressi | Semplici strumenti LSB con codice Python molto bello e leggibile | LSBSteg encode -i cover.png -o stego.png -f secret.txt |
LSBSteg decode -i stego.png -o output.txt |
f5 | Immagini (JPG) | Algoritmo steganografico F5 con informazioni dettagliate sul processo | f5 -t e -i cover.jpg -o stego.jpg -d 'secret message' |
f5 -t x -i stego.jpg 1> output.txt |
stegpy | Immagini (PNG, GIF, BMP, WebP) e Audio (WAV) | Programma di steganografia semplice basato sul metodo LSB | stegpy secret.jpg cover.png |
stegpy _cover.png |
Strumenti GUI di steganografia
Tutti gli strumenti sottostanti hanno un’interfaccia grafica e non possono essere usati attraverso la riga di comando.Per eseguirli, devi rendere disponibile un server X11 all’interno del contenitore. Sono supportati due modi:
- esegui
start_ssh.sh
per avviare un server SSH. Connettersi in seguito con l’inoltro X11. Richiede un server X11 sul tuo host! - run
start_vnc.sh
per avviare un server VNC + client. Collegati poi con il tuo browser alla porta 6901 e otterrai un desktop Xfce. Nessuna dipendenza dall’host!
In alternativa, trova altri modi per rendere X11 disponibile all’interno del contenitore.Molti modi diversi sono possibili (ad es, montare socket UNIX).
Tool | Tipi di file | Descrizione | Come iniziare |
---|---|---|---|
Steg | Immagini (JPG, TIFF, PNG, BMP) | Gestisce molti tipi di file e implementa diversi metodi | steg |
Steganabara (Il link originale è rotto) | Immagini (???) | Trasforma in modo interattivo le immagini fino a trovare qualcosa | steganabara |
Stegsolve | Immagini (???) | Trasforma in modo interattivo le immagini, visualizza schemi di colore separatamente, … | stegsolve |
SonicVisualiser | Audio (???) | Visualizzare file audio in forma d’onda, visualizzare spettrogrammi, … | sonic-visualiser |
Stegosuite | Immagini (JPG, GIF, BMP) | Può criptare e nascondere dati nelle immagini. Sviluppato attivamente. | stegosuite |
OpenPuff | Immagini, Audio, Video (molti formati) | Strumento sofisticato con lunga storia. Ancora mantenuto. Strumento per Windows che gira in wine. | openpuff |
DeepSound | Audio (MP3, WAV) | Strumento di stego audio di cui Mr. Strumento per Windows che gira in wine (molto hacky, richiede VNC e gira nel desktop virtuale, MP3 rotto a causa di una DLL mancante!) | deepsound solo in sessione VNC |
cloackedpixel-analyse | Immagini (PNG) | visualizzazione stegoLSB per PNG – usalo per rilevare valori LSB sospettosamente casuali nelle immagini (valori vicini a 0..5 possono indicare che i dati criptati sono incorporati) | cloackedpixel-analyse image.png |
Script di screening
Molti strumenti di cui sopra non richiedono interazione con una GUI.Pertanto, è possibile automatizzare facilmente alcuni flussi di lavoro per fare uno screening di base dei file potenzialmente contenenti messaggi nascosti.Poiché gli strumenti applicabili differiscono per tipo di file, ogni tipo di file ha diversi script.
Per ogni tipo di file, ci sono due tipi di script:
-
XXX_check.sh <stego-file>
: esegue gli strumenti di screening di base e crea un rapporto (+ eventualmente una directory con i rapporti nei file) -
XXX_brute.sh <stego-file> <wordlist>
: cerca di estrarre un messaggio nascosto da un file stego con vari strumenti usando una lista di parole (cewl
,john
ecrunch
sono installati per generare liste – tienile piccole).
Sono supportati i seguenti tipi di file:
- JPG:
check_jpg.h
ebrute_jpg.sh
(brute runningsteghide
,outguess
,outguess-0.13
,stegbreak
,stegoveritas.py -bruteLSB
) - PNG:
check_png.h
ebrute_png.sh
(esecuzione bruteopenstego
estegoveritas.py -bruteLSB
)
Generazione di liste di parole
Gli script di forzatura brute sopra hanno bisogno di liste di parole.Imho molto probabilmente non sarà d’aiuto usare enormi elenchi di parole standard come rockyou.Gli script sono troppo lenti per questo e le sfide stego sembrano non essere progettate per questo.Uno scenario più probabile è che tu abbia un’idea di quale possa essere la password ma non lo sai esattamente.
Per questi casi, sono inclusi diversi strumenti per generare elenchi di parole:
- john: la versione potenziata dalla comunità di John the Ripper può espandere i tuoi elenchi di parole. Crea una wordlist di base con alcune password candidate e usa
john
per crearne molte varianti. Usajohn -wordlist:/path/to/your/wordlist -rules:Single -stdout > /path/to/expanded/wordlist
per applicare regole estese (~x1000)john -wordlist:/path/to/your/wordlist -rules:Wordlist -stdout > /path/to/expanded/wordlist
per un set di regole ridotto (~x50). - crunch: può generare piccole wordlist se hai un modello in mente. Per esempio, se sai che la password finisce con 1984 ed è lunga 6 lettere, usa
crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984
genererà le 26 * 26 = 676 password aa1984, ab1984, … fino a zz1984. Il formato ècrunch <min-length> <max-length> <charset> <options>
e abbiamo usato l’opzione templating. Controllaless /usr/share/crunch/charset.lst
per vedere i set di caratteri con cui crunch viene fornito. - CeWL: può generare elenchi di parole se sai che un sito web è collegato a una password. Per esempio, esegui
cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump
se sospetti che una foto di Donald Trump contenga un messaggio criptato nascosto. Il comando raschia il sito ed estrae le stringhe lunghe almeno 8 caratteri.
Esempi di steganografia
L’immagine contiene un’immagine campione e un file audio in diversi formati:
/examples/ORIGINAL.jpg
/examples/ORIGINAL.png
/examples/ORIGINAL.mp3
/examples/ORIGINAL.wav
Contiene anche uno script /examples/create_examples.sh
che puoi eseguire per inserire un messaggio nascosto (“Questo è un messaggio molto segreto!”Dopo aver eseguito questo script, troverai questi file in /examples/stego-files
con i loro nomi che indicano quale strumento è stato usato per incorporare il messaggio.Puoi eseguire gli script di screening per vedere se trovano qualcosa su di essi o provare a romperli altrimenti.
GUI e contenitori
Per impostazione predefinita, nessuno strumento GUI può essere eseguito in un contenitore Docker poiché non è disponibile un server X11.Per eseguirli, devi cambiare questo.Ciò che è necessario per farlo dipende dalla tua macchina host.Se:
- esegui su Linux, probabilmente hai X11
- esegui su Mac OS, hai bisogno di Xquartz (
brew install Xquartz
) - esegui su Windows, hai un problema
Usa l’inoltro di X11 attraverso SSH se vuoi andare in questo modo. Esegui start_ssh
all’interno del contenitore per avviare il server, assicurati di esporre la porta 22 quando avvii il contenitore: docker run -p 127.0.0.1:22:22 ...
, poi usa ssh -X ...
quando ti connetti (lo script stampa la password).
Per non dipendere da X11, l’immagine viene fornita con un server TigerVNC e un client noVNC, che puoi usare per aprire una sessione VNC HTML5 con il tuo browser per connetterti al desktop Xfce del container. Per farlo, esegui start_vnc.sh
all’interno del contenitore per avviare server e client, assicurati di esporre la porta 6901 quando avvii il contenitore docker run -p 127.0.0.1:6901:6901 ...
e vai a localhost:6901/?password=<the_password>
(lo script stampa la password).
Usando SSH con inoltro X11
Comandi nella GIF per copia &incolla:
# 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
Utilizzando Browser e VNC
Comandi nella GIF per copiare &incollare:
# 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>
Raccolta di link
Questa è una raccolta di link utili alla steganografia:
- Devi essere capace di individuare i codici. Guardate questo cheat sheet di Eric Harshbarger, che contiene molti codici diversi.
- Cheat sheet che descrive i flussi di lavoro, le cose da cercare e gli strumenti comuni: click
- Guida CTF forense con molte idee per le sfide stego: click
- Descrizioni dei formati dei file come bellissimi poster: click