Ressources CTF
L’une des astuces de stéganographie les plus courantes consiste à masquer un fichier à l’intérieur d’une image. Le fichier s’ouvrira normalement en tant qu’image, mais contiendra également des fichiers cachés à l’intérieur, généralement zip, texte et même d’autres fichiers image.
La raison pour laquelle cela fonctionne est que lorsqu’un fichier image est lu, il a des octets de début et de fin dictant la taille de l’image. La visionneuse d’images que vous utilisez utilisera les informations entre ces octets pour vous présenter une image, en ignorant tout après l’octet de fin.
Par exemple, l’octet de fin pour un JPEG est FF D9 en hexadécimal, donc en utilisant une visionneuse hexadécimale (xxd est bon pour Linux, ou quelque chose comme HxD pour Windows), vous pouvez savoir où se termine l’image. Ces octets sont parfois difficiles à trouver dans une mer de nombres, donc regarder le vidage de l’hexadécimal (le texte représentant les octets hexadécimaux) peut également vous aider à trouver caché.txt ou.fichiers zip.
Exemple
Une implémentation très simple de cette stratégie est utilisée dans l’exemple.fichier jpg dans ce répertoire. Si vous l’enregistrez sur votre ordinateur et l’ouvrez avec une visionneuse d’images, une simple image jpg devrait vous être présentée.
Essayons maintenant de trouver le drapeau. Ouvrez l’image dans votre éditeur hexadécimal préféré et commencez à chercher quelque chose d’étrange (vous pouvez trouver le drapeau lui-même dans le vidage à ce stade, mais par exemple, essayez de l’extraire). Au bas du fichier, vous devriez voir l’octet de fin d’un jpg ffd9
:
01e17a0: 685c 7fab 8eb4 5b32 61f1 c4ff d950 4b03 h\....[2a....PK.
Une autre partie importante de cette ligne est le PK
près de la fin. PK
sont les initiales de Phil Katz, l’inventeur du fichier zip, et indiquent qu’un fichier zip commence à ce moment-là.
En utilisant ces informations, nous pouvons utiliser un autre outil linux pratique, dd
). La commande dd
est très polyvalente et permet la copie et la conversion d’une multitude de fichiers. Dans notre cas, nous allons l’utiliser pour extraire le fichier zip.
Nous savons où se trouve l’emplacement du fichier zip, mais dd
ne prend que des valeurs décimales, nous convertissons donc l’emplacement hexadécimal 0x01e17ad de hexadécimal en décimal pour obtenir 1972141.
Brancher ceci dans dd:
dd if=example.jpg bs=1 skip=1972141 of=foo.zip
Cela prend l’exemple de l’image.jpg, le « fichier in » si, lit un bloc à la fois, « taille de bloc » bs, passe au bloc 1972141, saute et l’écrit dans le zip du « fichier out » que nous appelons foo.zip. Une fois cela terminé, vous devriez avoir un fichier zip que vous pouvez facilement décompresser pour accéder au fichier texte à l’intérieur.
C’est le long chemin pour résoudre un problème de stéganographie simple mais montre comment fonctionne la stratégie. Dans la section Résolution, des méthodes plus concises et efficaces sont décrites.
Détection
Ces défis sont généralement présentés comme une simple image sans autre instruction, et il appartient au concurrent de l’exécuter via un éditeur hexadécimal pour savoir s’il s’agit de stéganographie. Si une image vous est présentée sans instructions, votre pari le plus sûr est que quelque chose est caché après les balises de fermeture de l’image.
Résolution
Bien qu’il soit possible et parfois pratique de résoudre ces tâches en utilisant des outils Linux comme dd
, certains outils le rendent beaucoup plus facile. Binwalk
est un outil extrêmement utile qui détecte et extrait automatiquement les fichiers cachés avec des outils de stéganographie
Exemple CTF
La stéganographie de ce type n’est généralement pas très notée mais est décemment répandue. BackdoorCTF 2014 en a créé un qui est généralement simple, exemple ctf.jpg, mais implique plusieurs couches.
XXD
HxD
DD
Binwalk