Este repositório contém a estrutura usada durante nosso trabalho em engenharia reversa do microcódigo das CPUs AMD K8 e K10. Inclui um assembler e desmontador, bem como programas de exemplo implementados usando essas ferramentas. Também fornecemos nosso sistema operacional mínimo escrito personalizado que pode aplicar rapidamente e testar atualizações de microcódigo nas CPUs da AMD.
Os arquivos aqui fornecidos se originaram da pesquisa e devem ser usados apenas para fins de pesquisa. Eles são compilados com apenas conhecimento parcial sobre os internos da microarquitetura e podem conter bugs e comportamento não intencional. Todos os arquivos são fornecidos como está sem garantias e suporte. Não assumimos nenhuma responsabilidade ou responsabilidade pelo uso deles.
O conjunto de instruções X86 é complexo e contém muitas instruções herdadas apenas para compatibilidade com versões anteriores. Assim, instruções raramente usadas ou complexas são decodificadas em software, enquanto as instruções críticas de desempenho são tratadas por decodificadores de hardware. Independentemente de serem decodificados por hardware ou software, as instruções são traduzidas para outro conjunto de instruções chamado RISC86, que possui um comprimento de instrução fixo e é adequado para processamento rápido e supercalar. Além do microcódigo de decodificação de software, pode ser usado para desativar os recursos do processador defeituoso e lidar com exceções no nível mais baixo.
O conteúdo deste repositório reflete os resultados práticos de nosso esforço de pesquisa. Os detalhes são fornecidos em nossos documentos:
Microcódigo de processador x86 de engenharia reversa publicada nos procedimentos do 26º Simpósio de Segurança Usenix
Uma análise exploratória do microcódigo como um bloco de construção para as defesas do sistema publicadas nos procedimentos da 25ª conferência da ACM sobre segurança de computadores e comunicações
A pasta USENIX17 contém os resultados do artigo Usenix 2017, o mais importante é que as atualizações e gatilhos para nossos conceitos de prova, bem como um driver de atualização, permitindo que as atualizações arbitrárias sejam carregadas em um sistema Linux. Mais detalhes são fornecidos no arquivo readme correspondente.
Nosso sistema operacional mínimo está contido na pasta Angry_OS. Para detalhes sobre como criar e usar esse sistema, consulte o arquivo ReadMe nessa pasta.
A estrutura que usamos durante o nosso trabalho é encontrada na pasta ucodeapi. Para exemplos de como esta API é usada, consulte os scripts de exemplo fornecidos nesta pasta. A API é testada apenas sob Python 2.
A pasta "estudos de caso" contém os estudos de caso apresentados em nosso artigo CSS 18 em forma de RTL.