Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CustomProcessingUnit — The first analysis framework for CPU microcode | Kitploit
Ferramentas/GitHubGitHub/pietroborrello/customprocessingunit
Static AnalysisDynamic Code Analysis (DAST)ExploitationReverse EngineeringDebuggersHardware SecurityPayload DevelopmentFirmware Analysis

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
GitHub
pietroborrello/customprocessingunit

CustomProcessingUnit

The first analysis framework for CPU microcode

Ver Repositório
41127há 3 anosRevisado pelo Kitploit

Custom Processing Unit

DOI

Custom Processing Unit é o primeiro framework de análise dinâmica capaz de fazer hook, patch e trace do microcódigo da CPU em nível de software.

Ele funciona aproveitando instruções não documentadas em CPUs Intel que permitem acesso ao CRBUS. Usando nosso decompilador de microcódigo fizemos engenharia reversa de como a CPU usa o CRBUS e, ao replicar as interações, temos controle total da CPU.

Encontre o framework de análise estática como subárvore na pasta este, ou em https://github.com/pietroborrello/ghidra-atom-microcode.

Confira nossos slides descrevendo este trabalho aqui.

Nota: Custom Processing Unit requer uma CPU Red-Unlocked: atualmente, apenas CPUs Goldmont (GLM) possuem um Red Unlock público. Testamos o Gigabyte GB-BPCE-3350C com CPU stepping 0x9 e 0xa (cpuid 0x000506C9 e 0x000506CA).

Custom Processing Unit é composto por uma aplicação UEFI e algumas bibliotecas. A aplicação UEFI interage com a CPU GLM, enquanto as bibliotecas fornecem diferentes helpers para compilar microcódigo na aplicação UEFI e analisar sua saída.

Pré-requisitos

  1. Siga os passos para red unlock da sua CPU Goldmont em https://github.com/ptresearch/IntelTXE-PoC.
  2. Crie um pen drive bootável com um EFI shell
  3. Instale gnu-efi no seu host principal

Configuração

root@kitploit:~
GNU_EFI_DIR=<path_to_gnu_efi> make

Isso compilará os arquivos de microcódigo fonte e a aplicação UEFI em cpu.efi. Copie cpu.efi para a pasta \EFI\ do pen drive, conecte-o na GLM e inicialize no EFI shell.

Execute map -r no EFI shell para identificar o dispositivo do pen drive e <deviceid>: para montá-lo.

Executar Custom Processing Unit

Execute ./cpu.efi para imprimir a ajuda:

root@kitploit:~
Usage:
  patch:        <tool> p
  patch & exec: <tool> x
  perf:         <tool> f
  zero out m&p: <tool> z
  hook:         <tool> h  [m&p idx] [uop addr] [patch addr]
  template:     <tool> m
  dump imms:    <tool> di
  dump rom:     <tool> dr
  dump msrs:    <tool> dm
  dump SMM:     <tool> ds [address] [size]
  cpuid:        <tool> c  [rax] [rcx]
  rdmsr:        <tool> rm [msr]
  wrmsr:        <tool> wm [msr]
  read:         <tool> r  [cmd] [addr]
  write:        <tool> w  [cmd] [addr] [value]
  invoke:       <tool> i  [addr]
  update ucode: <tool> u  [size]
  ldat read:    <tool> lr [port] [array] [bank] [idx] [addr] [optional size]
  ldat write:   <tool> lw [port] [array] [bank] [idx] [addr] [value]

Instruções simples

cpu fornece helpers para executar instruções simples pela linha de comando:

  • cpuid
  • rdmsr
  • wrmsr

Ações complexas

cpu fornece interfaces para rotinas complexas da CPU que são interessantes de executar para estudar o comportamento da CPU:

  • u: atualiza o ucode da CPU com o patch fornecido (assinado)
  • f: coleta contadores de performance enquanto executa microcódigo

udbgrd e udbwr brutos

cpu fornece interfaces brutas para as instruções não documentadas udbrd e udbgwr. Os comandos mais interessantes que elas fornecem são:

  • 0x0: acesso ao CRBUS
  • 0x10: acesso ao UROM
  • 0x40: acesso ao stgbuf
  • 0xd8: invocar rotina de ucode a partir de um endereço

Acesso LDAT

cpu expõe rotinas de acesso LDAT para leitura e escrita. Especifique os parâmetros [port] [array] [bank] [idx] [addr] para ler ou escrever nesses locais. Portas interessantes são:

  • 0x6a0: sequenciador de microcódigo, que tem acesso à ROM e RAM internas do ucode
  • 0x120: buffers de load/store
  • 0x3c0: cache de instruções
  • 0x630: ITLB

Observe que acessar alguns desses componentes internos pode fazer a CPU travar.

Patch de microcódigo

cpu fornece funcionalidades para instalar patches no microcódigo.

  1. Escreva seu patch de microcódigo em bios/ucode_patches/ucode_patch.u (veja os outros patches para exemplos)
  2. Compile a aplicação UEFI
  3. Execute cpu.efi p para instalar o patch no endereço fornecido em .org.

Observe que, no microcódigo, apenas os endereços entre 0x7c00 e 0x7e00 são graváveis e relevantes para patch.

Executando cpu.efi x, ele também executará o microcódigo corrigido e imprimirá os registradores rax, rbx, rcx, rdx como resultado.

Match & Patch

Para executar automaticamente microcódigo em determinados eventos da CPU ou pontos de microcódigo, cpu usa o Match & Patch. Ele define um endereço de microcódigo para hook e o endereço de microcódigo para o qual saltar quando o hook for acionado.

  • z: redefine todo o match & patch.
  • h: instala um hook, dado um índice (0-0x20), um endereço para hook (0-0x7c00) e um endereço de destino para executar (0x7c00-0x7e00).

Rastreamento de microcódigo

Instalando vários hooks e executando continuamente uma instrução, cpu é capaz de rastrear as microoperações executadas por tal instrução e despejá-las. Para rastrear:

  1. Escreva a instrução a ser rastreada após o // [TRACED INSTRUCTION HERE] em get_trace_clock_at().
  2. Compile a aplicação UEFI.
  3. Rastreie com: cpu.efi m. Será criado um arquivo trace.txt contendo todos os endereços que foram atingidos.
  4. Execute uasm-lib/uasm.py -t trace.txt > parsed_trace.txt. Isso gerará um trace completo do microcódigo executado durante a instrução.

Observe que uasm.py usará os arquivos ms_arrayX.txt em sua pasta para gerar uma desmontagem das microinstruções executadas. Eles são para GLM com stepping 0x9 (cpuid 0x000506C9). Gere os arrays adequados caso você tenha um stepping diferente. Você pode usar as funcionalidades de dump LDAT para esse fim.

Dumpers de memória secreta

A CPU possui diferentes buffers inacessíveis pela arquitetura, para os quais fornecemos rotinas de dump:

  • smm: SMROM (ou qualquer outro endereço enquanto desativa a proteção SMM)
  • rom: ROM interna
  • imms: imediatos fixos da CPU
  • msrs: configurações internas de MSRs

Escrevendo patches de microcódigo

Fornecemos um montador que gera arquivos de cabeçalho para serem compilados na aplicação UEFI cpu.efi. Veja os patches fornecidos em bios/ucode_patches para a sintaxe. Ele suporta operações simples e rótulos. Monte um patch de microcódigo com uasm.py -i ucode_patch.u -o ucode_patch.h. cpu.efi será compilado e incluirá automaticamente o patch de microcódigo que você deseja aplicar.

Exemplo

arquivo: code_patch.u

root@kitploit:~
.org 0x7c00

rax:= ZEROEXT_DSZ32(0x00001337)
rbx:= ZEROEXT_DSZ32(0x00001337)
rcx:= ZEROEXT_DSZ32(0x00001337)
rdx:= ZEROEXT_DSZ32(0x00001337)

recompile e depois execute na GLM:

root@kitploit:~
cpu.efi z # zero out match & patch
cpu.efi p # apply the patch
cpu.efi h 0 0x0428 0x7c00 # rdrand entry point

agora, toda vez que rdrand for executado, ele retornará 0x1337 nos registradores.

Cite-nos

Nosso trabalho foi publicado em um paper no WOOT 2023:

root@kitploit:~
@inproceedings{Borrello2023CustomProcessingUnit,
    title = {{CustomProcessingUnit}: Reverse Engineering and Customization of Intel Microcode},
    author = {Borrello, Pietro and Easdon, Catherine and Schwarzl, Martin and Czerny, Roland and Schwarz, Michael},
    booktitle = {IEEE Workshop on Offensive Technologies (WOOT 23)},
    year = {2023},
}

Experimentos

Os experimentos descritos no paper podem ser executados com:

root@kitploit:~
cpu.efi e [exp_idx]

com [exp_idx]:

  1. Fast ucode breakpoints
  2. Constant-Time ucode division
  3. x86 PAC
  4. Attack x86 PAC with PACMAN
  5. Conditional Hardware Breakpoints
Baixar ferramenta