Il reversing e l'hacking di unità auto-crittografanti esterne sono la mia lunga passione. In passato, ho sperimentato con modelli come Zalman VE-400, Zalman ZM-SHE500, e Zalman ZM-VE500. Recentemente, un collega mi ha portato un altro esemplare: Patriot (Aigo) SK8671, che segue un design tipico: un display LCD e una tastiera per inserire il PIN. Ecco cosa ne è venuto fuori...

1. Introduzione

Case

Imballaggio
L'accesso ai dati salvati sul disco, che si presume siano crittografati, è possibile solo dopo l'inserimento del PIN. Alcune osservazioni introduttive su questo dispositivo:
- Per cambiare il PIN è necessario premere F1 prima dello sblocco;
- Il PIN deve contenere da 6 a 9 cifre;
- Dopo 15 tentativi errati, il disco viene cancellato.
2. Architettura hardware
Iniziamo smontando il dispositivo per capire di quali componenti è composto. La parte più noiosa è l'apertura del case: ci sono molte viti microscopiche e plastica. Una volta aperto il case, vediamo il seguente (notate il connettore a cinque pin che ho saldato):

2.1. Scheda principale
La scheda principale è piuttosto semplice:

Le parti più notevoli (vedi dall'alto verso il basso):
- connettore per il display LCD (CN1);
- altoparlante (SP1);
- Pm25LD010 () chip flash SPI (U2);
- controller Jmicron JMS539 () per USB-SATA (U1);
- connettore USB 3 (J1).
Il chip flash SPI memorizza il firmware per JMS539 e alcune configurazioni.
2.2. Scheda del display LCD
Sulla scheda LCD non c'è nulla di particolare.


Solo:
- display LCD di origine sconosciuta (probabilmente con un set di caratteri cinese); 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, oltre a Cypress CY8C21434 – microcontrollore PSoC 1 (d'ora in poi lo chiameremo semplicemente PSoC)

CY8C21434 utilizza un set di istruzioni M8C (vedi. ). Nella [pagina del prodotto]() è indicato che supporta la tecnologia (una soluzione di Cypress per tastiere capacitive). Qui si può vedere il connettore a cinque pin che ho saldato – è un approccio standard per collegare un programmatore esterno tramite interfaccia ISSP.
2.4. Guardiamo i cavi
Comprendiamo cosa è collegato a cosa. Per farlo, è sufficiente controllare i cavi con un multimetro:

Spiegazioni per questo schema disegnato a mano:
- Il PSoC è descritto nelle specifiche tecniche;
- il connettore successivo, quello a destra – è l'interfaccia ISSP, che per una sorta di destino corrisponde a quanto scritto su di essa online;
- il connettore più a destra è il terminale per il connettore a nastro con la scheda della tastiera;
- il rettangolo nero – è il disegno del connettore CN1, destinato a collegare la scheda principale con la scheda LCD. P11, P13 e P4 sono collegate ai pin PSoC 11, 13 e 4, sulla scheda LCD.
3. Sequenza dei passi dell'attacco
Ora che sappiamo da quali componenti è composto questo dispositivo di archiviazione, 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 controllato il PIN.
Per questo ho eseguito i seguenti passaggi:
- ho effettuato il dump dei dati della memoria flash SPI;
- ho provato a effettuare il dump dei dati della memoria flash PSoC;
- ho verificato che lo scambio di dati tra Cypress PSoC e JMS539 contiene effettivamente i tasti premuti;
- ho confermato che, cambiando la password, nulla viene sovrascritto nella memoria flash SPI;
- ero troppo pigro per fare il reverse engineering del firmware 8051 di JMS539.
3.1. Effettuare il dump dei dati della memoria flash SPI
Questa procedura è molto semplice:
- collegare le sonde ai pin della flash: CLK, MOSI, MISO e (opzionalmente) EN;
- “annusare” le comunicazioni con un sniffatore, utilizzando un analizzatore logico (ho utilizzato il );
- decodificare il protocollo SPI ed esportare i risultati in CSV;
- utilizzare , per analizzare i risultati e ottenere il dump.
Si prega di notare che questo approccio funziona particolarmente bene con il controller JMS539, poiché questo controller carica l'intero firmware dalla 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 memoria 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 della memoria flash SPI si è rivelata inutile:
- quando si cambia il codice PIN, il dump della memoria rimane lo stesso;
- dopo la fase di inizializzazione, il dispositivo non accede alla memoria flash SPI.
3.2. Analizziamo le comunicazioni
Questo è uno dei modi per scoprire quale chip è responsabile della verifica delle comunicazioni, per il tempo/contenuto in questione. Come già sappiamo, il controller USB-SATA è collegato al Cypress PSoC LCD tramite il connettore CN1 e due bande. Pertanto, colleghiamo le sonde ai tre pin corrispondenti:
- P4, input/output comune;
- P11, I2C SCL;
- P13, I2C SDA.

Poi avviamo l'analizzatore logico Saleae e digitiamo sulla tastiera: “123456~”. Il risultato è il seguente diagramma.

In esso possiamo vedere tre canali di scambio dati:
- sul canale P4 ci sono alcuni brevi picchi;
- sui canali P11 e P13 – uno scambio dati quasi continuo.
Ingrossando il primo picco sul canale P4 (rettangolo blu della figura precedente), vediamo quanto segue:

Qui si vede che su P4 ci sono quasi 70 ms di segnale uniforme, che inizialmente pensavo fungesse da segnale di sincronizzazione. Tuttavia, dopo aver speso un po' di tempo a verificare la mia ipotesi, ho scoperto che non era un segnale di sincronizzazione, ma un flusso audio riprodotto su un altoparlante al momento della pressione dei tasti. Pertanto, questa porzione di segnale non contiene informazioni utili per noi. Tuttavia, può essere usata 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 'codice PIN errato'!
Tornando al grafico della pressione dei tasti, ingrandendo il grafico dell'ultimo flusso audio (vedi di nuovo il rettangolo blu), otteniamo:

Qui vediamo segnali uniformi su P11. Quindi sembra proprio che questo sia 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 succedendo qui.
I protocolli che operano con due fili sono solitamente SPI o I2C, e nella specifica tecnica di Cypress si afferma che questi contatti sono compatibili con I2C, il che è ovviamente valido anche per il nostro caso:

Il chipset USB-SATA interroga costantemente il PSoC per leggere lo stato del tasto, che per impostazione predefinita è "0". Poi, quando si preme il tasto, cambia in "1". La trasmissione finale, subito dopo aver premuto il “~”, è diversa se il codice PIN inserito è errato. Tuttavia, al momento non ho verificato cosa venga effettivamente trasmesso. Ma sospetto che difficilmente si tratti di 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
