Cesta k emulátoru telefonní karty

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Bystroushaak
Datum: 8.12.2009
Hodnocení/Hlasovalo: 1/1

Shrnutí na internetu volně dostupných informací o zabezpečení telefonních karet v podobě krátkého článku v češtině. Článek dále předkládá teoretické možnosti jak toto zabezpečení zlomit,

Cesta k emulátoru telefonní karty

Verze textu:

1.0.special_soom_ASCII_editon (08.12.2009) (obrazky vkladat nejdou a ASCII se sem nevejde - fakt netusim co lepsiho udelat..)

Licence:

CC by-nc-sa (http://creativecommons.org/licenses/by-nc-sa/3.0/cz/)

V praxi to znamená, že dílo může být NEKOMERČNĚ šířeno a upravováno, ale pouze se zachováním jména původního autora a stejné licence.

Prohlášení:

Tento článek je něco jako myšlenková hra, cosi jako šachy bez šachovnice. Při této hře se navrhují jednotlivé akce a protiakce, útoky a obrana, v diskuzi se probírá se co by se stalo kdyby ..

Pokud se kdokoliv rozhodne na základě tohoto článku páchat trestnou činnost, je to jen jeho rozhodnutí a autor tohoto článku s tím rozhodně odmítá mít cokoliv společného. Jinak řečeno; Autor na sebe nebere jakoukoliv zodpovědnost za způsob jakým čtenáři mohou naložit s informacemi, které jsou v článku uvedené. Pokud s tímto jakožto potenciální čtenář(ka) nesouhlasíte, plánujete porušit zákon nebo tušíte že by jste nabyté informace nedokázal(a) udržet v teoretické rovině, já jakožto autor vám neuděluji svolení článek dále číst. V opačném případě můžete pokračovat.

Úvod

Tento text jsem sepsal abych si utřídil myšlenky a zároveň shrnul na internetu volně dostupné informace o zabezpečení telefonních karet do krátkého článku v češtině. Článek dále předkládá teoretické možnosti jak toto zabezpečení zlomit, přičemž se (bohužel ;) nejedná o návod, ale pouze o informace, které by měly podnítit další diskuzi a posunout tak tuto myšlenkovou hru do dalšího kola.

Možná že někoho napadne proč se vlastně snažit, když má dnes v podstatě každý svůj vlastní mobil, popřípadě může volat přes VoIP? Obecnou odpověď na tuto otázku nemám, ale za sebe můžu říct, že je docela zábava snažit se proniknout do technologie o které se toho moc neví a která navíc zůstává po dlouhá léta nepokořená (alespoň nevím že by se někomu povedlo emulovat moderní karty).

Telefonní karta

Jak asi každý ví, telefonní karta je zařízení které umožňuje telefonovat, posílat SMS a emaily z tzv. telefonního automatu. Každá karta má v sobě nějakým způsobem uloženy informace o počtu jednotek. Pokud kartu vložíme do automatu, tak jako první proběhne ověření platnosti karty pomocí tzv challenge/response protokolu. Pokud prověrka proběhne správně, automat vám dovolí volat (posílat emaily, SMS, etc..) dokud bude na kartě dostatečný počet jakéhosi kreditu. Pokud ověření karty neproběhne korektně, nebo na kartě nejsou jednotky, automat vydá vysoký pískavý zvuk a na displeji se objeví výzva k vyjmutí karty.

Pokud jste pozorně četli předchozí odstavec, možná vás napadlo, jak jsou jednotky na kartě uloženy a jestli by je nešlo po provolání zase přidat. Bohužel, u moderních karet by něco podobného opravdu nešlo.

V dobách dávno minulých byly jednotky na kartě reprezentovány (EE)PROM pamětí, kterou automat po každém čtení dekrementoval o 1. Jak je asi každému jasné, brzo se našli lidé, kteří zjistili jak na EEPROM zapisovat a začali si karty dobíjet, popřípadě z EEPROM pamětí vytvořili emulátory PROM karet. Telefonní společnosti na to reagovaly tak, že k jednoduché paměti přidali mikroprocesor, který dovolil pouze odečítat jednotky. Aby kartu nebylo možné jednoduše emulovat, byl přidán i mechanismus, který umožnil ověřit jestli je karta pravá. Tento mechanismus se nazývá challenge/response a bude o něm řeč v další části článku.

Pokud někoho zajímají podrobnosti o hardware karty, dají se najít zde; http://gsho.thur.de/gsho/phonecard/bin/phonecards_204.txt, nebo v ISO normách.

Popis challenge/response protokolu:

Dle článku na serveru hw.cz vypadá průběh ověřování přibližně takto:

Poněkud odlišný popis se dá najít zde; http://www.ciscom.ru/hackersrussia/Cards/Syncro/Eurochip.txt

Z výše popsaného postupu vyplývá, že jediné co brání stavbě emulátoru karty je znalost (resp. neznalost) hash algoritmu. Algoritmus se bohužel jen tak sehnat nedá, proto vidím jedinou možnost ho zjistit pomocí níže uvedených metod.

Možnosti prolomení c/r:

MITM sniffer

Jedna z lehčích možností je postavit zařízení na odposlech komunikace mezi kartou a automatem. Po nashromáždění určitého počtu záznamů komunikace by pak mělo stačit sestavit bruteforce cracker (rozebráno dále) a pokusit se zlomit algoritmus.

Výhody

Nevýhody

Inspirace

Reverzní inženýrství automatu

Jednalo by se o ukradení automatu a jeho pitvání a zkoumání, hledání dat v pamětech, zjišťování ochran a v konečném důsledku i o možnost provádět MITM odposlech mezi kartou a automatem doma.

Výhody

Nevýhody

Reverzní inženýrství karty

1) Falešný automat

V podstatě se jedná o postavení přípravku, který se bude tvářit jako automat. Pokud bude kartě posílat náhodná čísla, může výsledky hash funkce ukládat pro pozdější bruteforce útok do počítače, čímž odpadne nutnost stavět MITM sniffer.

Výhody

Nevýhody

2) Útok na hardware karty

Výhody

Nevýhody

Získání algoritmu z nasbíraných dat

Z jistých zdrojů vyplývá, že algoritmus je založen na hardwarových funkcích procesoru, přičemž by měl využívat 48b posuvný registr, XOR a NXOR. Procesor také obsahuje tři 9b, 6b a 5b čítače s neznámou funkcí. Dále existuje nezanedbatelná pravděpodobnost, že se algoritmus podobá výpočtu CRC.

Článek na hw.cz se zmiňuje, že pro získání jednoho bitu hashe je nutné poslat kartě 160x CLK pulz. Z toho vyplývá, že algoritmus probíhá sekvenčně pro každý bit zvlášť a je teoreticky tvořen max. 160 instrukcemi.

Z výše uvedeného vyplývá, že algoritmus by měl vypadat nějak takhle:

                         ___________________________   ________________                          
                        |                           | |                |                         
                        | Generátor náhodných čísel | |  Obsah karty   |                         
                        |       čísel (48b)         | | (nejspíš 128b) |                         
                        |___________________________| |________________|                         
                                     _||_                    _||_                                
                                     \  /                    \  /                                
 ________________        _____________\/______________________\/________        _._._._._._._._. 
|                |      |                                               |      |                |
| Určitě použité |      |                                               |      . Možná použité  .
|   _________    |      |                                               |      |  ____________  |
|  |         |   |      |                                               |      . |            | .
|  |   XOR   |   |      |                                               |      | |  9b čítač  | |
|  |_________|   |      |                                               |      . |____________| .
|   _________    |      |                                               |      | |            | |
|  |         |   |      |                                               |      . |  6b čítač  | .
|  |  NXOR   |   | <==> |                 Výpočet hashe                 | <--> | |____________| |
|  |_________|   |      |                                               |      . |            | .
|   _________    |      |                                               |      | |  5b čítač  | |
|  |         |   |      |                                               |      . |____________| .
|  |   48b   |   |      |                                               |      |  ____________  |
|  | posuvný |   |      |                                               |      . |            | .
|  | registr |   |      |                                               |      | | Aritmetika | |
|  |_________|   |      |                                               |      . | (+,-,*,/)  | .
|________________|      |_______________________________________________|      | |____________| |
                                              _||_                             ._.__._._._._._._.
                                              \  /                                               
                         ______________________\/_______________________                         
                        ||                                             ||                        
                        ||                  16b hash                   ||                        
                        ||_____________________________________________||                        

Možnosti rekonstrukce algoritmu

Podle mě v úvahu připadají pouze tyto dvě techniky:

  1. Matematická analýza
    • K uskutečnění je zapotřebí kryptoanalytik s hlubokými znalostmi matematiky.
    • Nevýhoda; schopní kryptoanalytici se poněkud těžko shánějí.
  2. Hrubá síla
    • Jelikož má mikročip velice malý výkon, troufám si předpokládat že algoritmus nebude moc dlouhý, protože i velikost paměti pro program bude relativně malá.
    • Algoritmus potřebuje pro výpočet jednoho z 16b hashe 160 CLK pulzů, což znamená že program by měl obsahovat max. 160 instrukcí.
      • Je ovšem nutné brát v úvahu že některé operace mohou potřebovat více CLK pulzů pro jeden výsledek, takže to v konečném důsledku může být i méně.
      • Na druhou stranu některé operace (jako je třeba inkrementace čítače) mohou probíhat zároveň s ostatními instrukcemi, takže vlastně proběhne více primitivních operací než 160. Tento fakt bude nutné zohlednit při návrhu crackeru.
    • K útoku je zapotřebí průměrný programátor a velký výkon, což by v dnešní době neměl být takový problém, obzvlášť pokud se využije paralelizace.

Jelikož první volba je poněkud mimo možnosti běžného geeka, myslím že útok hrubou silou bude muset stačit.

Bruteforce cracker

Útok hrubou silou by měl být značně zjednodušený, protože známe vstup, výstup, přibližný počet instrukcí a navíc víme které operace nejspíš algoritmus generování hashe využívá a které ne. Jediné co zbývá je napsat program, který se pokusí odhalit v jakém pořadí jsou operace aplikovány, čímž odhalí algoritmus a umožní stavbu emulátoru.

Cracker by měl dle mého názoru vypadat přibližně takto:

 _____________________________________________________________________                       
|                                            |                        |                      
|        ____________________                |                        |                      
|       |                    |               |                        |                      
|       | Prvky algoritmu    |         ______V________   _____________V_____________         
|------>| (čítače, registry, |        |               | |                           |        
|       | aritmetika)        |        |  Obsah karty  | | Zaznamenané náhodné číslo |        
|       |____________________|        |_______________| |___________________________|        
|                _||_                            _||_     _||_                               
|                \  /                            \  /     \  /                               
|        _________\/_________                _____\/_______\/_____                           
|       |                    |              |                     |                          
|------>|     Permutátor     |= instrukce =>| Interpret instrukcí |                          
|       |____________________|              |_____________________|                          
|                                                    _||_                                    
|                                                    \  /                                    
|                                            _________\/__________                           
|                                           ||                   ||                          
|                                           ||       Hash        ||                          
|                                           ||___________________||                          
|                                                    _||_                                    
|                                                    \  /                                    
|            False - další iterace           _________\/__________                           
|<-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.|                     |                          
|             ____________                  |    Test velikost    |                          
|            /  |         |                 |_____________________|                          
|           /___|         |                          _||_                                    
|           | Zaznamenaná |                          \  /                                    
|           | komunikace, |                  _________\/__________        __________________ 
|<----------|  nastavení, |            True |                     |      |                  |
|           |   výsledek  | <= Instrukce == |   Porovnání hashe   | <=== | Zaznamenaný hash |
|           |_____________|                 |_____________________|      |__________________|
|                                                False | další iterace            ^          
|______________________________________________________|__________________________|          

Popis crackeru

Do crackeru by možná bylo dobré zabudovat genetické algoritmy, ale jelikož se v nich moc nevyznám, netuším jak moc by jejich implementace byla v tomto případě vhodná.

Závěr

Nakonec bych chtěl ještě zdůraznit že tento článek není dokonalý, já nejsem dokonalý, dokonce nejsem ani odborník na mikroprocesory nebo zabezpečení karet a proto zde existuje poměrně slušná pravděpodobnost že článek obsahuje chyby nebo nepřesnosti. Je možné že některé metody a možnosti které jsem popsal jsou nesmyslné, nebo nefunkční.

Tento článek neměl a nemá sloužit jako návod, ale k podnícení diskuze nad popsanými metodami. Pokud někoho napadne nějaká připomínka nebo věcná kritika, budu rád když jí uvede v diskuzi k článku, nebo mi jí pošle jinou cestou.

Zdroje

  1. http://hw.cz/Teorie-a-praxe/Navrhy-vyvojare/ART1444-Slovenske-telefonne-karty-po-druhe.html
  2. http://gsho.thur.de/gsho/phonecard/advanced_e.htm
  3. http://gsho.thur.de/gsho/phonecard/bin/phonecards_204.txt
  4. http://www.ciscom.ru/hackersrussia/Cards/Syncro/Eurochip.txt