Ce projet est une image Docker utile pour résoudre des défis de stéganographie comme ceux que vous pouvez trouver sur des plateformes CTF comme hackthebox.eu.L’image est livrée pré-installée avec de nombreux outils populaires (voir la liste ci-dessous) et plusieurs scripts de dépistage que vous pouvez utiliser pour vérifier des choses simples (par exemple, exécuter check_jpg.sh image.jpg
pour obtenir un rapport pour un fichier JPG).
Usage
D’abord, assurez-vous que vous avez installé Docker (comment faire).Ensuite, vous pouvez utiliser les scripts shell bin/build.sh
et bin/run.sh
dans ce repo pour construire l’image et exécuter le conteneur.Vous serez déposé dans un shell bash à l’intérieur du conteneur.Il aura le dossier data
monté, dans lequel vous pouvez mettre les fichiers à analyser.
Si vous n’utilisez pas les scripts, suivez ces étapes :
- Construire l’image (
docker build -t <image_name> .
) ou la tirer du hub Docker (docker pull dominicbreuker/stego-toolkit
) - Démarrer un conteneur avec vos fichiers montés dans le dossier
/data
(docker run -it <image_name> -v /local/folder/with/data:/data /bin/bash
) - Utiliser les outils CLI et les scripts de dépistage sur vos fichiers : par ex, exécutez
check_jpg.sh image.jpg
pour créer un rapport rapide, ou exécutezbrute_jpg.sh image.jpg wordlist.txt
pour essayer d’extraire des données cachées avec divers outils et mots de passe - Si vous voulez exécuter des outils GUI, utilisez l’une de ces deux façons :
- Exécutez
start_ssh.sh
et connectez-vous à votre conteneur avec la redirection X11 - Exécutez
start_vnc.sh
et connectez-vous au bureau du conteneur via votre navigateur
Vérifiez les sections suivantes pour plus d’informations :
- Quels outils sont installés ? Allez ici
- Quels scripts puis-je exécuter pour passer rapidement les fichiers au crible automatiquement ou par force brute ? Go here
- Comment puis-je jouer avec différents exemples de stéganographie pour voir si je peux les casser ? Allez ici
- Comment puis-je exécuter des outils GUI à l’intérieur du conteneur ? Allez ici
Demo
Démarrez avec docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash
.Vous serez déposé dans un shell conteneur dans le répertoire de travail /data
.Votre dossier hôte $(pwd)/data
sera monté et les images à l’intérieur seront accessibles.
Outils
De nombreux outils Linux et Windows différents sont installés.Les outils Windows sont pris en charge avec Wine.Certains outils peuvent être utilisés sur la ligne de commande tandis que d’autres nécessitent un support GUI!
Outils d’interface de ligne de commande
Ces outils peuvent être utilisés sur la ligne de commande.Tout ce que vous avez à faire est de démarrer un conteneur et de monter les fichiers de stéganographie que vous voulez vérifier.
Outils de dépistage général
Outils à exécuter au début.Vous permettent d’avoir une idée générale de ce à quoi vous avez affaire.
Outil | Description | Comment utiliser |
---|---|---|
file | Vérifier quel type de fichier vous avez | file stego.jpg |
exiftool | Vérifier les métadonnées des fichiers multimédias | exiftool stego.jpg |
binwalk | Vérifier si d’autres fichiers sont intégrés ou ajoutés | binwalk stego.jpg |
strings | Vérifier s’il y a des caractères lisibles intéressants dans le fichier | strings stego.jpg |
foremost | Carve out embedded/appended files | foremost stego.jpg |
pngcheck | Obtenir des détails sur un fichier PNG (ou découvrir qu’il est en fait autre chose) | pngcheck stego.png |
identify | Outil de GraphicMagick pour vérifier quel type d’image est un fichier. Vérifie également si l’image est corrompue. | identify -verbose stego.jpg |
ffmpeg | ffmpeg peut être utilisé pour vérifier l’intégrité des fichiers audio et le laisser rapporter les infos et les erreurs | ffmpeg -v info -i stego.mp3 -f null - . recoder le fichier et jeter le résultat |
Outils détectant la stéganographie
Outils conçus pour détecter la stéganographie dans les fichiers.La plupart effectuent des tests statistiques.Ils ne révèlent les messages cachés que dans des cas simples.Toutefois, ils peuvent fournir des indications sur ce qu’il faut rechercher s’ils trouvent des irrégularités intéressantes.
Outil | Types de fichiers | Description | Comment utiliser |
---|---|---|---|
stegoVeritas | Images (JPG, PNG, GIF, TIFF, BMP) | Une grande variété de contrôles simples et avancés. Vérifiez stegoveritas.py -h . Vérifie les métadonnées, crée de nombreuses images transformées et les enregistre dans un répertoire, Brute forces LSB, …. |
stegoveritas.py stego.jpg pour exécuter toutes les vérifications |
zsteg | Images (PNG, BMP) | Détecte divers LSB stego, également openstego et l’outil Camouflage | zsteg -a stego.jpg pour effectuer toutes les vérifications |
stegdetect | Images (JPG) | Fait des tests statistiques pour trouver si un outil stego a été utilisé (jsteg, outguess, jphide, …). Vérifiez man stegdetect pour plus de détails. |
stegdetect stego.jpg |
stegbreak | Images (JPG) | Craqueur de force brute pour les images JPG. Prétend qu’il peut craquer outguess , jphide et jsteg . |
stegbreak -t o -f wordlist.txt stego.jpg , utilisez -t o pour outguess, -t p pour jphide ou -t j pour jsteg |
Outils faisant réellement de la stéganographie
Outils que vous pouvez utiliser pour cacher des messages et les révéler après.Certains chiffrent les messages avant de les cacher.S’ils le font, ils exigent un mot de passe.Si vous avez un indice sur le type d’outil utilisé ou le mot de passe qui pourrait être le bon, essayez ces outils.Certains outils sont pris en charge par les scripts de force brute disponibles dans cette image Docker.
Outil | Types de fichiers | Description | Comment cacher | Comment récupérer |
---|---|---|---|---|
AudioStego | Audio (MP3. / WAV) | Des détails sur son fonctionnement sont dans ce billet de blog | hideme cover.mp3 secret.txt && mv ./output.mp3 stego.mp3 |
hideme stego.mp3 -f && cat output.txt |
jphide/jpseek | Image (JPG) | Pretty old tool from here. Ici, la version d’ici est installée puisque l’original plantait tout le temps. Il demande une phrase de passe de manière interactive! | jphide cover.jpg stego.jpg secret.txt |
jpseek stego.jpg output.txt |
jsteg | Image (JPG) | Outil stégoLSB. Ne crypte pas le message. | jsteg hide cover.jpg secret.txt stego.jpg |
jsteg reveal cover.jpg output.txt |
mp3stego | Audio (MP3) | Ancien programme. Chiffre et ensuite cache un message (chiffrement 3DES !). Outil Windows fonctionnant dans Wine. Nécessite une entrée WAV (peut jeter des erreurs pour certains fichiers WAV. ce qui fonctionne pour moi est par exemple : ffmpeg -i audio.mp3 -flags bitexact audio.wav ). Important : utilisez le chemin absolu seulement! |
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 | Images (PNG) | Divers algorithmes stégo LSB (consultez ce blog). Toujours maintenu. | openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png |
openstego extract -sf openstego.png -p abcd -xf output.txt (omettre -xf pour créer un fichier avec le nom original !) |
outguess | Images (JPG) | Utilise des « bits redondants » pour cacher des données. Existe en deux versions : old=outguess-0.13 prise ici et new=outguess issue des dépôts de paquets. Pour récupérer, vous devez utiliser celle utilisée pour la dissimulation. |
outguess -k password -d secret.txt cover.jpg stego.jpg |
outguess -r -k password stego.jpg output.txt |
spectrologie | Audio (WAV) | Encode une image dans le spectrogramme d’un fichier audio. | TODO |
Utiliser l’outil GUI sonic-visualiser |
stegano | Images (PNG) | Cache les données avec diverses méthodes (basées sur LSB). Fournit également quelques outils de dépistage. | stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png ou stegano-red hide --input cover.png -m "secret msg" --output stego.png ou stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png pour divers générateurs (stegano-lsb-set list-generators ) |
stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt ou stegano-red reveal -i stego.png ou stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt |
Steghide | Images (JPG, BMP) et Audio (WAV, AU) | Outil polyvalent et mature pour crypter et cacher des données. | 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 | Images (PNG) | LSB stego outil pour images | cloackedpixel hide cover.jpg secret.txt password crée cover.jpg-stego.png |
cloackedpixel extract cover.jpg-stego.png output.txt password |
LSBSteg | Images (PNG, BMP, …) dans des formats non compressés | Outils LSB simples avec un code Python très agréable et lisible | LSBSteg encode -i cover.png -o stego.png -f secret.txt |
LSBSteg decode -i stego.png -o output.txt |
f5 | Images. (JPG) | Algorithme stéganographique F5 avec des informations détaillées sur le processus | f5 -t e -i cover.jpg -o stego.jpg -d 'secret message' |
f5 -t x -i stego.jpg 1> output.txt |
stegpy | Images (PNG, GIF, BMP, WebP) et Audio (WAV) | Programme de stéganographie simple basé sur la méthode LSB | stegpy secret.jpg cover.png |
stegpy _cover.png |
Outils de stéganographie GUI
Tous les outils ci-dessous ont des interfaces graphiques et ne peuvent pas être utilisés par la ligne de commande.Pour les exécuter, vous devez rendre un serveur X11 disponible à l’intérieur du conteneur.Deux méthodes sont prises en charge :
- exécuter
start_ssh.sh
pour lancer un serveur SSH. Connectez-vous ensuite avec la redirection X11. Nécessite un serveur X11 sur votre hôte! - run
start_vnc.sh
pour lancer un serveur + client VNC. Connectez-vous ensuite avec votre navigateur au port 6901 et vous obtenez un bureau Xfce. Aucune dépendance de l’hôte!
Alternativement, trouvez d’autres moyens de rendre X11 disponible à l’intérieur du conteneur.De nombreuses façons différentes sont possibles (par ex, monter des sockets UNIX).
Outil | Types de fichiers | Description | Comment commencer |
---|---|---|---|
Steg | Images (JPG, TIFF, PNG, BMP) | Gère de nombreux types de fichiers et met en œuvre différentes méthodes | steg |
Steganabara (Le lien original est rompu) | Images ( ? ??) | Transformez interactivement les images jusqu’à ce que vous trouviez quelque chose | steganabara |
Stegsolve | Images ( ???) | Transformez interactivement les images, visualisez les schémas de couleurs séparément, …. | stegsolve |
SonicVisualiser | Audio ( ???) | Visualiser des fichiers audio en forme d’onde, afficher des spectrogrammes, …… | sonic-visualiser |
Stegosuite | Images (JPG, GIF, BMP) | Peut crypter et cacher des données dans des images. Activement développé. | stegosuite |
OpenPuff | Images, Audio, Vidéo (nombreux formats) | Outil sophistiqué avec une longue histoire. Toujours maintenu. Outil Windows fonctionnant dans le vin. | openpuff |
DeepSound | Audio (MP3, WAV) | Outil d’enregistrement audio fiable par Mr. Robot lui-même. Outil Windows fonctionnant dans wine (très hacky, nécessite VNC et fonctionne dans un bureau virtuel, MP3 cassé en raison d’une DLL manquante !) | deepsound uniquement dans une session VNC |
cloackedpixel-analyse | Images (PNG) | Visualisation du stégo LSB pour les PNG – utilisez-le pour détecter les valeurs LSB aléatoires suspectes dans les images (les valeurs proches de 0.5 peuvent indiquer que des données cryptées sont intégrées) | cloackedpixel-analyse image.png |
Scripts de dépistage
Plusieurs outils ci-dessus ne nécessitent pas d’interaction avec une interface graphique.Par conséquent, vous pouvez facilement automatiser certains flux de travail pour effectuer un dépistage de base des fichiers contenant potentiellement des messages cachés.Comme les outils applicables diffèrent selon le type de fichier, chaque type de fichier a des scripts différents.
Pour chaque type de fichier, il y a deux types de scripts:
-
XXX_check.sh <stego-file>
: exécute les outils de dépistage de base et crée un rapport (+ éventuellement un répertoire avec des rapports en fichiers) -
XXX_brute.sh <stego-file> <wordlist>
: essaie d’extraire un message caché d’un fichier stego avec divers outils en utilisant une liste de mots (cewl
,john
etcrunch
sont installés pour générer des listes – gardez-les petites).
Les types de fichiers suivants sont pris en charge :
- JPG :
check_jpg.h
etbrute_jpg.sh
(exécution brutesteghide
,outguess
,outguess-0.13
,stegbreak
,stegoveritas.py -bruteLSB
) - PNG :
check_png.h
etbrute_png.sh
(exécution bruteopenstego
etstegoveritas.py -bruteLSB
)
Génération de listes de mots
Les scripts de forçage brut ci-dessus ont besoin de listes de mots.Imho il sera très probablement pas utile d’utiliser d’énormes listes de mots standard comme rockyou.Les scripts sont trop lents pour cela et les défis stego ne semblent pas être conçus pour cela.Un scénario plus probable est que vous avez une intuition de ce que le mot de passe pourrait être mais que vous ne savez pas exactement.
Pour ces cas, plusieurs outils pour générer des listes de mots sont inclus :
- john : la version améliorée par la communauté de John the Ripper peut étendre vos listes de mots. Créez une liste de mots de base avec quelques mots de passe candidats et utilisez
john
pour créer de nombreuses variantes de ceux-ci. Utilisezjohn -wordlist:/path/to/your/wordlist -rules:Single -stdout > /path/to/expanded/wordlist
pour appliquer des règles étendues (~x1000)john -wordlist:/path/to/your/wordlist -rules:Wordlist -stdout > /path/to/expanded/wordlist
pour un jeu de règles réduit (~x50). - crunch : peut générer de petites listes de mots si vous avez un modèle en tête. Par exemple, si vous savez que les mots de passe se terminent par 1984 et font 6 lettres, l’utilisation de
crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984
générera les 26 * 26 = 676 mots de passe aa1984, ab1984, … jusqu’à zz1984. Le format estcrunch <min-length> <max-length> <charset> <options>
et nous avons utilisé l’option templating. Consultezless /usr/share/crunch/charset.lst
pour voir les jeux de caractères avec lesquels crunch est livré. - CeWL : peut générer des listes de mots si vous savez qu’un site web est lié à un mot de passe. Par exemple, exécutez
cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump
si vous soupçonnez qu’une photo de Donald Trump contient un message caché crypté. La commande scrape le site et extrait des chaînes de caractères d’au moins 8 caractères.
Exemples de stéganographie
L’image contient un échantillon d’image et un fichier audio chacun dans des formats différents :
/examples/ORIGINAL.jpg
/examples/ORIGINAL.png
/examples/ORIGINAL.mp3
/examples/ORIGINAL.wav
Il contient également un script /examples/create_examples.sh
que vous pouvez exécuter pour incorporer un message caché ( » Ceci est un message très secret ! ») dans ces fichiers avec de nombreuses méthodes différentes.Après avoir exécuté ce script, vous trouvez ces fichiers dans /examples/stego-files
avec leurs noms indiquant quel outil a été utilisé pour intégrer le message.Vous pouvez exécuter les scripts de dépistage pour voir s’ils trouvent quelque chose sur eux ou essayer de les casser autrement.
Ingénierie graphique et conteneurs
Par défaut, aucun outil d’interface graphique ne peut être exécuté dans un conteneur Docker car aucun serveur X11 n’est disponible.Pour les exécuter, vous devez changer cela.Ce qui est nécessaire pour le faire dépend de votre machine hôte.Si vous:
- exécutez sur Linux, vous avez probablement X11
- exécutez sur Mac OS, vous avez besoin de Xquartz (
brew install Xquartz
) - exécutez sur Windows, vous avez un problème
Utilisez la redirection X11 par SSH si vous voulez aller de cette façon. Exécutez start_ssh
à l’intérieur du conteneur pour démarrer le serveur, assurez-vous d’exposer le port 22 lors du démarrage du conteneur : docker run -p 127.0.0.1:22:22 ...
, puis utilisez ssh -X ...
lors de la connexion (le script imprime le mot de passe).
Pour ne pas dépendre de X11, l’image est livrée avec un serveur TigerVNC et un client noVNC.Vous pouvez l’utiliser pour ouvrir une session VNC HTML5 avec votre navigateur pour vous connecter au bureau Xfce des conteneurs. Pour cela, exécutez start_vnc.sh
à l’intérieur du conteneur pour démarrer le serveur et le client, assurez-vous d’exposer le port 6901 lors du démarrage du conteneur docker run -p 127.0.0.1:6901:6901 ...
et allez à localhost:6901/?password=<the_password>
(le script imprime le mot de passe).
Utiliser SSH avec X11 forwarding
Commandes dans le GIF pour copier &coller :
# 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
Utilisation du navigateur et du VNC
Commandes dans le GIF pour copier &coller:
# 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>
Collection de liens
C’est une collection de liens utiles sur la stéganographie:
- Vous devez être capable de repérer les codes. Jetez un coup d’œil à cette antisèche d’Eric Harshbarger, qui contient de nombreux codes différents.
- Assieure antisèche décrivant les flux de travail, les choses à rechercher et les outils courants : cliquez sur
- Guide CTF de la police scientifique avec beaucoup d’idées pour les défis stégo : cliquez sur
- Descriptions de formats de fichiers sous forme de belles affiches : cliquez sur
.