Reverzovanie a hackovanie externých samošifrovacích diskov je moje staré hobby. V minulosti som mal možnosť cvičiť s takými modelmi ako Zalman VE-400, Zalman ZM-SHE500, Zalman ZM-VE500. Len nedávno mi kolega priniesol ďalší exponát: Patriot (Aigo) SK8671, ktorý je postavený podľa typického dizajnu - LCD indikátor a klávesnica na zadávanie PIN kódu. To je to, čo z toho vyšlo…

1. úvod

bývanie

Obal
Prístup k údajom uloženým na disku, ktorý je údajne šifrovaný, sa uskutoční po zadaní PIN kódu. Niekoľko poznámok na úvod k tomuto zariadeniu:
- Ak chcete zmeniť PIN kód, musíte pred odomknutím stlačiť F1;
- PIN kód musí obsahovať 6 až 9 číslic;
- Po 15 nesprávnych pokusoch sa disk vymaže.
2. Hardvérová architektúra
Najprv zariadenie rozoberieme na časti, aby sme pochopili, z akých komponentov sa skladá. Najnamáhavejšou úlohou je otváranie puzdra: veľa mikroskopických skrutiek a plastu. Po otvorení puzdra vidíme nasledovné (venujte pozornosť päťkolíkovému konektoru, ktorý som spájkoval):

2.1. Hlavna tabula
Hlavná doska je pomerne jednoduchá:

Jeho najvýznamnejšie časti (pozri zhora nadol):
- konektor pre LCD indikátor (CN1);
- výškový reproduktor (SP1);
- Pm25LD010 () SPI flash disk (U2);
- Ovládač Jmicron JMS539 () pre USB-SATA (U1);
- USB 3 konektor (J1).
SPI flash disk ukladá firmvér pre JMS539 a niektoré nastavenia.
2.2. LCD indikačná doska
Na doske LCD nie je nič pozoruhodné.


iba:
- LCD indikátor neznámeho pôvodu (pravdepodobne s čínskym písmom); so sekvenčným ovládaním;
- Pásový konektor pre dosku klávesnice.
2.3. Doska s klávesnicou
Pri skúmaní dosky klávesnice veci naberú zaujímavejší spád.

Tu na zadnej strane vidíme páskový konektor, ako aj mikrokontrolér Cypress CY8C21434 PSoC 1 (ďalej ho budeme jednoducho nazývať PSoC)

CY8C21434 používa inštrukčnú sadu M8C (pozri ). Na [stránke produktu]( () je uvedené, že podporuje technológiu (riešenie od Cypress, pre kapacitné klávesnice). Tu môžete vidieť päťpinový konektor, ktorý som spájkoval - ide o štandardný prístup pre pripojenie externého programátora cez rozhranie ISSP.
2.4. Pri pohľade na drôty
Poďme zistiť, čo je tu spojené. Ak to chcete urobiť, stačí otestovať vodiče pomocou multimetra:

Vysvetlivky pre tento diagram nakreslený na kolene:
- PSoC je opísaný v technickej špecifikácii;
- ďalší konektor, ten vpravo, je rozhranie ISSP, ktoré podľa vôle osudu zodpovedá tomu, čo sa o ňom píše na internete;
- Konektor úplne vpravo je svorka pre plochý konektor na doske klávesnice;
- Čierny obdĺžnik je nákres konektora CN1, určený na pripojenie hlavnej dosky k doske LCD. P11, P13 a P4 sú pripojené ku kolíkom PSoC 11, 13 a 4 na doske LCD.
3. Postupnosť krokov útoku
Teraz, keď vieme, z akých komponentov pozostáva tento disk, musíme: 1) uistiť sa, že je skutočne prítomná základná funkcia šifrovania; 2) zistiť, ako sa generujú/ukladajú šifrovacie kľúče; 3) nájdite, kde presne sa bude kontrolovať PIN kód.
Aby som to urobil, urobil som nasledujúce kroky:
- vzal výpis dát z SPI flash disku;
- pokúsil sa vypísať údaje z flash disku PSoC;
- overili, že komunikácia medzi Cypress PSoC a JMS539 skutočne obsahuje stlačenia klávesov;
- Uistil som sa, že pri zmene hesla sa na flash disku SPI nič neprepíše;
- bol príliš lenivý na to, aby zvrátil firmvér 8051 z JMS539.
3.1. Prevzatie výpisu dát z SPI flash disku
Tento postup je veľmi jednoduchý:
- pripojte sondy k nohám flash disku: CLK, MOSI, MISO a (voliteľné) EN;
- „čuchať“ komunikáciu so snifferom pomocou logického analyzátora (použil som );
- dekódovať protokol SPI a exportovať výsledky do CSV;
- využiť analyzovať výsledky a získať výpis.
Upozorňujeme, že tento prístup funguje obzvlášť dobre v prípade ovládača JMS539, pretože tento ovládač načíta všetok firmvér z jednotky flash vo fáze inicializácie.
$ 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 dumpPo odstránení výpisu z flash disku SPI som dospel k záveru, že jeho jedinou úlohou je uložiť firmvér pre riadiace zariadenie JMicron, ktoré je zabudované do mikrokontroléra 8051. Bohužiaľ sa ukázalo, že výpis z flash disku SPI je zbytočný:
- pri zmene PIN kódu zostane výpis z flash disku rovnaký;
- Po inicializačnej fáze zariadenie nepristupuje k SPI flash disku.
3.2. Čuchanie komunikácie
Toto je jeden zo spôsobov, ako zistiť, ktorý čip je zodpovedný za kontrolu komunikácie pre čas/obsah záujmu. Ako už vieme, USB-SATA radič je pripojený k Cypress PSoC LCD cez konektor CN1 a dva pásky. Preto pripájame sondy k trom zodpovedajúcim nohám:
- P4, všeobecný vstup/výstup;
- P11, I2C SCL;
- P13, I2C SDA.

Potom spustíme logický analyzátor Saleae a na klávesnici zadáme: „123456~“. V dôsledku toho vidíme nasledujúci diagram.

Na ňom môžeme vidieť tri kanály výmeny údajov:
- na kanáli P4 je niekoľko krátkych zhlukov;
- na P11 a P13 - takmer nepretržitá výmena dát.
Pri priblížení prvého hrotu na kanáli P4 (modrý obdĺžnik na predchádzajúcom obrázku) vidíme nasledovné:

Tu vidno, že na P4 je takmer 70ms monotónny signál, ktorý sa mi spočiatku zdal hrať úlohu hodinového signálu. Po chvíli kontroly môjho odhadu som však zistil, že nejde o hodinový signál, ale o zvukový tok, ktorý sa po stlačení kláves dostane do výškového reproduktora. Preto táto časť samotného signálu neobsahuje pre nás užitočné informácie. Môže sa však použiť ako indikátor na zistenie, kedy PSoC zaregistruje stlačenie klávesu.
Najnovší audio stream P4 je však trochu iný: je to zvuk pre „neplatný PIN“!
Ak sa vrátime ku grafu stlačenia klávesov, priblížime si posledný graf zvukového toku (pozri opäť modrý obdĺžnik), dostaneme:

Tu vidíme monotónne signály na P11. Vyzerá to teda, že toto je hodinový signál. A P13 sú dáta. Všimnite si, ako sa vzor zmení po skončení pípnutia. Bolo by zaujímavé vidieť, čo sa tu stane.
Protokoly, ktoré pracujú s dvoma vodičmi, sú zvyčajne SPI alebo I2C a technická špecifikácia na Cypress uvádza, že tieto kolíky zodpovedajú I2C, čo je v našom prípade pravda:

Čipová súprava USB-SATA neustále žiada PSoC, aby prečítal stav kľúča, ktorý je predvolene „0“. Potom, keď stlačíte tlačidlo "1", zmení sa na "1". Konečný prenos ihneď po stlačení „~“ je iný, ak zadáte nesprávny PIN kód. Momentálne však nemám skontrolované, čo sa tam vlastne prenáša. Mám však podozrenie, že je nepravdepodobné, že by to bol šifrovací kľúč. Každopádne, pozrite si nasledujúcu časť, aby ste pochopili, ako som odstránil interný firmvér PSoC.
Zdroj: hab.com
