Att Ă„terverse och hacka externa sjĂ€lv-krypterande enheter har lĂ€nge varit min hobby. Tidigare har jag arbetat med sĂ„dana modeller som Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Nyligen fick jag en ny enhet av en kollega: Patriot (Aigo) SK8671, som Ă€r byggd med en typisk design â en LCD-skĂ€rm och ett tangentbord för att ange PIN-kod. HĂ€r Ă€r vad jag kom fram tillâŠ

1. Inledning

Chassi

Förpackning
à tkomst till data som pÄstÄs vara krypterade pÄ disken fÄs efter att PIN-koden angetts. NÄgra inledande kommentarer om denna enhet:
- För att Àndra PIN-koden mÄste F1 tryckas ned före upplÄsning;
- PIN-koden mÄste bestÄ av mellan 6 och 9 siffror;
- Efter 15 misslyckade försök raderas disken.
2. HÄrdvaruarkitektur
Först demonterar vi enheten för att förstÄ vilka komponenter den bestÄr av. Det mest trÄkiga momentet Àr att öppna chassit: mÄnga mikroskopiska skruvar och plast. NÀr vi har öppnat chassit ser vi följande (notera den fempoliga kontakt som jag har lött fast):

2.1. Moderkort
Moderkortet Àr ganska enkelt:

De mest anmÀrkningsvÀrda delarna (se ovanifrÄn och ner):
- kontakt för LCD-skÀrm (CN1);
- summer (SP1);
- Pm25LD010 () SPI-flash (U2);
- kontrollern Jmicron JMS539 () för USB-SATA (U1);
- USB 3-kontakt (J1).
SPI-flash-minnet lagrar firmware för JMS539 och vissa instÀllningar.
2.2. LCD-skÀrmkretskort
Det finns inget anmÀrkningsvÀrt pÄ LCD-kortet.


Bara:
- LCD-skÀrm av okÀnt ursprung (troligen med ett kinesiskt typsnittssÀtt); med seriell styrning;
- bandkabel för tangentbordskortet.
2.3. Tangentbordskort
Vid inspektion av tangentbordskortet fÄr saker en mer intressant vÀndning.

HĂ€r pĂ„ baksidan ser vi en bandkabel och ocksĂ„ Cypress CY8C21434 â en PSoC 1 mikroprocessor (hĂ€danefter kallad PSoC).

CY8C21434 anvĂ€nder M8C instruktioner (se. ). PĂ„ [produktens sida]( () anges att den stöder teknologin (lösning frĂ„n Cypress för kapacitiva tangentbord). HĂ€r ser vi den fempoliga kontakt som jag lött fast â det Ă€r en standardmetod för att ansluta en extern programmerare via ISSP-grĂ€nssnittet.
2.4. Titta pÄ kablarna
LÄt oss reda ut vad som hÀnger ihop hÀr. För detta rÀcker det med att mÀta kablarna med en multimeter:

Förklaringar till detta hastigt ritade diagram:
- PSoC beskrivs i den tekniska specifikationen;
- den nÀsta kontakten, den som ligger till höger - ISSP-grÀnssnittet, som av ödet överensstÀmmer med vad som stÄr om det pÄ Internet;
- den allra högra kontakten - detta Àr terminalen för bandanslutningen med tangentbordsplÄten;
- den svarta rektangeln - ritning av kontakten CN1, avsedd för att ansluta huvudkortet med LCD-kortet. P11, P13 och P4 - Àr anslutna till benen PSoC 11, 13 och 4 pÄ LCD-kortet.
3. Steg för attacksekvens
Nu nÀr vi vet vilka komponenter denna lagringsenhet bestÄr av, behöver vi: 1) sÀkerstÀlla att den grundlÀggande krypteringsfunktionen verkligen Àr nÀrvarande; 2) ta reda pÄ hur krypteringsnycklar genereras/sparas; 3) finna ut var PIN-koden kontrolleras.
För detta gjorde jag följande steg:
- tog en dump av SPI-flashminnet;
- försökte ta en dump av PSoC-flashminnet;
- försÀkra mig om att datakommunikationen mellan Cypress PSoC och JMS539 faktiskt innehÄller tryckta tangenter;
- visade mig att ingenting skrivs om i SPI-flashminnet vid Àndring av lösenord;
- var för lat för att reversera 8051-firmware frÄn JMS539.
3.1. Tar dump av SPI-flashminnet
Denna procedur Àr mycket enkel:
- anslut sonderna till benen pÄ flashminnet: CLK, MOSI, MISO och (valfritt) EN;
- "sniffa" kommunikationen med en sniffare, med hjÀlp av en logikanalysator (jag anvÀnde );
- avkoda SPI-protokollet och exportera resultaten i CSV;
- anvÀnda , för att parsa resultaten och fÄ dumpen.
Observera att denna metod för JMS539-kontrollern fungerar sÀrskilt bra, eftersom denna controller under initialiseringen laddar hela firmware frÄn flashminnet.
$ 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 att ha tagit dumpen frÄn SPI-flashminnet kom jag fram till att dess enda uppgift Àr att lagra firmware för JMicron-kontrollern, som Àr inbyggd i 8051-mikrokontrollern. TyvÀrr visade det sig att dumpen av SPI-flashminnet var vÀrdelös:
- vid Àndring av PIN-koden förblir dumpen av flashminnet densamma;
- efter initialiseringssteget kommunicerar enheten inte lÀngre med SPI-flashminnet.
3.2. Vi sniffar kommunikationen
Detta Àr ett av sÀtten att hitta vilken chip som ansvarar för att verifiera kommunikationen för de intressanta tids-/innehÄllsdelarna. Som vi redan vet Àr USB-SATA-kontrollern kopplad till LCD Cypress PSoC genom CN1-kontakten och tvÄ band. SÄ vi ansluter sonderna till de tre motsvarande stift:
- P4, allmÀnt in-/utgÄng;
- P11, I2C SCL;
- P13, I2C SDA.

DĂ€refter startar vi logikanalysatorn Saleae och skriver pĂ„ tangentbordet: â123456~â. Resultatet visar följande diagram.

PĂ„ det kan vi se tre datakanaler:
- pÄ kanal P4 nÄgra korta pulsar;
- pĂ„ P11 och P13 â nĂ€stan kontinuerlig datakommunikation.
NÀr vi förstorar den första puls pÄ kanal P4 (den blÄ rektangeln i den föregÄende bilden), ser vi följande:

HĂ€r kan vi se att P4 har nĂ€stan 70 ms enhetligt signal, vilket för mig först verkade vara en synkroniseringssignal. Men efter att ha spenderat lite tid pĂ„ att kontrollera min hypotes upptĂ€ckte jag att det inte Ă€r en synkroniseringssignal, utan en ljudström som skickas till högtalaren nĂ€r tangenterna trycks ned. SĂ„ detta segment av signalen innehĂ„ller inte anvĂ€ndbar information för oss. Men det kan anvĂ€ndas som en indikator â för att veta nĂ€r PSoC registrerar ett tangenttryck.
Men den senaste ljudströmmen frÄn kanal P4 skiljer sig lite frÄn de andra: det Àr ljudet för 'fel PIN-kod'!
Tillbaka till diagrammet över tangenttryck, nÀr vi förstorar diagrammet för den senaste ljudströmmen (se den blÄ rektangeln igen), fÄr vi:

HĂ€r ser vi enhetliga signaler pĂ„ P11. SĂ„ det verkar som att detta Ă€r synkroniseringssignalen. Och P13 â data. Observera hur mönstret förĂ€ndras efter att ljudsignalen har avslutats. Det skulle vara intressant att se vad som hĂ€r hĂ€nder.
Protokoll som arbetar med tvÄ ledare Àr vanligtvis SPI eller I2C, och i den tekniska specifikationen för Cypress sÀgs det att dessa kontakter motsvarar I2C, vilket vi ser Àr sant Àven i vÄrt fall:

USB-SATA-chipsetet interrogates PSoC kontinuerligt för att lÀsa tillstÄndet av knappen, som som standard Àr "0". NÀr knappen "1" trycks in, Àndras den till "1". Slutöverföringen, direkt efter att "~" tryckts, skiljer sig om en felaktig PIN-kod matas in. Men just nu har jag inte kontrollerat vad som faktiskt överförs. Men jag misstÀnker att det knappast Àr en krypteringsnyckel. Hur som helst, se nÀsta avsnitt för att förstÄ hur jag extraherade en dump frÄn den interna PSoC-firmware.
KĂ€lla: habr.com
