Parte: 13 — Seguridad móvil, IoT e inalámbrica · Fuente: Practical IoT Hacking (Chantzis et al.) y The Hardware Hacking Handbook (Woudenberg, O'Flynn) ⏱️ Duración estimada: 150 min · Nivel: Experto
Acceder al nivel más bajo de un dispositivo embebido a través de sus interfaces de depuración físicas: UART para obtener una consola serie, JTAG/SWD para control del procesador y volcado de memoria, y SPI para leer/escribir el chip de flash directamente. El alumno aprenderá a identificar puntos de prueba en una PCB, conectar un adaptador, y extraer firmware o consolas root del hardware propio.
⚠️ Nota ética y de seguridad: trabaja solo con dispositivos de tu propiedad. Manipular electrónica implica riesgo de dañar el equipo o de descarga; respeta voltajes (3.3 V típico) y nunca alimentes pines a ciegas.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Seguridad eléctrica y voltajes | Evita dañar el equipo y a ti mismo |
| 2 | Identificación de puertos en PCB | Localiza los puntos de acceso |
| 3 | UART: consola serie | Suele dar shell/logs de arranque |
| 4 | Analizador lógico | Descubre pinout y protocolo |
| 5 | JTAG/SWD con OpenOCD | Control total del procesador |
| 6 | SPI y volcado de flash | Extrae el firmware completo |
| 7 | Contramedidas del fabricante | Fusibles, deshabilitar JTAG |
UART, JTAG/SWD y SPI cumplen funciones diferentes. UART es una consola serie asíncrona; JTAG/SWD ofrece depuración y prueba del chip; SPI conecta periféricos, con frecuencia flash. Encontrar pines no autoriza aplicar 5 V ni conectar líneas al azar: un error de nivel, orientación o alimentación puede destruir el dispositivo o el adaptador.
La primera práctica es pasiva: fotografías, continuidad con el equipo apagado y analizador lógico de alta impedancia. En UART se comparte tierra, se confirma nivel —a menudo 3,3 V o 1,8 V— y se escucha TX antes de transmitir. Una consola de boot con shell privilegiada es una decisión de producto; se documenta acceso físico, estado y datos expuestos.
En JTAG/SWD, deshabilitar depuración en producción puede ser apropiado, pero debe conservarse una ruta segura de fabricación y recuperación. Los fusibles son potencialmente irreversibles y nunca se prueban en el laboratorio sin diseño del fabricante. Leer SPI con pinza puede fallar por contención con el resto de la placa; se empieza sin escribir y se hacen varias lecturas comparadas por hash.
Tres lecturas de flash producen hashes distintos. Antes de analizar «firmware cambiante», el alumno revisa alimentación, contacto y contención del bus. Solo cuando las lecturas coinciden se acepta una imagen. La reproducibilidad eléctrica precede a la interpretación.
| Término | Definición útil |
|---|---|
| UART | Enlace serie asíncrono con RX/TX y referencia común. |
| JTAG/SWD | Interfaces de depuración y prueba de circuitos. |
| SPI | Bus síncrono usado por memorias y periféricos. |
| Nivel lógico | Tensión que representa estados digitales; no asumir 5 V. |
| Contención | Dos dispositivos conducen una línea de manera incompatible. |
Hay dominio cuando el alumno identifica una interfaz sin dañar la placa, documenta niveles y pinout, obtiene lecturas repetibles en modo no destructivo y explica cómo reducir acceso de producción manteniendo recuperación.
# UART: abrir consola serie
screen /dev/ttyUSB0 115200 # o: picocom -b 115200 /dev/ttyUSB0
# JTAG/SWD con OpenOCD
openocd -f interface/jlink.cfg -f target/<soc>.cfg
# luego, en telnet 4444: halt ; dump_image dump.bin 0x0 0x100000
# SPI: leer el chip de flash
flashrom -p ch341a_spi -r flash_dump.bin
screen.halt el CPU y dump_image de la flash/RAM.flashrom y analízalo con binwalk (clase 267).Obtén evidencia de un dispositivo de laboratorio por dos observaciones no destructivas —por ejemplo, log UART y dos lecturas SPI coincidentes—. Criterio de aceptación: documentas pinout, niveles, configuración, hashes repetibles y límites; no modificas flash ni exiges obtener privilegios como condición de éxito.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Consola serie muestra basura | Baud rate incorrecto; prueba 9600/57600/115200 |
| No hay salida por UART | TX/RX invertidos o pin equivocado; cruza TX↔RX y reidentifica |
| Dispositivo se reinicia al conectar | Alimentaste VCC indebidamente; no conectes VCC si se auto-alimenta |
| OpenOCD no detecta el target | Archivo de config equivocado o JTAG deshabilitado por fusible |
| flashrom no reconoce el chip | Mal contacto de la pinza o chip no soportado; especifica -c manualmente |
❓ ¿Cómo sé qué pin es UART sin documentación? Mide con multímetro (GND por continuidad, VCC ~3.3 V estable) y con el analizador lógico observa qué pin tiene ráfagas de datos al encender: ese es TX.
❓ ¿Puedo dañar el dispositivo? Sí, si aplicas voltaje incorrecto o cortocircuitas pines. Trabaja a 3.3 V, verifica antes de conectar VCC y usa un adaptador con el mismo nivel lógico.
❓ ¿Por qué usar SPI si ya tengo UART? UART puede no dar shell o exponer solo parte del sistema; leer el flash por SPI extrae la imagen completa aunque el software lo impida.
Clase 267 — Hacking de firmware