Odposlouchávání GSM komunikace

Jak je to s odposloucháváním mobilní komunikace na bezdrátové úrovni? Jsou stávající standardy pro mobilní komunikaci bezpečné? V tomto článku si ukážeme případovou studii – odposlech SMS zpráv na 2G GSM sítích. Upozornění: jedná se o praktickou ukázku (Proof-of-Concept) pro edukativní účely na vlastním telefonu, pro odposlech vlastních GSM dat.

Úvodem

Nejprve je třeba rozlišit pojem aktivní a pasivní sniffing. Existují útoky na 2G/3G/4G sítě s využitím aktivního sniffingu, kdy útočník disponuje takovým SDR zařízením, které mu umožňuje přijímat, ale i vysílat vlastní data na frekvencích až několik GHz.

Při takových útocích se jedná v podstatě o útok Man in the Middle – kdy oběť se připojí na falešnou BTS, která ve skutečností nepatří operátorovi, ale útočníkovi. Způsobů, jak docílit toho, aby se oběť na útočníka připojila, je několik – buď zkrátka bude mít vyšší sílu signálu, nebo útočník síť zaruší tak, že se k němu oběť sama připojí, a nebo existují takzvané downgrade útoky, které oběti pošlou takové příkazy, které donutí oběť připojit se na útočníka, a to dokonce starším bezdrátovým standardem (2G/3G).

Jak již bylo řečeno, provedení takovýchto útoků vyžaduje nákladné pořízení SDR hardwaru. Proto se v tomto článku budeme věnovat sniffingu pasivnímu – takovému, kdy není potřeba vysílací zařízení, a náklady na zařízení pro příjem nepřekračuje 10 dolarů. Jedná se o RTL-SDR zařízení, což je svobodný projekt, který z kompatibilního Realtek (RTL) chipsetu, přítomného například v televizních kartách, dokáže vytvořit zařízení, které je schopné příjmu signálu na frekvencích od 500 kHz up do 1,75 GHz.

Naše ukázka sestává z odchycení SMS zprávy, která byla zaslána na telefon oběti. Oběť byla přihlášena na síť 2G, které je i v dnšení době stále hojně rozšířena ve většině stanic metra, na každé druhé SIM kartě v dual-SIM telefonech, ve sklepních prostorech (např. restaurace) nebo venkově. Nebyl proveden žádný aktivní útok, t.j. k dispozici bylo pouze přijímací zařízení s chipsetem RTL2832U, který lze běžně zakoupit v čínských e-shopech. Velice obdobně funguje také odsposlech telefonního hovoru, tudíž nebude v článku zmíněn.

TV karta s chipsetem RTL2832U
TV karta s chipsetem RTL2832U

Prerekvizity

Hardware

  • USB zařízení s chipsetem podporovaným RTL-SDR, v našem případě RTL2832U
  • Mobilní telefon s podporou přímého přístupu k modemu, v našem případě Samsung Galaxy S4

Software - nástroje

  • Minicom
  • kal
  • gqrx
  • gr-gsm framework

Článek předpokládá nainstalované a funkční nástroje uvedené výše. Internet disponuje zdroji pro jejich zprovoznění. Přikládáme ale několik našich poznámek z instalace na Kali Linux 2020.2:

Balíky + prerekvizity

#apt-get install gqrx

#apt-get install kalibrate_rtl

#apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y cmake autoconf libtool pkg-config build-essential \

libcppunit-dev swig doxygen liblog4cpp5-dev python3-docutils gnuradio-dev gnuradio libgmp-dev libboost-regex-dev liborc-dev \

libosmocore-dev gr-osmosdr

#pip install lscipy

Kompilace gr-gsm

#mkdir gr-gsm

#git clone -b maint-3.8 https://github.com/velichkov/gr-gsm.git

#cd gr-gsm

#mkdir build

#cd build

#cmake ..

#make -j 4

#sudo make install

#sudo ldconfig

#export PYTHONPATH=/usr/local/lib/python3/dist-packages/:$PYTHONPATH

Práce s RTL-SDR

V první řadě je záhodno vyzkoušet naše RTL-SDR zařízení, zda-li je systémem správně rozpoznáno a vypsání informací o něm. To je možné příkazem:

rtl_test

Vypsání informací o RTL-SDR zařízení
Vypsání informací o RTL-SDR zařízení

Zajímavá je informace o zisku přijímače (gain). Náš přijímač podporuje maximální zisk 49,6 dB, což pomůže zesílit přijímaný signál.

Dále může být užitečný výpis nástroje kalibrate_rtl, který automaticky vyhledá GSM sítě v dosahu a vypíše jejich frekvenci. Všimneme si parametru -g, který specifikuje právě zisk našeho přijímače:

Kal - automatický vyhledávač GSM kanálů
Kal - automatický vyhledávač GSM kanálů

Je potřeba přiznat, že tento nástroj v době psaní článku moc nefungoval. Je možné, že jsme nedisponovali chipsetem podporovaným tímto nástrojem, nebo zkrátka síla signálu okolních GSM BTS vysílačů byla moc nízká. Nástroj vypsal pouze jednu dostupnou GSM síť.

Protože automatici ale správný hacker nikdy stoprocentně nevěří, existují velmi šikovné nástroje i pro ruční skenování mobilních sítí. Takovým nástrojem je například gqrx (výborný ekvivalent pro Windows je SDRsharp). Nástroj gqrx nám umožňuje naladit jakoukoliv adaptérem podporovanou frekvenci, zobrazení síly signálu v reálném čase, frekvenčního spektra, histogramu a mnoho dalšího.

Manuální zkoumání frekvencí pomocí nástroje gqrx
Manuální zkoumání frekvencí pomocí nástroje gqrx

Při ručním hledání GSM kanálů je samozřejmě zapotřebí znát jejich frekvnenční pásma, příčemž v České Republice je to pro 2G nejčastěji GSM900, t.j. 890 - 915 MHz pro uplink (z mobilu k BTS) a 935 - 960MHz pro downlink (z BTS k telefonu). Nás zajímá downlink – budeme odposlouchávat SMS, která bude na telefon doručena (pro odposlech odeslaných SMS by byl důležitý uplink). Na realtime grafu je zapotřebí hledal vrcholky, takzvané peaky. Na obrázkou je vidět vysoký downlink peak na frekvenci 943,6 MHz, další peak (ale se slabým signálem) by mohl být na 944,8 MHz.

Přesvědčit se, „že jsme správně“, a právě frekvence 943,6 je tou naší, je možné přímo v mobilním telefonu. V našem testovacím telefonu Samsung je možné vyvolat servisní menu vytočením sekvence *#0011# - to zajistí zobrazení hodnoty „ARFCN“ (absolute radio-frequency channel number), která značí právě frekvenci, na které je telefon k BTS připojený. Pro zjištění přesné frekvence z ARFCN je možné použít následující web: https://www.cellmapper.net/ARFCN.php , kde po zadání GSM pásma a právě ARFCN hodnoty nám web vypíše přesnou frekvenci.

Servisní mód telefonu - zjišťujeme ARFCN
Servisní mód telefonu - zjišťujeme ARFCN
Počítáme frekvenci z ARFCN
Počítáme frekvenci z ARFCN

Naše hodnota ARFCN je tedy 43 a frekvence správná, 943,6 MHz. Ještě jedna kontrola, zda-li na dané frekvenci proudí data z hovorů, SMS i mobilních dat je možné spuštěním nástroje:

grgsm_livemon

Data na GSM kanálu
Data na GSM kanálu

V terminálu nalevo je znatelných spoustu nových hexadecimálních dat, což značí právě probíhající GSM provoz na daném kanále. Tento provoz je možné už teď při spuštění tohoto nástroje monitorovat a nahlížet na něj v nástroji Wireshark – všechna data z grgsm_livemon jsou totiž replikována na loopback interface.

Extrakce klíče pro dešifrování provozu

Protože v našem případě je útok pasivní, není možné šifrovací klíč získat z vlastně vytvořeného BTS vysílače. Budeme tedy klíč extrahovat přímo z testovacícho mobilního telefonu.

Je důležité zmínit, že samozřejmě existuje i způsob, jak komunikaci dešifrovat „hrubou silou“. K tomu existuje nástroj Kraken a vyžaduje stažení a použití cca 200 GB předpočítaných rainbow tabulek. Příkládáme tedy odkazy pro další studium:

Protože klíč budeme extrahovat přímo z telefonu, musí se jednat o taový telefon, který podporuje přímý přístup k jeho modemu. Existují experimentální projekty na odemčených (rootlých) Androidech, zakoupit lze i tzv. OsmocomBB. Přímý přístup podporuje většina telefonů značky Samsung, dále také existují někteří výrobci/modely, které umožňují přístup k modemu při speciální změně USB režimu – to vyžaduje tzv. USB switcher. Opět příkládáme odkazy:

Náš testovací telefon umožňuje přímý přístup přes minicom kozoli v terminálu, tudíž stačí zadat příkaz:

minicom -D /dev/ttyACM0

a dále zadat modemové AT příkazy pro čtení (číslo 176):

AT+CRSM=176,28448,0,0,9

AT+CRSM=176,28542,0,0,11

Minicom terminál - zasílání AT příkazů do modemu telefonu
Minicom terminál - zasílání AT příkazů do modemu telefonu

S tím, že:

  • první příkaz extrahuje šifrovací klíč KC, z kterého nás zajímá celá hodnota kromě posledního jednoho bajtu, tudíž bez posledních dvou znaků – tedy 6355BFF36B21909A
  • druhý příkaz extrahuje TMSI; tato hodnota je potřebná pouze při dešifrování telefonních hovorů a v tom případě nás zajímají nás první čtyři bajty (8 znaků) – tedy A94CF2C0

Poznámka: hodnota ARFCN, KC i TMSI se v průběhu času mění, je tedy zapotřebí tyto hodnoty zkontrolovat před i po procesu odposlechnutí provozu.

Analýza a dešifrování

Nyní přistoupíme k samotnému procesu:

1) Spustíme nástroj grgsm_capture příkazem:

grgsm_capture -g 49.6 -a 43 -s 1e6 -T 10 cap.cfile

Kde -g je hodnota zisku signálu, -a ARFCN -s je sample rate (ekvivalent čísla 1000000), -T doba odposlechu ve vteřinách, a následuje cap.cfile – náš capture soubor.

2) V tuto chvíli odesíláme SMS s obsahem „Testing GSM sniffing by HackingLab!“ na telefon oběti.

3) Zapneme Wireshark, protože následná analýza se bude dít na loopback rozhraní.

4) Dékódujeme zachycený provoz nástrojem grgsm_decode s tím, že jako výstup potřebujeme data zachycená „ve vzduchu“ jako broadcast - BCCH (Broadcast Control Channel), viz následující příkaz:

grgsm_decode -a 43 -s 1e6 -m BCCH -c cap.cfile -t 0

Kde -a je ARFCN, -s sample rate, -m druh komunikačního kanálu, -c náš capture soubor a -t je timeslot, v případě BCCH vždy 0

Wireshark - hledání použitého druhu komunikačního kanálu pro přenos SMS
Wireshark - hledání použitého druhu komunikačního kanálu pro přenos SMS

5) V dekódovaných datech hledáme rámec s popisem „Immediate Assignment“, který telefonu říká, jaký komunikační kanál má pro příjem SMS použit. V podrobnějším popisu hledáme „Channel description“, ze kterého se dozvídáme, že telefon pro příjem SMS použije komunikační kanál SDCCH/8 (Stand Alone Dedicated Control Channel s osmi subkanály) s timeslotem 1

6) Následuje tedy opět spuštění grgsm_decode, tentokrát se zjištěnými informacemi:

grgsm_decode -a 43 -s 1e6 -m SDCCH8 -c cap.cfile -t 1

Wireshark - hledání použitého šifrovacího systému
Wireshark - hledání použitého šifrovacího systému

7) V tomto okamžiku jsou vidět pouze data, která náleží procesu příjmu naší testovací SMS zprávy, avšak jsou stále začifrovaná. Z rámce „Ciphering Mode Command“ zjišťujeme, že jako šifrovací systém je použit A5/3, což je mimochodem systém užívaný i 3G sítěmi.

8) Spustíme tedy nástroj grgsm_decode do třetice:

grgsm_decode -a 43 -s 1e6 -m SDCCH8 -c cap.cfile -t 1 -e 3 -k '6355BFF36B21909A'

Kde -e 3 značí právě použitý šifrovací systém A5/3 a -k náš z telefonu extrahovaný KC klíč

Wireshark - úspěšně dešifrovaná SMS zpráva
Wireshark - úspěšně dešifrovaná SMS zpráva

9) Hledáme už samotný SMS paket - "(SMS) CP-DATA (RP) RP-DATA (Network to MS)", podrobněji sekci „SMS Deliver“ a pod ní „TP-User-Data“, kde si můžeme přečíst obsah naší SMSky.

Závěrem

V praxi jsme zjistili, že odposlech mobilních sítí je složitý, ale ne nemožný. Útočník, skupiny, či dokonce vlády s dostatečnám hardwarovým i softwarovým vybavením (tím je myšleno použití specializovaných a automatizovanách, ne open-source nástrojů) opravdu mohou provést úspěšný odposlech. A jedná se samozřejmě jen o jednu vrstvu působení – odposlech může být realizován také například malwarem nebo fyzickou modifikací telefonu. Obranou či prevencí je používání pouze těch nejnovějších standardů, které ještě v hackerském světě nejsou natolik probádané, či přenesení způsobu mobilní komunikace a nechání zabezpečení na TCP/IP a SSL/TLS, například pomocí technologií VoLTE / VoWLAN / VoIP. Stoprocentní ochrany to ale nikdy nebudou a i technologie přepojování paketů bude mít svoje útoky. Nezbývá tedy než doufat, že útočníky vždy bude odrazovat technická a především finanční náročnost.