SSTIC 2010 - Mercredi après-midi : 2ème Conf

VirtDBG

par Damien Aumaitre et Christophe Devine

Une petite introduction très rapide sur les debugger existants pour expliquer l’origine de virtdbg. Le debug noyau pose pas mal de problèmes sous 7 notamment à cause de patchguard ou de la signature obligatoire des drivers. Pour contourner ce dernier, l’utilisation de la virtualisation s’avère nécessaire. Pour pouvoir faire un debuggeur distant, il faut pouvoir communiquer avec l’exterieur, l’idée consiste à utiliser les accès DMA qui permettent d’accéder à la mémoire physique (présenté en 2009 au SSTIC) pour échanger les informations et piloter le débuggeur comme un stub GDB.

Le gros avantage par rapport à un debugger ring 0 c’est que l’on peut scripter les traitements lourds coté distant, et la virtualisation permet d’intervenir sur des éléments sensibles du noyau.

Coté hardware, c’est une carte PCMCIA avec un FPGA qui communique sur le bus PCI (comme l’an dernier) et qui est relié en USB à la machine de contrôle du debuggeur. La carte FPGA contient un processeur MIPS avec un espace mémoire partitionné. On peut ainsi implémenter des attaques mémoire ou des fonctions de debug avec quelques lignes de C.

La présentation est rapide et très dense techniquement. Coté démo, il faut charger l’hyperviseur « quand patchguard ne regarde pas » 🙂 Comme c’est un stub GDB, Virtdbg s’interface avec metasm (so sexy) même si ce dernier a cafouillé pendant la démo :’)

Pour ceux que ça intéresse, le code sera releasé en GPL.