Dieses Repository enthält das Framework, das während unserer Arbeit an der Reverse Engineering The Microcode von AMD K8 und K10 CPUs verwendet wird. Es enthält einen Assembler und ein Disassembler sowie ein Beispielprogramme, die mit diesen Tools implementiert sind. Wir bieten auch unser benutzerdefiniertes schriftliches minimales Betriebssystem an, das mikrocode -Updates für AMD -CPUs schnell anwenden und testen kann.
Die hier bereitgestellten Dateien stammen aus der Forschung und sollen nur für Forschungszwecke verwendet werden. Sie werden nur mit teilweisen Kenntnissen über die Interna der Mikroarchitektur zusammengestellt und können sowohl Fehler als auch unbeabsichtigtes Verhalten enthalten. Alle Dateien werden wie ohne Gewährleistungen und Unterstützung bereitgestellt. Wir übernehmen keine Verantwortung oder Haftung für die Verwendung von ihnen.
Der X86 -Befehlssatz ist komplex und enthält viele ältere Anweisungen, die nur für die Rückwärtskompatibilität aufbewahrt werden. Daher werden selten verwendete oder komplexe Anweisungen in Software dekodiert, während leistungskritische Anweisungen von Hardware -Decodern behandelt werden. Unabhängig davon, dass sie durch Hardware oder Software dekodiert werden, werden die Anweisungen letztendlich in einen anderen Befehlssatz mit dem Namen RISC86 übersetzt, der eine feste Anweisungslänge aufweist und für die schnelle, superzalare Verarbeitung geeignet ist. Neben der Software -Dekodierung kann Mikrocode verwendet werden, um defekte Prozessormerkmale zu deaktivieren und Ausnahmen auf der niedrigsten Ebene zu verarbeiten.
Der Inhalt dieses Repositorys spiegelt die praktischen Ergebnisse unserer Forschungsanstrengungen wider. Details finden Sie in unseren Papieren:
Reverse Engineering X86 -Prozessor -Mikrocode, das im Proceedings des 26. Usenix Security Symposium veröffentlicht wurde
Eine explorative Analyse von Microcode als Baustein für Systemverteidigungen, die in den Proceedings der 25. ACM -Konferenz über Computer- und Kommunikationssicherheit veröffentlicht wurden
Der Ordner Usenix17 enthält die Ergebnisse unseres Usenix 2017-Papiers, vor allem die Updates und Auslöser für unsere Proof-of-Concepts sowie ein Update-Treiber, das es beliebige Aktualisierungen ermöglicht, auf einem Linux-System geladen zu werden. Weitere Details finden Sie in der entsprechenden Readme -Datei.
Unser minimales Betriebssystem ist im Ordner Angry_os enthalten. Weitere Informationen zum Erstellen und Verwenden dieses Systems finden Sie in der Readme -Datei in diesem Ordner.
Das Framework, das wir während unserer Arbeit verwendet haben, finden Sie im Ordner UCODEAPI. Beispiele dafür, wie diese API verwendet wird, finden Sie in den Beispielskripten in diesem Ordner. Die API wird nur unter Python 2 getestet.
Der Ordner "Fallstudien" enthält die in unserem CSS 18 -Papier in RTL -Form vorgestellten Fallstudien.