Portál AbcLinuxu, 25. dubna 2024 23:40

Útoky na GSM

18. 7. 2012 | Jan Hrach
Články - Útoky na GSM  

V článku si představíme několik aktivních útoků na GSM síť, které můžou skončit DoS nebo odposlechem, a zmíníme jejich nevýhody. Nakonec se podíváme na hit posledních let, plně pasivní kryptografický útok, a zkusíme odhadnout, jak náročná by byla pro motivovaného útočníka jeho realizace.

Obsah

Útoky typu DoS

link

Pokud útočníkovi stačí způsobit odepření služby, má to celkem jednoduché. GSM je rádiová síť, takže z principu lze zarušit. Levné rušičky lze objednat z Číny, jejich stavba ze šuplíkových součástek také není příliš složitá. Nevýhodou je snadné odhalení.

Mnohem zajímavější je způsobení DoS odesláním malého množství „vhodných“ dat někam do sítě. Softwarová stránka implementace GSM je všelijaká a když spustíte na mobil nějaký běžný fuzzer (věc, která zkouší posílat různými způsoby rozbitá data a čeká, jestli na druhé straně spadne parser), najdete spoustu chyb. Přečtěte si například o projektu SMS-o-death (záznam přednášky), který zjistil, že spousta mobilů lze zablokovat SMSkou obsahující binární balast.

Je zřejmé, že na bezdrátovém principu není proto vhodné stavět kritické technologie, jako například zabezpečení budov posílající SMS notifikaci a volající policii přes GSM. Leč mnozí tak činí.

Dále se již budeme věnovat bezpečnosti přenášených dat.

Prostě si to poslechni

link

Po telefonu si lidé říkají všelijaké citlivé informace. Bohužel u většiny dnes provozovaných sítí tečou někde u provozovatele data nešifrovaně. U GSM je šifrováno spojení mezi mobilem a BTS, ale infrastruktuře operátora jsou již data dostupná. Odposlechnout je může neposlušný zaměstnanec nebo složka státní moci (samozřejmě pouze na soudní příkaz :-)). Již z tohoto důvodu bychom si měli dávat pozor, co telefonu svěřujeme.

IMSI catcher je vlastně Man-In-the-Middle

link

Pokud útočník nemá přístup do infrastruktury operátora a přesto by chtěl poslouchat, musí nějakým způsobem obejít či zlomit šifru, kterou je komunikace vzduchem chráněna.

Jedním z prvních útoků, které se objevily, byl tzv. IMSI catcher. Využívá toho, že mobilní telefon kryptograficky neověřuje identitu sítě, ke které se přihlašuje. Každý operátor v každé zemi má unikátní ID skládající se z MCC (Mobile Country Code, pro ČR 230) a MNC (Mobile Network Code, v ČR 01-03 pro známou trojku a 98 pro jednoho méně známého) a tyto informace jsou všemi BTS pravidelně ohlašovány do sítě. Mobil si ze SIM karty zjistí, kterému operátorovi patří, a k jeho nejsilnější BTS se přihlásí. Pokud žádnou „rodinnou“ BTS nenajde (typicky v zahraničí), zkusí si domluvit roaming.

Co se ale stane, pokud si spustíme vlastní BTS a nastavíme dvojici MCC a MNC na tu, kterou už nějaký operátor používá? Pokud zařídíme, aby oběť našeho útoku měla dostatečně silný signál (například směrovou anténou), ochotně se její mobil přihlásí na naši BTS. A protože šifrování přenosu iniciuje BTS, můžeme mobilu říct, aby šifrování vypnul, a pak si hovor v klidu poslechnout.

Problémy jsou dva: za prvé nefungují příchozí hovory a za druhé lze takový útok poměrně snadno odhalit. Překvapující je, že to nikdo nedělá. Totiž – indicií je několik:

Existuje projekt IMSI catcher catcher, který se snaží podle těchto indicií útok odhalit. Shodou okolnosti je implementován nad telefony Osmocom.

Zařízení vlastní například různé složky státní moci (zajímavý dodavatel). Ostatně i ta slavná Agáta je „jenom“ takový naspeedovaný IMSI catcher.

Opensource IMSI catcher se dá postavit nad OpenBTS. Je k tomu potřeba USRP a spousta času.

Pasivní sniffing je nejsofistikovanější typ útoku

link

Především hrozba odhalení vedla k vývoji dalších typů útoků. Pro jejich pochopení ale budeme muset tušit něco málo o symetrických šifrách.

Intermezzo o blokových a proudových šifrách

link

Symetrická šifra je funkce, která vezme nějaký tajný klíč a data, která chceme zašifrovat, vyrobí z toho nějaký nečitelný blob a pošle to. Na druhé straně se vezme ten stejný klíč a blob se jím dešifruje. Příklady symetrických šifer jsou AES, Blowfish, DES, A5/1, RC-4.

Některé symetrické šifry jsou blokové. Fungují tak, že vezmou blok dat (řádově stovky bitů) a klíč a vyplivnou zašifrovaný blok dat. Blokové šifry jsou například AES, Blowfish, DES.

Útoky na GSM

Jiné symetrické šifry jsou proudové. Pomocí klíče se inicializuje generátor pseudonáhodných čísel a tímto generátorem se vygeneruje potřebné množství (proud) pseudonáhodných dat, kterým se říká keystream. Keystream se potom zXORuje s daty, která chceme zašifrovat. Příjemce si také inicializuje svůj pseudonáhodný generátor, nechá ho vygenerovat keystream a zXORuje s ním přijatá data. Vypadne na něj původní text. Proudové šifry (stream ciphers) jsou například RC-4 nebo A5/1 používaná v GSM.

Útoky na GSM

Generátor keystreamu v A5/1 jsou tři posuvné registry, do kterých je na začátku nasypán klíč, a pak se začnou různě posouvat a míchat, výstupy z nich se vzájemně XORují a někudy z toho začnou padat pseudonáhodná data, keystream. Můžete se podívat na povedenou animaci principu na YouTube.

Útoky na GSM

Šifra má tedy cosi jako vnitřní stav definovaný hodnotami proměnných v generátoru. Když ho získáte, můžete ho nasypat do svého generátoru, vygenerovat si stejný keystream a dešifrovat přenášenou zprávu. A5/1 lze navíc „backclockovat“ – s o něco vyššími nároky na výkon lze obrátit směr, kterým se posouvají bity v posuvných registrech, a po chvíli počítání získat i počáteční stav šifry a z něj klíč. Tedy zjištěním vnitřního stavu v jakémkoli okamžiku používání šifry jste schopni dešifrovat celou komunikaci.

Můžete si spočítat tabulku:

Vnitřní stavKeystream
0x00000000000000000xabcdef12345678
0x00000000000000010x54632221afed03
0x00000000000000020x456dcd562b980e

Když uvidíte ve vzduchu nějaká data a dokážete z nich extrahovat keystream, podíváte se do tabulky, zjistíte vnitřní stav šifry a máte vyhráno. Bohužel taková tabulka je poněkud velká. Triviálně 264 možných stavů × 64 bitů keystreamu na stav, přičemž se ukazuje, že keyspace je jenom nějakých 261, ale i tak je to v řádech EB (exabajt, tedy milion terabajtů).

Naštěstí lze použít time-memory tradeoff. Pomocí jistého triku si spočítáte menší tabulku, která bude obsahovat pouze vybrané vnitřní stavy šifry, ale zároveň bude obsahovat informace, které vám umožní chybějící data rychle dopočítat v okamžiku, kdy je potřebujete.

Velmi hrubě řečeno to funguje tak, že si zvolíte nějaký počáteční bod, použijete ho jako tajný stav pro A5/1 a vyrobíte keystream. Ten vhodně upravíte a použijete jako tajný stav pro další A5/1 a tak dále, až se dostanete do distinguished pointu. Ten může být definován třeba tak, že na konci je určitý počet nul. Počáteční bod a distinguished point uložíte do tabulky. Opakujete tak dlouho, až vám dojde místo na disku.

Počáteční tajný stavDistinguished point (po mnoha iteracích)
0x00000000000000000xcd547853000000
0x00000000000000010x4512ebca000000
0x00000000000000020x3249bdcc000000

Když potom získáte nějaký keystream, použijete ho jako tajný stav a počítáte tak dlouho, až se dostanete do distinguished pointu. Ten si najdete v tabulce, podíváte se, jaký počáteční tajný stav na něj vedl, a dopočítáte zbytek řetězu. Víte, že článek řetězu těsně před vaším keystreamem je tajný stav, který vás zajímá.

Pomocí dalších optimalizací (nad rámec článku a znalostí autora) se dá zmenšit velikost tabulek zabráněním kolizí (merge), kdy máte nějaká data zbytečně víckrát. Hezky je to popsané v přednášce GSM: SRSLY? Podívejte se také na projektovou wiki. Útok momentálně implementuje projekt Kraken.

Na čtyřjádrovém Xeonu s 8 GiB RAM, grafikou Radeon HD 5900 a 2TB polem z rychlých 15kRPM SCSI disků lze cracknout A5/1 v řádu minut. Se SSD disky a čtyřmi grafikami se dá dostat na sekundy.

Skákání po kanálech

link

Když přenášíte nějaká data vzduchem a přijímač není v ideálních podmínkách, například je mezi železobetonovými domy, vlny se různě lámou a odrážejí, v některých místech se sečtou a v některých vyruší, na některých frekvencích se objevuje rušení atd. Proto je výhodné používat channel hopping – při přenosu se velmi rychle mění frekvence, na které se vysílá, a doufá se, že i když jeden kanál bude zarušený, ostatní budou fungovat dobře a dojdou alespoň nějaká data (z těch potom lze pomocí rozličných error correction a parit dopočítat zbytek). Případnému útočníkovi, který se snaží komunikaci odposlechnout, tohle ale může způsobit komplikace, protože se musí přelaďovat přesně stejně jako vysílač.

Poslech signálních dat

link

Můžeme se zaposlouchat, co se kolem nás ve vzduchu děje. Naladíme se na BEACON kanál nějaké blízké BTS a koukáme:

BTS: Jsem nejmenovaný operátor v České republice!
BTS: Jsem nejmenovaný operátor v České republice!
BTS: Jsem nejmenovaný operátor v České republice!
BTS: Telefon s tmsi 123456 nechť skočí na kanál 8, timeslot 2!
BTS: Jsem nejmenovaný operátor v České republice!
BTS: Jsem nejmenovaný operátor v České republice!

TMSI (Temporary Mobile Subscriber Identity) je identifikátor, pod kterým mobil komunikuje s BTS.

Chtěli bychom slyšet i něco víc, tak se na výzvu k přeladění (v řeči GSM Immediate Assignment) naladíme na ohlášený kanál a poslechneme si ohlášený timeslot.

BTS: Telefone, mám tu pro tebe zprávu.
Telefon: OK.
BTS: Síla tvého signálu je 5 a tvoje time-advance je 1.
Telefon: OK.
BTS: Zapni šifrování.
(dál už pokračuje nesrozumitelný balast)

Time advance je „náskok“, o který musí mobil začít vysílat dřív – když je daleko od BTS, než se k ní signál dostane, chvíli to trvá a netrefil by se tak přesně do timeslotu, který mu byl přidělen. Změření TA k různým okolním BTS a následná triangulace se dá použít k poměrně přesnému zaměření mobilu.

Tohle je ta komunikace, kterou jsme viděli ve Wiresharku v minulém článku.

Získání keystreamu

link

K použití tabulek, které jsme si spočítali výše, potřebujeme keystream. Vzduchem ale létají jenom zašifrovaná data. Z principu šifry víme, že zašifrovaná data jsou keystream XOR nešifrovaná data. Z toho vyplývá, že nešifrovaná data XOR zašifrovaná data je keystream. Zašifrovaná data jsme právě odposlechli, nešifrovaná data zdánlivě nevíme, ale můžeme se pokusit je uhádnout. V GSM se totiž přenáší spousta vaty, například pokud BTS zrovna nemá co říct, pošle prázdný rámec (nazvěme ho NOP) vyplněný paddingem (0x2b, ASCII znak +). Předání SMS by mohlo vypadat třeba takhle:

NOP+++++++++++++++++++
Síla tvého signálu je 5 a tvoje time-advance je 1.
NOP+++++++++++++++++++
Máš tu SMS s textem "uz kaprici pripluli?"
NOP+++++++++++++++++++

Prázdný rámec ve Wiresharku (posledních 23 bajtů) – 0x03 0x03 0x01 a pak padding z ASCII +

ZXORujeme předpokládaný NOP s přijatými daty a výsledek se pokusíme cracknout. S trochou štěstí získáme klíč, kterým dešifrujeme zbytek zprávy.

Přenos SMS

Poslech hovorů

link

Při hovoru se hopuje. Problém je v tom, že po kterých kanálech se bude skákat, se dohodne až po zapnutí šifrování. Takže:

Sestavení hovoru

link

Podle různých zdrojů je zřejmé, že několik implementací zmiňovaného útoku po světě existuje, některé klíčové části softwaru ovšem nejsou volně dostupné na Internetu. Kdyby tedy nějaký útočník chtěl provést pasivní odposlech, co by k tomu potřeboval?

Pro příjem pravděpodobně použije Osmocom telefony. Jsou malé, levné a mají nízkou spotřebu. Jeden stojí v přepočtu kolem 500 Kč a bude jich potřebovat 4-8. K nim budou potřeba sériové převodníky (4portový FTDI za 700 Kč), nějaký driver (Arduino, 350 Kč) a bižuterie kolem (USB hub, deska, krabička…).

Pro crackování je potřeba silný počítač. Pokud mu stačí offline crackovat SMS, bude potřebovat stroj s lepší grafickou kartou a 2TB storage. Pro real-time crackování je potřeba více grafických karet a 2TB SSD (kvůli co nejrychlejšímu seeku). To je asi nejdražší z celého zařízení, 2TB SSD může stát tak 40-50 tisíc korun.

Po softwarové stránce chybí:

Něco se dá vybagrovat z Airprobe, něco z OpenBTS a něco z aplikace mobile pro Osmocom. Viz též Notes on sniffing a odkazovaný mail.

Jak vidíte, není to úplně triviální, ale s rozpočtem nižších stovek tisíc korun (méně, pokud jste nadšenci a nepočítáte svůj čas a/nebo pokud máte přístup na nějaký cluster, takže si nebudete muset počítač na provoz Krakena kupovat) se to dá.

Útok byl předveden na 27c3.

Co s tím?

link

Nejlepší by bylo upgradovat z 25 let starého GSM na nějaký modernější protokol. Bohužel ani 3G, ani UMTS na tom také nejsou s bezpečností zrovna růžově. Nejvíc by se mi osobně líbilo, kdyby operátor poskytoval IP konektivitu a já bych si přes to tuneloval šifrovaný VoIP (SIP přes TLS, RTP přes sRTP nebo ještě lépe zRTP), ale něčeho takového se asi hned tak nedočkám. Navíc po světě existují miliardy GSM telefonů a jejich výměna je v horizontu 5-10 let nereálná.

Šifra použitá v GSM je sice zlomená, i přes to lze ale útočníkovi její lámání všelijak znechutit. Útok, který jsme si popsali, využívá toho, že po síti létá spousta known-plaintextu v paddingu. Doporučení TS44.006 z roku 2008 definuje padding randomizovaný. I potom lze použít rámce, jejichž obsah lze tipnout (například rámec „System Infromation Type 5“ se silou signálu – telefon se nepohybuje zas tak rychle na to, aby to nešlo zjistit, nebo v krajním případě i zbruteforcovat), ale ty se posílají méně často a náročnost útoku tak velmi stoupá. Nicméně, ačkoli náhodný padding byl doporučen již v roce 2008, například v České republice ho zatím implementuje pouze jeden ze tří operátorů (nemůžu říct který).

Druhým kostlivcem ve skříni je málo časté překlíčování. Extrémem je jeden mobilní operátor, u kterého, pokud je mobil stále na stejné BTS, vydrží klíč několik dní. Překlíčování bohužel sežere trochu výpočetního výkonu a přenosové kapacity sítě, ale když se bude dělat dost často, útočníka opět znechutí.

Nicméně všechna tato opatření pouze posouvají náročnost útoku o několik řádů, z desítek a stovek tisíc do možná (desítek?) milionů korun. Jak se bude dostupný výpočetní výkon s časem zvyšovat, bude se crackování A5/1 stávat snazším a snazším. Proto je potřeba myslet na to, že s GSM nikdy neslyšíte hovor sami.

Další články z této rubriky

V sobotu se uskuteční konference CryptoFest
Pozor na androidové aplikace
Silent Circle představil bezpečný smartphone Blackphone 2
Android je bezpečnější, řada hrozeb však stále přetrvává
Avast varuje před nebezpečnými aplikacemi v Google Play

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.