Hi ! Un jour durant une épreuve de stégano je me suis dis qu'il manquait sur les internets un bon billet sur la stéganographie avec quelques conseils et tool's, alors ... voici la réponse :)
/!\ Cet article se complète avec celui sur le forensic /!\
La stéganographie c'est quoi ?
L'art de dissimuler de la data dans un fichier :
La cryptographie permet de protéger de une donnée par un code secret
La stéganographie permet de cacher cette donnée sans forcément la protéger
La méthodologie a énormément de variante tout se fait avec de l'imagination (et des compétences ;) ) En fait si vous voulez devenir un expert barbu dans ce domaine il vous faudra de la patience, du café, connaître beaucoup de format de fichier (notamment les images, vidéos, son de base) et de l'imagination.
Cela peut également se faire sur des simples textes , soyez attentifs, essayez plusieurs sens de lecture, analysez les mises en forme de texte ...
Un petit exemple :
filez droit
l'arme est votre savoir
après ça n'hésitez pas
gachez pas vos munitions !
ici ou la-bas
servez vous en pour le bien
kazakstan, france, angleterre
le principal c'est de s'entraider
finalement je finirais sur un seul mot
amour.
Vous n'avez rien remarqué ? vraiment ? Allons ... regardez bien ... sur la gauche ...
Pour les fichiers il existe de nombreuse méthode de dissimulation
Modifier des bits de couleur pour rendre indétectable à l’œil un message caché, cacher un fichier DANS un fichier, utiliser des métadonnées, la seule limite c'est l'imagination ...
Quelques outils incontournable :
Fichiers Audio
Sonic-Visualizer
Outil d'analyse de fichier audio (Utile pour afficher les spectogrammes)
Utilisation :
Audacity
Permet de manipuler des fichiers audio (Vitesse/sens lecture, spectre, ...)
ffmpeg
Permet de checker l'intégrité d'un fichier audio et reporter les infos et erreurs
ffmpeg -v info -i stego.mp3 -f null -
Audiostego (hideme)
Outil permettant de cacher/trouver de la donnée cachée dans un fichier WAV/MP3
https://github.com/danielcardeenas/AudioStego
hideme stego.mp3 -f && cat output.txt
FLAG{Steg01nmp3}
spectrology
Encoder une image dans un spectrogramme audio
https://github.com/solusipse/spectrology
python spectrology.py image.bmp -b 13000 -t 19000
mp3stego (Windows)
Outil permettant de cacher de la donnée dans un mp3 ou wav. Disponible sous Windows only
https://www.petitcolas.net/steganography/mp3stego/
Decode.exe -X Chall.wav -A
Input file = 'Chall.wav' output file = 'Chall.wav.aif'
Output file written in AIFF format
Will attempt to extract hidden information. Output: Chall.wav.txt
Enter a passphrase:
the bit stream file Chall.wav is a BINARY file
Decoding of "Chall.wav" is finished
The decoded PCM output file name is "Chall.wav.aif"
"Chall.wav.aif" has been written with AIFF header information
type Chall.wav.txt
FLAG{GG_Y0u_W1n}
WavePad
Permet d'effectuer plusieurs transformations sur le son et ses fréquences (Un des plus simple d'utilisation)
https://www.nch.com.au/wavepad/fr/index.html
QSSTV
Permet d'afficher le signal de transmission SSTV
Configuration -> Audio Input -> From File -> signals.wav
Fichiers Images
LSB-Steganographie
Outil permettant d'encoder/décoder de la data en modifiant les bits de couleur (LSB)
Download Here -> https://github.com/RobinDavid/LSB-Steganography
Utilisation :
$python2 LSB-Steganography/LSBSteg.py decode -i chall.png -o flag && cat flag
flag{you_own_me}
exiftool
Affiche les meta-données EXIF d'un fichier
Utilisation :
$exiftool file.jpg
File Size : 120 kB
File Modification Date/Time : 2018:03:09 22:08:42+01:00
Resolution Unit : inches
X Resolution : 96
Y Resolution : 96
XMP Toolkit : Image::ExifTool 10.63
Description : Tu es sur la bonne voie, continue !
Subject : Password
IPTC Digest : d41d8cd98f00b204e9800998ecf8427e
URL : aG9tZXIgc2ltcHNvbg==
....
Gimp / PhotoFiltre / Photoshop
Jouer avec les contrastes, couleurs peut quelques fois s'avérer utile
Exemple :
Steghide
Permet de dissimuler du texte dans un fichier (image ou son)
Utilisation :
$steghide extract -sf ch10.jpg
Entrez la passphrase:
écriture des données extraites dans "password.txt"
Convert
Outil pour convertir des formats d'image, manipuler les bits, pixel, ...
Utilisation:
$convert ch13.png ch13.jpg
$file ch13.*
ch13.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1000x1000, frames 3
ch13.png: PNG image data, 1000 x 1000, 8-bit/color RGB, non-interlaced
$convert ch13.jpg -resize 600x600 ch132.jpg
$file ch132.jpg
ch132.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 600x600, frames 3
Sng
Outil pour convertir des fichiers PNG au format SNG
Utilisation :
$sng -v ./ch12.png
sng: converting ./ch12.png to ./ch12.sng
Stegsolve
Permet de manipuler des images en fonction des pixels, filtres, ...
Download -> http://www.caesum.com/handbook/Stegsolve.jar
Utilisation :
identify
Permet de checker quel type d'image est-ce et également si l'image est corrompu.
identify image.png -verbose
image.png PNG 236x372 236x372+0+0 8-bit sRGB 176KB 0.000u 0:00.000
pngcheck
Permet d'obtenir les détails d'un fichier PNG (ou trouver si c'est un autre type de fichier)
pngcheck stego.png
stegoveritas
Outil disposant de nombreuses fonctionnalités : vérifier les métadonnées, créer de nombreuses images transformées, Brute forces LSB, ...
https://github.com/bannsec/stegoVeritas
python3 stegoveritas.py stego.jpg
...
Checking for trailing data
Discovered Trailing Data:
b'PK\x03\x04\x14\x00\x01\x08\x00\x00\x8c
...
Attempting to brute force LSB items
Trying 0.0.0
Trying 1.1.1
...
Found something worth keeping!
ISO-8859 text, with very long lines, with no line terminators
...
zsteg
Permet de détecter le type de stéganographie du fichier (LSB openstego, Camouflage ...)
https://github.com/zed-0xff/zsteg
zsteg -a stego.jpg #Effectuer tout les checks
imagedata .. text: "?@@322((&971"
b3,rgb,msb,xy .. file: AIX core file fulldump 64-bit
b4,b,msb,xy .. file: MPEG ADTS, layer I, v2, 24 kHz, Monaural
b5,b,lsb,xy .. file: MPEG ADTS, layer II, v1, JntStereo
b6,bgr,msb,xy .. file: MPEG ADTS, layer I, v2, Monaural
b7,bgr,lsb,xy .. file: , 48 kHz, Monaural
b8,b,msb,xy .. file: ddis/ddif
b8,rgb,lsb,xy .. file: AIX core file 64-bit
b8,rgb,msb,xy .. file: RDI Acoustic Doppler Current Profiler (ADCP)
b1,r,lsb,xy,prime .. file: AIX core file fulldump 64-bit
b6,rgb,msb,xy,prime .. file: MPEG ADTS, layer I, v2, Monaural
b7,rgb,lsb,xy,prime .. file: , 48 kHz, Monaural
b8,bgr,msb,xy,prime .. file: RDI Acoustic Doppler Current Profiler (ADCP)
b6,bgr,msb,yx .. file: MPEG ADTS, layer I, v2, Monaural
b7,bgr,lsb,yx .. file: , 48 kHz, Monaural
b8,rgb,msb,yx .. file: RDI Acoustic Doppler Current Profiler (ADCP)
b1,b,lsb,XY,prime .. text: "E|Sa?&A|"
b2,r,lsb,XY,prime .. file: AIX core file fulldump 32-bit
b2,g,lsb,Xy,prime .. file: AIX core file fulldump 64-bit
b1,r,lsb,xY,prime .. file: MPEG ADTS, layer II, v1, Monaural
b1,b,lsb,xY,prime .. file: AIX core file fulldump
b4,g,lsb,xY,prime .. file: AIX core file fulldump 64-bit
stegdetect
Effectue des tests statistiques pour déterminer si un outil stego a été utilisé jsteg, outguess, jphide, ...
stegdetect stego.jpg
stegbreak
Brute forcer pour JPG (Pour les méthodes outguess, jphide et jsteg)
stegbreak -t o -f wordlist.txt stego.jpg #pour methode outguess
stegbreak -t p -f wordlist.txt stego.jpg #pour methode jphide
stegbreak -t j -f wordlist.txt stego.jpg #pour methode jsteg
jphide / jpseek
Permet de dissimuler/extraire de la donnée cachée dans un JPG
http://linux01.gwdg.de/~alatham/stego.html
https://github.com/mmayfield1/SSAK
phide cover.jpg stego.jpg secret.txt #Cacher de la donnée
jpseek stego.jpg output.txt #Extraire de la donnée
jsteg
Permet de cacher / extraire via le LSB d'un JPG
https://github.com/lukechampine/jsteg
jsteg hide cover.jpg secret.txt stego.jpg #Cacher de la donnée
jsteg reveal cover.jpg output.txt #Extraire la donnée
openstego
Permet de manipuler le LSB (sous plusieurs algorithme) d'un PNG
https://github.com/syvaidya/openstego
openstego embed -mf secret.txt -cf cover.png -p password -sf stego.png #Cacher via le LSB
openstego extract -sf openstego.png -p abcd -xf output.txt #Extraire le LSB
outguess
Utilise la méthode des "bits redondants" pour masquer/extraire des données
outguess -k password -d secret.txt cover.jpg stego.jpg #Cacher secret.txt
outguess-extract -r -k password stego.jpg output.txt #Extraire le secret
stegano
Cacher/extraire de la donnée via LSB (Plusieurs methode) d'un fichier PNG
https://github.com/cedricbonhomme/Stegano
stegano-lsb hide --input cover.jpg -f secret.txt -e UTF-8 --output stego.png or stegano-red hide --input cover.png -m "secret msg" --output stego.png or stegano-lsb-set hide --input cover.png -f secret.txt -e UTF-8 -g $GENERATOR --output stego.png for various generators (stegano-lsb-set list-generators) stegano-lsb reveal -i stego.png -e UTF-8 -o output.txt or stegano-red reveal -i stego.png or stegano-lsb-set reveal -i stego.png -e UTF-8 -g $GENERATOR -o output.txt
cloackedpixel
Outil de manipulation LSB pour PNG
https://github.com/livz/cloacked-pixel
cloackedpixel hide cover.jpg secret.txt password creates cover.jpg-stego.png #
cloackedpixel extract cover.jpg-stego.png output.txt password
Fichiers Divers
pdf-parser
Utile pour parser/analyser des fichiers PDF (Sream, object, catalog, ...)
Utilisation:
$pdf-parser challenge.pdf
...
/Length 79749
/Type /Embeddedfile
/Filter /FlateDecode
/Params
<<
/Size 108542
/Checksum <565984bd9e2901248b5d8abfe174e2b1>
>>
/Subtype /text/plain
>>
obj 78 0
Type: /Filespec
Referencing: 77 0 R
<<
/F (Hidden_b33rs.txt)
/Type /Filespec
/EF
<<
/F 77 0 R
>>
>>
...
peepdf
Outil d'analyse de pdf (avec un mode interactif) Très utile pour tracer les liens des catalogues, stream, objects, ...
peepdf -f -i ctf.pdf #Pour lancer le mode interactif
PPDF> tree
/Page (3)
Unknown (2)
Unknown (4)
Unknown (8)
Unknown (5)
Unknown (9)
Unknown (11)
Unknown (6)
Unknown (16)
array (51)
/Annot (38)
/filespec (36)
stream (37)
/Page (3)
stream (45)
stream (46)
stream (47)
stream (48)
stream (49)
stream (50)
/Info (18)
stream (54)
PPDF> info 37
Offset: 1060
Size: 213
MD5: 27e3c9fcf632ccbb4b1651a5366d11ac
Object: stream
Stream MD5: d41d8cd98f00b204e9800998ecf8427e
Raw Stream MD5: f45bde9d9234535a8244fc528a428897
Length: 203
Encoded: Yes
Filters: /FlateDecode
Filter Parameters: No
Decoding errors: Yes
References: []
Parsing Errors: 1
stegsnow
Permet d'insérer de la donnée ASCII invisible dans du texte
stegsnow -C chall.txt
FLAGIS{GG}
Votre imagination
C'est surtout elle qui vous permettra trouver la donnée cachée
Un script d'installation des tools est disponible ici https://github.com/k-lfa/Linux-CTFtools