» »

Varnost slovenskih GSM omrežij II

Članek je dopolnitev predhodno objavljenega članka.

Ker se je izkazalo, da nekateri mobilni operaterji skrbijo za zaupnost komunikacije v svojih omrežjih z več mehanizmi zaščite (in domnevno ne samo s kodiranjem z zastarelim algoritmom), s katerimi je zagotovljena visoka stopnja zaščite, smo se tovrstne navedbe odločili preveriti.

V naslednjem koraku smo opisali teoretične osnove in praktično izvedbo kriptoanalize A5/1 protokola in prikazali, kako je mogoče razbiti s tem algoritmom šifrirana SMS sporočila.

Ponovno opozarjamo, da je uporaba opisanih metod za prestrezanje tujih komunikacij protizakonita.

Kriptoanaliza SMS sporočila

Kot rečeno, je šifrirni algoritem A5/1 s kriptoanalizo mogoče dokaj preprosto zlomiti. V nadaljevanju bomo pokazali, kako je to mogoče storiti v primeru SMS sporočil. Zelo podoben, čeprav ne povsem enak postopek, je mogoče uporabiti za kriptoanalizo govornih komunikacij.

Za zajem ustreznih podatkov iz GSM omrežja potrebujemo burst_ind vejo OsmocomBB Git skladišča. Vendar njihova programska oprema vsebuje določene napake, zato smo OsmocomBB programsko opremo nekoliko prilagodili in popravili aplikacijo ccch_scan, da omogoča zajem podatkov iz poljubnega ARFCN-ja.

Aplikacija omogoča dešifriranje kontrolnega kanala in tudi prehod na šifriran kanal (ko opazi sporočila Immediate Assignment), prej pa moramo poznati najmočnejši kontrolni kanal operaterja, na katerem želimo analizirati promet.

Cilj kriptoanalize šifriranega sporočila je seveda pridobitev sejnega šifrirnega ključa (Kc).

Za začetek smo iz posameznih podatkovnih izbruhov želeli pridobiti surove podatke (to smo potrebovali za potrebe razhroščevanja). Zato smo pripravili orodji burst_decode in burst_encode. Orodji omogočata, da podatkovne izbruhe sestavimo v podatkovni okvir, nato pa s pomočjo šifrirnega ključa na koncu iz vsega skupaj pridobimo surove podatke.

Izbruhi so konvolucijsko šifrirani ter prepleteni. S tem načinom vnesemo redundanco v podatke in tako omogočimo dešifriranje tudi v primeru napak pri zajemu. Orodji burst_decode in burst_encode se močno opirata na kodo v datoteki xcch.c, katere del za šifriranje smo ravno tako spisali sami, saj v OsmocomBB datotekah ni javno dostopen. V podrobnosti delovanja konvolucijskega šifriranja ali prepletanja se ne bomo poglabljali, le na kratko omenimo, da gre pri konvoluciji za nekaj podobnega kot navzkrižno korelacijo (ang. cross-correlation), kar nam v kriptografijo prinaša redundanco oziroma omogoča dešifriranje med prenosom rahlo okvarjenih podatkov.

Primer šifriranja/dešifriranja podatkov okvirja.

Dešifriranje podatkovnega okvirja v praksi...

Kriptoanaliza A5/1 s pomočjo mavričnih tabel

Predpostavimo, da v nekem šifriranem okvirju vemo kakšni podatki se prenašajo (torej vemo kakšno je nešifrirano besedilo). Na podlagi tega lahko s pomočjo programa burst_encode dobimo posamezne podatkovne izbruhe, dobimo pa lahko tudi kodni tok podatkov (ang. key stream; KS), ki je takrat podatke zašifriral. Algoritem A5/1 zgenerira 114 bitov KS za navzdolnjo (ang. downlink) in 114 bitov za navzgornjo (ang. uplink) povezavo. Če vzamemo samo kodni tok podatkov za navzdolnjo povezavo in naredimo reverzno operacijo nad podatki, pridemo do različnih začetnih stanj A5/1 algoritma. V praksi se izkaže, da dobimo le eno ali dve začetni stanji, ostala niso mogoča. Zapleten postopek delovanja reverznih operacij A5/1 si lahko preberemo na naslovu http://reflextor.com/trac/a51/wiki/Back....

V osnovi za razbijanje A5/1 potrebujemo 2TB trdi disk z mavričnimi tabelami in indeksnimi datotekami, mobilni telefon na katerem teče OsmocomBB in kakšen mesec dela in dopolnjevanja OsmocomBB orodij do te mere, da je to praktično izvedljivo, saj javno dostopna OsmocomBB orodja nekaterih ključnih delov ne vsebujejo.

Posebej poudarjamo, da je kriptoanaliza šifriranih sej nezakonita, razen seveda v primeru, ko razbijamo podatke lastnih sej! Poudarjamo tudi, da so bili v nadaljevanju opisani postopki izvedeni izključno v raziskovalne namene na lastnih sejah, prav tako opisani postopki ne vsebujejo nekaj ključnih informacij, zato enostavna ponovitev opisanih postopkov ni mogoča. Še enkrat poudarjamo, da smo prestrezali in razbijali samo svoje lastne seje.

Program Kraken, ki ga uporabljamo za kriptoanalizo obstaja v dveh različicah. Prva uradna različica je na voljo na naslovu git://git.srlabs.de/kraken.git, druga pa na naslovu http://svn.g3gg0.de/svn/kraken-win32/. Obe različice znata koristiti moč grafičnih kartic, ter več diskov, tako da lahko iskanje pravilnega ključa v optimalnih pogojih traja le nekaj minut (v praksi kar nekaj minut). Po naših izkušnjah je druga različica bolj stabilna, deluje tudi v okolju Windows, ter ima boljšo funkcionalnost, čeprav se obe aplikaciji ob naključnih trenutkih sesujeta in nista preveč stabilni. Gsmcrack.py je bil posodobljen za delovanje z drugo različico.

V naslednjem koraku potrebujemo A5/1 mavrične tabele (cca. 1.5 Tb), ki jih s pomočjo programa Behemoth (Kraken in Behemoth sta sicer tudi znani mitološki pošasti) zapišemo na trdi disk v surovi obliki in indeks datoteke (cca. 800 Mb), ki jih shranimo v podimenik kraken/indexes). Postopek kako zapišemo mavrične tabele na disk je opisan na URL naslovu: <http://lists.lists.reflextor.com/piperm...> in ga ne bomo opisovali oz. bomo to nalogo prepustili bralcu. V naprej predvidevamo, da so indeksne table, ter konfiguracija nahajajo v mapi kraken/indexes.

Program Kraken nato zaženemo z ukazom:

./kraken ../indexes/

Program gsmcrack.py ima močan predikcijski sistem, ter zna zajete podatke razbiti samodejno, ter ugotoviti enkripcijski ključ. Primer razbijanja seje s gsmcrack je naveden spodaj.

./gsmcrack.py capture --crack --data bursts_20120125_1318_112_811308_41.dat --prediction predictions/sys
Loading file crack/bursts_20120501_0320_116_2188034_41.dat 
Loading file crack/bursts_20120501_0321_116_2207014_51.dat 
Loading file crack/bursts_20120501_0322_116_2212824_49.dat 
Cracking following captures: 
Capture file: crack/bursts_20120501_0320_116_2188034_41.dat 
With, 57 frames available 
Capture file: crack/bursts_20120501_0321_116_2207014_51.dat 
With, 51 frames available 
Capture file: crack/bursts_20120501_0322_116_2212824_49.dat 
With, 55 frames available 
We are guessing: 
{ "method": "offset", "args": { "offset": 5, "prediction": "03620d0518032b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b", "process_count": 2}, "seek_mode": "normal"} 
{ "method": "offset", "args": { "offset": 3, "prediction": "03420d0518032b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b", "process_count": 2}, "seek_mode": "normal"} 
{ "method": "offset", "args": { "offset": 1, "prediction": "03420d0518032b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b", "process_count": 2}, "seek_mode": "normal"} 
{ "method": "offset", "args": { "offset": 7, "prediction": "03620d0518032b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b", "process_count": 2}, "seek_mode": "normal"} 
Using file crack/bursts_20120501_0321_116_2207014_51.dat 
Start of cipher is at frame 2207153 
Cracking ul: 0 frame 2207240 with prediction, 03620d0518032b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b 
Using burst 3 
Running kraken for keystream 000011100001110110110000011010010111001101001010111010110110110000001010101100100001000111000100001100101001111110 
Crack id is: 4 
New result for crack: 4 DDD08577F92F710D 29 
End of crack: 4 
Kraken was sucesfull 
Trying to find Kc for burst 0 
Trying to find kc for key DDD08577F92F710D, offset 29, framecount1 3408246, framecount2 3408147 and keystream 000010101010011111110010001111011000111100010000010101000011110100011000111111001110001110011111101001001010110000 
Kc was found 
Key crack/bursts_20120501_0321_116_2207014_51.dat for capture 211159d51948a1df found with rule 0 in 0 rounds 
('crack/bursts_20120501_0321_116_2207014_51.dat', '211159d51948a1df', 0, 0)

Samodejno iskanje šifrirnega ključa Kc s pomočjo gsmcrack.py

Naš program gsmcrack.py išče zašifrirane okvirje, izračuna kodni tok podatkov s pomočjo predikcij ter te podatke pošlje programu Kraken (program Kraken lahko teče tudi kot strežnik na drugem računalniku).

Program najde šifrirni ključ, ko so predikcije dovolj dobre in napak v podatkih ni veliko. Podatki se namreč šifrirajo po redundančnem šifriranju, torej jih razbijamo z možnimi napakami. Podrobnosti o sami kriptoanalizi v članku ne bomo opisovali.

Po naših izkušnjah je najtežje najti dobre predikcije in pri tem efektivno razbiti ključ v doglednem času.

Poganjanje Krakena v živo. Na sredini je trdi disk z A5/1 mavričnimi tabelami.

dešifrirano SMS sporočilo, SMS sporočila je mogoče dešifrirati, če se prenašajo preko 2G

Ko enkrat pridobimo sejni šifrirni ključ Kc, lahko do naslednje menjave le-tega prestrezamo vso z A5/1 šifrirano komunikacijo med mobilnim telefonom in GSM omrežjem. S pomočjo tega ključa je mogoče prisluškovanje pogovorom in prestrezanje vsebine SMS sporočil, vendar slednje velja le v primeru, da se SMS sporočila prenašajo po 2G omrežju in ne preko GPRS. GPRS za šifriranje sicer uporablja algoritme GEA/x (GPRS Encryption Algorithm), ki so sicer ravno tako kot A5/x lastniški oz. tajni, njihovo delovanje pa je zelo podobno delovanju A5/x algoritmov. A kot so pokazali raziskovalci podjetja SRLabs, je tudi GEA/x mogoče zlomiti z različnimi napadi.

Demonstracija

V spodnjem videu si lahko ogledate postopek identifikacije ciljnega mobilnega aparata glede na telefonsko številko z uporabo tihih SMS sporočil in postopek dešifriranja SMS sporočila, ki je bil poslan ciljnemu aparatu.

Komentarja SiMobila in Tušmobila kljub zagotovilom njunih PR služb, da bodo komentarje dostavili tekom včerajšnjega dne, do objave tega dodatka še nismo prejeli.

Šifriranje nosilcev podatkov v okolju Linux in Windows

Šifriranje nosilcev podatkov v okolju Linux in Windows

Cryptography is a data-protection technology just as gloves are a hand-protection technology. Cryptography protects data from hackers, corporate spies and con artists, whereas gloves protect hands from cuts, scrapes, heat, cold and infection. The former can frustrate FBI wiretapping, and the latter can ...

Preberi cel članek »

Vzpostavitev v celoti šifriranega sistema

Vzpostavitev v celoti šifriranega sistema

Priporočamo, da si najprej preberete članek z naslovom: [st.povezava /clanki/07003 Šifriranje nosilcev podatkov v okolju Linux in Windows]. Opozorilo: Uporaba spodaj opisanih postopkov lahko privede do resne izgube podatkov ali do okvare sistema. V nekaterih nedemokratičnih državah je osebna uporaba ...

Preberi cel članek »

Intervju z Dustinom Kirklandom, glavnim razvijalcem sistemov za šifriranje v Ubuntuju

Intervju z Dustinom Kirklandom, glavnim razvijalcem sistemov za šifriranje v Ubuntuju

English version Dustin Kirkland je Ubuntu Core razvijalec, zaposlen pri podjetju Canonical. Preden je začel delati na razvoju Ubuntu serverja, je preživel 8 let pri IBM-u. Trenutno je osredotočen na razvoj Ubuntu Enterprise oblaka za prihajajočo različico Ubuntuja, 10.04 LTS, pred tem pa je delal na ...

Preberi cel članek »

Spreminjanje klicne identifikacije 101

Spreminjanje klicne identifikacije 101

Konec leta 2011 je več slovenskih medijev poročalo, da naj bi poslanka Državnega zbora Melita Župevc iz enega svojega mobilnega telefona prejela klic na svoj drugi mobilni telefon, javil pa naj bi se neznan moški glas. Na novinarska vprašanja so mobilni operaterji pojasnili, da takih primerov še niso ...

Preberi cel članek »

Varnost slovenskih GSM omrežij

Varnost slovenskih GSM omrežij

V članku so predstavljeni rezultati varnostne analize slovenskih GSM omrežij, ki smo jo opravili v prvi polovici leta 2012. Namen članka je opozoriti na varnostne ranljivosti v slovenskih GSM omrežjih z namenom, da se varnostne ranljivosti odpravijo, posledično pa se poveča stopnja varnosti in zasebnosti ...

Preberi cel članek »