ferramenta de análise estática de firmware ELF. fiz isso depois de passar horas olhando pra firmware de roteador que tinha senha hardcoded, sem PIE, sem stack canary, gets() em produção, chave privada RSA embutida direto no binário. literalmente sem vergonha nenhuma.
o nome é latim — exentero vem de "esvaziar as entranhas". parece adequado.
- identifica arquitetura (MIPS BE/LE, ARM, ARM64, x86, x86_64, PowerPC)
- mapeia seções e símbolos do ELF
- detecta funções perigosas (
gets,strcpy,system,popen, ...) - procura por credenciais hardcoded no binário inteiro
- acha chaves privadas PEM embutidas (RSA, EC, OpenSSH, PGP)
- extrai URLs e endpoints suspeitos (update servers, telemetria, beacons)
- verifica mitigações: PIE, RELRO, stack canary
- detecta strings e símbolos de anti-debug (ptrace, /proc/self/status, ...)
- exporta resultado em JSON
make
sem dependências externas. só libc padrão.
./exentero firmware.bin
./exentero -v firmware.bin # verboso: mostra seções e evidências
./exentero -v -o saida.json fw.elf # salva JSON
[ EXENTERO v0.2.1 ]
════════════════════════════════════════════
arquivo : squashfs-root/usr/sbin/httpd
tamanho : 284672 bytes (278.0 KB)
sha256 : 3a7f9c...
formato : ELF32 (big-endian)
arch : MIPS big-endian
entry : 0x403320
stripped : sim
secoes : 18
simbolos : 142
[ ACHADOS — 11 total ]
────────────────────────────────────────────
[CRITICO ] [funcao-perigosa ] gets() importada — leitura sem limite, classico buffer overflow
[CRITICO ] [credencial ] senha hardcoded em 0x2f180
[ALTO ] [funcao-perigosa ] strcpy() importada — buffer overflow sem limite de tamanho
[MEDIO ] [mitigacao ] binario sem PIE — ASLR ineficaz (EP: 0x403320)
[MEDIO ] [mitigacao ] sem stack canary (__stack_chk_fail nao encontrado)
...
| arquivo | função |
|---|---|
elf_parser.c |
parsing do cabeçalho ELF, seções, símbolos, suporte big/little endian |
caçador.c |
todos os módulos de detecção |
relatorio.c |
saída no terminal + exportação JSON |
- símbolos 64-bit ainda não implementados (ELF32 tem cobertura completa)
- sem suporte a firmware compactado — extrai antes com binwalk
- análise de SUID requer filesystem extraído
nao testei em tudo. se travar em algum binário esquisito abre uma issue.