SSTIC 2013 - UEFI et bootkits pci
par Pierre Chifflier
(edit: slides)
Utiliser la carte graphique pour cacher un bootkit, c’est de la science fiction d’après certains, et l’orateur a accepté le challenge. Bon dans une carte graphique, l’expansion ROM, elle est très petite donc il faut bien tasser le code. Et c’est pas évident d’y accéder. « J’ai appelé ça la route du ROM ». donc dès qu’on à réussi à topper l’expansion ROM, il faut la modifier, faire du « ROM arrangé ». Normalement depuis l’OS, on ne voit pas la vraie expansion ROM pour des raisons de sécurité.
Les outils employés sont complexes, vim + gcc, DXE (SDK pour l’expansion ROM), et cat pour patcher… mais c’est la galère. L’attaque materielle se fait via l’exécution des bonnes commandes pour venir patcher l’expansion ROM. Sauf que si vous vous ratez, le pc il boot plus parce que vous avez foiré votre carte graphique… or pour patcher l’expansion ROM bah… faut booter. (c’est balot)
Après il faut jongler avec les différents composantes du boot, uefi, bootloader, puis boot machine pour reprendre la main après chaque phase du boot, ce qui est loin d’être trivial. Coté patching noyau, l’orateur à choisi de patcher fork pour passer root à chaque fois qu’on l’appelle. Fork n’est jamais appellé parceque la libc utilise clone pour forker.
Pour lutter contre les bootkits UEFI, il existe plusieurs solutions dont TPM mais c’est loin d’être parfait. L’autre c’est secureboot mais c’est optionnel et ya des problèmes de gestion d’autorité avec des clefs de « test » qui ont été perdues. C’est dommage, les protections existent mais elle sont mal implémentés.