UEFI et bootkits PCI : le danger vient d’en bas

Publié le 06 Mai 2014 Mis à jour le 06 Mai 2014

Auteur : Pierre Chifflier. Dans le cadre des conférences SSTIC (Rennes, Juin 2013) et PacSec (Tokyo, Novembre 2013)

UEFI est une initiative qui vise à remplacer les BIOS traditionnels des architectures PC par un code logiciel disposant de nouvelles fonctionnalités, et pouvant être utilisé sur d'autres architectures. Les spécifications UEFI apportent de nombreuses fonctionnalités, et représentent un changement radical dans la vision du BIOS comme un composant minimal. Pourtant, il est fondamental de pouvoir avoir confiance en ce composant, ainsi que dans le matériel, pour assurer l'intégrité de tout ce qui sera ensuite exécuté.

Par ailleurs, la norme PCI a défini la possibilité d'ajouter des extensions aux périphériques connectés sur le bus PCI, pour pouvoir contenir du code logiciel qui étend les fonctionnalités du BIOS. Le support des extensions PCI a été intégré dans les spécifications UEFI, avec différents modes d'exécution.

Dans cet article, nous étudions dans quelle mesure les changements apportés par UEFI peuvent modifier les moyens disponibles pour un attaquant cherchant à élever ses privilèges. Nous verrons que, malgré les efforts de simplification et de clarification des fonctions apportées par UEFI, ces fonctions peuvent être détournées par un attaquant pour écrire un code malveillant évolué. Nous détaillons ensuite comment un attaquant pourrait concevoir une extension PCI malveillante, dont le code sera automatiquement chargé pendant la séquence de démarrage UEFI et qui résulte en la compromission du système d'exploitation. Nous étudions enfin les contre-mesures possibles permettant de prévenir de tels problème.