O que Auditoria de Firmware UEFI com CHIPSEC faz?
Uso Autorizado Apenas: CHIPSEC carrega um driver de kernel e lê/escreve registros de hardware de baixo nível, SPI flash e SMM. Execute-o apenas em sistemas que você possui ou para os quais tenha autorização explícita para avaliar, idealmente em hardware de teste dedicado. O uso indevido (especialmente módulos de escrita/modificação) pode danificar a máquina. Nunca execute módulos com capacidade de escrita em sistemas de produção.
Visão Geral
CHIPSEC é o Platform Security Assessment Framework de código aberto criado pela equipe Intel Advanced Threat Research. Ele inspeciona a configuração de segurança de baixo nível do firmware x86 e hardware — a camada abaixo do sistema operacional onde bootkits e implantes de firmware residem. O CHIPSEC carrega um driver de kernel assinado (Linux, Windows, ou pode ser executado a partir do shell UEFI) para ler e escrever registros de hardware, Model-Specific Registers (MSRs), espaço de configuração PCI, SPI flash e variáveis UEFI. Em seguida, executa uma suíte de testes automatizada que verifica se os bloqueios defensivos da plataforma estão realmente ativados.
A ameaça que o CHIPSEC aborda é a técnica MITRE ATT&CK T1542.001 — Firmware de Sistema Pré-OS (Pre-OS Boot: System Firmware): adversários que modificam o firmware do sistema (a imagem BIOS/UEFI na SPI flash) para obter controle furtivo, persistente e que sobrevive ao sistema operacional. Implantes de firmware persistem após a reinstalação do SO e substituição do disco e são invisíveis para a maioria dos EDRs. O valor do CHIPSEC está em verificar os pré-requisitos que impedem tais implantes: que a região de BIOS da SPI flash esteja protegida contra gravação (BIOS_CNTL BLE/SMM_BWP, Secure Ranges SPI), que o descritor da flash bloqueie o acesso à região, que SMRAM/SMRR estejam configurados e que as variáveis de Secure Boot estejam protegidas. Ele também despeja a SPI flash para comparação forense offline.
Fontes: Projeto Intel/CHIPSEC (https://github.com/chipsec/chipsec), Documentação do CHIPSEC (https://chipsec.github.io/).
Quando Usar
- Avaliação de segurança de firmware de linha de base de uma nova plataforma de laptop/servidor ou imagem de frota
- Verificar se a proteção contra gravação da BIOS e os bloqueios da SPI flash estão ativados corretamente pelo OEM
- Forense de firmware: despejar a SPI flash para comparar com uma imagem conhecida como boa
- Validar a proteção de variáveis de Secure Boot e a proteção do script de boot S3
- Procurar evidências de um implante de firmware ou configuração incorreta que o permita
Pré-requisitos
- Acesso físico ou de administrador/root à plataforma x86 alvo (Intel ou AMD)
- Linux (root) ou Windows (Administrador), ou um ambiente UEFI shell
- Capacidade de carregar um driver de kernel (Secure Boot pode precisar permitir o driver CHIPSEC, ou use
--no_driverpara verificações limitadas) - Python 3.8+ e um compilador C/ferramentas de build para o módulo do kernel no Linux
- Hardware de teste dedicado fortemente recomendado
Instale o CHIPSEC:
# Do PyPI
pip install chipsec
# Ou da fonte (compila o helper/driver do kernel)
git clone https://github.com/chipsec/chipsec
cd chipsec
python setup.py install # compila e instala, incluindo o driver Linux
# Verifique
sudo chipsec_main --help
sudo chipsec_util --help
Objetivos
- Executar a suíte completa de testes automatizados de segurança da plataforma e interpretar os resultados PASS/FAIL/WARNING
- Verificar a proteção contra gravação da BIOS (BIOS_CNTL) e os Secure Ranges SPI
- Verificar se o descritor da SPI flash bloqueia o acesso de leitura/gravação às regiões
- Verificar as proteções de SMRAM/SMRR e manipulador SMI
- Verificar a proteção de variáveis de Secure Boot e a proteção do script de boot S3
- Despejar a SPI flash e decodificá-la para análise offline
- Enumerar variáveis UEFI e detectar entradas anômalas/inesperadas
Mapeamento MITRE ATT&CK
| ID da Técnica | Nome | Tática |
|---|---|---|
| T1542.001 | Firmware de Sistema Pré-OS (Pre-OS Boot: System Firmware) | Persistência / Evasão de Defesa |
O CHIPSEC defende contra T1542.001 verificando se os controles que impedem a modificação não autorizada do firmware estão ativados. Um FAIL em common.bios_wp (BIOS não protegida contra gravação) ou chipsec.modules.common.spi_lock (descritor da flash desbloqueado) significa que um invasor com privilégios de SO poderia regravar a SPI flash e implantar firmware persistente — exatamente a pré-condição para esta técnica.
Fluxo de Trabalho
Passo 1: Executar a suíte completa de testes automatizados
chipsec_main sem argumento de módulo executa todas as verificações de segurança aplicáveis para a plataforma detectada e imprime um resumo dos resultados PASS/FAIL/WARNING/INFORMATION.
sudo chipsec_main
# Salve a saída legível por máquina para relatórios / diffing
sudo chipsec_main -j results.json -x results.xml -l chipsec.log
Passo 2: Executar os módulos principais de proteção de firmware individualmente
O grupo de módulos common contém as verificações de segurança independentes de OEM. Execute o grupo ou módulos específicos:
# Execute todo o grupo common
sudo chipsec_main -m common
# Proteção contra gravação da BIOS: verifica BIOS_CNTL BLE/SMM_BWP e ranges protegidos SPI
sudo chipsec_main -m common.bios_wp
# Bloqueio do descritor SPI (FLOCKDN) — os acessos às regiões da flash estão bloqueados?
sudo chipsec_main -m common.spi_lock
# Programação SMRR — protege SMRAM contra ataques baseados em cache
sudo chipsec_main -m common.smrr
# Proteção contra gravação da BIOS em SMM
sudo chipsec_main -m common.smm
# Proteção do script de boot de retomada S3 (contra ataques à tabela de script de boot)
sudo chipsec_main -m common.uefi.s3bootscript
Passo 3: Verificar a proteção de variáveis de Secure Boot
# Verifica se as variáveis UEFI do Secure Boot estão protegidas adequadamente
sudo chipsec_main -m common.secureboot.variables
# Para testar ativamente a proteção contra gravação das variáveis (SOMENTE em hardware de teste):
sudo chipsec_main -m common.secureboot.variables -a modify
Passo 4: Inspecionar as permissões de acesso às regiões da SPI flash
# Relatar regiões da SPI flash, descritor e permissões de acesso
sudo chipsec_util spi info
# Verificar o módulo de controle de acesso SPI
sudo chipsec_main -m common.spi_access
Passo 5: Despejar a SPI flash para forense offline
Despejar a flash permite decodificar os volumes de firmware e comparar com uma imagem OEM conhecida como boa.
# Despejar a SPI flash inteira em um arquivo
sudo chipsec_util spi dump rom.bin
# Decodificar a imagem despejada: extrai volumes de firmware, arquivos, variáveis NVRAM, etc.
sudo chipsec_util decode rom.bin
Passo 6: Enumerar e triar variáveis UEFI
# Listar todas as variáveis UEFI da interface de tempo de execução
sudo chipsec_util uefi var-list
# Listar variáveis diretamente da imagem SPI (offline)
sudo chipsec_util uefi var-find PK
sudo chipsec_util uefi var-read db <GUID> db.bin
# Decodificar a estrutura de firmware UEFI
sudo chipsec_util uefi decode rom.bin
Passo 7: Avaliação limitada sem driver de kernel
Onde carregar o driver é impossível (Secure Boot bloqueado), algumas verificações ainda são executadas em modo somente leitura.
sudo chipsec_main -n # --no_driver: pula verificações que precisam do driver
sudo chipsec_main -p <PLATFORM> # forçar código de plataforma se a detecção automática falhar
Passo 8: Triar resultados e relatar
- FAIL em
bios_wp/spi_lock→ o firmware é regravável a partir do SO: alto risco para T1542.001. - FAIL em
secureboot.variables→ a política de Secure Boot pode ser violada. - Compare o
spi dumpcom a imagem OEM conhecida como boa (hash dos volumes de firmware) para detectar modificação não autorizada. - Registre a plataforma, versão da BIOS e cada FAIL/WARNING com os valores de registro relevantes para o relatório.
Ferramentas e Recursos
| Ferramenta | Propósito | Fonte |
|---|---|---|
| chipsec_main | Suíte de testes automatizados de segurança da plataforma | https://github.com/chipsec/chipsec |
| chipsec_util | Acesso manual a hardware/firmware (spi, uefi, decode) | https://chipsec.github.io/ |
| UEFITool | Análise GUI/CLI de imagens UEFI despejadas | https://github.com/LongSoft/UEFITool |
| Binarly fwhunt | Regras de caça a vulnerabilidades/implantes de firmware | https://github.com/binarly-io/fwhunt-scan |
| Orientação NSA de Secure Boot UEFI | Referência de hardening | https://media.defense.gov/ |
Referência de Módulos Principais
| Módulo | Verificações |
|---|---|
| common.bios_wp | BIOS_CNTL BLE / SMM_BWP e Secure Ranges SPI |
| common.spi_lock | FLOCKDN do descritor SPI |
| common.spi_access | Permissões de leitura/gravação das regiões da SPI flash |
| common.smrr | Programação dos System Management Range Registers |
| common.smm | Proteção contra gravação da BIOS em SMM |
| common.secureboot.variables | Proteção de variáveis de Secure Boot |
| common.uefi.s3bootscript | Proteção do script de boot de retomada S3 |
Critérios de Validação
- CHIPSEC instalado e driver carregado (ou
-ndocumentado se não) - Suíte completa
chipsec_mainexecutada com saída JSON/XML/log salva - Resultado
common.bios_wpinterpretado (estado da proteção contra gravação) - Resultados
common.spi_lock/spi_accessinterpretados (bloqueio do descritor) - Resultados dos módulos SMRR/SMM registrados
- Proteção de variáveis de Secure Boot verificada
- SPI flash despejada e decodificada para análise offline
- Variáveis UEFI enumeradas e triadas
- Todas as descobertas de FAIL/WARNING documentadas com plataforma/versão da BIOS
- Módulos de escrita/modificação NÃO executados em hardware de produção