Auditoría de Firmware UEFI con CHIPSEC
Solo para uso autorizado: CHIPSEC carga un controlador de kernel y lee/escribe registros de hardware de bajo nivel, SPI flash y SMM. Ejecútelo únicamente en sistemas de su propiedad o para los cuales tenga autorización explícita para evaluar, idealmente en hardware de prueba dedicado. El mal uso (especialmente módulos de escritura/modificación) puede inutilizar una máquina. Nunca ejecute módulos con capacidad de escritura en sistemas de producción.
Descripción General
CHIPSEC es el Marco de Evaluación de Seguridad de Plataforma de código abierto creado por el equipo de Investigación Avanzada de Amenazas de Intel. Inspecciona la configuración de seguridad a bajo nivel del firmware y hardware de plataformas x86, la capa por debajo del sistema operativo donde residen los bootkits e implantes de firmware. CHIPSEC carga un controlador de kernel firmado (Linux, Windows, o puede ejecutarse desde el shell UEFI) para leer y escribir registros de hardware, registros específicos de modelo (MSR), espacio de configuración PCI, SPI flash y variables UEFI, y luego ejecuta un conjunto de pruebas automatizadas que verifican si los bloqueos defensivos de la plataforma están realmente activados.
La amenaza que aborda CHIPSEC es la T1542.001 — Pre-OS Boot: System Firmware de MITRE ATT&CK: los adversarios que modifican el firmware del sistema (la imagen BIOS/UEFI en SPI flash) obtienen un control sigiloso, persistente y que sobrevive al sistema operativo. Los implantes de firmware persisten incluso tras reinstalar el SO y reemplazar el disco, y son invisibles para la mayoría de los EDR. El valor de CHIPSEC radica en verificar los prerrequisitos que evitan tales implantes: que la región BIOS del SPI flash esté protegida contra escritura (BIOS_CNTL BLE/SMM_BWP, rangos protegidos SPI), que el descriptor de flash bloquee el acceso a regiones, que SMRAM/SMRR estén configurados y que las variables de Secure Boot estén protegidas. También vuelca el SPI flash para realizar análisis forenses fuera de línea.
Fuentes: Proyecto Intel/CHIPSEC (https://github.com/chipsec/chipsec), documentación de CHIPSEC (https://chipsec.github.io/).
Cuándo Usarlo
- Evaluación de seguridad de firmware inicial de una nueva plataforma de laptop/servidor o imagen de flota
- Verificar que la protección contra escritura del BIOS y los bloqueos del SPI flash estén correctamente habilitados por el OEM
- Forense de firmware: volcar el SPI flash para compararlo con una imagen conocida como buena
- Validar la protección de variables de Secure Boot y la protección del script de arranque S3
- Buscar evidencia de un implante de firmware o una mala configuración que lo permita
Prerrequisitos
- Acceso físico o de administrador/root a la plataforma x86 de destino (Intel o AMD)
- Linux (root) o Windows (Administrador), o un entorno de shell UEFI
- Capacidad para cargar un controlador de kernel (Secure Boot puede necesitar permitir el controlador CHIPSEC, o usar
--no_driverpara comprobaciones limitadas) - Python 3.8+ y un compilador C/herramientas de compilación para el módulo del kernel en Linux
- Hardware de prueba dedicado recomendado
Instalar CHIPSEC:
# Desde PyPI
pip install chipsec
# O desde el código fuente (compila el ayudante/controlador del kernel)
git clone https://github.com/chipsec/chipsec
cd chipsec
python setup.py install # compila e instala, incluyendo el controlador de Linux
# Verificar
sudo chipsec_main --help
sudo chipsec_util --help
Objetivos
- Ejecutar el conjunto completo de pruebas de seguridad automatizadas de la plataforma e interpretar los resultados PASS/FAIL/WARNING
- Verificar la protección contra escritura del BIOS (BIOS_CNTL) y los rangos protegidos SPI
- Verificar que el descriptor del SPI flash bloquee el acceso de lectura/escritura a regiones
- Verificar las protecciones de SMRAM/SMRR y manejadores SMI
- Verificar la protección de variables de Secure Boot y la protección del script de arranque S3
- Volcar el SPI flash y decodificarlo para análisis fuera de línea
- Enumerar variables UEFI y detectar entradas anómalas/inesperadas
Mapeo MITRE ATT&CK
| ID de Técnica | Nombre | Táctica |
|---|---|---|
| T1542.001 | Arranque previo al SO: Firmware del sistema | Persistencia / Evasión de defensa |
CHIPSEC defiende contra T1542.001 verificando que los controles que impiden la modificación no autorizada del firmware estén habilitados. Un FAIL en common.bios_wp (BIOS no protegido contra escritura) o chipsec.modules.common.spi_lock (descriptor de flash desbloqueado) significa que un atacante con privilegios de SO podría reescribir el SPI flash e implantar firmware persistente, exactamente la condición previa para esta técnica.
Flujo de Trabajo
Paso 1: Ejecutar el conjunto completo de pruebas automatizadas
chipsec_main sin argumento de módulo ejecuta cada verificación de seguridad aplicable para la plataforma detectada e imprime un resumen de resultados PASS/FAIL/WARNING/INFORMATION.
sudo chipsec_main
# Guardar la salida legible por máquina para informes/diferencias
sudo chipsec_main -j results.json -x results.xml -l chipsec.log
Paso 2: Ejecutar los módulos principales de protección de firmware individualmente
El grupo de módulos common contiene las comprobaciones de seguridad independientes del OEM. Ejecute el grupo o módulos específicos:
# Ejecutar todo el grupo común
sudo chipsec_main -m common
# Protección contra escritura del BIOS: verifica BIOS_CNTL BLE/SMM_BWP y rangos protegidos SPI
sudo chipsec_main -m common.bios_wp
# Bloqueo del descriptor SPI flash (FLOCKDN) — ¿Están bloqueados los accesos a regiones flash?
sudo chipsec_main -m common.spi_lock
# Programación SMRR — protege SMRAM de ataques basados en caché
sudo chipsec_main -m common.smrr
# Protección de escritura del BIOS en SMM
sudo chipsec_main -m common.smm
# Protección del script de arranque S3 (contra ataques a la tabla de scripts de arranque)
sudo chipsec_main -m common.uefi.s3bootscript
Paso 3: Verificar la protección de variables de Secure Boot
# Verifica que las variables UEFI de Secure Boot estén correctamente protegidas
sudo chipsec_main -m common.secureboot.variables
# Para probar activamente la protección contra escritura de las variables (SOLO hardware de prueba):
sudo chipsec_main -m common.secureboot.variables -a modify
Paso 4: Inspeccionar los permisos de acceso a regiones del SPI flash
# Informar regiones SPI flash, descriptor y permisos de acceso
sudo chipsec_util spi info
# Verificar el módulo de control de acceso SPI
sudo chipsec_main -m common.spi_access
Paso 5: Volcar el SPI flash para forense fuera de línea
Volcar el flash permite decodificar los volúmenes de firmware y compararlos con una imagen OEM conocida como buena.
# Volcar todo el SPI flash a un archivo
sudo chipsec_util spi dump rom.bin
# Decodificar la imagen volcada: extrae volúmenes de firmware, archivos, variables NVRAM, etc.
sudo chipsec_util decode rom.bin
Paso 6: Enumerar y analizar variables UEFI
# Listar todas las variables UEFI desde la interfaz de tiempo de ejecución
sudo chipsec_util uefi var-list
# Listar variables directamente desde la imagen SPI (fuera de línea)
sudo chipsec_util uefi var-find PK
sudo chipsec_util uefi var-read db <GUID> db.bin
# Decodificar la estructura del firmware UEFI
sudo chipsec_util uefi decode rom.bin
Paso 7: Evaluación limitada sin controlador de kernel
Cuando no sea posible cargar el controlador (Secure Boot bloqueado), algunas comprobaciones aún se ejecutan en modo solo lectura.
sudo chipsec_main -n # --no_driver: omite comprobaciones que necesitan el controlador
sudo chipsec_main -p <PLATFORM> # forzar código de plataforma si falla la detección automática
Paso 8: Analizar resultados y reportar
- FAIL en
bios_wp/spi_lock→ el firmware es reescribible desde el SO: alto riesgo para T1542.001. - FAIL en
secureboot.variables→ la política de Secure Boot puede ser manipulada. - Comparar el
spi dumpcon la imagen OEM conocida como buena (hash de volúmenes de firmware) para detectar modificaciones no autorizadas. - Registrar plataforma, versión de BIOS y cada FAIL/WARNING con los valores de registro relevantes para el informe.
Herramientas y Recursos
| Herramienta | Propósito | Fuente |
|---|---|---|
| chipsec_main | Conjunto de pruebas de seguridad automatizadas de la plataforma | https://github.com/chipsec/chipsec |
| chipsec_util | Acceso manual a hardware/firmware (spi, uefi, decode) | https://chipsec.github.io/ |
| UEFITool | Análisis GUI/CLI de imágenes UEFI volcadas | https://github.com/LongSoft/UEFITool |
| Binarly fwhunt | Reglas de búsqueda de vulnerabilidades/implantes en firmware | https://github.com/binarly-io/fwhunt-scan |
| Guía de Secure Boot de la NSA | Referencia de endurecimiento | https://media.defense.gov/ |
Referencia de Módulos Principales
| Módulo | Comprobaciones |
|---|---|
| common.bios_wp | BIOS_CNTL BLE / SMM_BWP y rangos protegidos SPI |
| common.spi_lock | Bloqueo del descriptor SPI flash (FLOCKDN) |
| common.spi_access | Permisos de lectura/escritura de regiones SPI flash |
| common.smrr | Programación de registros de rango de gestión del sistema |
| common.smm | Protección de escritura del BIOS en SMM |
| common.secureboot.variables | Protección de variables de Secure Boot |
| common.uefi.s3bootscript | Protección del script de arranque S3 |
Criterios de Validación
- CHIPSEC instalado y controlador cargado (o
-ndocumentado si no es posible) - Suite completa
chipsec_mainejecutada con salida JSON/XML/log guardada - Resultado de
common.bios_wpinterpretado (estado de protección contra escritura) - Resultado de
common.spi_lock/spi_accessinterpretado (bloqueo del descriptor) - Resultados de módulos SMRR/SMM registrados
- Protección de variables de Secure Boot verificada
- SPI flash volcado y decodificado para análisis fuera de línea
- Variables UEFI enumeradas y analizadas
- Todos los hallazgos FAIL/WARNING documentados con plataforma/versión de BIOS
- Módulos de escritura/modificación NO ejecutados en hardware de producción