Objavljeno:

RTL-SDR GSM monitor

V tokratnem prispevku si bomo pogledali prototip aplikacije, ki omogoča zajem in analizo GSM signalov z DVB-T USB ključkom, ki vsebuje čip Elonics 4000 ter Realtekov RTL2832U demodulator.

DVB-T USB ključek je sicer namenjen sprejemu zemeljskega digitalnega TV signala (tim. DVB-T) in ga je mogoče kupiti za okrog 20 EUR. V Linuxu lahko digitalno TV gledamo s pomočjo aplikacije Me-TV, pred tem pa moramo naložiti ustrezen jedrni modul (sudo modprobe dvb_usb_rtl28xxu).

Sprejem DVB-T signala z Me-TV.

Sprejem DVB-T signala z Me-TV.

Da je mogoče z DVB-T sprejemniki tipa Realtek 2832U sprejemati signale na bistveno širšem frekvenčnem spektru, je marca 2010 ugotovil Eric Fry. Kmalu za tem so varnostni raziskovalci v okviru Osmocom projekta pričeli s testiranjem RTL-SDR ključkov ter razvojem programske opreme za sprejem radijskih signalov s pomočjo poceni RTL-SDR ključkov. Danes je na spletu mogoče dobiti različne aplikacije, ki omogočajo uporabo DVB-T ključkov za različne namene.

Poslušanje FM radia z aplikacijo Gqrx.

Poslušanje FM radia z aplikacijo Gqrx.

Elonicsov RTL-SDR USB ključek je sposoben sprejemati signale v frekvenčnem območju od 52 do 2200 MHz, ne sprejema pa signalov med 1100 in 1250 MHz.

RTL-SDR DVB-T ključek.

RTL-SDR DVB-T ključek.

S pomočjo programske opreme, ki jo razvija Piotr Krysik, pa je s tem ključkom mogoče sprejemati in analizirati tudi GSM signale. V nadaljevanju si bomo ogledali kako namestimo ustrezno aplikacijo, na koncu pa še kako je to aplikacijo mogoče uporabiti za zaznavanje IMSI lovilcev.

Uporabili smo prenosnik z nameščenim operacijskim sistemom Ubuntu 15.04.

Namestitev gr-gsm

Pri namestitvi bomo uporabili PyBOMBS (Python Build Overlay Managed Bundle System), ki je namestitveni sistem za nameščanje GNU Radio aplikacij. Namestitev Gnuradio orodij za analizo GSM signalov:

sudo apt-get install git
git clone https://github.com/pybombs/pybombs.git
cd pybombs
./pybombs config

V polje install prefix vnesemo /usr/local/, ostale možnosti pustimo na privzetih vrednostih.

Če ima naša Linux distribucija GNU Radio različice 3.7.3 ali več (to preverimo z ukazom apt-cache policy gnuradio-dev), namestimo programske pakete brez zamudnega prevajanja:

./pybombs config forcebuild ' '

Sledi namestitev paketa gr-gsm:

sudo ./pybombs install gr-gsm

Na koncu v GNU Radio konfiguracijsko datoteko (~/.gnuradio/config.conf) vstavimo naslednje besedilo:

[grc]
local_blocks_path=/usr/local/share/gnuradio/grc/blocks

Mimogrede, v postopku namestitve se požene še VOLK profiliranje: (VOLK je Vector-Optimized Library of Kernel; gre za knjižnico, ki vsebuje ročno spisano SIMD kodo za različne matematične operacije). VOLK profiliranje lahko poženemo tudi ročno, in sicer z ukazom volk_profile.

Opozorilo: celoten postopek namestitve traja kar nekaj časa.

Določanje pravic dostopa do USB naprave

Sledi dodajanje pravil dostopa do USB naprave. V USB vtaknemo naš DVB-T sprejemnik z Elonics 4000 čipom in napišemo ukaz:

lsusb

Primer izpisa, iz katerega vidimo identifikacijo naprave:

Bus 001 Device 036: ID 0bda:2832 Realtek Semiconductor Corp. RTL2832U DVB-T

Ustvarimo datoteko /etc/udev/rules.d/20.rtlsdr.rules in vanjo vpišemo naslednje ukaze z ustreznimi parametri iz lsusb izpisa:

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="2832", GROUP="adm", MODE="0666", SYMLINK+="rtl_sdr"

Če imamo več RTL-SDR naprav, za vsako nastavimo dovoljenje v svoji vrstici. USB napravo nato izključimo iz računalnika, ponovno zaženemo udev storitev (sudo service udev restart) in USB napravo ponovno priključimo v računalnik.

Namestitev aplikacije za kalibriranje DVB-T sprejemnika

Za kalibriranje DVB-T sprejemnika uporabimo aplikacijo Kalibrate, ki na danem frekvenčnem območju poišče vse bazne postaje, nato pa izračuna lokalni frekvenčni zamik naše naprave (ang. oscillator frequency offset). Namestitev:

sudo apt-get install libtool autoconf automake libfftw3-dev
git clone https://github.com/asdil12/kalibrate-rtl.git
cd kalibrate-rtl
./bootstrap
./configure
make
sudo make install

Sledi kalibracija:

kal -s GSM900

Izpis:

Found 1 device(s):
  0:  Generic RTL2832U

Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
[R82XX] PLL not locked!
kal: Scanning for GSM-900 base stations.
GSM-900:
    chan: 10 (937.0MHz - 32.388kHz)    power: 12135.05
    chan: 46 (944.2MHz - 32.577kHz)    power: 37120.00
    chan: 48 (944.6MHz - 33.408kHz)    power: 22379.14
    chan: 51 (945.2MHz - 32.643kHz)    power: 17309.84
    chan: 79 (950.8MHz - 32.804kHz)    power: 35621.73
    chan: 119 (958.8MHz - 32.571kHz)    power: 27974.37

V našem primeru je bil najmočnejši kanal št. 79, zato uporabimo naslednji ukaz:

kal -c 79

Sledi izpis:

Found 1 device(s):
 0: Generic RTL2832U
Using device 0: Generic RTL2832U
Found Rafael Micro R820T tuner
Exact sample rate is: 270833.002142 Hz
[R82XX] PLL not locked!
kal: Calculating clock frequency offset.
Using GSM-900 channel 79 (950.8MHz)
average [min, max] (range, stddev)
- 32.623kHz [-32668, -32583] (85, 21.173573)
overruns: 0
not found: 47
average absolute error: 34.311 ppm

Frekvenčni zamik za RTL-SDR naprave je med -100 in 100. Kot je videti iz izpisa, je relativni frekvenčni zamik naše naprave 34.

Skener baznih postaj

Zdaj lahko poženemo skener baznih postaj, pri čemer aplikaciji z -p parametrom podamo frekvenčni zamik naprave, ki ga mora upoštevati. Avtor aplikacije sicer v eni prihodnjih različic načrtuje samodejno kalibracijo.

airprobe_rtlsdr_scanner.py -p 34

Izpis, iz katerega so vidne vse bazne postaje na območju:

linux; GNU C++ version 4.9.2; Boost_105500; UHD_003.010.git-17-g8a6c4056

ARFCN:    6, Freq:  936.2M, CID: 50552, LAC:   210, MCC: 292, MNC:  40, Pwr: -38
ARFCN:   10, Freq:  937.0M, CID: 50241, LAC:   210, MCC: 292, MNC:  40, Pwr: -30
ARFCN:   17, Freq:  938.4M, CID: 50392, LAC:   210, MCC: 293, MNC:  40, Pwr: -32
ARFCN:   18, Freq:  938.6M, CID: 50082, LAC:   210, MCC: 292, MNC:  40, Pwr: -34
ARFCN:   21, Freq:  939.2M, CID: 21011, LAC: 54717, MCC: 222, MNC:   1, Pwr: -40
ARFCN:   46, Freq:  944.2M, CID: 50243, LAC:   210, MCC: 292, MNC:  40, Pwr: -27
ARFCN:   51, Freq:  945.2M, CID: 50242, LAC:   210, MCC: 293, MNC:  40, Pwr: -37
ARFCN:   53, Freq:  945.6M, CID: 50393, LAC:   210, MCC: 292, MNC:  40, Pwr: -35
ARFCN:   56, Freq:  946.2M, CID: 50661, LAC:   210, MCC: 292, MNC:  40, Pwr: -30
ARFCN:   71, Freq:  949.2M, CID:  6361, LAC:    42, MCC: 292, MNC:  41, Pwr: -39
ARFCN:   73, Freq:  949.6M, CID:  6021, LAC:    42, MCC: 293, MNC:  41, Pwr: -43
ARFCN:   76, Freq:  950.2M, CID:     0, LAC:     0, MCC:   0, MNC:   0, Pwr: -40
ARFCN:   79, Freq:  950.8M, CID:  6121, LAC:    42, MCC: 292, MNC:  41, Pwr: -29
ARFCN:   89, Freq:  952.8M, CID:  6121, LAC:    42, MCC: 292, MNC:  41, Pwr: -33
ARFCN:  112, Freq:  957.4M, CID:  6122, LAC:    42, MCC: 292, MNC:  41, Pwr: -39
ARFCN:  119, Freq:  958.8M, CID:  6123, LAC:    42, MCC: 292, MNC:  41, Pwr: -27

Spremljanje prometa bazne postaje

Zdaj si izberemo bazno postajo, npr. na ARFCN kanalu 46. Kot je razvidno iz zgornjega izpisa, postaja deluje na frekvenci 944.2MHz. Zaženemo aplikacijo airprobe_rtlsdr s parametrom -f, ki mu podamo frekvenco:

airprobe_rtlsdr.py -f 944200000

Aplikacija začne zajemati promet na tej frekvenci, surovi podatki o prometu pa se izpisujejo v terminalu:

Zajem podatkov z aplikacijo Airprobe RTL-SDR.

Zajem podatkov z aplikacijo Airprobe RTL-SDR.

Podatke sedaj lahko zajamemo z Wiresharkom, ki jih bo znal dekodirati in prikazati na način, ki nam bo omogočil analizo GSM prometa (mimogrede, če želimo podatke v Wiresharku zajemati kot uporabnik brez sistemskih privilegijev (ang. non-root user), moramo uporabnika dodati v skupino wireshark):

wireshark -k -Y '!icmp && gsmtap' -i lo

Primer podatkov, zajetih z Wiresharkom:

Airprobe RTL-SDR sodeluje z Wiresharkom.

Airprobe RTL-SDR sodeluje z Wiresharkom.

Mimogrede, iz zajetih podatkov so poleg ARFCN kanala in frekvence razvidni še ID bazne postaje (Cell ID, CIS), koda države (Mobile Country Code, MCC), koda mobilnega omrežja (Mobile Network Code, MNC) ter oznaka lokacijskega območja (Location Area Code, LAC). S temi podatki je mogoče pogledati v OpenCellID bazo, kjer dobimo še točno lokacijo bazne postaje, in sicer z naslednjim klicem:

http://opencellid.org/#action=locations.cell&mcc=XXX&mnc=XX&lac=XXX&cellid=XXXXX

Na primer:

http://opencellid.org/#action=locations.cell&mcc=293&mnc=40&lac=210&cellid=50242

Vpogled v Open Cell ID bazo.

Vpogled v Open Cell ID bazo.

Zaključek

S cenenimi RTL-SDR ključki je mogoče sprejemati in analizirati različne signale. Med drugim tudi signale GSM baznih postaj. Ideja opisanih orodij je razvoj aplikacije, ki bo omogočala spremljanje GSM baznih postaj na dani lokaciji. Podatke o zaznanih baznih postajah na določeni lokaciji je mogoče primerjati z bazo predhodno zaznanih postaj in tako identificirati tiste, ki so se pojavile na novo.

V načrtu je tudi izvajanje različnih testov s katerimi bi bilo mogoče zaznati prisotnost tim. IMSI lovilcev. Dodatne možnosti zaznavanja IMSI lovilcev na GSM omrežju ponuja tudi uporaba RTL-SDR naprav skupaj z Raspberry Pi. Množico takšnih relativno poceni naprav bi bilo mogoče povezati med seboj in s tem zaznavati pojavnost anomalij na širšem GSM omrežju. Seveda pa je mogoče iti še širše. Na spletu je namreč že mogoče najti tudi LTE skener.

Kategorije: Splošno
Ključne besede: GSM, informacijska varnost, mobilna telefonija, RTL-SDR