
Collection d'outils de stéganographie - aide pour les défis CTF
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 telles que hackthebox.eu. L'image est livré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écutez check_jpg.sh image.jpg pour obtenir un rapport pour un fichier JPG).
Commencez par vous assurer que Docker est installé (comment faire). Ensuite, vous pouvez utiliser les scripts shell bin/build.sh et bin/run.sh de ce dépôt pour construire l'image et exécuter le conteneur. Vous serez placé dans un shell bash à l'intérieur du conteneur. Le dossier data sera monté, dans lequel vous pourrez placer les fichiers à analyser.
Si vous n'utilisez pas les scripts, suivez ces étapes :
docker build -t <nom_image> .) ou tirez-la depuis Docker Hub (docker pull dominicbreuker/stego-toolkit)/data (docker run -it <nom_image> -v /dossier/local/avec/data:/data /bin/bash)check_jpg.sh image.jpg pour créer un rapport rapide, ou brute_jpg.sh image.jpg wordlist.txt pour tenter d'extraire des données cachées avec divers outils et mots de passestart_ssh.sh et connectez-vous à votre conteneur avec redirection X11start_vnc.sh et connectez-vous au bureau du conteneur via votre navigateurConsultez les sections suivantes pour plus d'informations :
Commencez avec docker run -it --rm -v $(pwd)/data:/data dominicbreuker/stego-toolkit /bin/bash. Vous serez placé dans un shell du conteneur dans le répertoire de travail /data. Votre dossier hôte $(pwd)/data sera monté et les images à l'intérieur seront accessibles.

De nombreux outils Linux et Windows sont installés. Les outils Windows sont supportés via Wine. Certains outils peuvent être utilisés en ligne de commande tandis que d'autres nécessitent une interface graphique !
Ces outils peuvent être utilisés en ligne de commande. Il vous suffit de démarrer un conteneur et de monter les fichiers de stéganographie que vous souhaitez vérifier.
Outils à exécuter au début. Ils vous permettent d'avoir une idée générale de ce à quoi vous avez affaire.
Outils conçus pour détecter la stéganographie dans les fichiers. Effectuent principalement des tests statistiques. Ils ne révéleront des messages cachés que dans des cas simples. Cependant, ils peuvent fournir des indices sur ce qu'il faut chercher s'ils trouvent des irrégularités intéressantes.
Outils que vous pouvez utiliser pour cacher des messages et les révéler ensuite. Certains chiffrent les messages avant de les cacher. S'ils le font, ils nécessitent un mot de passe. Si vous avez une idée du type d'outil utilisé ou du mot de passe possible, essayez ces outils. Certains outils sont supportés par les scripts de force brute disponibles dans cette image Docker.
Tous les outils ci-dessous ont des interfaces graphiques et ne peuvent pas être utilisés en ligne de commande. Pour les exécuter, vous devez rendre un serveur X11 disponible dans le conteneur. Deux méthodes sont supportées :
start_ssh.sh pour lancer un serveur SSH. Connectez-vous ensuite avec redirection X11. Nécessite un serveur X11 sur votre hôte !start_vnc.sh pour lancer un serveur VNC + client. Connectez-vous ensuite avec votre navigateur au port 6901 et vous obtenez un bureau Xfce. Pas de dépendances sur l'hôte !Sinon, trouvez d'autres moyens de rendre X11 disponible dans le conteneur. De nombreuses méthodes différentes sont possibles (par exemple, monter des sockets UNIX).
De nombreux 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 pouvant contenir des messages cachés. Étant donné que les outils applicables diffèrent selon le type de fichier, chaque type de fichier a ses propres scripts.
Pour chaque type de fichier, il existe deux sortes de scripts :
XXX_check.sh <fichier-stego> : exécute des outils de dépistage de base et crée un rapport (+ éventuellement un répertoire avec les rapports dans des fichiers)XXX_brute.sh <fichier-stego> <liste-de-mots> : tente d'extraire un message caché d'un fichier stego avec divers outils en utilisant une liste de mots (cewl, john et crunch sont installés pour générer des listes - gardez-les petites).Les types de fichiers suivants sont supportés :
check_jpg.sh et brute_jpg.sh (force brute exécutant steghide, outguess, outguess-0.13, stegbreak, stegoveritas.py -bruteLSB)check_png.sh et brute_png.sh (force brute exécutant openstego et stegoveritas.py -bruteLSB)Les scripts de force brute ci-dessus ont besoin de listes de mots. À mon avis, il est très peu probable qu'utiliser d'énormes listes de mots standard comme rockyou soit utile. Les scripts sont trop lents pour cela et les défis de stéganographie ne semblent pas conçus pour cela. Un scénario plus probable est que vous ayez une intuition de ce que pourrait être le mot de passe sans le connaître exactement.
Pour ces cas, plusieurs outils de génération de listes de mots sont inclus :
john pour créer de nombreuses variantes. Utilisez john -wordlist:/chemin/vers/votre/liste -rules:Single -stdout > /chemin/vers/liste_elargie pour appliquer des règles étendues (~ x1000) ; john -wordlist:/chemin/vers/votre/liste -rules:Wordlist -stdout > /chemin/vers/liste_elargie pour un ensemble de règles réduit (~ x50).crunch 6 6 abcdefghijklmnopqrstuvwxyz -t @@1984 générera les 26 * 26 = 676 mots de passe aa1984, ab1984, ... jusqu'à zz1984. Le format est crunch <longueur-min> <longueur-max> <jeu-de-caractères> <options> et nous avons utilisé l'option de modelage. Consultez less /usr/share/crunch/charset.lst pour voir les jeux de caractères fournis avec crunch.cewl -d 0 -m 8 https://en.wikipedia.org/wiki/Donald_Trump si vous soupçonnez qu'une image de Donald Trump contient un message caché chiffré. La commande extrait le site et extrait les chaînes d'au moins 8 caractères.L'image contient un exemple d'image et un fichier audio chacun dans différents formats :
/examples/ORIGINAL.jpg/examples/ORIGINAL.png/examples/ORIGINAL.mp3/examples/ORIGINAL.wavElle contient également un script /examples/create_examples.sh que vous pouvez exécuter pour intégrer un message caché ("This is a very secret message!") dans ces fichiers avec de nombreuses méthodes différentes. Après avoir exécuté ce script, vous trouverez ces fichiers dans /examples/stego-files avec des 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.
Par défaut, aucun outil 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 ce faire dépend de votre machine hôte. Si vous :
brew install Xquartz)Utilisez la redirection X11 via SSH si vous voulez emprunter cette voie. Exécutez start_ssh dans le 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 affiche 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 du conteneur. Pour ce faire, exécutez start_vnc.sh dans le 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=<le_mot_de_passe> (le script affiche le mot de passe).

Commandes dans le GIF pour copier-coller :
# dans le 1er shell hôte
docker run -it --rm -p 127.0.0.1:22:22 dominicbreuker/stego-toolkit /bin/bash
# dans le shell du conteneur
start_ssh.sh
# dans le 2ème shell hôte (utilisez-le pour lancer des applications graphiques ensuite)
ssh -X -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost

Commandes dans le GIF pour copier-coller :
# dans le 1er shell hôte
docker run -it --rm -p 127.0.0.1:6901:6901 dominicbreuker/stego-toolkit /bin/bash
# dans le shell du conteneur
start_vnc.sh
# dans le navigateur, connectez-vous avec : http://localhost:6901/?password=<mot_de_passe_de_start_vnc>
Voici une collection de liens utiles sur la stéganographie :
Les fichiers multimédias d'exemple suivants sont inclus dans ce dépôt :
| Outil | Description | Comment l'utiliser |
|---|
| file | Vérifier de quel type de fichier il s'agit | file stego.jpg |
| exiftool | Vérifier les métadonnées des fichiers multimédia | exiftool stego.jpg |
| binwalk | Vérifier si d'autres fichiers sont intégrés/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 | Extraire les fichiers intégrés/ajoutés | foremost stego.jpg |
| pngcheck | Obtenir des détails sur un fichier PNG (ou découvrir s'il s'agit en fait d'autre chose) | pngcheck stego.png |
| identify | Outil GraphicMagick pour vérifier de quel type d'image il s'agit. 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 lui faire rapporter des informations et des erreurs | ffmpeg -v info -i stego.mp3 -f null - pour remcoder le fichier et jeter le résultat |
| Outil | Types de fichiers | Description | Comment l'utiliser |
|---|
| stegoVeritas | Images (JPG, PNG, GIF, TIFF, BMP) | Une grande variété de vérifications simples et avancées. Consultez stegoveritas.py -h. Vérifie les métadonnées, crée de nombreuses images transformées et les enregistre dans un répertoire, attaque par force brute LSB, ... | stegoveritas.py stego.jpg pour exécuter toutes les vérifications |
| zsteg | Images (PNG, BMP) | Détecte diverses stéganographies LSB, ainsi que openstego et l'outil Camouflage | zsteg -a stego.jpg pour exécuter toutes les vérifications |
| stegdetect | Images (JPG) | Effectue des tests statistiques pour déterminer si un outil de stégo a été utilisé (jsteg, outguess, jphide, ...). Consultez man stegdetect pour plus de détails. | stegdetect stego.jpg |
| stegbreak | Images (JPG) | Craqueur par force brute pour les images JPG. Prétend pouvoir casser 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 |
| 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) | Outil assez ancien provenant d'ici. Ici, la version d'ici est installée car l'originale 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 de stéganographie LSB. Ne chiffre pas le message. | jsteg hide cover.jpg secret.txt stego.jpg | jsteg reveal cover.jpg output.txt |
| mp3stego | Audio (MP3) | Ancien programme. Chiffre puis cache un message (chiffrement 3DES !). Outil Windows fonctionnant sous Wine. Nécessite une entrée WAV (peut générer des erreurs pour certains fichiers WAV. Ce qui fonctionne pour moi par exemple : ffmpeg -i audio.mp3 -flags bitexact audio.wav). Important : utilisez uniquement des chemins absolus ! | mp3stego-encode -E secret.txt -P motdepasse /chemin/vers/cover.wav /chemin/vers/stego.mp3 | mp3stego-decode -X -P motdepasse /chemin/vers/stego.mp3 /chemin/vers/out.pcm /chemin/vers/out.txt |
| openstego | Images (PNG) | Divers algorithmes de stéganographie LSB (consultez ce blog). Toujours maintenu. | openstego embed -mf secret.txt -cf cover.png -p motdepasse -sf stego.png | openstego extract -sf openstego.png -p abcd -xf output.txt (omettez -xf pour créer un fichier avec le nom d'origine !) |
| outguess | Images (JPG) | Utilise les "bits redondants" pour cacher des données. Existe en deux versions : ancienne = outguess-0.13 tirée d'ici et nouvelle = outguess des dépôts de paquets. Pour récupérer, vous devez utiliser celle utilisée pour cacher. | outguess -k motdepasse -d secret.txt cover.jpg stego.jpg | outguess -r -k motdepasse stego.jpg output.txt |
| spectrology | Audio (WAV) | Encode une image dans le spectrogramme d'un fichier audio. | TODO | Utilisez l'outil graphique sonic-visualiser |
| stegano | Images (PNG) | Cache des 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 "message secret" --output stego.png ou stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATEUR --output stego.png pour différents 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 $GENERATEUR -o output.txt |
| Steghide | Images (JPG, BMP) et Audio (WAV, AU) | Outil polyvalent et mature pour chiffrer et cacher des données. | steghide embed -f -ef secret.txt -cf cover.jpg -p motdepasse -sf stego.jpg | steghide extract -sf stego.jpg -p motdepasse -xf output.txt |
| cloackedpixel | Images (PNG) | Outil de stéganographie LSB pour images | cloackedpixel hide cover.jpg secret.txt motdepasse crée cover.jpg-stego.png | cloackedpixel extract cover.jpg-stego.png output.txt motdepasse |
| 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 'message secret' | 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 |
| Outil | Types de fichiers | Description | Comment le démarrer |
|---|
| Steg | Images (JPG, TIFF, PNG, BMP) | Gère de nombreux types de fichiers et implémente différentes méthodes | steg |
| Steganabara (Le lien original est cassé) | Images (???) | Transformer des images de manière interactive jusqu'à trouver quelque chose | steganabara |
| Stegsolve | Images (???) | Transformer des images de manière interactive, visualiser les schémas de couleurs séparément, ... | stegsolve |
| SonicVisualiser | Audio (???) | Visualiser des fichiers audio sous forme d'onde, afficher des spectrogrammes, ... | sonic-visualiser |
| Stegosuite | Images (JPG, GIF, BMP) | Peut chiffrer et cacher des données dans des images. Développé activement. | stegosuite |
| OpenPuff | Images, Audio, Vidéo (nombreux formats) | Outil sophistiqué avec une longue histoire. Toujours maintenu. Outil Windows fonctionnant sous wine. | openpuff |
| DeepSound | Audio (MP3, WAV) | Outil audio stéganographique de confiance par M. Robot lui-même. Outil Windows fonctionnant sous wine (très bancal, nécessite VNC et s'exécute dans un bureau virtuel, MP3 cassé à cause d'une DLL manquante !) | deepsound uniquement dans une session VNC |
| cloackedpixel-analyse | Images (PNG) | Visualisation de la stéganographie LSB pour les PNG - utilisez-le pour détecter des valeurs LSB suspectement aléatoires dans les images (des valeurs proches de 0,5 peuvent indiquer que des données chiffrées sont intégrées) | cloackedpixel-analyse image.png |