La stéganographie
Lors d’un concours de sécurité des systèmes d’informations, j’ai été confronté à une épreuve intéressante. Elle reflète bien l’utilisation d’une simple technique de stéganographie qui consiste à camoufler et faire passer inaperçu un message dans un autre message.
Dans cette épreuve, il fallait précisément trouver le message caché dans cette image :

Curieux, vous ne trouvez pas ? Je vous assure il y a bien un message caché dans cette image.
A propos de l’image
L’image carrée est composée de pixels (1600px sur 1600px). Les pixels sont regroupés dans une sorte de grille de 16×16 par couleurs (variations de jaune/orange).
A première vue, il n’y a aucun texte dans l’image même ni dans les propriétés du fichier.
Tests
J’ai décidé d’ouvrir un éditeur d’image et d’utiliser l’outil “Pipette” pour effectuer un prélèvement de couleur. J’ai commencé par la première ligne et j’ai déjà constaté la quantité de bleu (73).

En parcourant la première ligne de pixels du fichier mosaic.png, je remarque que la quantité de bleu varie entre environ 60 et 90. Les autres valeurs (rouge, vert) ne semblent pas importantes.
La table ASCII

Tout de suite après, je fais le lien avec la table ASCII. Je me demande si la composante B qui représente la quantité de bleu ne correspond pas à un nombre de ce tableau et qui composerait un texte. Par exemple, 73 pour “I“, 65 pour “A“. Finalement, je pense pouvoir trouver un résultat de cette manière. Malheureusement le faire à la main prendrait un peu trop de temps.
Mon premier essai n’était pas concluant lorsque je prenais le pixel tout en haut à gauche (0,0) dans le groupe de pixel, j’ai ensuite choisi celui du milieu (50,50) et le résultat était bien plus satisfaisant.
Automatisation
J’ai choisi un langage de programmation que je considère adapté pour ce type de problème : Python. La librairie PIP/Pillow est idéale pour manipuler des images. J’ai donc écrit ces quelques lignes de Python pour extraire automatiquement le message du fichier mosaic.png
Je l’exécute ensuite afin d’obtenir le résultat suivant :

Voilà, le flag pour valider cette épreuve est RICK_LOV3_B0RSCH
! A vous de jouer.
Cet article a été écrit comme solution pour le concours Juniors CTF. Le but est de démontrer ce qu’on peut faire dans le domaine de la stéganographie.