ProHoster > Blog > administração > Revertendo e hackeando a unidade HDD externa com criptografia automática Aigo. Parte 1: Dissecando em partes
Revertendo e hackeando a unidade HDD externa com criptografia automática Aigo. Parte 1: Dissecando em partes
Reverter e hackear unidades externas com criptografia automática é meu antigo hobby. No passado, tive a oportunidade de praticar com modelos como Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Recentemente, um colega me trouxe outra exposição: Patriot (Aigo) SK8671, que é construído de acordo com um design típico - um indicador LCD e um teclado para inserir um código PIN. Foi isso que saiu…
O acesso aos dados armazenados no disco, supostamente criptografados, é feito após a inserção do código PIN. Algumas notas introdutórias sobre este dispositivo:
Para alterar o código PIN, você deve pressionar F1 antes de desbloquear;
O código PIN deve conter de 6 a 9 dígitos;
Após 15 tentativas incorretas, o disco é limpo.
2. Arquitetura de hardware
Primeiro, dissecamos o dispositivo em partes para entender em que componentes ele consiste. A tarefa mais tediosa é abrir a caixa: muitos parafusos microscópicos e plástico. Abrindo o gabinete, vemos o seguinte (preste atenção no conector de cinco pinos que soldei):
2.1. Placa principal
A placa principal é bastante simples:
Suas partes mais notáveis (veja de cima para baixo):
Controlador Jmicron JMS539 (especificação) para USB-SATA (U1);
Conector USB 3 (J1).
A unidade flash SPI armazena o firmware do JMS539 e algumas configurações.
2.2. Placa indicadora LCD
Não há nada notável na placa LCD.
Apenas:
Indicador LCD de origem desconhecida (provavelmente com fonte chinesa); com controle sequencial;
Conector de fita para placa de teclado.
2.3. Placa do teclado
Ao examinar o teclado, as coisas ficam mais interessantes.
Aqui, na parte traseira, vemos um conector de fita, bem como um microcontrolador Cypress CY8C21434 PSoC 1 (doravante simplesmente o chamaremos de PSoC)
CY8C21434 usa o conjunto de instruções M8C (consulte documentação). Na [página do produto]((http://www.cypress.com/part/cy8c21434-24ltxi) é indicado que suporta a tecnologia CapSense (solução da Cypress, para teclados capacitivos). Aqui você pode ver o conector de cinco pinos que soldei - esta é uma abordagem padrão para conectar um programador externo através da interface ISSP.
2.4. Olhando para os fios
Vamos descobrir o que está conectado aqui. Para isso basta testar os fios com um multímetro:
Explicações para este diagrama desenhado no joelho:
O PSoC está descrito na especificação técnica;
o próximo conector, o da direita, é a interface ISSP, que, por vontade do destino, corresponde ao que está escrito sobre ela na Internet;
O conector mais à direita é o terminal do conector de fita para a placa do teclado;
O retângulo preto é um desenho do conector CN1, projetado para conectar a placa principal à placa LCD. P11, P13 e P4 estão conectados aos pinos 11, 13 e 4 do PSoC, na placa LCD.
3. Sequência de etapas de ataque
Agora que sabemos em que componentes esta unidade consiste, precisamos: 1) garantir que a funcionalidade básica de criptografia esteja realmente presente; 2) descobrir como as chaves de criptografia são geradas/salvas; 3) descubra onde exatamente o código PIN será verificado.
Para fazer isso, executei os seguintes passos:
fez um despejo de dados de uma unidade flash SPI;
tentei despejar dados de uma unidade flash PSoC;
verificou que a comunicação entre Cypress PSoC e JMS539 realmente contém pressionamentos de tecla;
Certifiquei-me de que ao alterar a senha nada fosse sobrescrito no pen drive SPI;
estava com preguiça de reverter o firmware 8051 do JMS539.
3.1. Fazendo um despejo de dados de uma unidade flash SPI
Este procedimento é muito simples:
conecte as sondas às pernas do pen drive: CLK, MOSI, MISO e (opcional) EN;
“farejar” comunicações com um sniffer usando um analisador lógico (usei Saleae Lógica Pro 16);
decodificar protocolo SPI e exportar resultados para CSV;
aproveite decode_spi.rbpara analisar os resultados e obter um despejo.
Observe que esta abordagem funciona especialmente bem no caso do controlador JMS539, uma vez que este controlador carrega todo o firmware da unidade flash no estágio de inicialização.
Depois de fazer um dump da unidade flash SPI, cheguei à conclusão de que sua única tarefa é armazenar o firmware do dispositivo de controle JMicron, que está embutido no microcontrolador 8051. Infelizmente, despejar a unidade flash SPI acabou sendo inútil:
quando o código PIN é alterado, o despejo da unidade flash permanece o mesmo;
Após a etapa de inicialização, o dispositivo não acessa o pen drive SPI.
3.2. Farejando comunicações
Essa é uma forma de descobrir qual chip é responsável por verificar as comunicações para o horário/conteúdo de interesse. Como já sabemos, o controlador USB-SATA está conectado ao Cypress PSoC LCD através do conector CN1 e duas fitas. Portanto, conectamos as sondas às três pernas correspondentes:
P4, entrada/saída geral;
P11, I2C SCL;
P13, I2C SDA.
Em seguida, iniciamos o analisador lógico Saleae e digitamos no teclado: “123456~”. Como resultado, vemos o diagrama a seguir.
Nele podemos ver três canais de troca de dados:
há vários bursts curtos no canal P4;
em P11 e P13 - troca de dados quase contínua.
Ampliando o primeiro pico do canal P4 (retângulo azul na figura anterior), vemos o seguinte:
Aqui você pode ver que no P4 há quase 70ms de um sinal monótono, que a princípio me pareceu desempenhar o papel de um sinal de clock. No entanto, depois de passar algum tempo verificando meu palpite, descobri que este não é um sinal de relógio, mas um fluxo de áudio que sai para o tweeter quando as teclas são pressionadas. Portanto, esta seção do sinal em si não contém informações úteis para nós. Porém, pode ser usado como um indicador para saber quando o PSoC registra um pressionamento de tecla.
No entanto, o fluxo de áudio P4 mais recente é um pouco diferente: é o áudio do “PIN inválido”!
Voltando ao gráfico de teclas digitadas, ampliando o último gráfico de fluxo de áudio (veja o retângulo azul novamente), obtemos:
Aqui vemos sinais monótonos em P11. Então parece que este é o sinal do relógio. E P13 são dados. Observe como o padrão muda após o término do bipe. Seria interessante ver o que acontece aqui.
Os protocolos que funcionam com dois fios geralmente são SPI ou I2C, e a especificação técnica do Cypress afirma que esses pinos correspondem ao I2C, o que vemos ser verdade no nosso caso:
O chipset USB-SATA pesquisa constantemente o PSoC para ler o estado da chave, que por padrão é “0”. Então, ao pressionar a tecla “1”, ela muda para “1”. A transmissão final imediatamente após pressionar “~” será diferente se o código PIN errado for inserido. No entanto, no momento não verifiquei o que realmente está sendo transmitido para lá. Mas suspeito que é improvável que seja uma chave de criptografia. De qualquer forma, veja a próxima seção para entender como removi o firmware interno do PSoC.