Date : 12/02/2019 - 18h
Présentation : disponible ici
Steganography ?
La steganographie est l’art de la dissimulation, son but est de faire passer un message de manière inaperçu dans un autre message. Ce dernier message doit être commun afin de ne pas attirer l’attention.
La stéganographie, souvent appelée stegano est une catégorie toujours présente en CTF. Connaître les bases de ce domaine est toujours une bonne chose.
Exemples
En CTF, on utilise souvent des images afin de cacher de l’information. Mais pas seulement, les flag peuvent aussi se cacher dans de nombreux supports, tels que des fichiers vidéos, des fichiers sons, ou des PDF par exemple.
Outils
strings
$ strings -a
# -a: look for strings in all sections of the object file (including the (__TEXT,__text) section
strings filename | awk 'length($0)>15' | sort -u
file
La commande file
est très utilisée en CTF, en effet elle permet de connaître le type de fichier auquel on a affaire. Parfois, les fichiers ont une extension erronée, ce qui nous empêche de les ouvrir normalement. Cette commande se base sur les premiers octets du fichier afin de déterminer le type de fichier. Ces premiers octets sont les magic numbers. Remplacer les premiers octets permet de très facilement changer la sortie de la commande file
.
Prenons par exemple un fichier .png
.
$ file image.png
image.png: PNG image data, 808 x 518, 8-bit/color RGBA, non-interlaced
Maintenant ajoutons les 20 premiers octets d’un fichier .pdf
au début du contenu de notre fichier .png
.
# notre png
$ file image.png
image.png: PNG image data, 808 x 518, 8-bit/color RGBA, non-interlaced
# notre pdf
$ file file.pdf
file.pdf: PDF document, version 1.3
# récupérer les 20 premiers octets du PDF
$ head -c 20 file.pdf > new_file
# concaténer l'image png
$ cat image.png >> new_file
# on se retrouve finalment avec un fichier pdf
# alors qu'une image se trouve dans la suite du fichier.
$ file new_file
new_file: PDF document, version 1.3
L’ajout de ces premiers octets a donc permis de cacher l’image PNG.
Une autre version consiste à concatainer plusieurs fichiers les uns à la suite des autres.
WordList
Une WordList est un fichier texte représentant un dictionnaire de mot de passe connu, probable ou même ciblé à la personne après l’étude de cette dernière. Elle permet de faire des attaques de mots de passe avec l’utilisation de cette liste afin d’éviter une fastidieuse et/ou infructueuse attaque par force brute. Rockyou.txt est un dictionnaire de mot de passe connu assez efficace pouvant être aisément télécharger.
# Rockyou.txt - Ubuntu :
# Télécharge la wordslist dans le dossier courant
$ wget "https://github.com/brannondorsey/naive-hashcat/releases/download/data/rockyou.txt"
# Rockyou.txt - Kali :
# Récupération de l'archive disponible
$ cp /usr/share/wordlists/rockyou.txt.gz .
# Extraction de la wordslist
$ gunzip rockyou.txt.gz
Steghide
L’outil Steghide est un programme de stéganographie capable de masquer des données dans divers types de fichiers image et audio. Les fréquences d’échantillonnage respectueuses de la couleur ne sont pas modifiées, ce qui rend l’incorporation résistant aux tests statistiques de premier ordre.
# Cacher un fichier dans une image protégée par un mot de passe
$ steghide --embed -ef flag.txt -cf example.jpg -e none -Z
Enter passphrase : password
Re-Enter passphrase : password
Stegcracker
Stegcracker** est un simple outil de brute force sur une image stéganographiée pouvant utiliser une WordList.
# Installation
$ sudo apt-get install steghide -y
$ sudo curl https://raw.githubusercontent.com/Paradoxis/StegCracker/master/stegcracker > /usr/local/bin/stegcracker
$ sudo chmod +x /usr/local/bin/stegcracker
# Attaque par dictionnaire sur une image
$ stegcracker image.jpg wordlist.txt
binwalk
$ man binwalk
tool for searching binary images for embedded files and executable code
Cet outil permet d’analyser un fichier donné en paramètre et de chercher toutes les en-têtes qui sont présentes dans le fichier. Cela permet de facilement connaitre les fichiers cachès dans d’autres.
# faire une analyse
$ binwalk ./new_file
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 PDF document, version: "1.3"
352729 0x561D9 PNG image, 808 x 518, 8-bit/color RGBA, non-interlaced
# -e: Automatically extract known file types
$ binwalk -e ./new_file # ou binwalk --dd=".*" ./new_file
...
Cette extraction va créer le nouveau dossier _new_file.extracted/
. Ce dernier contient tous les différents fichiers qui ont était éxtrait par binwalk
.
$ ls -al
drwxr-xr-x 5 user group 160 Feb 9 18:56 _new_file.extracted/
-rw-r--r--@ 1 user group 405617 Feb 9 18:41 new_file
$ cd _new_file.extracted/
$ ls -al
-rw-r--r-- 1 user group 396K Feb 9 18:56 0
-rw-r--r-- 1 user group 52K Feb 9 18:56 561D9
$ file 0
0: PDF document, version 1.3
$ mv 0 file.pdf
$ file 561D9
561D9: PNG image data, 808 x 518, 8-bit/color RGBA, non-interlaced
$ mv 561D9 file.png
On se retrouve donc au final avec un fichier PDF et une image png.
pngcheck
$ man imgcheck
Test PNG image files for corruption, display size, type, compression info
Cet outils permet de savoir si une image a été altérée, elle permet donc de facilement savoir si une image a été modifié pour ajouter d’autres données en plus, comme un flag par exemple.
$ pngcheck image.png
OK: ./a.png (808x518, 32-bit RGB+alpha, non-interlaced, 96.8%).
Lorsque l’on execute cette commande sur une image PNG classique, on nous indique que l’image n’a pas été altérée(OK
).
Prenons un exemple, ou nous allons ajouter un flag à la fin d’une image PNG.
$ cat image.png > a.png
$ echo 'CRYPTIS{yolo}' >> a.png
$ pngcheck a.png
./a.png additional data after IEND chunk
ERROR: ./a.png
On remarque facilement que l’image a donc été altérée. On peut donc commencer nos recherches sur cette dernière.
exiftool
$ man exiftool
Read and write meta information in files
Exiftool est une interface en ligne de commande utilisée pour lire et écrire des métadata. Les métadata sont des données servant à définir ou décrire une autre donnée quel que soit son support. Certaines images contiennent des métadonnées que vous pouvez lire pour déterminer les fonctionnalités de l’image et vous pouvez également écrire de nouvelles métadonnées.
# Supprimer metadata des photos du dossier courant
$ sudo apt-get install libimage-exiftool-perl
$ exiftool -all= *.jpg
# Connaître les métadonnées de l'image ciblée
$ exiftool example.jpg
$ exiftool example
ExifTool Version Number : 11.11
File Name : example.jpg
Directory : .
File Size : 1016 kB
File Modification Date/Time : 2019:02:12 10:56:08+01:00
File Access Date/Time : 2019:02:12 13:35:45+01:00
File Inode Change Date/Time : 2019:02:12 10:56:08+01:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
Comment : mon super commentaire # notre commentaire
Image Width : 3024
Image Height : 4032
Encoding Process : Baseline DCT, Huffman coding
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 3024x4032
Megapixels : 12.2
# ajouter des metadata
$ exiftool -comment="mon super commentaire" example.jpg
stegsolv
Outils qui permet d’analyser une image.
zsteg
Permet de détecter des infomrations su.
stegsnow
$ man stegsnow
stegsnow - whitespace steganography program
Permet de cacher des données en utilisant des caractères espace
.
Sonic Visualiser
Permet de réaliser des analyses spectrales de fichiers audio. On utilise souvent un Layer Spectrogram pour trouver des informations cachées. Disponible ici.
filetype ctf tools
Ex:
png ctf tools
orsound ctf tools