Engenharia Reversa IoT - Parte 2 [PT-BR]
Thu, Nov 2, 2023PARTE 2 - Explorando o Firmware.
Na parte 1, encontramos a porta UART para realizar debug que nos deu acesso a um shell Linux. Neste ponto, temos o mesmo acesso ao roteador que um engenheiro/desenvolvedor usaria para analisar problemas, controlar o sistema, realizar suporte técnico etc.
Firmware é o software que controla e monitora o hardware em baixo nível. Está presente em praticamente todos os computadores e, no caso de sistemas operacionais embarcados. Fica armazenado em memória não volátil, persistente em caso de queda de energia ou ao desligar o dispositivo.
Entre os elementos que compõe o firmware podemos encontrar o kernel, um ou mais gerenciadores de inicialização e o sistema de arquivos, que serve de base para os dados e aplicações do usuário.
Continuando de onde paramos:
Após conectar na porta UART e executar o comando screen
no terminal, ao ligarmos o dispositivo, diversas mensagens são apresentadas na tela, vamos analisar e extrair informações úteis que possam auxiliar na exploração do dispositivo.
Análise das mensagens de inicialização (boot):
Aqui podemos encontrar informações interessantes espalhados pela sequência de inicialização. Encontramos informações úteis como:
- Algoritmo de compactação usados na memória flash;
- Endereçamento de memória, será útil se conseguirmos extrair o firmware;
- Informação sobre a compressão do sistema de arquivo (filesystem);
- Dentre outras informações.
Logo nas primeiras linhas podemos verificar algo interessante, o dispositivo tenta carregar um arquivo chamado (u-boot.bin) via TFTP de um servidor com o IP pré-definido como 1.1.1.1, analisando mais algumas linhas, é possível perceber que o roteador tenta carregar outro arquivo chamado (topaz-linux.lzma.img) para o mesmo endereço IP.
Nesse primeiro momento não faço ideia do que se trata, vamos tomar nota e investigar mais para frente.
Continuando à análise das mensagens de log, identificamos mais algumas informações úteis. Como o algoritmo de compressão utilizado pelo kernel, família do processador e versão do kernel.
Todas essas informações são importantes, quando tentarmos acessar os dados do firmware, neste caso para descompactar o arquivo que iremos extrair da memoria flash.
Só temos um pequeno problema, não temos um usuário para acessar o sistema, caso tivéssemos um usuário com privilégios de root, seria trivial analisar o sistema, extrair arquivos do dispositivo. Como não temos um usuário com privilégio administrativo, continuamos na estaca zero, vamos deixar esse ponto de lado por hora e vamos deixar a dispositivo dar o boot normal.
Com o dispositivo ligado, identificamos que o Ip padrão é: 192.168.15.1
vamos verificar quais serviços estão rodando através do utilitário nmap
.
nmap -sS -vv IP 192.168.15.1
Resultado do scan:
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-02 15:33 -03
Failed to resolve "IP".
Initiating ARP Ping Scan at 15:33
Scanning 192.168.15.1 [1 port]
Completed ARP Ping Scan at 15:33, 0.04s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 15:33
Completed Parallel DNS resolution of 1 host. at 15:33, 0.01s elapsed
Initiating SYN Stealth Scan at 15:33
Scanning GPT-2741GNAC-N1-SV.GPT-2741GNAC-N1-SV (192.168.15.1) [1000 ports]
Discovered open port 22/tcp on 192.168.15.1
Discovered open port 80/tcp on 192.168.15.1
sendto in send_ip_packet_sd: sendto(6, packet, 44, 0, 192.168.15.1, 16) => Protocol wrong type for socket
Offending packet: TCP 192.168.15.8:37221 > 192.168.15.1:53 S ttl=46 id=47291 iplen=11264 seq=2912611132 win=1024 <mss 1460>
Completed SYN Stealth Scan at 15:33, 1.94s elapsed (1000 total ports)
Nmap scan report for GPT-2741GNAC-N1-SV.GPT-2741GNAC-N1-SV (192.168.15.1)
Host is up, received arp-response (0.014s latency).
Scanned at 2023-11-02 15:33:12 -03 for 2s
Not shown: 993 closed tcp ports (reset)
PORT STATE SERVICE REASON
21/tcp filtered ftp no-response
22/tcp open ssh syn-ack ttl 64
23/tcp filtered telnet no-response
53/tcp filtered domain no-response
80/tcp open http syn-ack ttl 64
161/tcp filtered snmp no-response
443/tcp filtered https no-response
MAC Address: 84:0B:BB:28:64:D8 (MitraStar Technology)
Após o scan podemos perceber que a porta 22 que representa o serviço ssh está aberta. Vamos tentar conectar nessa porta com as mesmas credenciais que vem informada no adesivo abaixo do dispositivo e ver o que nos apresenta.
Conectando via SSH.
ssh -oHostKeyAlgorithms=+ssh-rsa admin@192.168.15.1
admin@192.168.15.1's password:
Permission denied, please try again.
admin@192.168.15.1's password:
Permission denied, please try again.
admin@192.168.15.1's password:
admin@192.168.15.1: Permission denied (password).
O que são exatamente Erik’s uClibc e BusyBox?
O uClibc neste roteador executa um kernel Linux para controlar a memória e processos paralelos, manter o controle geral do sistema etc. Neste caso eles usaram o Linux 2.6.35.12. uClibc é uma CLI executada no Linux ou como parte do kernel. Ele fornece uma primeira camada de autenticação no sistema, porém muito limitado.
[CONTINUA…]