Ce référentiel contient le cadre utilisé pendant nos travaux sur l'ingénierie inverse du microcode des processeurs AMD K8 et K10. Il comprend un assembleur et un désassembleur ainsi que des exemples de programmes mis en œuvre à l'aide de ces outils. Nous fournissons également notre système d'exploitation minimal écrit personnalisé qui peut rapidement appliquer et tester les mises à jour du microcode sur les processeurs AMD.
Les fichiers fournis ici proviennent de la recherche et sont censés être utilisés à des fins de recherche uniquement. Ils sont compilés avec seulement des connaissances partielles sur les internes de la microarchitecture et peuvent contenir des bogues ainsi qu'un comportement involontaire. Tous les fichiers sont fournis tels quels sans aucune garantie et support. Nous n'assumons aucune responsabilité pour leur utilisation.
L'ensemble d'instructions x86 est complexe et contient de nombreuses instructions héritées uniquement pour la compatibilité arrière. Ainsi, les instructions rarement utilisées ou complexes sont décodées dans les logiciels, tandis que les instructions critiques des performances sont gérées par des décodeurs matériels. Indépendamment d'être décodés par le matériel ou les logiciels, les instructions sont finalement traduites par un autre ensemble d'instructions nommé RISC86, qui a une longueur d'instructions fixe et est adapté au traitement rapide et superscalar. Outre le décodage du logiciel, le microcode peut être utilisé pour désactiver les fonctionnalités de processeur défectueux et gérer les exceptions au niveau le plus bas.
Le contenu de ce référentiel reflète les résultats pratiques de notre effort de recherche. Les détails sont donnés dans nos papiers:
Microcode de processeur ingénieur de l'ingénierie inverse publié dans les actes du 26e Symposium de sécurité Usenix
Une analyse exploratoire du microcode en tant que bloc de construction pour les défenses du système publié dans les actes de la 25e conférence ACM sur la sécurité informatique et communications
Le dossier USENIX17 contient les résultats de notre article USENIX 2017, surtout les mises à jour et les déclencheurs de nos preuves de concepts ainsi qu'un pilote de mise à jour permettant de charger des mises à jour arbitraires sur un système Linux. De plus amples détails sont donnés dans le fichier ReadMe correspondant.
Notre système d'exploitation minimal est contenu dans le dossier Angry_OS. Pour plus de détails sur la façon de créer et d'utiliser ce système, consultez le fichier ReadMe dans ce dossier.
Le cadre que nous avons utilisé pendant notre travail se trouve dans le dossier ucodeapi. Pour des exemples sur la façon dont cette API est utilisée, consultez l'exemple de scripts fournis dans ce dossier. L'API n'est testée que sous Python 2.
Le dossier «études de cas» contient les études de cas présentées dans notre article CSS 18 sous forme RTL.