Question:
Des outils automatisés pour la rétro-ingénierie des formats de fichiers?
Brendan Dolan-Gavitt
2013-03-27 22:17:59 UTC
view on stackexchange narkive permalink

Existe-t-il des outils disponibles pour aider à automatiser le processus de rétro-ingénierie des formats de fichiers? En particulier, je suis intéressé par les outils qui utilisent l'analyse dynamique d'une application pour analyser le format, et moins intéressé par la visualisation ou les outils de type éditeur hexadécimal (par exemple, 010 Editor).

Il existe de la littérature académique sur le sujet:

Est-ce que tout cela a été mis en pratique?

Trois réponses:
#1
+9
0xC0000022L
2013-03-27 23:58:38 UTC
view on stackexchange narkive permalink

Vous n'indiquez pas le but. Si vous voulez bien comprendre le format et pas seulement automatiser certains aspects initiaux de l'analyse, il sera très difficile de trouver un outil suffisamment générique. C'est à cela que servent les langages spécifiques au domaine et les outils extensibles (éditeur 010, langages de script). Je ne connais aucun outil qui «ferait tout» pour le moment.

Des outils tels que 010 Editor fournissent en fait des informations supplémentaires utiles comme un histogramme (donnant des indices sur l'entropie, la compression / cryptage) et vous donner les modèles binaires pour affiner de plus en plus vos connaissances sur le format de fichier. L'aspect le plus ennuyeux est la limitation des scripts et le fait que vous ne pouvez pas, par exemple, écrire des plugins (imaginez pouvoir décompresser bzip2 ou dégonfler des flux et autres, quelque chose de communément trouvé mais pas du tout pris en charge par 010 Editor). L'un des principaux problèmes avec moi et l'éditeur 010 a été que j'ai atteint certaines limites syntaxiques des modèles binaires pour exprimer quelque chose de vital et que j'ai dû contourner cela de manière étrange (les struct paramétrés étant un problème majeur ), bien que ce soit exactement le problème qu'il essaie de résoudre avec son propre DSL. Je pense que nous avons désespérément besoin d'une solution FLOSS (et je cherchais en fait à Lua izing frhed à un moment donné).

A le format de fichier peut être sous une couche de cryptage ou de compression et qui peut être séparé par section du fichier, et non par fichier. Il pourrait y avoir plusieurs couches. Bien que je ne veuille pas aller jusqu'à dire qu'il est tout à fait impossible de proposer quoi que ce soit de ce genre, il y a une raison pour laquelle l'IDA est interactive , par exemple. Dans la plupart des tâches RCE, même les meilleures heuristiques ne peuvent remplacer les compétences et l'expérience d'un ingénieur inverse chevronné. Par expérience, j'appliquerais la même chose à l'ingénierie inverse des formats de fichiers.

Moi aussi, j'ai inversé certains formats de fichiers et j'utilise généralement une combinaison d'écriture d'un analyseur dans un langage de script d'une part et d'écriture d'un modèle binaire pour 010 Editor d'autre part. Ce dernier offre une bonne solution de secours, car même si l'analyse échoue, je peux y aller, enquêter sur ce qui se passe, ajuster et réexécuter. Faire mousser, rincer, répéter ... vous voyez l'idée.

Le plus grand défi de loin était de découvrir les aspects les plus obscurs tels que les entiers encodés en 24 bits, parfois LSB et parfois MSB en premier, les dates, les arbres basé sur xor ing deux index d'ailleurs, quelques bits étant utilisés d'un octet et quelques-uns d'un autre ayant une signification particulière ... ce truc. Et je ne peux vraiment pas imaginer comment vous pourriez combler ces lacunes sans rétro-ingénierie du code en lisant / en écrivant le format à l'origine. Faute de documentation / standard, c'est la meilleure référence que vous ayez.

De plus, ne sous-estimez pas la puissance de la visualisation. Bien sûr, un seul angle, tel qu'un histogramme, ne fournit que peu d'informations. Mais il existe de nombreux algorithmes intéressants à appliquer aux données inconnues et à voir les structures.

Je devrais clarifier: je ne cherche pas quelque chose qui automatise * tout * - comme vous le dites, un outil comme l'IDA serait le meilleur. Mais il y a beaucoup de place à l'amélioration entre entièrement manuel et entièrement automatisé. Même un outil qui vient d'annoter un fichier avec le code qui a analysé chaque plage d'octets serait extrêmement précieux.
@BrendanDolan-Gavitt: Je suis totalement d'accord. Hélas, je n'en connais aucun. Cela dépendrait de l'architecture et de plus de la plate-forme pour avoir du sens. Je pourrais, cependant, imaginer que quelque chose comme ça existe pour analyser la sortie de `strace`, par exemple.
Je tiens également à ajouter que je n'écarte certainement pas la visualisation; J'ai fait un peu de travail dans ce sens [ici] (http://amnesia.gtisc.gatech.edu/~brendan/hal_mixed_annotated.pdf) et [ici] (http://amnesia.gtisc.gatech.edu /~brendan/hal_dbi.pdf). Ce sont deux parties du format de fichier PDB, et il est très utile de voir visuellement les modèles d'accès pour avoir une idée de l'emplacement des limites de la structure.
#2
+2
joxeankoret
2013-03-27 22:52:09 UTC
view on stackexchange narkive permalink

L'académie est très éloignée de l'industrie, qui a toujours plusieurs années d'avance. Je pense qu'il n'y a rien de «magique» à faire de l'ingénierie inverse des formats de fichiers. En effet, j'ai inversé différents formats de fichiers et la première fois que j'ai fait cela, j'ai essayé de trouver s'il y avait un tel outil. Mais il n'y avait rien à ce moment-là et je ne pense pas qu'il y ait quoi que ce soit aujourd'hui.

Il est possible d'écrire un outil qui détecte «automatiquement» certains modèles et crée une structure initiale sur laquelle commencer à travailler sans avoir besoin de partir de zéro mais je pense que rien d'autre n'existe.

C'est dommage s'il n'y a pas d'outils - je peux penser à beaucoup d'automatisation qui serait très utile, surtout si nous apportons une analyse de flux de données! Peut-être une autre chose à ajouter à ma liste de choses à faire ...
#3
+2
0xea
2013-03-28 02:28:25 UTC
view on stackexchange narkive permalink

Ce n'est pas une réponse directe à votre question, mais je suppose que cela pourrait vous aider.

Il y a eu plus de tentatives d'analyse de protocoles réseau inconnus et je suppose que certaines idées et techniques pourraient être appliquées à l'analyse de formats de fichiers inconnus. Certains de ces articles sont:

Il existe également un outil Netzob:

Netzob est un outil open source pour le reverse engineering, la génération de trafic et le fuzzing des protocoles de communication. Il permet de déduire le format du message et la machine d'état d'un protocole à travers des processus passifs et actifs. Le modèle peut ensuite être utilisé pour simuler un trafic réaliste et contrôlable.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...