Reversering og hacking af eksterne selv-krypterende drev er en gammel hobby for mig. Tidligere har jeg arbejdet med modeller som Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. For nylig bragte en kollega mig endnu et stykke: Patriot (Aigo) SK8671, som er bygget i et typisk design – LCD-indikator og tastatur til indtastning af PIN-kode. Her er hvad jeg fik ud af det...

1. Introduktion

Kasse

Pakning
Adgang til de gemte data på disken, som angiveligt er krypterede, opnås efter indtastning af PIN-koden. Nogle indledende bemærkninger om denne enhed:
- For at ændre PIN-koden skal du trykke på F1 før oplåsning;
- PIN-koden skal bestå af mellem 6 og 9 cifre;
- Efter 15 forkerte forsøg bliver disken slettet.
2. Hardware Arkitektur
Først adskiller vi enheden i dele for at forstå, hvilke komponenter den består af. Det mest besværlige arbejde er at åbne kabinettet: mange mikroskopiske skruer og plastik. Når kabinettet er åbnet, ser vi følgende (bemærk det fem-polede stik, jeg har loddet):

2.1. Hovedkort
Hovedkortet er ret enkelt:

De mest bemærkelsesværdige dele (se ovenfra og ned):
- stik til LCD-indikatoren (CN1);
- summer (SP1);
- Pm25LD010 () SPI-blitz (U2);
- kontroller Jmicron JMS539 () til USB-SATA (U1);
- USB 3 stik (J1).
SPI-blitzen opbevarer firmwaren til JMS539 og nogle indstillinger.
2.2. LCD-indikator Plade
Der er ikke noget bemærkelsesværdigt på LCD-kortet.


Det er bare:
- LCD-indikator af ukendt oprindelse (formentlig med et kinesisk skrifttype-sæt); med sekventiel kontrol;
- båndforbindelse til tastaturkortet.
2.3. Tastatur Plade
Ved inspektion af tastaturpladen tager tingene en mere interessant drejning.

Her, på bagsiden, ser vi et båndstik og Cypress CY8C21434 – PSoC 1 mikrokontroller (i resten af teksten kalder vi ham blot PSoC)

CY8C21434 bruger M8C instruktionssættet (se. ). På [produktens side]( () er det angivet, at den understøtter teknologien (løsning fra Cypress til kapacitive tastaturer). Her ses det fem-polede stik, jeg har loddet – dette er en standardmetode til at tilslutte en ekstern programmerer via ISSP-interface.
2.4. Vi ser på kablerne
Lad os finde ud af, hvad der hænger sammen her. Det er nok at teste kablerne med et multimeter:

Forklaringer til dette grovhåndte diagram:
- PSoC er beskrevet i den tekniske specifikation;
- den næste stik, den der er til højre - ISSP-grænsefladen, som ganske tilfældigt svarer til det, der står om den på internettet;
- det yderste stik - det er klemmen til den båndstik, der er forbundet til tastaturkortet;
- den sorte rektangel - tegningen af stik CN1, der er beregnet til at forbinde hovedkortet med LCD-kortet. P11, P13 og P4 er tilsluttet benene PSoC 11, 13 og 4 på LCD-kortet.
3. Angrebssekvens
Nu hvor vi ved, hvilke komponenter denne enhed består af, skal vi: 1) sikre os, at den grundlæggende krypteringsfunktionalitet faktisk er til stede; 2) finde ud af, hvordan krypteringsnøgler genereres/samles; 3) finde ud af, hvor koden kontrolleres.
Til dette har jeg udført følgende trin:
- taget et dump af SPI-flash'en;
- forsøgt at tage et dump af PSoC-flash'en;
- sikret mig, at datakommunikationen mellem Cypress PSoC og JMS539 faktisk indeholder de trykte taster;
- sikret mig, at der ikke skrives noget i SPI-flash'en, når adgangskoden ændres;
- har været for doven til at reverse-engineere 8051-firmware fra JMS539.
3.1. Tager dump af SPI-flash'en
Denne procedure er meget enkel:
- tilslut probene til benene på flash'en: CLK, MOSI, MISO og (valgfrit) EN;
- "sniffe" kommunikationen med en logger ved brug af en logisk analyzer (jeg brugte );
- dekode SPI-protokollen og eksportere resultaterne til CSV;
- bruge , for at parse resultaterne og få et dump.
Bemærk, at denne tilgang fungerer især godt med JMS539-controlleren, da denne controller under initialisering indlæser hele firmwaren fra flash'en.
$ 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 dumpEfter at have taget et dump fra SPI-flash'en, konkluderede jeg, at dens eneste opgave er at gemme firmwaren til JMicron-controlleren, der er indlejret i 8051-mikrocontrolleren. Desværre viste det sig, at dumpningen af SPI-flash'en var nytteløs:
- ved ændring af PIN-koden forbliver dumpen af flash'en den samme;
- efter initialiseringstrinnet henvender enheden sig ikke til SPI-flash'en.
3.2. Vi undersøger communicationerne
Dette er en af måderne at finde ud af, hvilken chip der håndterer kommunikationen for de ønskede tidspunkter/indhold. Som vi allerede ved, er USB-SATA-controlleren tilsluttet LCD Cypress PSoC via stik CN1 og to bånd. Så vi tilslutter sonder til de tre relevante ben:
- P4, generel ind/udgang;
- P11, I2C SCL;
- P13, I2C SDA.

Derefter starter vi Saleae-logikanalysatoren og indtaster på tastaturet: “123456~”. Resultatet viser følgende diagram.

På dette kan vi se tre kanaler for dataoverførsel:
- på kanal P4 flere korte impulser;
- på P11 og P13 – næsten kontinuerlig dataoverførsel.
Ved at forstørre den første impuls på kanal P4 (den blå rektangel fra det forrige billede), kan vi se følgende:

Her kan man se, at der på P4 er næsten 70 ms ensartet signal, som jeg først troede var et synk-signals rolle. Men efter at have brugt lidt tid på at bekræfte min hypotese, fandt jeg ud af, at det ikke var et synk-signal, men en audio-strøm, der sendes til piezo-hornet ved tryk på tasterne. Derfor indeholder dette signalsegment ikke nyttige oplysninger for os. Dog kan det bruges som indikator — for at vide, hvornår PSoC registrerer et tastetryk.
Men den sidste audio-strøm på kanal P4 adskiller sig lidt fra de andre: det er lyden for 'forkert pinkode'!
Når vi vender tilbage til diagrammet for tastetryk, får vi ved at forstørre diagrammet for den sidste audio-strøm (se igen den blå rektangel):

Her ser vi ensartede signaler på P11. Så det ser ud til, at dette er synk-signalet. Og P13 – data. Bemærk, hvordan mønsteret ændrer sig efter afslutningen af lyden. Det ville være interessant at se, hvad der sker her.
Protokoller, der arbejder med to ledninger, er typisk SPI eller I2C, og i den tekniske specifikation for Cypress står der, at disse kontakter svarer til I2C, hvilket som vi ser også gælder for vores tilfælde:

USB-SATA-chipsættet spørger konstant PSoC for at læse tilstanden af knappen, som som standard er "0". Når knappen trykkes, ændres den til "1". Den endelige transmission, lige efter tryk på "~", adskiller sig, hvis der indtastes en forkert pinkode. Men jeg har endnu ikke kontrolleret, hvad der faktisk bliver sendt. Men jeg tvivler på, at det er krypteringsnøglen. Under alle omstændigheder, se næste afsnit for at forstå, hvordan jeg udtræk internt firmware fra PSoC.
Kilde: habr.com
