Aller au contenu
Korben, roi d’internet, logo bébé avec des lunettes en mode thug life

PMCMA – Le générateur d’exploits

Après une démo à la dernière Blackhat, les petits gars de Toucan System, une boite de sécurité informatique de Chamalières (yeah !), viennent de sortir leur debuggeur pour Linux baptisé PMCMA.

PMCMA ça veut dire Post Memory Corruption Memory Analysis. Derrière ce nom barbare se cache en fait un outil capable d’exploiter un bug dans un logiciel, plus précisément un accès invalide en mémoire, et d’écrire de manière automatisé un exploit pour celui-ci.

Ce genre d’exploit accompagné d’un rapport de debug permettra aux développeurs de mettre plus facilement le doigt sur le problème. Mais si vous êtes un simple utilisateur d’application et que vous avez prévenu telle ou telle société de le présence d’un bug dans leur application, un petit PoC (Proof of Concept) comme ceux générés par PMCMA permettra de leur faire prendre conscience peut être un peu plus rapidement qu’il y a un vrai problème à corriger d’urgence.

Enfin, comme le disent les gens de Toucan System dans leur FAQ, ça peut aussi servir aux scripts kiddies qui le souhaitent d’aller encore plus vite en prison 😉

Voici le texte de présentation de l’outil en français :

Pmcma est un outil GNU/Linux permettant de déterminer si un bug donné est une faille de sécurité en cherchant à écrire un exploit pour celle ci de manière largement automatisée. Il fonctionne pour l’heure sur les microprocesseurs Intel x86 et x86_64.

Plus précisément, dans le cas de corruptions mémoires entrainant un accès invalide en écriture à une adresse mémoire donnée (du fait d’un dépassement de tampon dans une zone inscriptible quelconque par exemple, ou encore du fait d’un integer overflow ou encore d’une chaine de format manquante), l’écriture d’un exploit dépend de la capacité d’un attaquant à écraser un pointeur vers une fonction qui sera ensuite exécuté, afin de détourner le flot d’exécution vers un code arbitraire.

Or, trouver ces pointeurs vers des fonctions est dans la pratique une tâche excessivement compliquée et particulièrement longue. En effet, les debuggers actuels ne sont pas adaptés à cette tâche : le « single stepping » n’est pas possible sur des applications excédant quelques milliers de lignes de code, et l’analyse statique donne de très mauvais résultats (tous les pointeurs sur fonction ne sont pas effectivement exécutés durant l’execution d’un chemin donné, sans même parler de la difficulté à déterminer ceux qui le sont dans des librairies).
Pour palier à ces difficultés, pmcma permet désormais d’effectuer toutes ces étapes de « reverse engineering » de manière totalement automatisée.

Pour ce faire, lors d’un accès invalide en mémoire, pmcma utilise une technique entièrement nouvelle, qui consiste à injecter un shellcode minimal dans le processus, de manière à l’obliger à forker un grand nombre de fois. Dans chacun des processus ainsi créés (qui sont en tout point identiques au processus original, tant du point de vue de l’agencement des sections en mémoire, de leurs permissions, que du point de vue de l’état des variables et autres zones inscriptibles au moment du crash – données globales des librairies en particulier), pmcma modifie alors une adresse mémoire différente avec une valeur « canari » (par exemple 0xf1f2f3f4, qui pointe vers une adresse du noyau sur tous les processeurs Intel x86 et n’est donc pas executable depuis l’userland – ring 3), supprime le signal 11 que le processus original aurait du recevoir, puis continue l’execution de chacun des processus fils. Si d’aventure l’un de ces processus devait exécuter l’adresse correspondant à la valeur du canari, alors un pointeur vers une fonction effectivement utilisé vient d’être trouvé.

Pmcma est également capable de fournir une métrique de répétabilité de l’attaque relatif à l’ASLR (méchanisme dit de « randomisation » de l’espace d’adressage, présent sur tous les systèmes d’exploitation modernes).

bhus_2011_brossard

Les sources sont disponibles sous license open source Apache 2.0. Vous trouverez plus d’infos sur http://www.pmcma.org et plus de détails techniques ici.

Merci à Jonathan Brossard, le papa de PMCMA pour les détails.


Les articles du moment