Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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
2. Hardwarearchitektur
– 2.1. Hauptplatine
– 2.2. LCD-Anzeigekarte
– 2.3. Tastaturplatine
– 2.4. Ein Blick auf die Kabel
3. Angriffsablauf
– 3.1. Dump der SPI-Flash-Daten aufnehmen
– 3.2. Kommunikation sniffen

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen


1. Einleitung

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen
Gehäuse

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen
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):

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

2.1. Hauptplatine

Die Hauptplatine ist ziemlich einfach:

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

Die bemerkenswertesten Teile (von oben nach unten):

  • Stecker für das LCD-Display (CN1);
  • Buzzer (SP1);
  • Pm25LD010 (Spezifikation) SPI-Flash (U2);
  • Jmicron JMS539-Controller (Spezifikation) 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.

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen
Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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.

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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).

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

Der CY8C21434 verwendet den M8C Befehlssatz (siehe. Dokumentation). Auf der [Produktseite](http://www.cypress.com/part/cy8c21434-24ltxi) es wird angegeben, dass es die Technologie unterstützt CapSense (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:

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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 Saleae Logic Pro 16);
  • dekodieren Sie das SPI-Protokoll und exportieren Sie die Ergebnisse in CSV;
  • verwenden Sie decode_spi.rb, 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 dump

Nachdem 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.

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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:

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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:

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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:

Reverse Engineering und Hacken einer selbstverschlüsselnden externen HDD von Aigo. Teil 1: Zerlegen

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

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster