Dieses Projekt ist ein Docker-Image, das für das Lösen von Steganographie-Herausforderungen nützlich ist, wie man sie auf CTF-Plattformen wie hackthebox.eu finden kann.Das Image kommt vorinstalliert mit vielen populären Tools (siehe Liste unten) und mehreren Screening-Skripten, mit denen man einfache Dinge überprüfen kann (z.B. check_jpg.sh image.jpg
ausführen, um einen Bericht für eine JPG-Datei zu erhalten).
Verwendung
Stellen Sie zunächst sicher, dass Sie Docker installiert haben (how to).Dann können Sie die Shell-Skripte bin/build.sh
und bin/run.sh
in diesem Repo verwenden, um das Image zu erstellen und den Container zu starten.Sie werden in eine Bash-Shell innerhalb des Containers fallen gelassen.Es wird der Ordner data
gemountet, in den Sie die zu analysierenden Dateien legen können.
Wenn Sie die Skripte nicht verwenden, folgen Sie diesen Schritten:
- Build image (
docker build -t <image_name> .
) oder pull from Docker hub (docker pull dominicbreuker/stego-toolkit
) - Starten Sie einen Container mit Ihren Dateien, die in den Ordner
/data
(docker run -it <image_name> -v /local/folder/with/data:/data /bin/bash
) - Verwenden Sie CLI-Tools und Screening-Skripte für Ihre Dateien: z.B., Führen Sie
check_jpg.sh image.jpg
aus, um einen Schnellbericht zu erstellen, oder führen Siebrute_jpg.sh image.jpg wordlist.txt
aus, um zu versuchen, versteckte Daten mit verschiedenen Tools und Passwörtern zu extrahieren - Wenn Sie GUI-Tools ausführen möchten, verwenden Sie eine der beiden folgenden Möglichkeiten:
- Starten Sie
start_ssh.sh
und verbinden Sie sich mit Ihrem Container über X11-Weiterleitung - Starten Sie
start_vnc.sh
und verbinden Sie sich über Ihren Browser mit dem Desktop des Containers
Weitere Informationen finden Sie in den folgenden Abschnitten:
- Welche Tools sind installiert? Hier
- Welche Skripte kann ich ausführen, um Dateien schnell und automatisch zu überprüfen oder sie zu erzwingen? Hier
- Wie kann ich mit verschiedenen Steganografie-Beispielen spielen, um zu sehen, ob ich sie knacken kann? Hier
- Wie kann ich GUI-Tools innerhalb des Containers ausführen? Hier
Demo
Starten Sie mit docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash
und Sie werden in einer Container-Shell im Arbeitsverzeichnis /data
landen.Ihr Host-Ordner $(pwd)/data
wird gemountet und die Bilder darin sind zugänglich.
Tools
Viele verschiedene Linux- und Windows-Tools werden installiert.Windows-Tools werden mit Wine unterstützt.Einige Tools können auf der Kommandozeile verwendet werden, während andere GUI-Unterstützung benötigen!
Tools für die Kommandozeile
Diese Tools können auf der Kommandozeile verwendet werden.Alles, was Sie tun müssen, ist, einen Container zu starten und die Steganografie-Dateien, die Sie überprüfen möchten, zu mounten.
Allgemeine Screening-Tools
Tools, die Sie am Anfang ausführen sollten, damit Sie eine grobe Vorstellung davon bekommen, womit Sie es zu tun haben.
Werkzeug | Beschreibung | Verwendung |
---|---|---|
Datei | Überprüfen Sie, welche Art von Datei Sie haben | file stego.jpg |
exiftool | Metadaten von Mediendateien prüfen | exiftool stego.jpg |
binwalk | Überprüfen, ob andere Dateien eingebettet/angehängt sind | binwalk stego.jpg |
Strings | Prüfen, ob interessante lesbare Zeichen in der Datei vorhanden sind | strings stego.jpg |
vorherige | Eingebettete/angehängte Dateien ausschneiden | foremost stego.jpg |
pngcheck | Details zu einer PNG-Datei ermitteln (oder herausfinden, ob es sich um eine andere Datei handelt) | pngcheck stego.png |
identify | GraphicMagick-Werkzeug, um zu überprüfen, welche Art von Bild eine Datei ist. Prüft auch, ob das Bild beschädigt ist. | identify -verbose stego.jpg |
ffmpeg | ffmpeg kann verwendet werden, um die Integrität von Audiodateien zu prüfen und Informationen und Fehler zu melden | ffmpeg -v info -i stego.mp3 -f null - die Datei umkodieren und das Ergebnis wegwerfen |
Tools zum Aufspüren von Steganografie
Tools zum Aufspüren von Steganografie in Dateien.Sie führen zumeist statistische Tests durch.Sie enthüllen versteckte Botschaften nur in einfachen Fällen, können aber Hinweise geben, worauf zu achten ist, wenn sie interessante Unregelmäßigkeiten finden.
Werkzeug | Dateitypen | Beschreibung | Anwendungsweise |
---|---|---|---|
stegoVeritas | Bilder (JPG, PNG, GIF, TIFF, BMP) | Eine große Auswahl an einfachen und fortgeschrittenen Prüfungen. Schauen Sie sich stegoveritas.py -h an. Prüft Metadaten, erstellt viele transformierte Bilder und speichert sie in einem Verzeichnis, Brute Forces LSB, … |
stegoveritas.py stego.jpg um alle Prüfungen durchzuführen |
zsteg | Bilder (PNG, BMP) | Ermittelt verschiedene LSB-Stegos, auch openstego und das Camouflage-Tool | zsteg -a stego.jpg , um alle Prüfungen durchzuführen |
stegdetect | Images (JPG) | Führt statistische Tests durch, um festzustellen, ob ein Stego-Tool verwendet wurde (jsteg, outguess, jphide, …). Siehe man stegdetect für Details. |
stegdetect stego.jpg |
stegbreak | Bilder (JPG) | Brute Force Cracker für JPG Bilder. Kann angeblich outguess , jphide und jsteg knacken. |
stegbreak -t o -f wordlist.txt stego.jpg , verwende -t o für outguess, -t p für jphide oder -t j für jsteg |
Tools, die Steganografie betreiben
Tools, mit denen man Nachrichten verstecken und sie hinterher offenlegen kann.Einige verschlüsseln die Nachrichten vor dem Verstecken und erfordern ein Passwort. Wenn Sie einen Hinweis darauf haben, welche Art von Tool verwendet wurde oder welches Passwort richtig sein könnte, versuchen Sie diese Tools.Einige Tools werden von den in diesem Docker-Image verfügbaren Brute-Force-Skripten unterstützt.
Tool | Dateitypen | Beschreibung | Verstecken | Wiederherstellung |
---|---|---|---|---|
AudioStego | Audio (MP3 / WAV) | Details zur Funktionsweise gibt es in diesem Blogpost | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 |
hideme stego.mp3 -f && cat output.txt |
jphide/jpseek | Bild (JPG) | Ein ziemlich altes Tool von hier. Hier ist die Version von hier installiert, da das Original ständig abstürzte. Es fragt interaktiv nach einer Passphrase! | jphide cover.jpg stego.jpg secret.txt |
jpseek stego.jpg output.txt |
jsteg | Bild (JPG) | LSB stego tool. Verschlüsselt die Nachricht nicht. | jsteg hide cover.jpg secret.txt stego.jpg |
jsteg reveal cover.jpg output.txt |
mp3stego | Audio (MP3) | Altes Programm. Verschlüsselt und versteckt dann eine Nachricht (3DES-Verschlüsselung!). Windows-Tool, das in Wine läuft. Benötigt WAV-Eingabe (kann bei bestimmten WAV-Dateien zu Fehlern führen. bei mir funktioniert z.B.: ffmpeg -i audio.mp3 -flags bitexact audio.wav ). Wichtig: nur absoluten Pfad verwenden! |
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 | Bilder (PNG) | Verschiedene LSB-Stego-Algorithmen (siehe diesen Blog). Wird immer noch gepflegt. | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png |
openstego extract -sf openstego.png -p abcd -xf output.txt (lassen Sie -xf weg, um eine Datei mit dem Originalnamen zu erstellen!) |
outguess | Bilder (JPG) | Verwendet „redundante Bits“, um Daten zu verstecken. Gibt es in zwei Versionen: old=outguess-0.13 von hier und new=outguess aus den Paket-Repos. Zum Wiederherstellen muss die zum Verstecken verwendete Version verwendet werden. |
outguess -k password -d secret.txt cover.jpg stego.jpg |
outguess -r -k password stego.jpg output.txt |
spectrology | Audio (WAV) | Encodiert ein Bild im Spektrogramm einer Audiodatei. | TODO |
GUI-Tool verwenden sonic-visualiser |
stegano | Bilder (PNG) | Versteckt Daten mit verschiedenen (LSB-basierten) Methoden. Stellt auch einige Screening-Tools zur Verfügung. | stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png oder stegano-red hide --input cover.png -m "secret msg" --output stego.png oder stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png für verschiedene Generatoren (stegano-lsb-set list-generators ) |
stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt oder stegano-red reveal -i stego.png oder stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt |
Steghide | Bilder (JPG, BMP) und Audio (WAV, AU) | Vielseitiges und ausgereiftes Tool zum Verschlüsseln und Verbergen von Daten. | 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 | Bilder (PNG) | LSB stego Tool für Bilder | cloackedpixel hide cover.jpg secret.txt password erstellt cover.jpg-stego.png |
cloackedpixel extract cover.jpg-stego.png output.txt password |
LSBSteg | Bilder (PNG, BMP, …) in unkomprimierten Formaten | Einfache LSB-Tools mit sehr schönem und lesbarem Python-Code | LSBSteg encode -i cover.png -o stego.png -f secret.txt |
LSBSteg decode -i stego.png -o output.txt |
f5 | Bilder (JPG) | F5 Steganographischer Algorithmus mit detaillierten Informationen über das Verfahren | f5 -t e -i cover.jpg -o stego.jpg -d 'secret message' |
f5 -t x -i stego.jpg 1> output.txt |
stegpy | Bilder (PNG, GIF, BMP, WebP) und Audio (WAV) | Einfaches Steganografieprogramm basierend auf der LSB-Methode | stegpy secret.jpg cover.png |
stegpy _cover.png |
Steganografie-GUI-Tools
Alle unten aufgeführten Tools haben eine grafische Benutzeroberfläche und können nicht über die Befehlszeile verwendet werden.Um sie auszuführen, müssen Sie einen X11-Server innerhalb des Containers zur Verfügung stellen.
- Führen Sie
start_ssh.sh
aus, um einen SSH-Server zu starten. Verbinden Sie sich anschließend mit einer X11-Weiterleitung. Erfordert einen X11-Server auf Ihrem Host! - ausführen
start_vnc.sh
, um einen VNC-Server + Client zu starten. Verbinden Sie sich anschließend mit Ihrem Browser zu Port 6901 und Sie erhalten einen Xfce-Desktop. Keine Host-Abhängigkeiten!
Alternativ finden Sie andere Wege, um X11 innerhalb des Containers verfügbar zu machen.Viele verschiedene Wege sind möglich (z.B., UNIX-Sockets einbinden).
Tool | Dateitypen | Beschreibung | Wie starten |
---|---|---|---|
Steg | Bilder (JPG, TIFF, PNG, BMP) | Verarbeitet viele Dateitypen und implementiert verschiedene Methoden | steg |
Steganabara (Der ursprüngliche Link ist defekt) | Bilder (???) | Bilder interaktiv umwandeln, bis man etwas findet | steganabara |
Stegsolve | Bilder (???) | Bilder interaktiv umwandeln, Farbschemata separat betrachten, … | stegsolve |
SonicVisualiser | Audio (???) | Audio-Dateien in Wellenform visualisieren, Spektrogramme anzeigen, … | sonic-visualiser |
Stegosuite | Bilder (JPG, GIF, BMP) | Kann Daten in Bildern verschlüsseln und verstecken. Wird aktiv weiterentwickelt. | stegosuite |
OpenPuff | Bilder, Audio, Video (viele Formate) | Ausgereiftes Tool mit langer Geschichte. Wird immer noch gepflegt. Windows-Tool läuft in Wine. | openpuff |
DeepSound | Audio (MP3, WAV) | Audio-Stego-Tool, dem Mr. Robot selbst vertraut. Windows-Tool, das in Wine läuft (sehr umständlich, erfordert VNC und läuft im virtuellen Desktop, MP3 ist wegen fehlender DLL kaputt!) | deepsound nur in VNC-Sitzung |
cloackedpixel-analyse | Bilder (PNG) | LSB-Stego-Visualisierung für PNGs – verwenden Sie es, um verdächtig zufällige LSB-Werte in Bildern zu erkennen (Werte nahe 0.5 können darauf hinweisen, dass verschlüsselte Daten eingebettet sind) | cloackedpixel-analyse image.png |
Screening-Skripte
Viele der oben genannten Tools erfordern keine Interaktion mit einer grafischen Benutzeroberfläche.Da sich die anwendbaren Werkzeuge je nach Dateityp unterscheiden, gibt es für jeden Dateityp unterschiedliche Skripte.
Für jeden Dateityp gibt es zwei Arten von Skripten:
-
XXX_check.sh <stego-file>
: führt grundlegende Screening-Tools aus und erstellt einen Bericht (+ möglicherweise ein Verzeichnis mit Berichten in Dateien) -
XXX_brute.sh <stego-file> <wordlist>
: versucht, eine versteckte Nachricht aus einer Stegodatei mit verschiedenen Tools unter Verwendung einer Wortliste zu extrahieren (cewl
,john
undcrunch
sind installiert, um Listen zu erzeugen – halten Sie sie klein).
Die folgenden Dateitypen werden unterstützt:
- JPG:
check_jpg.h
undbrute_jpg.sh
(brute runningsteghide
,outguess
,outguess-0.13
,stegbreak
,stegoveritas.py -bruteLSB
) - PNG:
check_png.h
undbrute_png.sh
(brute runningopenstego
undstegoveritas.py -bruteLSB
)
Wordlist generation
Die obigen Brute-Forcing-Skripte benötigen Wordlists.Imho wird es höchstwahrscheinlich nicht helfen, große Standard-Wortlisten wie rockyou zu verwenden.Ein wahrscheinlicheres Szenario ist, dass Sie eine Ahnung haben, wie das Passwort lauten könnte, es aber nicht genau wissen.
Für diese Fälle sind mehrere Tools zur Erzeugung von Wortlisten enthalten:
- john: die von der Community erweiterte Version von John the Ripper kann Ihre Wortlisten erweitern. Erstellen Sie eine Basiswortliste mit einigen Passwortkandidaten und verwenden Sie
john
, um viele Varianten davon zu erstellen. Verwenden Siejohn -wordlist:/path/to/your/wordlist -rules:Single -stdout > /path/to/expanded/wordlist
, um umfangreiche Regeln anzuwenden (~x1000)john -wordlist:/path/to/your/wordlist -rules:Wordlist -stdout > /path/to/expanded/wordlist
für einen reduzierten Regelsatz (~x50). - crunch: kann kleine Wortlisten erzeugen, wenn Sie ein Muster im Kopf haben. Wenn Sie zum Beispiel wissen, dass die Passwörter mit 1984 enden und 6 Buchstaben lang sind, wird
crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984
die 26 * 26 = 676 Passwörter aa1984, ab1984, … bis zz1984 generieren. Das Format istcrunch <min-length> <max-length> <charset> <options>
und wir haben die Schablonenoption verwendet. Schauen Sie sichless /usr/share/crunch/charset.lst
an, um die Zeichensätze zu sehen, mit denen Crunch ausgeliefert wird. - CeWL: kann Wortlisten generieren, wenn Sie wissen, dass eine Website mit einem Passwort verbunden ist. Führen Sie zum Beispiel
cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump
aus, wenn Sie vermuten, dass ein Bild von Donald Trump eine verschlüsselte versteckte Nachricht enthält. Der Befehl durchsucht die Website und extrahiert Zeichenfolgen, die mindestens 8 Zeichen lang sind.
Steganografie-Beispiele
Das Bild enthält ein Beispielbild und eine Audiodatei, jeweils in verschiedenen Formaten:
/examples/ORIGINAL.jpg
/examples/ORIGINAL.png
/examples/ORIGINAL.mp3
/examples/ORIGINAL.wav
Es enthält auch ein Skript /examples/create_examples.sh
, das Sie ausführen können, um eine versteckte Nachricht („Dies ist eine sehr geheime Nachricht!“Nach der Ausführung dieses Skripts finden Sie diese Dateien in /examples/stego-files
mit ihren Namen, die angeben, welches Werkzeug zum Einbetten der Nachricht verwendet wurde.Sie können die Screening-Skripte laufen lassen, um zu sehen, ob sie etwas in ihnen finden oder versuchen, sie anderweitig zu knacken.
GUI und Container
Standardmäßig können keine GUI-Tools in einem Docker-Container ausgeführt werden, da kein X11-Server verfügbar ist.Um sie auszuführen, müssen Sie das ändern.Was dazu nötig ist, hängt von deinem Host-Rechner ab.Wenn du:
- auf Linux läufst, hast du wahrscheinlich X11
- auf Mac OS, brauchst du Xquartz (
brew install Xquartz
) - auf Windows, hast du ein Problem
Verwendest du X11-Weiterleitung über SSH, wenn du diesen Weg gehen willst. Führen Sie start_ssh
innerhalb des Containers aus, um den Server zu starten, stellen Sie sicher, dass Sie Port 22 freigeben, wenn Sie den Container starten: docker run -p 127.0.0.1:22:22 ...
, dann verwenden Sie ssh -X ...
, wenn Sie sich verbinden (das Skript gibt das Passwort aus).
Um nicht von X11 abhängig zu sein, enthält das Image einen TigerVNC-Server und einen noVNC-Client, mit dem Sie eine HTML5-VNC-Sitzung mit Ihrem Browser öffnen können, um sich mit dem Xfce-Desktop des Containers zu verbinden. Dazu führen Sie start_vnc.sh
innerhalb des Containers aus, um Server und Client zu starten, stellen Sie sicher, dass Sie beim Starten des Containers docker run -p 127.0.0.1:6901:6901 ...
den Port 6901 freigeben und gehen Sie zu localhost:6901/?password=<the_password>
(das Skript gibt das Passwort aus).
SSH mit X11-Weiterleitung verwenden
Befehle im GIF zum Kopieren &Einfügen:
# 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
Browser und VNC verwenden
Befehle im GIF zum Kopieren &Einfügen:
# 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>
Linksammlung
Dies ist eine Sammlung nützlicher Steganographie-Links:
- Sie müssen Codes erkennen können. Schauen Sie sich diesen Spickzettel von Eric Harshbarger an, der viele verschiedene Codes enthält.
- Spickzettel mit Beschreibungen von Arbeitsabläufen, Dingen, auf die man achten sollte, und gängigen Tools: klick
- Forensics CTF Guide mit vielen Ideen für Stego-Herausforderungen: klick
- Dateiformatbeschreibungen als schöne Poster: klick