THMag 03/Challenge beemeal

Un article de HackaWiki.

(Des précisions sur les modalités du concours sont données sur le forum)


Sommaire

La situation

Des hackers americains se sont vu confier la tache d'analyser des fichiers joints avec des emails a destination de certaines personnes suspectes. Or il s'avère que tous les fichiers joints etaient de vulgaires images au format bmp et que les emails etaient toujours vides par ailleurs (hormi l'attachement bien sur).

Après analyse par les meilleurs spécialiste du reverse engineering il s'avère que chaque image contenait un fichier caché a l'intérieur. Apres de nombreuses recherches, ils ont découvert que les fichiers cachés dans les images ont ete insérées a l'aide d'un outil appelé "beemeal" qui tourne sous Windows...

Or le comble c'est que les fichiers, une fois extraits, ne ressemblent a rien. En fait beemeal possede un double mecanisme d'encryption qui empeche l'acces au fichier original par une personne non autorisée. L'enjeu étant de tailles, no reversers se sont attelés a la tache, et certains d'entre eux ont reussi a décrypter les fichiers insérés dans les images et ont ainsi pu confier les documents decryptés aux autorites compétentes.

La France n'a pas été mise a contribution mais on pourrais imaginer qu'elle l'ait été vu que le niveau des reversers Francais n'a rien a envier a celui de nos amis d'outre atlantique.

Cet article présente donc le contexte du défi relevé par ces hackers afin que les reversers Francais puissent eux aussi exercer leurs talents.

Petit rappel historique

De tout temps les hommes, pour des raisons diverses, souvent militaires ou stratégiques d'ailleurs, ont cherché a communiquer en toute confidentialité. Cette confidentialité est obtenue de nos jours par différentes méthodes parmis lesquelles nous pouvons citer les protocoles cryptographiques, les architectures a clé publiques, la stéganographie, etc...

La stéganographie est l'art de cacher un fichier dans un autre sans altérer l'integrité du fichier d'origine, le fichier a cacher pouvant etre quelconque, le fichier "hote" pouvant virtuellement lui aussi etre quelconque. Si la stéganographie est bien faite, le fait qu'il existe un fichier dans le fichier hote est insoupconable sans outil d'analyse. En l'occurence si l'on a un programme qui insere un fichier dans une image il faut que l'oeil humain ne puisse pas détecter la difference entre l'image originale et l'image contenant le fichier stéganographié.


Niveau de confidentialité

Le probleme de la stéganographie pure est son faible niveau de confidentialité, en effet si l'on dispose de l'outil ayant servi a l'insertion, ainsi que de l'image steganographiée, alors il est on ne peut plus facile d'extraire le fichier caché dans l'image (bien sur il faut quand meme soupconner que le fichier en contient un autre, et aussi trouver l'outil qui a servi a l'insertion du fichier afin de l'extraire. D'ou l'avènement de la stégano-cryptographie: non seulement le fichier hote contient une fichier, mais meme en possedant cette image steganographiée ainsi que le programme d'insertion/extraction, il est difficile de retrouver le fichier original qui peut etre a la fois crypté et protegé par password.


Beemeal: outil de stégano-cryptographie

Beemeal (qui signifie "secret" en Coréen) est un éxécutable win32 permettant d'insérer/extraire n'importe quel type de fichier dans un fichier qui doit etre un fichier au format bmp, ayant une profondeur de couleur d'au moins 24 bits afin que l'insertion dans le fichier hote soit indétectable a l'oeil nu.

Le fichier inséré dans l'image est protégé par un double mécanisme:

  • par un fichier clé servant a l'encryptage, ce fichier ayant pour taille minimale

de 1024 octets, on l'appellera le "keyfile".

  • par une passphrase (password potentiellement constitué de plusieurs mots)

ayant une longeur minimale de 256 octets.

La présence de ce double mécanisme est justifié par le fait que meme si le fichier keyfile ayant servi a l'encryptage est découvert, une personne non habilitée ne pourra pas retrouver le fichier inséré s'il ne possède pas la bonne passphrase.

Le challenge

On dispose des éléments suivants:

  • une image dont on sait qu'elle a ete stéganographiée avec beemeal.
  • un version de beemeal qui permet l'extraction d'un fichier inséré auparavant dans une image. Cette version de l'éxécutable n'est pas packée/cryptée si bien qu'il est très facile de la désassembler.

Il faut procéder par étape, chaque étape correspond a un niveau de difficulté croissant. Par conséquent il faut impérativement valider l'étape n avant de passer a l'étape n+1.


Fichiers

Les fichiers nécessaires se trouvent dans cette archive : http://www.thehackademy.net/~dvup/ChallengeBeemeal.zip


Etape 1: extraire le fichier contenu dans l'image

Niveau: très facile

Connaissances nécéssaires: aucune

Description: correspond a la prise en main de l'outil beemeal pour réaliser l'extraction du fichier de l'image, le fichier ainsi obtenu etant crypté, il sera inutilisable dans l'état, mais le decryptage fera l'objet de l'etape 4 et 5.


Etape 2: retrouver l'algorithme d'insertion/extraction

Niveau : facile

Connaissances nécéssaires :

  • assembleur
  • format des fichiers BMP.

Description : la methode utilisée pour stéganographier est relativement simple, le but de cette étape est d'analyser le code de beemeal et écrire en pseudo-code (ou en C) les algorithmes qui permettent l'insertion et l'extraction d'un fichier dans une image


Etape 3: retrouver les algorithmes d'encryption

Niveau : moyen

Connaissances nécéssaires : assembleur

Description : l'algorithme de cryptage/décryptage est d'une importance capitale pour pouvoir éspérer retrouver le fichier original. le but de cette étape est d'analyser le code de beemeal et écrire en pseudo-code (ou en C) les algorithmes qui permettent l'encryptage/décryptage du fichier inséré dans l'image.


Etape 4: développer une méthode pour decrypter le fichier

Niveau : difficile

Connaissances nécéssaires :

  • assembleur ou C ou C++ (ou tout autre langage)
  • algorithmique
  • calcul réparti

Description : une fois que les étapes 1 a 3 ont ete éffectuées avec succès, on a la situation suivante:

  • la prise en main de l'outil beeemeal est effectuée
  • l'algorithme d'insertion/extraction du fichier dans l'image est compris et exprimé en pseudo-code ou C.
  • les algorithmes de cryptage/decryptage sont compris et exprimés en pseudo-code ou C.

A partir de la, libre au candidat de développer ses propres outils, avec le langage et l'OS de son choix, afin de décrypter tout ou partie du document inséré dans l'image.

Cela peut evidemment aussi etre un travail d'équipe.

Etape 5: décrypter le fichier extrait de l'image

Niveau : difficile

Cette étape peut paraitre inutile puisqu'on pourrais l'intégrer a l'étape 4, cependant il convient de rester prudent du moment que l'on a affaire a un probleme difficile, et comme en génie logiciel lors de l'étude de faisabilite, le travail de recherche d'une méthode de résolution ou bien d'un algorithme se doit d'etre décorrellé des moyens techniques disponible pour réaliser ce dernier. Pour expliciter cela je donnerais un simple exemple: on peut prouver par une demonstration mathematique qu'un ordinateur pourrais jouer aux échecs sans jamais perdre, les algorithmes qui permettent a l'ordinateur de faire bonne figure aux échecs existent, cependant avec les moyens de calcul actuels, ces algorithmes mettraient plusieurs millions d'annees de calcul par coup, ce qui est tout pour le moins embètant. Pour résumer, avoir trouvé un algorithme correct pour résoudre un probleme ne garantie en aucune facon que cet algorithme donnera le résultat escompté dans une enveloppe de temps/ressources raisonnable.

Outils conseillés

wdasm32, Ida Pro freeware, ollydbg, winhex, format de fichiers BMP.