Hardware Hacking & Embedded Firmware RE
UART · JTAG/SWD · SPI Flash Dumping · Logic Analyzers · Bus Pirate · Ghidra · GDB · OpenOCD
Capítulo 1 · Reconocimiento de PCB & Análisis de Capa Física
El **Hardware Hacking** es la disciplina de auditar dispositivos embebidos e IoT mediante interacción directa con su placa de circuito impreso (PCB). A diferencia del pentesting de software tradicional, cuando se tiene acceso físico al dispositivo, las barreras lógicas pueden ser eludidas inspeccionando los componentes físicos y las señales electrónicas.
Herramientas Esenciales del Laboratorio de Hardware Hacking
| Herramienta Hardware | Propósito Principal | Casos de Uso Prácticos |
|---|---|---|
| Multímetro Digital & Osciloscopio | Medición de voltajes, prueba de continuidad e inspección de reloj. | Localizar masa (GND), VCC (3.3V/5V) y trazar pistas de datos ocultas. |
| Analizador Lógico (24MHz - 500MHz) | Capturar señales lógicas de buses de datos y decodificar protocolos. | Decodificar tráfico UART, SPI e I2C para descubrir baud rates y paquetes. |
| Bus Pirate v3.6 / v4 / v5 | Interfaz multipropósito para hablar directamente con chips integrados. | Volcado de memorias SPI Flash de 8 pines (SOIC-8) sin desoldar. |
| JTAGulator / FT2232H | Detección automática de patinajes y depuración JTAG/SWD. | Identificar pines de depuración JTAG en PCBs sin serigrafía explícita. |
Capítulo 2 · Interfaces Serie (UART, SPI, I2C & JTAG/SWD)
Las tarjetas embebidas utilizan protocolos de comunicación serie para comunicarse internamente con periféricos y permitir el diagnóstico de fábrica durante la etapa de manufactura.
TX (Transmit) y RX (Receive). Es la puerta de entrada a consolas U-Boot y Shells de Linux sin contraseña.MISO, MOSI, CLK, CS. Utilizado para transferir firmware entre la memoria Flash y el SoC.Captura y Análisis de Señales con PulseView & sigrok
Para determinar la velocidad de baudios (Baud Rate) de una línea UART desconocida (ej. 115200, 57600, 9600, 38400), conectamos los canales de un analizador lógico de $10 USD y ejecutamos sigrok-cli:
# 1. Capturar 5 segundos de señal en el canal 0 a una tasa de muestreo de 12MHz
sigrok-cli --driver fx2lafw --config samplerate=12MHz --time 5s -o uart_capture.sr
# 2. Decodificar la señal UART capturada probando baudrate de 115200
sigrok-cli -i uart_capture.sr -P uart:baudrate=115200:rx=0 -B uart=ascii
# 3. Conectarse a la consola serie interactiva en Linux
picocom -b 115200 /dev/ttyUSB0
Capítulo 3 · Extracción de Firmware & SPI NOR Flash Dumping
Cuando la interfaz UART o los gestores de arranque están bloqueados con contraseña, el método más robusto para extraer el firmware completo es leer la memoria Flash directamente.
Extracción In-Circuit con `flashrom` y Bus Pirate
# 1. Identificar el chip SPI conectado al Bus Pirate
sudo flashrom -p buspirate_spi:dev=/dev/ttyUSB0
# Salida esperada: Found Winbond flash chip "W25Q64.V" (8192 kB, SPI).
# 2. Volcar la memoria completa de 8MB a un archivo binario raw
sudo flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -r firmware_dump.bin
# 3. Verificar la integridad realizando una segunda lectura y comparando hashes SHA256
sudo flashrom -p buspirate_spi:dev=/dev/ttyUSB0 -r firmware_dump2.bin
sha256sum firmware_dump.bin firmware_dump2.bin
Capítulo 4 · Ingeniería Inversa de Firmware con Binwalk & Ghidra
Una vez obtenido el archivo firmware_dump.bin, el siguiente paso es extraer el sistema de archivos Linux (SquashFS / UBIFS) y descompilar los ejecutables de control en **Ghidra**.
# 1. Analizar firmas de compresión dentro del binario
binwalk firmware_dump.bin
# 2. Extraer automáticamente todos los sistemas de archivos detectados
binwalk -e --rm firmware_dump.bin
# 3. Navegar por el sistema de archivos raíz extraído
cd _firmware_dump.bin.extracted/squashfs-root
cat etc/shadow
grep -rn "password" etc/ scripts/
Descompilación de Binarios ELF con Ghidra
Al abrir ejecutables de servicio CGI en Ghidra (arquitecturas ARM v7 Little Endian o MIPS Big Endian), podemos localizar funciones vulnerables como system() o strcpy() invocadas sin validación de longitud de buffer.
/* Function: process_http_request (Vulnerable Code Identified in Ghidra) */
void process_http_request(char *user_input) {
char cmd_buf[128];
// VULNERABILIDAD CRÍTICA: Inyección de Comandos OS debido a sprintf insalubre
sprintf(cmd_buf, "ping -c 1 '%s'", user_input);
system(cmd_buf); // Se puede pasar "; telnetd -p 4444 -l /bin/sh #"
}
Capítulo 5 · Depuración en Tiempo Real con JTAG, OpenOCD & GDB
JTAG (Joint Test Action Group) proporciona acceso de bajo nivel al procesador, permitiendo colocar breakpoints en la memoria Flash/RAM, volcar el estado del procesador y alterar variables de ejecución en caliente.
# 1. Iniciar servidor OpenOCD para un SoC ARM Cortex-M4 con interfaz ST-Link o J-Link
openocd -f interface/stlink.cfg -f target/stm32f4x.cfg
# 2. Conectarse con GDB multiarquitectura (gdb-multiarch)
gdb-multiarch ./vulnerable_elf
# 3. Comandos interactivos de GDB para eludir validación de contraseña:
(gdb) target remote localhost:3333
(gdb) monitor reset halt
(gdb) break check_admin_password
(gdb) continue
# Al detenerse en el breakpoint, forzar retorno de éxito (r0 = 1):
(gdb) set $r0 = 1
(gdb) continue
R0 guarda el valor de retorno de las funciones. Al modificar $r0 = 1 en GDB, alteramos la decisión lógica del programa de forma instantánea.Capítulo 6 · Laboratorio Interactivo Live: Hardware Signal & Firmware Dump Simulator
Utiliza esta terminal interactiva para simular el escaneo de puertos serie UART, la decodificación de ondas lógicas con analizador, el volcado SPI Flash y la extracción de secretos de firmware en vivo.