Le détournement du microcode des processeurs AMD K8
Date : 20 Juin 2005
La dernière génération des processeurs AMD (génération "K8", des processeurs 64 bits "Athlon-64" et "Opteron") implémente pour la première fois chez AMD la fonctionnalité de mise à jour du microcode du processeur. Le microcode est un code exécuté à l'intérieur même du processeur afin de réaliser des opérations complexes en combinant des opérations élémentaires codées au niveau "hardware" du processeur (ce principe d'opérations élémentaires combinables a été initialement mis en œuvre par les processeurs "à jeu réduit d'instruction" : "RISC").
La mise à jour du microcode permet de modifier à posteriori le comportement d'un processeur. Elle est conçue avant tout pour pallier aux défauts de conception du processeur. Par exemple, s'il s'avère après coup que l'enchaînement de certaines fonctions "hardware" provoque une erreur du processeur (du fait d'une erreur de conception dans le "masque" du processeur), ce problème peut être résolu en remplaçant certaines instructions "hardware" par du microcode. Sur les plates-formes "x86" ("INTEL" et "AMD"), la mise à jour du microcode d'un processeur se fait au moyen du BIOS de l'ordinateur. Lorsque le concepteur d'un processeur souhaite diffuser une mise à jour du microcode, il délivre ce microcode au fabricant de BIOS qui diffusent une mise à jour du BIOS contenant ce nouveau microcode. A chaque démarrage de l'ordinateur, le BIOS, installe ensuite le microcode qu'il a stocké dans sa "flash ROM"sur le processeur.
La fonction de mise à jour du microcode existe depuis longtemps chez INTEL (elle est apparue avec les processeurs "Pentium Pro" et "Pentium II"). Une polémique importante avait éclatée alors (en 1997), car les experts se demandaient si des pirates ne pourraient pas installer leur propre microcode sur une machine compromise, et implémenter ainsi de nouveaux "Op. code" assembleur permettant de déclencher la destruction du processeur, ou la prise de contrôle de la machine. La réponse d'INTEL (cf. l'article "EETime" cité dans la rubrique "Pour plus d'information") était alors de dire que de telles attaques étaient impossibles car :
- Le microcode stocké en "flash ROM" est chiffré, et seul le concepteur du processeur peut générer une mise à jour chiffrée qui sera acceptée par le processeur.
- Le fonctionnement interne du processeur (microcode), et le mécanisme de mise à jour du microcode est "ultra secret" et non documenté. Le "reverse engineering" du processeur est donc "impossible".
Chez AMD, la fonction de mise à jour du microcode est apparue avec la génération "K7" (processeurs "Athlon"), mais elle n'a jamais pu être utilisée car elle était "boguée". Cette fonction n'est donc réellement opérationnelle que depuis la génération des processeurs "K8". AMD a d'ailleurs récemment publié un "BIOS fix" pour mettre à jour le microcode des processeurs "K8".
Un chercheur a saisi cette opportunité pour analyser la fonction de mise à jour du microcode AMD. Son étude montre que :
- Dans le cas d'AMD (et contrairement à INTEL), il semble n'y avoir aucun mécanisme de chiffrement du microcode stocké dans la flash ROM du BIOS. N'importe qui peut donc développer son propre microcode, et celui-ci sera accepté par le processeur.
- La procédure de mise à jour du microcode peut être "reverse engineerée". L'auteur de l'étude propose d'ailleurs un code C (une "exploit") permettant de réaliser soit même une mise à jour du microcode des processeurs K8.
Il en résulte donc que, dans le cas des processeurs AMD, une corruption du microcode K8 par un pirate est tout à fait possible. Pour réaliser ce type d'attaque, le pirate doit tout d'abord être "root" (ou "SYSTEM" sous Windows) sur la machine. L'opération de mise à jour du microcode est alors assez facile (des "drivers" existent sous Linux pour le faire), mais il faudra la réaliser à nouveau après chaque redémarrage de l'ordinateur (ou alors inscrire le nouveau microcode dans la flash ROM du BIOS). La réelle difficulté réside en fait dans la mise au point du microcode lui-même. Cette difficulté rend les attaques de ce type peu probable, hormis peut-être dans le cas ou le but cherché serait simplement de détruire le processeur. Nous ne doutons pas non plus que AMD renforcera, pour les processeurs des générations suivantes, la robustesse co ntre les attaques de son mécanisme de mise à jour de microcode.
Pour plus d'information
- "Opteron exposed : Reverse Engineering AMD K8 Microcode Update" : http://www.packetstormsecurity.nl/0407-exploits/OpteronMicrocode.txt
- Article de "EETimes" sur le danger des mise à jour de microcode sur processeur INTEL : http://www.eetimes.com/news/97/963news/hole.html