Das Reverse Engineering und die Manipulation externen selbstverschlüsselnder Speicherlaufwerke ist seit langem mein Hobby. In der Vergangenheit habe ich mit Modellen wie dem Zalman VE-400, Zalman ZM-SHE500 und Zalman ZM-VE500 experimentiert. Kürzlich hat mir ein Kollege ein weiteres Exemplar gebracht: die Patriot (Aigo) SK8671, die ein typisches Design mit einem LCD-Display und einer Tastatur zur Eingabe des PIN-Codes aufweist. Hier ist, was ich damit erreicht habe...

1. Einleitung

Gehäuse

Verpackung
Der Zugang zu den auf der Festplatte gespeicherten, vermeintlich verschlüsselten Daten erfolgt nach Eingabe des PIN-Codes. Einige einleitende Hinweise zu diesem Gerät:
- Um den PIN-Code zu ändern, drücken Sie F1 vor der Entsperrung;
- Der PIN-Code muss aus 6 bis 9 Ziffern bestehen;
- Nach 15 falschen Eingaben wird das Laufwerk gelöscht.
2. Hardwarearchitektur
Zuerst zerlegen wir das Gerät, um zu verstehen, aus welchen Komponenten es besteht. Der mühsamste Teil ist das Öffnen des Gehäuses: viele mikroskopisch kleine Schrauben und Plastik. Nach dem Öffnen des Gehäuses sehen wir Folgendes (beachten Sie den von mir angefügten fünfpoligen Stecker):

2.1. Hauptplatine
Die Hauptplatine ist ziemlich einfach:

Die bemerkenswertesten Teile (von oben nach unten):
- Stecker für das LCD-Display (CN1);
- Buzzer (SP1);
- Pm25LD010 () SPI-Flash (U2);
- Jmicron JMS539-Controller () für USB-SATA (U1);
- USB 3 Stecker (J1).
Das SPI-Flash speichert die Firmware für den JMS539 und einige Einstellungen.
2.2. LCD-Board
Auf dem LCD-Board gibt es nichts Bemerkenswertes.


Nur:
- LCD-Display unbekannter Herkunft (wahrscheinlich mit einem chinesischen Schriftsatz); mit serieller Steuerung;
- Flachbandstecker für das Tastaturboard.
2.3. Tastaturplatine
Bei der Betrachtung der Tastaturplatine wird es interessanter.

Hier auf der Rückseite sehen wir einen Flachbandstecker sowie den Cypress CY8C21434 – den PSoC 1 Mikrocontroller (im Folgenden bezeichnen wir ihn einfach als PSoC).

Der CY8C21434 verwendet den M8C Befehlssatz (siehe. ). Auf der [Produktseite]() es wird angegeben, dass es die Technologie unterstützt (eine Lösung von Cypress für kapazitive Tastaturen). Hier ist der von mir eingelötete fünfpolige Anschluss zu sehen – dies ist der Standardansatz zum Anschluss eines externen Programmiergeräts über die ISSP-Schnittstelle.
2.4. Wir betrachten die Kabel
Lassen Sie uns klären, was hier miteinander verbunden ist. Dazu genügt es, die Kabel mit einem Multimeter durchzuschalten:

Erklärungen zu diesem grob skizzierten Schaltbild:
- Der PSoC ist in der technischen Spezifikation beschrieben;
- der nächste Anschluss, der rechts liegt – ISSP-Schnittstelle, die, wie es der Zufall will, dem entspricht, was darüber im Internet steht;
- der ganz rechte Anschluss – dies ist die Klemme für den Flachbandverbinder zur Tastaturplatine;
- schwarzes Rechteck – die Zeichnung des Anschlusses CN1, bestimmt für die Verbindung der Hauptplatine mit der LCD-Platine. P11, P13 und P4 sind mit den Pins PSoC 11, 13 und 4 auf der LCD-Platine verbunden.
3. Angriffsablauf
Jetzt, wo wir wissen, aus welchen Komponenten dieser Speicher besteht, müssen wir: 1) sicherstellen, dass die grundlegende Funktionalität der Verschlüsselung tatsächlich vorhanden ist; 2) herausfinden, wie die Verschlüsselungsschlüssel generiert/speichern werden; 3) feststellen, wo genau der PIN-Code überprüft wird.
Zu diesem Zweck habe ich die folgenden Schritte unternommen:
- Ich habe ein Daten-Dump der SPI-Flash Memory erstellt.
- Ich habe versucht, ein Daten-Dump des PSoC-Flash Memory zu erstellen.
- Ich habe sichergestellt, dass der Datenaustausch zwischen Cypress PSoC und JMS539 tatsächlich die gedrückten Tasten enthält.
- Ich habe bestätigt, dass beim Ändern des Passworts im SPI-Flash Memory nichts überschrieben wird.
- Ich war zu faul, um die 8051-Firmware von JMS539 zu analysieren.
3.1. Erstellen eines Daten-Dumps des SPI-Flash Memory
Dieses Verfahren ist sehr einfach:
- Schließen Sie die Sonden an die Pins des Flash Memory: CLK, MOSI, MISO und (optional) EN an;
- überwachen Sie die Kommunikation mit einem Sniffer, indem Sie einen logischen Analyzer verwenden (ich habe das verwendet );
- dekodieren Sie das SPI-Protokoll und exportieren Sie die Ergebnisse in CSV;
- verwenden Sie , um die Ergebnisse zu parsen und den Dump zu erhalten.
Bitte beachten Sie, dass dieser Ansatz besonders gut mit dem JMS539-Controller funktioniert, da dieser Controller beim Initialisierungsprozess die gesamte Firmware vom Flash speichert.
$ 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 dumpNachdem ich ein Dump von dem SPI-Flash gemacht habe, kam ich zu dem Schluss, dass dessen einzige Aufgabe darin besteht, die Firmware für das JMicron-Steuergerät zu speichern, das in den 8051-Mikrocontroller integriert ist. Leider war das Erstellen des Dumps des SPI-Flashs nutzlos:
- bei Änderung des PIN-Codes bleibt der Dump des Flashs derselbe;
- nach dem Initialisierungsprozess greift das Gerät nicht auf den SPI-Flash zu.
3.2. Untersuchen der Kommunikation
Dies ist eine Methode, um herauszufinden, welcher Chip für die Überprüfung der Kommunikation verantwortlich ist, die für bestimmte Zeit/Inhalte von Interesse ist. Wie bereits bekannt, ist der USB-SATA-Controller mit dem Cypress PSoC-LCD über den Anschluss CN1 und zwei Flachbandkabel verbunden. Daher schließen wir Sonde an die drei entsprechenden Pins an:
- P4, allgemeine Ein- und Ausgabe;
- P11, I2C SCL;
- P13, I2C SDA.

Dann starten wir den Saleae-Logikanalysator und geben auf der Tastatur ein: "123456~". Das Ergebnis zeigt folgendes Diagramm.

Darin können wir drei Datenkanäle sehen:
- auf dem Kanal P4 mehrere kurze Impulse;
- auf P11 und P13 – fast kontinuierlicher Datenaustausch.
Wenn wir den ersten Impuls auf dem Kanal P4 (blaues Rechteck der vorherigen Abbildung) vergrößern, sehen wir Folgendes:

Hier ist zu sehen, dass auf P4 fast 70 ms gleichmäßiges Signal zu sehen ist, das mir zunächst wie ein Synchronisationssignal erschien. Nachdem ich jedoch etwas Zeit investiert habe, um meine Vermutung zu überprüfen, stellte ich fest, dass es sich nicht um ein Synchronisationssignal handelt, sondern um einen Audio-Stream, der beim Drücken der Tasten an den Piezo-Lautsprecher ausgegeben wird. Daher enthält dieser Abschnitt des Signals für uns allein keine nützlichen Informationen. Dennoch kann er als Indikator verwendet werden, um zu wissen, wann PSoC eine Tasteneingabe registriert.
Der letzte Audio-Stream des Kanals P4 unterscheidet sich jedoch etwas von den anderen: Es handelt sich um den Ton für „falsche PIN-Nummer“!
Wenn wir zur Tasteneingabe-Diagramm zurückkehren und das Diagramm des letzten Audio-Streams vergrößern (siehe erneut das blaue Rechteck), erhalten wir:

Hier sehen wir gleichmäßige Signale auf P11. Es scheint so, als wäre dies das Synchronisationssignal. P13 enthält die Daten. Beachten Sie, wie sich das Muster ändert, nachdem das Tonsignal beendet ist. Es wäre interessant zu sehen, was hier passiert.
Protokolle, die mit zwei Drähten arbeiten, sind normalerweise SPI oder I2C, und in den technischen Spezifikationen von Cypress wird angegeben, dass diese Pins I2C entsprechen, was in unserem Fall ebenfalls zutrifft:

Der USB-SATA-Chipsatz fragt ständig den PSoC ab, um den Zustand der Taste zu lesen, der standardmäßig „0“ beträgt. Wenn die Taste „1“ gedrückt wird, ändert sich dieser auf „1“. Die endgültige Übertragung, direkt nach dem Drücken von „~“, unterscheidet sich, wenn ein falscher PIN-Code eingegeben wird. Allerdings habe ich bisher nicht überprüft, was tatsächlich übertragen wird. Ich vermute jedoch, dass es sich kaum um einen Verschlüsselungsschlüssel handelt. Sieh dir dennoch den nächsten Abschnitt an, um zu verstehen, wie ich die innere Firmware des PSoC abgezogen habe.
Quelle: habr.com
