Este repositorio contiene el marco utilizado durante nuestro trabajo en ingeniería inversa El microcódigo de las CPU AMD K8 y K10. Incluye un ensamblador y un desmontador, así como programas de ejemplo implementados utilizando estas herramientas. También proporcionamos nuestro sistema operativo mínimo escrito personalizado que puede aplicar rápidamente y probar actualizaciones de microcódigos en las CPU AMD.
Los archivos provistos aquí se originaron a partir de la investigación y están destinados a ser utilizados solo para fines de investigación. Se compilan con solo un conocimiento parcial sobre las partes internas de la microarquitectura y pueden contener errores, así como un comportamiento no deseado. Todos los archivos se proporcionan como es sin garantías y soporte. No asumimos ninguna responsabilidad o responsabilidad por el uso de ellos.
El conjunto de instrucciones X86 es complejo y contiene muchas instrucciones heredadas solo guardadas para la compatibilidad con atraso. Por lo tanto, las instrucciones raramente utilizadas o complejas se decodifican en el software, mientras que las instrucciones críticas de rendimiento son manejadas por decodificadores de hardware. Independientemente de ser decodificados por hardware o software, las instrucciones finalmente se traducen a otro conjunto de instrucciones llamado RISC86, que tiene una longitud de instrucción fija y es adecuada para un procesamiento rápido y superscalar. Además, se puede utilizar el microcódigo de decodificación de software para deshabilitar las características defectuosas del procesador y manejar excepciones en el nivel más bajo.
El contenido de este repositorio refleja los resultados prácticos de nuestro esfuerzo de investigación. Los detalles se dan en nuestros documentos:
Ingeniería inversa X86 Microcódigo del procesador publicado en las actas del 26º Simposio de Seguridad de Usenix
Un análisis exploratorio de Microcode como bloque de construcción para las defensas del sistema publicado en las Actas de la 25ª Conferencia ACM sobre seguridad de la computadora y comunicaciones
La carpeta USENIX17 contiene los resultados de nuestro documento USENIX 2017, lo más importante es que las actualizaciones y desencadenantes para nuestros conceptos de prueba de conceptos, así como un controlador de actualización que permite que se carguen actualizaciones arbitrarias en un sistema de Linux. Se dan más detalles en el archivo ReadMe correspondiente.
Nuestro sistema operativo mínimo está contenido en la carpeta Angry_os. Para obtener detalles sobre cómo construir y usar este sistema, consulte el archivo ReadMe en esa carpeta.
El marco que utilizamos durante nuestro trabajo se encuentra en la carpeta UCodeapi. Para ver ejemplos sobre cómo se usa esta API, consulte los scripts de ejemplo proporcionados en esta carpeta. La API solo se prueba bajo Python 2.
La carpeta "Estudios de caso" contiene los estudios de caso presentados en nuestro documento CSS 18 en forma RTL.