Engenharia Reversa IoT - Parte 1 [PT-BR]

PARTE 1 - Identificação de Hardware (identificando portas de debug).

Nesta primeira parte, vamos passar pelo processo de engenharia reversa de um “roteador” MitraStar GPT-2741GNAC-N1. Este dispositivo é interessante pelo fato de ser um dos aparelhos mais utilizados nas casas dos brasileiros, fornecido por um dos provedores ou o maior provedor de acesso a internet no Brasil, é fácil de desmontar, há diversas informações principalmente de versões anteriores (GPT-2541GNAC) na internet, além de poder usar/testar alguns brinquedos de hardware hacking que adquirir recentemente. Como se trata de hardware, espero não quebrar (brickar) nada, já que não possuo backup, isso é um fator complicador para sucesso na análise.

GPT-2741GNAC-N1

Introdução:

No mundo dos dispositivos conectados (IoT), encontramos diversas abordagens interessantes do ponto de vista de segurança da informação.

Análise Inicial (hardware):

O primeiro passo antes de realizar qualquer procedimento relacionado ao hardware é analisá-lo da forma menos intrusiva possível. Como pode ser visto na imagem abaixo, o roteador possui na parte frontal os LEDs e indicadores, respectivamente de telefone, rede WiFi 2.4GHz, rede WiFi 5GHz e conexão com a internet.

GPT-2741GNAC-N1 – Parte da frente: GPT-2741GNAC-N1

Já na parte de trás as portas de conexão da esquerda para direita (conexão de energia, botão Power, conexão fibra óptica (ótica), uma conexão de telefone RJ11, quatro conexões de rede RJ45, botão WPS 2.4GHz, botão WPS 5GHz e por fim botão de reset do aparelho).

GPT-2741GNAC-N1 – Parte traseira: GPT-2741GNAC-N1

Durante a análise, localizamos os parafusos na parte de baixo da carcaça que predem cada peça no lugar. Com cuidado, abrimos o aparelho, revelando a placa com todos os componentes eletrônicos.

Placa base do roteador GPT-2741GNAC-N1: GPT-2741GNAC-N1

O próximo passo é identificar os componentes mais relevantes, tanto para saber como o aparelho funciona, quanto para buscar na internet informações sobre cada um deles.

GPT-2741GNAC-N1

Portas de debug:

Nos estágios iniciais, esse é o tipo mais básico de análise. Vamos simplesmente procurar por uma porta serial que os engenheiros que projetaram o dispositivo deixaram na placa para fins de depuração (debug) e/ou suporte técnico. Apesar que estamos realizando o processo em um roteador, ele pode ser aplicado a vários outros dispositivos IoT, que executam algum sistema embarcado (*unix), provavelmente também terá portas de depuração ocultas, parecida com as que procuramos nesse dispositivo.

Encontrando a porta serial:

Grande parte dos dispositivos comerciais possuem portas UART com 4 ou 6 pinos, geralmente bem alinhados e às vezes marcadas no PCB (Printed Circuit Board). Essas portas não são para usuários finais, logo quase nunca possuem pinos ou conectores na placa. Depois de analisar a placa por algum tempo, 3 conjuntos de pinos chamaram atenção (UART1, UART2 e uma possível interface JTAG).

GPT-2741GNAC-N1

Este dispositivo parecer ter 2 portas seriais para se comunicar com 2 circuitos integrados (CI) diferentes. Com base na localização na placa e seguindo os rastros podemos descobrir qual deles está conectado ao CI principal.

Identificando a pinagem:

Encontramos 2 fileiras de pinos que parecem ser portas UART (UART1 e UART2). A primeira coisa a fazer é descobrir se algum desses contatos não estão sendo utilizados e tentar identificar cada um desses pinos.

UART (Universal Asynchronous Receiver Transmitter) é um protocolo serial assíncrono que permite dois dispositivos se comunicarem. As duas linhas necessárias para cada parte são as linhas de transmissão (Tx) e recepção (Rx). Um UART pode ser usado para diversas finalidades em um sistema embarcado, incluindo comunicação com outros processadores, comunicações de sensores e acesso de depuração (debug). UART é um protocolo assíncrono, o que significa que não há necessidade de sinal de “clock”. Em vez disso, ambas as partes em comunicação são pré-configuradas para se comunicar a uma determinada velocidade, conhecida como taxa de transmissão. A taxa de transmissão é medida em bits por segundo.

UART

Temos 2 conectores com 4 pinos cada. Ainda não verificamos se as portas estão funcionando ou identificamos o protocolo serial usado pelo dispositivo, mas o número e a disposição dos pinos indicam UART.

No protocolo UART existem 6 tipos de pinos especificados:

Nessa primeira parte iremos abordar duas formas de identificar cada pino.

Vamos começar com um simples multímetro e identificar o pino GND (Ground) que é o mais fácil de encontrar.

No multímetro, coloque no modo contínuo (continuity mode) e teste cada um dos pinos, quando ouvir o som de um beep esse será o pino GND.

Multi

Agora podemos tentar encontrar os pinos Tx e Rx. Utilizando o multímetro coloque no modo 20V, ligue o dispositivo e teste cada um dos pinos que restaram. O pino que tiver 0 volts é provavelmente o pino Rx, pois está esperando receber dados. O pino que tiver uma voltagem flutuante será o Tx, esse é o pino transmissor, ele envia os dados do chip. No início é um pouco complicado identificar utilizando o multímetro, mas com o tempo e prática torna-se fácil a identificação.

Nota: Para identificar o Rx e Tx, sempre tente com o dispositivo reiniciando (boot), com ele já ligado após o processo de inicialização fica mais difícil pois não vai ter muita atividade do sinal.

PCB

Nem sempre será possível ver flutuações de tensão ao procurar uma porta serial. As flutuações estão diretamente relacionadas com a atividade do sinal, o que significa que, se houver pouco tráfego, você verá pouca ou nenhuma flutuação. Se você suspeitar que um PCB possui UART ou algum tipo de interface digital, é sempre uma boa ideia verificar com um analisador lógico.

Aqui que a brincadeira fica legal, a pouco tempo comprei um analisador lógico Saleae Logic 8 da empresa Saleae, que por sinal é um ótimo produto e pretendo utilizar em outras análises de hardware e trazer nas próximos postagens do blog.

Salae

Vamos conectar o analisador lógico na porta UART, seguindo a pinagem que encontramos anteriormente (Tx, Rx e GND).

Esquema

Salae

No software (Logic 2) utilizado em conjunto com o analisador lógico (Saleae Logic 8), percebemos o que parece atividade de sinal por conta das flutuações de tensão. Podemos ver alguns dados trafegando, o que significa que o roteador enviou informações do chip para o analisador lógico, logo estamos snifando o tráfego. Os analisadores lógicos nos ajudam a converter essas flutuações de tensão em zeros e uns (binário) onde fica mais fácil para interpretar, conforme ilustrado pela imagem abaixo.

Logic

Portanto, agora sabemos qual pino é qual, mas se quisermos falar com a porta serial, precisamos descobrir sua taxa de transmissão, com um analisador lógico isso fica fácil. Porém se não tiver um, terá que realizar tentativas de acerto e erro, com uma lista das taxas mais comuns utilizadas nos dispositivos. As taxas de transmissão padrão incluem 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 128000 e 256000 bits por segundo.

Após identificar a taxa de transmissão que nesse caso é 115200. Podemos utilizar o próprio software Logic 2 para decodificar o tráfego e verificar na aba Data o resultado. Essa funcionalidade de decodificação já vem incorporada com o software, por se tratar de um protocolo padrão e adotado pelo mercado (UART), em alguns casos, terá que fazer isso por conta própria utilizando o datasheet de cada chip ou verificar na internet se algum pesquisador já desenvolveu um módulo para decodificar aquele padrão específico.

Na imagem abaixo conseguimos visualizar o que parece com informações do bootloader do dispositivo.

Logic

Temos um UART ativo e conhecemos sua taxa de transmissão, agora precisamos encontrar uma maneira de conversar com ele. Para fazer isso, usaremos um circuito integrado que fornece uma solução simples para conversão USB-UART.

Conectando na Porta Serial:

Poderíamos utilizar uma infinidade de conversores (Hydrabus, bus pirate, flipper zero, jtagulator etc.), mas nesse caso vamos utilizar o mais simples e barato dentre eles, o CP2102 ilustrado na imagem abaixo.

CP2102

Para interagir com a porta serial do dispositivo, usaremos o utilitário screen do Linux. A tela requer que passemos a interface mapeada pelo sistema operacional (/dev/ttyUSB0) e a taxa de transmissão. Caso não consiga identificar qual a interface do CP2102 mapeado pelo sistema, pode verificar utilizando o comando dmesg.

Terminal

screen /dev/ttyUSB0 115200

Esta é a minha configuração final para comunicar com a porta serial do roteador.

PCB

Depois de conectar o CP2102 na porta UART do roteador e executar o comando screen no terminal, ligamos o dispositivo e podemos ver a tela de inicialização carregar (U-Boot).

Terminal

Após a inicialização do dispositivo, esperava conseguir acesso direto ao sistema (shell), mas para minha surpresa não aconteceu, em vez disso o roteador solicita uma credencial para liberar o acesso. =/

Terminal

Próximo passo:

Na parte 2 da análise, veremos como ter acesso ao sistema e/ou extrair o firmware do dispositivo.

Conclusão:

Essa primeira parte foi uma introdução para consolidar alguns conceitos básicos e aprender a reconhecer componentes e portas, que serão necessários para os procedimentos que vamos realizar nos próximos capítulos.

Stay tuned. \ 0/

comments powered by Disqus