Il reverse engineering e l'hacking di unità esterne auto-crittografate è una mia passione di lunga data. In passato ho avuto modo di lavorare con modelli come Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Recentemente un collega mi ha portato un altro campione: Patriot (Aigo) SK8671, che è costruito con un design tipico: un display LCD e una tastiera per l'inserimento del PIN. Ecco cosa ne è venuto fuori...

1. Introduzione

Scocca

Imballaggio
L'accesso ai dati salvati sul disco, che si presume siano crittografati, avviene dopo l'inserimento del codice PIN. Alcune osservazioni introduttive su questo dispositivo:
- Per cambiare il codice PIN è necessario premere F1 prima della sblocco;
- Il codice PIN deve contenere da 6 a 9 cifre;
- Dopo 15 tentativi errati, il disco viene pulito.
2. Architettura hardware
Iniziamo a smontare il dispositivo per capire di quali componenti è composto. L'attività più noiosa è aprire l'involucro: ci sono molte viti microscopiche e plastica. Dopo aver aperto l'involucro, vediamo quanto segue (notate il connettore a cinque pin che ho saldato):

2.1. Scheda madre
La scheda madre è piuttosto semplice:

Le parti più significative (vedi dall'alto verso il basso):
- connettore per display LCD (CN1);
- croggiatore (SP1);
- Pm25LD010 () flash SPI (U2);
- controller Jmicron JMS539 () per USB-SATA (U1);
- connettore USB 3 (J1).
La flash SPI contiene il firmware per il JMS539 e alcune impostazioni.
2.2. Scheda del display LCD
Sulla scheda LCD non c'è nulla di rilevante.


Solo:
- Display LCD di origine sconosciuta (probabilmente con font cinesi); con gestione seriale;
- connettore a nastro per la scheda della tastiera.
2.3. Scheda della tastiera
Esaminando la scheda della tastiera, le cose prendono una piega più interessante.

Qui, sul retro, vediamo un connettore a nastro e anche il Cypress CY8C21434 – microcontrollore PSoC 1 (da ora in poi lo chiameremo semplicemente PSoC)

Il CY8C21434 utilizza un set di istruzioni M8C (vedi. ). Nella [pagina del prodotto]( () è indicato che supporta la tecnologia (risoluzione da Cypress, per tastiere capacitive). Qui si vede il connettore a cinque pin saldato da me - questo è l'approccio standard per collegare un programmatore esterno tramite l'interfaccia ISSP.
2.4. Guardiamo i fili
Analizziamo a cosa sono collegati. Per fare ciò, basta testare i fili con un multimetro:

Spiegazioni per questo schema disegnato alla bell'è meglio:
- Il PSoC è descritto nella specifica tecnica;
- il connettore successivo, quello a destra - è l'interfaccia ISSP, che per ironia della sorte corrisponde a quanto scritto su di essa in rete;
- il connettore più a destra - è il terminale per il connettore a nastro con la scheda della tastiera;
- il rettangolo nero - il progetto del connettore CN1, destinato a collegare la scheda principale con la scheda LCD. P11, P13 e P4 - sono collegati ai pin PSoC 11, 13 e 4 sulla scheda LCD.
3. Sequenza di passaggi dell'attacco
Ora che sappiamo di quali componenti è composto questo dispositivo, dobbiamo: 1) assicurarci che la funzionalità di base della crittografia sia effettivamente presente; 2) scoprire come vengono generati/salvati le chiavi di crittografia; 3) trovare dove viene verificato il codice PIN.
Per questo ho seguito i seguenti passaggi:
- ho estratto il dump dei dati dalla memoria flash SPI;
- ho cercato di estrarre il dump dei dati dalla memoria flash PSoC;
- ho verificato che lo scambio di dati tra il Cypress PSoC e JMS539 contenga effettivamente i tasti premuti;
- mi sono assicurato che, durante la modifica della password, nulla venga riscritto nella memoria flash SPI;
- ero troppo pigro per fare il reverse engineering del firmware 8051 di JMS539.
3.1. Estrazione del dump dei dati dalla memoria flash SPI
Questa procedura è molto semplice:
- collegare le sonde ai pin della memoria flash: CLK, MOSI, MISO e (opzionalmente) EN;
- "annusare" le comunicazioni con uno sniffer, usando un analizzatore logico (ho utilizzato );
- decodificare il protocollo SPI ed esportare i risultati in CSV;
- utilizzare , per analizzare i risultati e ottenere il dump.
Si noti che questo approccio nel caso del controller JMS539 funziona particolarmente bene, poiché questo controller carica tutta la firmware dalla memoria flash durante la fase di inizializzazione.
$ 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 dumpDopo aver estratto il dump dalla flash SPI, sono giunto alla conclusione che il suo unico compito è memorizzare il firmware per il dispositivo di controllo JMicron, che è integrato nel microcontrollore 8051. Sfortunatamente, l'estrazione del dump dalla flash SPI si è rivelata inutile:
- quando si cambia il codice PIN, il dump della flash rimane lo stesso;
- dopo la fase di inizializzazione, il dispositivo non comunica con la flash SPI.
3.2. Analizziamo le comunicazioni
Questo è uno dei modi per scoprire quale chip è responsabile del controllo delle comunicazioni, per il tempo/contenuto di interesse. Come sappiamo, il controller USB-SATA è collegato al chip Cypress PSoC, tramite il connettore CN1 e due strisce. Pertanto, collegamosi ai tre pin corrispondenti:
- P4, I/O generale;
- P11, I2C SCL;
- P13, I2C SDA.

Poi avviamo l'analizzatore logico Saleae e digitiamo sulla tastiera: “123456~”. Di conseguenza, vediamo il seguente diagramma.

In esso possiamo vedere tre canali di scambio dati:
- sul canale P4 ci sono alcune brevi pulsazioni;
- sui canali P11 e P13 c'è un flusso di dati quasi continuo.
Ingrosando la prima pulsazione sul canale P4 (il rettangolo blu della figura precedente), vediamo quanto segue:

Qui possiamo notare che su P4 c'è quasi 70 ms di segnale uniforme, che inizialmente mi è sembrato un segnale di sincronizzazione. Tuttavia, dopo aver dedicato del tempo a controllare la mia ipotesi, ho scoperto che non si trattava di un segnale di sincronizzazione, ma di un flusso audio che viene emesso tramite un buzzer quando vengono premuti i tasti. Quindi, questa sezione del segnale non contiene informazioni utili per noi. Tuttavia, può essere utilizzata come indicatore, per sapere quando il PSoC registra la pressione di un tasto.
Tuttavia, l'ultimo flusso audio del canale P4 è leggermente diverso dagli altri: è il suono per il "codice PIN non valido"!
Tornando al diagramma della pressione dei tasti, ingrosando il diagramma dell'ultimo flusso audio (vedi di nuovo il rettangolo blu), otteniamo:

Qui vediamo segnali uniformi su P11. Quindi appare chiaro che questo è il segnale di sincronizzazione. E P13 sono i dati. Nota come il modello cambia dopo la fine del segnale sonoro. Sarebbe interessante vedere cosa sta accadendo qui.
I protocolli che operano con due fili sono solitamente SPI o I2C, e nella specifica tecnica del Cypress si afferma che questi contatti corrispondono a I2C, il che, come vediamo, è valido anche nel nostro caso:

Il chipset USB-SATA interroga continuamente il PSoC per leggere lo stato del pulsante, che di default è '0'. Poi, premendo il pulsante '1', cambia a '1'. La trasmissione finale, immediatamente dopo aver premuto '~', è diversa se viene inserito un PIN errato. Tuttavia, al momento non ho verificato cosa venga effettivamente trasmesso. Ma sospetto che probabilmente non sia una chiave di crittografia. In ogni caso, guarda la sezione successiva per capire come ho estratto il dump del firmware interno del PSoC.
Fonte: habr.com
