Mot-clé - File Carving

Fil des billets - Fil des commentaires

mardi, septembre 29 2009

Le fond de la trousse à outil de papy

J'avais initié il y a un moment une série de billets sur les outils que j'aime bien et que j'utilise en sécurité et/ou bidouillages puis j'y ai repensé cet après midi en me disant que, depuis cet éclaireur, je n'avais pas donné suite...Le temps est donc venu de parler de deux ou trois autres outils bien pratiques !

Tools - Creative Common by mtneer_man on Flickr

L'outil central de ce post sera tcpflow :) ! Cette superbe commande sert à reconstituer le contenu brut des sessions TCP capturées (en live ou dans un fichier pcap). Il prend donc en argument une interface réseau (ou un fichier pcap) puis il génère, pour chaque session TCP, un fichier qui contient les données brutes qui ont transitées dans le flux TCP en question (en bref il supprime les en-têtes IP, il ordonne les paquets TCP, supprime les en-têtes TCP, et sauvegarde bout à bout le contenu complet de la session ainsi allégé). Les fichiers générés suivent une convention de nommage intuitive de type "IP1 PORT1 IP2 PORT 2" et vous pouvez donc assez facilement retrouver celui que vous voulez. A quoi ça sert me direz vous ? A tout ce que vous pouvez imaginer, mais comme je suis beau joueur (et bavard) je vous donne quelques exemples :

Un scénario d'utilisation simple consisterai à sniffer une session FTP et à vouloir récupérer les fichiers qui ont été téléchargées. Grâce à tcpflow c'est simple comme "bonjour" ! Vous lancez tcpflow et il va vous créer un fichier par session TCP sniffée. Vous allez donc avoir un fichier qui contient les commandes et réponses qui ont transitées par la session TCP de controle FTP (à destination du port 21 du serveur), et un fichier pour chaque autre session TCP. Si vous connaissez un peu le protocole ftp vous savez que les autres sessions TCP contiennent précisément chacune le contenu d'un fichier téléchargé, et que donc le fichier généré par tcpflow est l'image exacte du fichier qui a été téléchargé :) ! Job's done.

Second scénario d'utilisation simple : vous sniffez du traffic HTTP. Premier réflexe pour "gratter" des trucs intéressants : urlsnarf, voir carrément dsniff. C'est pas mal, mais si j'ai envie de récupérer les images, voir les animations flash[1] comment pourrais-je faire pour extraire simplement ces fichiers de la bouillie informe d'un pcap qui contient pèle mèle les en-têtes IP et TCP et ne garantie en rien l'ordre de lecture des paquets ? Aussi compliqué que ça puisse paraitre c'est en fait presque immédiat avec tcpflow :) ! En lançant tcpflow vous obtiendrez un fichier par session TCP, si vous êtes en HTTP/1.0 vous obtenez donc un fichier dump par fichier ayant réellement transité en HTTP. Seul problème : ces fichiers contiennent les en-têtes HTTP...et si par malheurs vous êtes en HTTP/1.1 c'est encore pire : un seul fichier de session généré par tcpflow peut contenir plusieurs fichiers téléchargés en HTTP les uns à la suite des autres, avec des en-têtes HTTP intercalés dans tout ça...Donc on s'est bien débarassé des en-têtes IP, on s'est bien débarassé des en-têtes TCP, on a bien réordonné les paquets avant d'en coller le contenu bout à bout, mais il nous reste les en-têtes HTTP. C'est là qu'un petit effort de mémoire devient utile pour trouver une bidouille sale mais qui marche : foremost :) ! Pour rappel foremost extrait des fichiers à partir de suite d'octets bruts en se basant sur du pattern matching de header et de footer, foremost permet donc bien d'extraire les fichiers à partir des dump générés par tcpflow en ne faisant pas attention aux headers HTTP (testé et approuvé) ! Alors, bien sur, c'est un petit peu "sale" comme méthode, et vous raterez pas mal de fichiers (typiquement ceux qui transitent compressé puisque foremost ne sait pas les reconnaitre), mais ça a au moins l'avantage de marcher super vite pour récupérer la majeure partie de ce qui a transité :) ! De plus cette méthode est adaptable, en remplaçant foremost par un gentil petit photorec par exemple, qui a le bon gout de récupérer plus de type de fichiers que foremost (un jour il faudra vraiment que je le teste quand même...).

Dernier scénario où tcpflow peut s'avérer salutaire : si vous avez un pentest à faire sur une application client-serveur et que vous réussissez à récupérer une trace réseau. Dans ce cas là pensez à faire un petit tcpflow, ça vous permettra d'analyser tranquillement les informations qui transitent entre le client et le serveur sans avoir à vous encombrer des couches réseau basses. A la base c'est même pour ça que tcpflow a été écrit il me semble : pour faciliter la rétro-ingénierie des protocoles obscurs.

Bref vous l'aurez compris : tcpflow est un outil très pratique, et vu qu'en plus il est très léger et rapide ça serait vraiment dommage de s'en priver.

Notes

[1] pour éventuellement en extraire la bande son, la convertir en mp3, et la sauvegarder conformément à l'exception aux droits d'auteurs et droits voisins au nom de la copie privé

samedi, juillet 18 2009

Le bon ouvrier possède de bons outils

Hop, j'inaugure un nouveau type de post dans lequel je présente l'un des outils qu'il m'arrive d'utiliser en sécurité informatique et/ou que j'aurai aimé connaitre à un certain moment de ma vie. Pour ce premier article du genre je vais vous présenter "foremost", un outil de forensic (d'où l'image d'illustration que j'ai choisi).

Grave - Creative Common by "buschap" on Flickr

foremost

Laissez moi vous raconter une petite histoire : il y a bien longtemp il est arrivé à ma copine de l'époque de graver toutes ses photos de vacances sur un DVD, puis de les effacer de son disque dur et de vider la corbeille afin de gagner de la place sur le disque. Seulement voilà : une fois les photos définitivement supprimées du disque dur impossible de lire le DVD ! Il refusait d'être reconnu sur son ordinateur, sur le mien, et sur le lecteur de salon...Je ne vous raconte pas le désespoir dans ses petits yeux à ce moment là :(

Etant du genre persévérant (et sous linux) j'ai tenté un petit "dd"[1] du DVD incriminé dans un fichier sur mon disque dur, puis j'y ai jeté un oeil "à l'arrache" (i.e. : "string | less"[2] ) et j'y ai vu des séquences qui ressemblaient furieusement à ce qu'on trouve dans des en-têtes de fichiers JPG...Ni une ni deux je dégaine mes outils préférés de l'époque (à savoir VIM et GCC) et je pond un petit parser en C qui tente de repérer les en-têtes des images et des vidéos puis d'extraire les octets qui suivent pour recréer les fichiers illisibles du DVD. C'est ainsi que pendant les 2h qui ont suivi la constatation de la perte des fichiers sur le DVD je me suis retrouvé à faire des "trucs cabalistiques" [3]. Et finalement, au bout de tout ce travail, petit moment de gloire quand j'ai finalement lancé un "startx" afin d'exhiber toutes les photos et vidéos que l'on croyait perdues mais que j'avais quand même réussi à récupérer "par magie" :) !

Et bien j'ai découvert, des années après, que des petits malins avaient codé sensiblement le même outil, mais sérieusement et proprement :) ! Le nom de ce petit outil c'est "foremost", il fait la même chose que ma bidouille en C (à savoir chercher des en-têtes connues dans de la donnée brute puis reconstruire le fichier) mais lui il gère un nombre impressionant de format de fichier différents (contre juste "JPEG" et "MOV" pour mon vieil outil) et il est truffé de petites options qui le rendent terriblement efficace et tout terrain. Bref : un véritable régal pour récupérer des fichiers effacés (par erreur ou pas ;) ).

Cerise sur le gateau : il est sous license GNU, vous pourrez donc en profiter avec un simple "aptitude install foremost", et il est également par défaut sur backtrack 3. Mauvaise nouvelle par contre : sur ma gentoo le package est vieux et cassé, donc si vous ne voulez pas utiliser de ~x86 sur ce paquet oubliez tout de suite le "emerge foremost" qui vous est venu à l'esprit et allez plutôt récupérer les sources pour le compiler vous même.

Petite ouverture en guise de conclusion : foremost cherche les header mais également les footer, et en fait cette stratégie de récupération de fichier s'appelle le "File Carving". Cette stratégie est d'ailleurs assez répandue et il existe pas mal de soft de ce type, la star de la famille étant en ce moment "photorec". En deux mots photorec gère plus de type de fichiers que foremost (pour n'en citer qu'un : bz2), en revanche il n'est pas inclu dans backtrack3 par défaut (ou alors j'ai mal cherché) et il se trouve dans un paquet avec un nom à la c*n sur gentoo : testdisk.

Notes

[1] Comande de copie bas niveau, un must à connaitre absolument

[2] Ouais, à l'époque je m'y connaissais encore moins que maintenant en forensic lol.

[3] il faut bien avouer que du point de vue d'une windowsienne qui n'a jamais programmé : coder du C sous VIM sans interface graphique, ça fait étrange