Como reverter e invadir o disco rígido externo auto-criptografado do Aigo. Parte 1: Dissecando em partes

Inverter e invadir unidades externas de auto-criptografia é o meu antigo hobby. No passado, eu costumava praticar com modelos como o Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Mais recentemente, um colega me trouxe outra exposição: Patriot (Aigo) SK8671, construída de acordo com um design típico - um indicador LCD e um teclado para inserir um código PIN. Aqui está o que veio dele ...


1. Introdução
2. Arquitetura de Hardware
2.1. Placa principal
2.2. Placa de LCD
2.3. Placa do teclado
2.4. Nós olhamos para os fios
3. A sequência de etapas do ataque
- 3.1 Remova o despejo de dados da unidade flash SPI
- 3.2 Cheirar a comunicação




1. Introdução



Habitação



Embalagem


O acesso aos dados armazenados no disco, supostamente criptografado, é realizado após a inserção do código PIN. Algumas notas introdutórias sobre este dispositivo:


  • Para alterar o código PIN, pressione F1 antes de desbloquear;
  • O código PIN deve ter entre 6 e 9 dígitos;
  • Após 15 tentativas incorretas, o disco é limpo.


2. Arquitetura de Hardware


Primeiro, preparamos o dispositivo em partes para entender em quais componentes ele consiste. A tarefa mais tediosa é abrir o caso: um monte de engrenagens microscópicas e plástico. Depois de abrir o gabinete, vemos o seguinte (preste atenção ao conector de cinco pinos soldado por mim):




2.1 Placa principal


A placa principal é bem simples:



Suas partes mais notáveis ​​(veja de cima para baixo):


  • Conector LCD (CN1);
  • tweeter (SP1);
  • Pm25LD010 ( especificação ) unidade flash SPI (U2);
  • 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 de LCD


Não há nada notável na placa de LCD.




Apenas:


  • Indicador LCD de origem desconhecida (provavelmente com uma fonte chinesa definida); com controle seqüencial;
  • conector de fita para placa de teclado.


2.3 Placa do teclado


Quando você olha para a placa do teclado, as coisas assumem uma reviravolta mais interessante.



Aqui, na parte traseira, vemos o conector da fita, bem como o Cypress CY8C21434 - o microcontrolador PSoC 1 (daqui em diante denominado simplesmente PSoC)



O CY8C21434 usa o conjunto de instruções M8C (consulte a documentação ). Na página do produto, é indicado que ele suporta a tecnologia CapSense (uma solução da Cypress, para teclados capacitivos). Aqui eu posso ver o conector de cinco pinos soldado por mim - esta é uma abordagem padrão para conectar um programador externo através da interface ISSP.



2.4 Nós olhamos para os fios


Vamos descobrir o que está relacionado a isso. Para fazer isso, basta tocar os fios com um multímetro:



Explicações para este diagrama desenhado por joelho:


  • PSoC é descrito na especificação técnica;
  • o próximo conector, o da direita, é uma interface ISSP que, por vontade do destino, corresponde ao que está escrito sobre ele na Internet;
  • o conector mais à direita é um terminal para um conector de fita com uma placa de teclado;
  • retângulo preto é um desenho do conector CN1, projetado para conectar a placa principal à placa de LCD. P11, P13 e P4 - conectado às pernas 11, 13 e 4 do PSoC na placa de LCD.


3. A sequência de etapas do 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 / armazenadas; 3) encontre onde exatamente o código PIN está marcado.


Para fazer isso, eu executei as seguintes etapas:


  • removeu um despejo de dados de uma unidade flash SPI;
  • Tentei remover o despejo de dados da unidade flash PSoC;
  • certificou-se de que a troca de dados entre o Cypress PSoC e o JMS539 realmente contenha as teclas pressionadas;
  • certificou-se de que, ao alterar a senha, nada seja substituído na unidade flash SPI;
  • estava com preguiça de reverter o firmware 8051 do JMS539.


3.1 Remova o despejo de dados da unidade flash SPI


Este procedimento é muito simples:


  • conecte as pontas de prova às pernas da unidade flash: CLK, MOSI, MISO e (opcionalmente) EN;
  • “Farejar” as comunicações usando um farejador usando um analisador lógico (usei o Saleae Logic Pro 16 );
  • decodificar o protocolo SPI e exportar os resultados para CSV;
  • Use decode_spi.rb para analisar os resultados e obter um despejo.

Observe que essa abordagem no caso do controlador JMS539 funciona especialmente bem, pois esse controlador carrega todo o firmware da unidade flash USB durante a fase de inicialização.


$ decode_spi.rb boot_spi1.csv dump 0.039776 : WRITE DISABLE 0.039777 : JEDEC READ ID 0.039784 : ID 0x7f 0x9d 0x21 --------------------- 0.039788 : READ @ 0x0 0x12,0x42,0x00,0xd3,0x22,0x00, [...] $ ls --size --block-size=1 dump 49152 dump $ sha1sum dump 3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dump 

Depois de remover o dump da unidade flash SPI, cheguei à conclusão de que sua única tarefa é armazenar o firmware da unidade de controle JMicron, que está embutida no microcontrolador 8051. Infelizmente, despejar a unidade flash SPI acabou sendo inútil:


  • ao alterar o código PIN, o despejo da unidade flash permanece o mesmo;
  • após o estágio de inicialização, o dispositivo não acessa a unidade flash SPI.


3.2 Cheirar a comunicação


Essa é uma maneira de descobrir qual chip é responsável por verificar as comunicações quanto ao tempo / conteúdo de interesse. Como já sabemos, o controlador USB-SATA está conectado ao LCD Cypress PSoC 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 inserimos no teclado: "123456 ~". Como resultado, vemos o diagrama a seguir.



Nele podemos ver três canais de troca de dados:


  • o canal P4 possui várias rajadas curtas;
  • em P11 e P13 - troca de dados quase contínua.

Aumentando a primeira rajada no canal P4 (o retângulo azul da figura anterior), vemos o seguinte:



Aqui você pode ver que no P4 há quase 70ms de um sinal uniforme, que, como me pareceu a princípio, desempenha o papel de um sinal de relógio. No entanto, tendo passado algum tempo tentando verificar meu palpite, descobri que este não é um sinal de relógio, mas um fluxo de áudio que é transmitido ao squeaker quando você pressiona as teclas. Portanto, esta seção de sinal em si não contém informações úteis para nós. No entanto, pode ser usado como um indicador - para saber o momento em que o PSoC registra um pressionamento de tecla.


No entanto, o último fluxo de áudio do canal P4 é um pouco diferente dos outros: este é o som do “código errado”!


Voltando ao diagrama de teclas, ao aumentar o diagrama do último fluxo de áudio (veja novamente o retângulo azul), obtemos:



Aqui vemos sinais monótonos em P11. Então parece que este é o relógio. E P13 são dados. Observe como o padrão muda após o final do sinal sonoro. Seria interessante ver o que está acontecendo aqui.


Os protocolos que funcionam com dois fios geralmente são SPI ou I2C, e a especificação técnica Cypress diz que esses contatos correspondem ao I2C, o que, como vemos, é verdadeiro para o nosso caso:



O chipset USB-SATA pesquisa constantemente o PSoC - para ler o estado da chave, cujo padrão é "0". Então, quando você pressiona a tecla "1", ela muda para "1". A transmissão final, imediatamente após pressionar “~”, será diferente se o código PIN incorreto for inserido. No entanto, no momento eu não verifiquei o que realmente foi transmitido lá. Mas suspeito que isso dificilmente é uma chave de criptografia. De qualquer forma, consulte a próxima seção para entender como eu removi o despejo do firmware interno do PSoC.

Source: https://habr.com/ru/post/pt455515/


All Articles