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.