MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Podvrhnutie polohy v OS Android
BAKALÁRSKA PRÁCA
Laura Barcziová
Brno, jar 2021
MASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Podvrhnutie polohy v OS Android
BAKALÁRSKA PRÁCA
Laura Barcziová
Brno, jar 2021
Na tomto mieste sa v tlačenej práci nachádza oficiálne podpísané zadanie práce a vyhlásenie autora školského diela.
Vyhlásenie
Vyhlasujem, že táto bakalárska práca je mojím pôvodným autorským dielom, ktoré som vypracovala samostatne. Všetky zdroje, pramene a literatúru, ktoré som pri vypracovaní používala alebo z nich čerpala, v práci riadne citujem s uvedením úplného odkazu na príslušný zdroj.
Laura Barcziová
Vedúci práce: Ing. Mgr. et Mgr. Zdeněk Říha, Ph.D.
i
Poďakovanie
Rada by som sa poďakovala svojmu vedúcemu Zdeňkovi Říhovi za jeho dobré rady, nápady čas a vedenie pri písaní práce.
m Zhrnutie
Táto práca sa zaoberá polohou a jej podvrhovaním v operačnom sys téme Android. Opisuje spôsoby získavania polohy a dostupné mož nosti pre falšovanie polohy a predstavuje modifikáciu operačného systému, ktorej úlohou je poskytnúť funkcionalitu pre dôveryhodné podvrhovanie polohy. Cieľom bolo v modifikovanom systéme vytvoriť aplikáciu, v ktorej bude možné riadiť polohu. Taktiež opisuje imple mentovaný detektor podvrhnutia polohy a metódy detekcie.
iv Kľúčové slová poloha, podvrhovanie, Android, GNSS, detekcia
v
Obsah
1 Úvod 1
2 Možnosti získania polohy v Android OS 3 2.1 Povolenia 3 2.2 Zdroje pre získanie polohy 3 2.2.1 GNSS 3 2.2.2 Mobilné služby 6 2.2.3 WiFi 8 2.2.4 Bluetooth 10 2.2.5 Zlúčená poloha (fused location) 12
3 Aktuálne možnosti podvrhnutia polohy 15 3.1 Aplikácie využívajúce testovacieho poskytovateľa polohy 15 3.2 Aplikácie využívajúce VPN 18
4 Implementácia 21 4.1 Vytvorenie Android custom ROM a aplikácie pre pod- vrhovanie polohy 21 4.1.1 Upravenie Android OS 22 4.1.2 Vytvorenie systémovej aplikácie 25 4.1.3 Zostavenie 28 4.2 Detektor podvrhnuté]' polohy 31 4.2.1 CompareLocationsActivity 31 4.2.2 AnalyzeLocationActivity 32
5 Záver 35
Bibliografia 37
vii
Zoznam obrázkov
2.1 Architektúra Androidu - spomínané vrstvy OS [6] 4 2.2 Možnosť získania polohy na základe signálov z Bluetooth beacons [29] 12 3.1 Upozornenie o potrebe zapnutia nastavení Mock locations 16 3.2 Nastavenie Mock locations v starších a novších verziách Androidu 16 3.3 Ukážka funkcionality dostupných aplikácií 18 4.1 Triedy využívané pri podvrhovaní GNSS polohy 23 4.2 Triedy využívané pri podvrhovaní polohy v mobilnej sieti 24 4.3 Triedy využívané pri podvrhovaní WiFi skenu 25 4.4 EXIF metadata pri zapnutí Hide location a po vypnutí 27 4.5 Ukážka Main Activity, GetLocationActivity a notifikácie o podvrhovaní 28 4.6 Časť výstupu príkazu f astboot flashall -w 30 4.7 Ukážka funkcionality detektoru 33
ix
1 Úvod
Mobilné zariadenia poskytujú možnosť lokalizácie, ktorá ponúka ši roké spektrum spôsobov využitia, ako sú navigačné systémy, aplikácie na zdieľanie polohy medzi priateľmi a rodinou, zaznamenávanie trás pri športových aktivitách alebo aj aplikácie na spoznávanie nových ľudí, ktoré vyhľadávajú dostupné zariadenia vo vašom okolí. V sú časnej pandemickej situácii poskytla lokalizácia telefónu efektívny spôsob, ako sledovať pohyb jedinca v povinnej karanténe. Príkladom na Slovensku bola aplikácia eKaranténa, ktorú človek mohol využiť, ak cestoval zo zahraničia a namiesto povinnej karantény v štátnom zariadení ju mohol stráviť v domácej izolácii, za predpokladu stiahnu tia a využívania tejto aplikácie, ktorá následne monitorovala pohyb jedinca [1]. V súčasnosti však už takmer každá aplikácia vyžaduje povolenie na používanie polohy. Toto povolenie vyžadujú aj aplikácie, ktoré zdanlivo nemajú s polohou nič spoločné. Prístup k polohe je napríklad využitý, aby nám telefón poskytoval relevantné reklamy v závislosti od toho, kde sa práve nachádzame. Poloha je však citlivý údaj a môže byť ľahko zneužitá. Je dôležité mať prehľad o tom, ktoré aplikácie ju používajú a ako. Cieľom mojej práce je zistiť, akými spôsobmi je v dnešnej dobe možné v Android zariadení získať polohu a porovnať, ako je možné podvrhovať falošnú. Ďalej chcem nadviazať na magisterskú prácu z roku 2015, Služby zjišťování polohy [2], a modifikovať priamo ope račný systém pre moje zariadenie tak, aby poskytovalo funkcionalitu pre podvrhovanie polohy v nižších vrstvách operačného systému. Na základe tejto funkcionality ďalej vytvorím natívnu aplikáciu, v kto rej bude možné plne riadiť podvrhovanie polohy s prvkami, aké po skytujú napríklad aplikácie dostupné v Google Play Store. Chcem vylepšiť, akým spôsobom je GNSS poloha podvrhovaná a dosiahnuť, aby podvrhovanie nebolo detekovateľné a teda oklamalo aj pokročilej šie aplikácie, preto bude aplikácia umožňovať napríklad periodické nastavovanie GNSS polohy. Na záver vytvorím jednoduchý detektor, ktorý má byť schopný detekovat falšovanie polohy, napr. pri využití voľne dostupných aplikácií. Detektor poskytuje viacero druhov kon-
1 i. ÚVOD troly ako porovnanie polôh z viacerých zdrojov, analyzovanie objektu reprezentujúceho polohu alebo nainštalovaných aplikácií. V nasledujúcej kapitole popisujem, ako funguje spravovanie po lohy v operačnom systéme Android a venujem sa priamym aj nepria mym možnostiam jej získavania. V ďalšej kapitole analyzujem existu júce možnosti podvrhovania polohy a porovnávam dostupné aplikácie a výhody a nevýhody použitých metód. Ďalej opisujem proces mo difikácie operačného systému a vývoja aplikácie pre podvrhovanie polohy a takisto implementáciu vytvoreného detektoru pre detekciu falšovania polohy. V závere mojej práce zhrniem výsledky analýz, úspešnosť modifikácie operačného systému s aplikáciou pre podvr hovanie a taktiež implementáciu detektoru a jeho možnosti ďalšieho využitia.
2 2 Možnosti získania polohy v Android OS
V Android OS je viacero možností, ako získať polohu zariadenia. Zdrojový kód Androidu = AOSP (Android Open Source Project) je verejne dostupný a poskytuje balíky ako android, location, an droid, net. wif i, android.telephony, android.bluetooth, ktoré majú priamy či nepriamy prístup k polohe. Poloha môže byť získa vaná pomocou GNSS (Global National Navigating System), vysielania a prijímania Bluetooth signálov, mobilnou sieťou alebo WiFi (Wireless Fidelity). Pre prácu s agregovanou alebo zlúčenou polohou (polohou vypočítanou z viacerých zdrojov) je možné použiť Google Location Services API, ktoré získava polohu s ohľadom na viacero zdrojov a senzorov.
2.1 Povolenia
Aplikácie v Android OS môžu pre lokalizovanie zariadenia vyžadovať 2 typy povolení[3]:
• android.permission. ACCESS_COARSE_LOCATION - povolenie pre používanie WiFi a mobilnej siete na získanie polohy, menej presné,
• android.permission. ACCESS_FINE_LOCATION - povolenie pre použitie všetkých dostupných zdrojov, ako napr. GNSS, na získanie presnej polohy.
2.2 Zdroje pre získanie polohy
2.2.1 GNSS
GNSS (Global Navigation Satellite System) je súbor satelitov po skytujúcich signály obsahujúce lokalizačné dáta prijímačom GNSS, ktoré na základe týchto dát rozhodujú o polohe. GNSS poskytuje ce losvetové pokrytie a využíva americký Global Positioning System (GPS), ruský Globaľnaya Navigatsionnaya Sputnikovaya Sistema (GLONASS), európsky Galileo a čínsky BeiDou [4].
3 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
Tento zdroj pre získanie polohy je však menej presný vo vnútor ných priestoroch. Poloha je v zariadení zisťovaná prostredníctvom GNSS čipu, ktorý je súčasťou hardvéru zariadenia. Ten zachytáva sig nály zo satelitov a tak získava satelitné dáta. Pri ideálnych podmien kach je odchýlka takejto polohy od reálnej polohy do niekoľkých met rov. Čip na základe dát vypočíta polohu a posúva ju vyšším vrstvám. Čip má v jadre Androidu svoj ovládač a ten sprostredkuje komuniká ciu OS s hardvérom. Vo vrsrtve HAL (Hardware Abstraction Layer) sú zadefinované funkcie, napr. callback gnssLocationCb(GnssLocation location) [5], a tie musí dané zariadenie implementovat a to umož ňuje mať viacero výrobcov. Ďalej sa v súbore com_android_server_- location_GnssLocationProvider. cpp nachádza mapovanie funkcií z HAL na metódy vo vrstve System Services dostupné v triede Gnss- LocationProvider, ktorá implementuje poskytovateľa GNSS polohy a vysiela aktualizácie polohy pomocou metódy reportLocation.
APPLICATION FRAMEWORK
ANDROID SYSTEM SERVICES
AudioFlinger Search Service
Camera Service Activity Manager
MediaPlayer Service Window Manager
Other System Services Other Media Services & Managers
' J .' Driver Display Drivers (ALSA,0SS,e1c.) Other Drivers
Obr. 2.1: Architektúra Androidu - spomínané vrstvy OS [6] 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
Od verzie Android >= 7 je taktiež možné získavať výpočty priamo z GNSS čipu, ktoré sú reprezentované triedou GnssMeasurement. V zá vislosti od konkrétneho zariadenia môžu tieto dáta obsahovať navi gačné správy, pseudovzdialenosť a ďalšie [7]. Ďalej od verzie Android >= 11 je možnosť využiť pre upresnenie polohy aj charakteristiky antény. Balíček android. location umožňuje prístup k polohe zariadenia. Po vytvorení inštancie LocationListener a implementovaní metódy onLocationChanged dostávame správy o zmene polohy vyvolané me tódou reportLocation. Pre získavanie GNSS polohy použijeme zmeny polohy poskytovateľa LocationManager. GPS_PROVIDER. Okrem tohto poskytovateľa polohy je možné prostredníctvom balíka získavať aj po lohu od sieťového poskytovateľa, ktorý používa dáta z mobilnej siete, WiFi alebo Bluetooth, čo popíšem v ďalších sekciách. Tento balíček vytvára teda API pre komunikáciu so systémovými lokalizačnými službami. Nachádzajú sa v ňom nasledujúce triedy a rozhrania [8]:
LocationManager Poskytuje prístup k lokalizačným službám daného zariadenia, umožňuje získavať polohu. Metódou requestLoca- tionUpdates() sa registruje na prijímanie zmien polohy pro stredníctvom LocationListener inštancie. Pre okamžité získa nie polohy je možné využiť metódu getLastKnownLocationO, ktorá poskytuje informácie o posledne získanej polohe.
LocationListener Rozhranie pre prijímanie aktualizácií polohy zaria denia.
LocationProvider Poskytovateľpolohy, poskytuje aktualizácie polohy. Medzi hlavné patrí GPS_PROVIDER, NETWORK_PROVIDER, ktoré boli spomenuté vyššie a PASSIVE_PROVIDER. Ten si ukladá polohu z predošlých dvoch, ak o ňu nejaká aplikácia požiada.
Location Reprezentuje geografickú polohu, ukladá si informácie o geo grafickej šírke, dĺžke, čase a dodatočné atribúty ako nadmorská výška, rýchlosť, presnosť.
GnssMeasurement Reprezentuje výpočet z GNSS satelitu.
5 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
GnssStatus Reprezentuje stav GNSS zariadenia. Poskytuje metody na získanie počtu satelitov, zistenie typu vybraného satelitu. Používa sa súbežne s GnssStatus . Callback.
GnssStatus.Callback Prostredníctvom neho monitorujeme zmeny stavu GnssStatus.
Gnss Antenalnf o Poskytuje informácie, ktoré je možné využiť k upres neniu výpočtov polohy, o anténe.
V Android dokumentácii balíka android. location [8] je odporú čané používať novšie Google Location Services API, ktoré sa nachádza v com. google. android. gms . location a je diskutované v sekcii 2.2.5.
EXIF
EXIF (Exchangeable image file formát) sú metadáta uložené v me diálnych súboroch zaznamenaných fotoaparátom zariadenia, teda napr. súboroch typov JPEG a TIFF. Obsahujú detaily o type fotoapa rátu a ďalšie podrobnosti, napr. expozícia, ISO, orientácia a v Android zariadeniach aj GNSS poloha [9]. Pri prvom použití fotoaparátu si fo toaparát vyžiada súhlas na ukladanie polohy a od tej chvíle obsahujú zosnímané fotografie túto informáciu. Balíček android. media poskytuje rozhranie Exif Interface, pro stredníctvom ktorého sa dajú čítať a zapisovať EXIF dáta. Prístup k ze mepisnej šírke a dĺžke sprostredkujú tagy TAG_GPS_LATITUDE a TAG_- GPS_LONGITUDE [10].
2.2.2 Mobilné služby
Polohu zariadenia je možné zistiť aj použitím mobilných sietí. Mobilná sieť je rádiová sieť, ktorá pokrýva oblasti nazývané bunky (cells), pri čom každá bunka má svoju základňovú stanicu (Base Station). Stanice sú umiestňované napr. na stožiaroch tak, aby bola pokrytá celá sieť. Základňová stanica sa stará o generovanie signálov a pripájanie mo bilných zariadení do siete [11]. V závislosti od konkrétneho typu siete sa líši aj získavanie polohy. Na lokalizovanie zariadenia sa využívajú napr. v GSM sieti 4 parametre [12]:
6 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
• MCC - Mobile Country Code, identifikuje krajinu (napr. Sloven sko - 231, Česko - 230),
• MNC - Mobile Network Code, identifikuje mobilný operátor,
• LAC - Location Area Code, unikátny identifikátor oblasti Loca- tion Area,
• CellID - unikátny identifikátor základňovej stanice alebo jej sek toru.
Potom v databázach, v ktorých sa nachádzajú geografické polohy sta níc, zadaním MCC, MNC, LAC a CID je možné získať súradnice ich polôh. Jednou z najznámejších a najrozsiahlejších databáz je Open- Cellld [13]. Funguje na základe obrovskej komunity prispievateľov. Google si vytvára vlastné databázy s týmito polohami a tie využíva pri získavaní sieťovej polohy, ktorá je sprístupnená prostredníctvom LocationManager.NETW0RK_PR0VIDER [14]. V balíku android. telephony je dostupná funkcionalita pre správu mobilných služieb umožňujúca prístup k stavu zariadenia, pripojeniu k mobilnej sieti alebo podrobným informáciám o sieti [15]:
Cellldentity Abstraktná trieda pre reprezentáciu identity bunky, de dia z nej triedy ako CellIdentityGsm, CellIdentityLte (v závis losti na použití konkrétnej sieťovej technológie), v prípade CellI dentityGsm obsahuje atribúty reprezentujúce MCC, MNC, LAC, CID.
Celllnfo Abstraktná trieda pre reprezentáciu informácií o bunke, ta kisto z nej dedia pre napr. CellfnfoCdma, CellfnfoGsm, obsahuje atribút typu Cellldentity.
CellLocation Abstraktná trieda reprezentujúca polohu bunky zaria denia v sieti. Poskytuje metódu requestLocationUpdate (), ktorá požaduje aktualizáciu tejto polohy. Pri zmene polohy je potom poslaný callback pre všetkých počúvajúcich na zmeny polohy LISTEN_CELL_L0CATI0N prostredníctvom PhoneStateListener inštancie. Dedia z nej 2 triedy:
7 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
1. GsmCellLocation - na lokalizovanie sa využívajú metódy getLac (), getCid (). Prostredníctvom týchto údajov a úda jov MNC, MCC, ktoré sa dajú získať volaním getNetwor- kOperatorO triedy TelephonyManager, je možné využitím databáz získať zemepisné súradnice polohy. 2. CdmaCellLocation - na lokalizovanie sa využívajú metódy getBaseStationLatitude(),getBaseStationLongitude(). Súradnice sú prístupné priamo.
TelephonyManager Umožňuje správu mobilnej siete. Ponúka me tódy getCellLocationO , getAUCellInf o(), ktoré umožňujú priamo alebo nepriamo získať polohu na základe okolitých bu niek.
TelephonyScanManager Spravuje žiadosti a callbacky k prístupu k mobilnej rádiovej sieti.
PhoneStateListener Monitoruje zmeny stavu zariadenia, mobilnej siete, signálu, ale aj zmenu polohy na základe mobilnej siete pro stredníctvom onCellLocationChanged(CellLocation location) Pre počúvanie na zmeny polohy bunky je potrebné mať zaregis trované LISTEN_CELL_LOCATION, ktoré vyžaduje povolenie ACCESS_FINE_LOCATION.
RIL
RIL (Rádio Interface Layer) je vrstva sprostredkujúca komunikáciu medzi android. telephony a rádiovým hardvérom. Skladá sa z 2 kom ponent: RIL Deamon - komunikuje s mobilnými službami a vysiela vyžiadané príkazy Vendor RILu - je špecifický pre daný hardvér a vy siela nevyžiadané príkazy RIL Deamonu [16]. Definície funkcií, ktoré musí Vendor RIL implementovat' sa nachádzajú v súbore ril. h - tu sa nachádza napr. definícia štruktúr pre Cell Identity (RIL_CellIdenti- tyGsm) [17].
2.2.3 WiFi
Ďalším zdrojom pre lokalizáciu zariadenia sú dostupné WiFi siete. WiFi (Wireless Fidelity) je bezdrôtová technológia navrhnutá tak, aby
8 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS poskytovala možnosť elektrickým zariadeniam pripojiť sa na bezdrô tovú lokálnu sieť (LAN). WiFi sieť sa skladá z prístupových bodov. Používa rádiové signály na poskytnutie prístupu k internetu [18]. WiFi sa v Android OS takisto ako mobilné siete využíva na získavanie sieťovej polohy. Prostredníctvom Wif iManager API je možné získať informácie o do stupných WiFi bodoch v okolí zariadenia. Informácie o dostupných WiFi sa získavajú pomocou skenovania. Posledne aktualizované dáta sa získajú volaním getScanResults (). Pre vyžiadanie nového skeno vania sa používa metóda startScanO. Taktiež sa dá vytvoriť inštan cia BroadcastReceiver, ktorá pri zaregistrovaní SCAN_RESULTS_AVAI- LABLE_ACTION bude počúvať na zmeny WiFi. Na volanie týchto metód je potrebné mať špecifické povolenia súvisiace s polohou, požiadavky na ne sa menia v závislosti od verzie Androidu. Balíček android.net .wif i sprístupňuje možnosti pre správu WiFi [19] :
WifiManager Poskytuje API pre prácu s WiFi - umožňuje napr. zís kať dostupné siete, výsledky skenovania prístupových bodov, rozhodovať sa, ku ktorému prístupovému bodu sa pripojiť.
Wifilnfo Poskytuje informácie o WiFi bode umožňujúce lokalizovať zariadenia. Obsahuje napr. informácie ako BSSID, SSID, IP ad resu.
BSSID, SSID
Každý prístupový bod WiFi má unikátny identifikátor BSSID (známy ako MAC adresa prístupového bodu), ktorý pravidelne vysiela a os tatné zariadenie môžu túto informáciu zachytávať [20]. Prostredníc tvom Wifilnfo je možné získať identifikátory BSSID (Basic Service Set identifier) a SSID (Service Set identifier, názov siete) volaním getBSSID (), getSSID O na objekte Wif i Inf o. Aplikácie majúce prístup k polohe a identifikátorom SSID a BSSID sú schopné tieto informácie zhromažďovať vo verejne dostupných databázach. Znalosťou SSID alebo BSSID je potom využitím takýchto databáz ľahko možné získať polohu zariadenia. Najznámejšími verejnými databázami sú napríklad Mozilla Location Service [21] alebo Combain Positioning Service [22],
9 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS ktoré zhromažďujú takisto informácie o staniciach v mobilnej sieti a Bluetooth beacons zariadeniach, ktoré popíšem nižšie.
IP ADRESY
Každé zariadenie pripojené k internetu má svojim poskytovateľom internetu priradenú svoju IP adresu, vďaka ktorej sa identifikuje v sieti. IP adresa je unikátny číselný identifikátor, pomocou ktorého sú zaria denia schopné v sieti komunikovať. Poloha sa získava znova prostred níctvom databáz, ktoré mapujú IP adresy na zemepisné súradnice. Táto poloha je zväčša menej presná, závisí to od použitia jednotlivých databáz. IP adresa je verejná, teda viditeľná na každom serveri. IP adresu je možné získať využitím metód Wif iManager triedy volaním getlpAddressO na objekte Wif ilnf o, získavame tak ale našu lokálnu IP adresu, teda napr. pri využití NAT (Network address translation), kedy sa adresy z lokálnej siete preložia na verejnú adresu vrámci inter netu, nezískame adresu, ktorú vidia ostatné servery. Túto adresu však je možné zistiť napr. využitím nejakého API. Tých je dostupných veľa a poskytujú aj rôzne ďalšie informácie, ako priamo krajina, kraj, po skytovatel' internetu, časové pásmo, na základe IP adresy. Príkladom sú IPWHOIS [23] alebo Big Data Cloud API [24].
ULOŽENÉ SIETE WIFI
Informácie o WiFi sietiach ako SSID a heslá sa v zariadeniach ukla dajú v súbore /data/misc/wif i/wpa_supplicant. conf alebo v zaria deniach s Android verziou >= 8 v súbore /data/misc/wif i/Wif iCon- f igStore. xml. K týmto súborom je možné pristupovať iba s právami superužívateľa. Takto sa dá zistiť história využívaných sietí.
2.2.4 Bluetooth
Bluetooth je technológia, ktorá umožňuje bezdrôtovú výmenu dát medzi zariadeniami na krátke vzdialenosti, založená na princípe rádi ových vín. Operuje na frekvencii 2,4 GHz [25]. Pre výmenu dát medzi zariadeniami musia byť tieto zariadenia tzv. spárované. Android API pre Bluetooth umožňuje skenovať zariadenia, prepá jať ich, odosielať a prijímať dáta a spravovať prepojenia. Pre používa lo 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS nie Bluetoothu je potrebné povoliť ACCESS_FINE_LOCATION, nakoľko Bluetooth skenovanie umožňuje získať informácie o polohe zariade nia. Toto môže byť sprostredkované využitím tzv. Bluetooth beacons, hardvérových zariadení vysielajúcich svoj identifikátor okolitým zaria deniam [26]. Tieto zariadenia sa využívajú najmä v získavaní polohy vnútri. Balíček android.bluetooth sprístupňuje funkcionalitu pre prácu s Bluetooth [27] :
BluetoothManager Volaním metódy tejto triedy get Adapter O zís kavame inštanciu BluetoothAdapter.
BluetoothAdapter Slúži na komunikáciu. Poskytuje napr. metódy getBondedDevicesO - vracia spárované zariadenia.
BluetoothDevice Reprezentuje nájdené zariadenie, má v sebe infor mácie o zariadení, napr. MAC adresu získavame volaním ge- tAddressO.
BLE - Bluetooth Low Energy
Pre Bluetooth zariadenia majúce nižšie požiadavky na výkon sa v An- droide OS dá využiť Bluetooth Low Energy, ktorý bol navrhnutý na podporu IoT, teda internetu vecí. Vysielače BLE, zariadenia "bea cons", sú zväčša malé, ľahko umiestniteľné, nenáročné na spotrebu batérie a prostredníctvom nich sa dá získať pomerne presná poloha, pre čo sa najviac využívajú v získavaní polohy vo vnútorných priesto roch. Poloha BLE beacons je stála, sú umiestňované napríklad na steny, stropy a iné objekty, odkiaľ periodicky vysielajú signály, ktoré môžu mobilné zariadenia prijímať [26]. Následne je viac možností, ako po tom získať geografickú polohu. Pri získaní signálu z viac ako jedného zariadenia je možné zistiť polohu na základe hodnôt Received Signál Strenght Indicator (RSSI), ktoré opisujú intenzitu signálov a na zá klade intenzít sa odhaduje vzájomná vzdialenosť beacons a zariade nia^]. Keď chceme Android zariadenie pripojiť k iným perifériám pomo cou Bluetoothu, spustí sa najprv skenovanie na zistenie unikátneho identifikátora periférie. Pri prijatí callbacku onScanResult získavame inštanciu ScanResult, teda objekt výsledku skenovania. Ten poskytuje
11 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS referenciu na BluetoothDevice, ktorý zodpovedá nájdenej periférii. Každé zariadenie používajúce Bluetooth má pridelenú svoju unikátnu MAC adresu, vďaka ktorej je identifikovateľné. Na základe nej a zna losti polohy periférie je možné Android zariadenie lokalizovať.
Obr. 2.2: Možnosť získania polohy na základe signálov z Bluetooth beacons [29]
Balíček android. bluet ooth. le sprístupňuje funkcionalitu pre prácu s BLE [30] :
BluetoothLeScanner Umožňuje skenovanie BLE zariadení. Získame ho volaním getBluetoothLeScanner () na objekte BluetoothA- dapter.
ScanResult Reprezentuje výsledok skenovania, zahŕňa ScanRecord a BluetoothDevice.
ScanRecord Reprezentuje záznam BLE skenovania.
2.2.5 Zlúčená poloha (fused location) Google ponúka API na získanie polohy s ohľadom na viacero zdrojov. Google Location Services API poskytlo nové možnosti ako detekciu ak tivity (bicykel, pešo, auto, lietadlo), Geofencing - možnosť vytvárania virtuálnej oblasti a monitorovania na základe polohy a taktiež by malo poskytovať najpresnejšiu polohu zariadenia na základe požiadavok užívateľa a ďalších faktorov, ako je stav batérie. Pristupuje k dátam z viacerých senzorov.
12 2. MOŽNOSTI ZÍSKANIA POLOHY V ANDROID OS
Táto funkcionalita sa nachádza v balíku com.google.android.- gms .location, ktorý už bol spomenutý v sekcii GNSS. Je vyvíjaný Googlom a nie je súčasťou zdrojového kódu Androidu, je licencovaný inak a je closed source, teda jeho zdrojový kód nie je verejne dostupný. Zahŕňa tieto triedy a rozhrania poskytujúce prístup k polohe [31]:
FusedLocationProviderClient Rozhranie slúžiace na interakciu s po- skytovateľom zlúčenej polohy, poskytuje napríklad metódy get- LastLocationO pre získanie posledne uloženej polohy a get- CurrentLocation(int priority, CancellationToken token) pre vyžiadanie aktuálnej polohy.
LocationCallback Prijíma správy o dostupnosti a zmene polohy.
LocationListener Rozhranie pre prijímanie aktualizácií polohy.
LocationRequest Obsahuje parametre požiadavky pre FusedLocati- onProviderApi ako napríklad počet aktualizácií polohy, trvanie požiadavky, interval aktívnych aktualizácií polohy alebo prioritu požiadavky.
LocationResult Reprezentuje geografickú polohu získanú z poskyto- vateľa zlúčenej polohy. Objekt tejto triedy získame prostredníc tvom callbacku onLocationResult(LocationResult result),vo laním getLocations () získame všetky geografické polohy roz triedené od najstaršej a getLastLocationQ najnovšiu.
13
3 Aktuálne možnosti podvrhnutia polohy
V tejto kapitole sa zameriam na konkrétne možnosti, ako je momen tálne možné podvrhovať polohu. V súvislosti so súčasnou pandemic kou situáciou a obmedzovaním pohybu je možné nájsť mnoho postu pov opisujúcich, ako zamedziť sledovaniu polohy Android zariadení. Tieto postupy predovšetkým propagujú rôzne aplikácie v Google Play Store (napr. Fake GPS Location [32]), ktoré majú podvrhovať falošnú, užívateľom zadanú, polohu. Tieto aplikácie otestujem a popíšem ich funkcionalitu a prípadné nedostatky.
3.1 Aplikácie využívajúce testovacieho poskytovateľa polohy
V Android OS sa dá v nastaveniach odomknúť sekcia Pre vývojárov (Developer options), ktorá sprístupňuje možnosti pre vývojárov na tes tovanie, ladenie, modifikácie a pokročilejšie prispôsobenia. Aplikácie podvrhujúce polohu fungujú zväčša vďaka možnosti nastavenia testo vacieho poskytovateľa polohy, ktorého je možné využívať prostredníc tvom týchto pokročilých nastavení. Aplikácie teda pracujú s najvyššou vrstvou, využívajú metódy triedy LocationManager z balíka android. location [8]: addTestProvider vytvára a pridáva testovacieho poskytovateľa po lohy medzi dostupných poskytovateľov, setTestProviderEnabled nastavuje testovacieho poskytovateľa polohy na aktívny/neaktívny, removeTestProvider odstraňuje testovacieho poskytovateľa polohy, setTestProviderLocation nastavuje polohu testovacieho poskytova teľa polohy.
Podvrhovanie polohy týmto spôsobom prebieha tak, že sa vytvorí testovací poskytovatel'polohy. Ak je to jeden z reálnych poskytovateľov (napr. GPS), tak sa pôvodný odstráni. Potom sa testovací poskytova tel' nastaví na aktívny a je možné nastavovať prostredníctvom neho
15 3- AKTUÁLNE MOŽNOSTI POD VRHNUTI A POLOHY polohu, ktorú užívateľ chce. Pri nastavení sa zavolá metóda report- Location, ktorá vyvolá zaslanie novej polohy všetkým, čo na zmenu polohy počúvajú. Pri odstránení testovacieho poskytovateľa polohy, ak nahradzoval reálneho poskytovateľa, sa znova pridá reálny posky tovatel'polohy a zariadenie by malo znova prijímať reálne aktualizácie polohy z toho poskytovateľa.