SSTIC 2011 - Virtualisation d'un poste physique depuis le boot


Virtualisation d’un poste physique depuis le boot

Ramooflax (déjà le nom de l’outil déchire !!!)… Vu qu’ils n’ont pas trouvé d’hyperviseur leur convenant… ils ont tout refait !

Avec une approche façon remote-debugging, un hyperviseur ultra-light basé sur les instructions spécialisés VT d’Intel ou AMD V… l’intérêt est de pouvoir virtualiser TOUT, BIOS compris… mais c’est un sacré challenge vu les différences entre les deux jeux d’instruction spécialisé (concurrence oblige, ils ne veulent pas être inter-opérables). Après il y a beaucoup de problèmes liés à la virtualisation matérielle (SMM, Mode réel 16bit des CPU Intel… encore le legacy, et une première forme de virtualisation matérielle comme le signale l’auteur).

S’en suit pas mal de détails techniques (si si) sur les techniques de virtualisation hardware et les problématiques de gestion des accès mémoire en mode réel… pour protéger l’hyperviseur / l’OS.

Là on découvre le mode irréel 16bit, un trick utilisé par les auteurs de BIOS, et qui n’est pas virtualisable avec les instruction VT (ça crash, Intel FAIL!) . Et donc dans les nouvelles génération des CPU Intel, ils ont ajouté un mode Unrestricted Guest pour pouvoir virtualiser ce mode réel correctement. Donc il faut du pure matos pour faire tourner ramooflax 🙂

Pour ce qui est du contrôle à distance de l’hyperviseur, il a fallu trouver un composant « universel » pour communiquer entre la machine de virtualisation et la machine de contrôle. L’USB est venu à leur rescousse, en utilisant les ports USB hybrides qu’on peut trouver sur les smartphones. L’interface à donc été développée à partir d’une carte de développement ARM et ils ont ensuite développé un stub GDB avec des extensions spécifiques pour Ramooflax pour faciliter l’analyse.

« On peut pas intercepter sysenter et sysexit chez Intel parce que c’est vraiment une bande de nazes » (lol)

Comme vous l’aurez compris, la présentation est très technique, c’est du haut vol ! coté démo, après les nains ASCII, on a le droit à 3 terminaux avec du scripting python pour manipuler ramooflax (cf screenshot) et une VM. Avec une démo ou on passe root sur la VM via un script python pour le fun ! Il est aussi possible de poser un breakpoint et de s’attacher a la VM sous IDA et de faire du debug pas à pas… (pour ceux que ça intéresse le code est par ici)

Bon par contre, quand on retire la clef, ça backlog sévère, mais ça marche 🙂 démonstration à l’appui.