Mobilalkalmazások biztonságos tesztelése


Az okostelefonok elterjedésével egy hatalmas szoftverpiac alakult ki, amelyben a PC-s alkalmazásokhoz viszonyítva még nagyobb biztonsági elvárásoknak kell eleget tenniük a fejlesztőknek. Az alábbi publikációból megtudhatjuk, milyen biztonsági réseket tartalmazhat egy-egy applikáció.

Manapság a mobiltelefonos környezetben futó, és PC-s környezetben használt alkalmazások nagyon hasonló jellegzetességekkel bírnak. A mobiltelefonok és az asztali számítógépek képességei a futtatható alkalmazások tekintetében egyre jobban megközelítik egymást.

A közeljövőben megjelenő négymagos CPU-kkal szállított mobilok ugyancsak ezt a trendet erősítik. Egyesek szerint az asztali számítógépeket hosszú távon felválthatják a mobil eszközök számára készített dokkolók, amik a mai munkaállomásokhoz hasonló felhasználói élmény elérését teszik lehetővé hasonló beviteli és megjelenítő eszközökkel, mindössze a konfiguráció “lelkét” képező eszköz lesz bármikor elmozdítható. További érdekes trend, hogy a speciálisan mobil eszközökre kifejlesztett egyedi operációs rendszerek és futtató környezetek (Symbian, Java MIDP, a gyártók egyedi mobiltelefon platformjai) egyre nagyobb teret veszítenek.

Az egyre népszerűbbé váló operációsrendszer megoldások régi ismerősök új köntösbe bújtatva: UNIX (Apple iOS, Android) vagy Windows (Windows Mobile) gyökerekkel rendelkeznek. Érdekes kérdés, hogy a jövő trendjei kinek kedveznek? Nem lenne meglepő, ha a Windows Mobile alapú megoldások új erőre kapnának, mivel mégiscsak ebben a környezetben lehetséges legkézenfekvőbben, és a mai irodai szoftvereket ismerő felhasználók számára ismerős módon megoldani a normál irodai feladatok integrációját.

Ejtsünk pár szót a különbségekről is a teljesség kedvéért. Míg egy asztali számítógépre az alkalmazások (legalábbis jobb esetben egy normál vállalati környezetben) nagyrészt kontrollált forrásokból származnak, a telepítőkészlet általában nem az internetről töltődik le. Az alkalmazások telepítését a legtöbb felhasználó számára korlátozzák.

Egy mobiltelefonra a felhasználók sok esetben tetszőleges alkalmazásokat tölthetnek le kevésbé kontrollált forrásokból (pl. market, vagy egy adott szoftver terjesztőjének honlapja). Ma már léteznek internetbankolásra, közüzemi számlák kiegyenlítésére szolgáló alkalmazások amellett, hogy a legtöbb okostelefon-felhasználó nagyrészt közösségi szolgáltatások elérésére és játékra szolgáló alkalmazásokat futtat.

Miről szól egy okostelefonos alkalmazás?

Elmondhatjuk, hogy olyan feladatokhoz szokás mobil eszközre fejleszteni egy alkalmazást, ha fontos szempont a felhasználók számára a bárhol bármikor elérhető funkcionalitás, esetleg ezzel együtt az adatok folyamatos szinkronizációja. Egy megfelelő kamerával ellátott eszköz alkalmas különféle grafikusan kódolt információk feldolgozására (pl. BAR-kód, QR-kód, alfanumerikus adatok, esetleg rendszám). Bizonyos esetekben az adatokat az alkalmazás lokális tárolójába (adatbázis, fájlrendszer) menti, amit csak megbízható, nagy sebességű hálózat (pl. céges WIFI) elérhetősége esetén szinkronizál a szerverrel.

Személyes adatokat is kezelő alkalmazások esetén külön szempont kell hogy legyen azok bizalmasságának megőrzése. Érdekes szempont lehet még a következő: mi történik a telefonon tárolt adatokkal, ha azt a felhasználó elveszti, vagy ellopják a telefont. Milyen adatok tárolódnak a böngésző cache-ben vagy az alkalmazás lokális tárolóiban. Mi történik, ha a felhasználó egy nem megbízható WIFI-hálózatra csatlakozik? Titkosított-e a hálózati kommunikáció, ha igen, hogyan kezeli az alkalmazás, ha valaki hamis SSL tanúsítvánnyal próbál a hálózati kommunikációba beékelődni? Szintén érdekes kérdés, hogy az alkalmazások mennyire védettek egymástól: mi történik, ha egy kíváncsi alkalmazás a többi fájlrendszeren (pl. SD kártyán) elmentett, vagy a közvetlenül hozzáférhető memóriában épp elérhető (RAM) adatokhoz próbál hozzáférni.

Következzen néhány példa a lehetséges fenyegetettségekre

A hálózati forgalom analízisével és az adatok megváltoztatásával egy támadó bizalmas adatokhoz juthat, és egyébként számára nem engedélyezett műveleteket hajthat végre. A lokálisan tárolt adatok nem megfelelő kezelése, vagy a cache-kezelés hibái szintén bizalmas adatok kiszivárgásához vezethet. Mindig érdemes szem előtt tartani, hogy amennyiben a futtatható alkalmazás letölthető, annak működése reverse engineering technikák alkalmazásával teljes mértékben megismerhető egy támadó számára is. Egy támadó nem csak a kliens oldalon próbálkozhat, például hamis alkalmazásszerverhez való kapcsolódásra veheti rá az alkalmazást egy saját WIFI access point bevetésével, ha nincs megfelelő autentikáció mind a kliens, mind a szerver oldalon megvalósítva. Távoli kód futtatására ugyanúgy lehetőséget adhat egy buffer overflow hibát tartalmazó alkalmazás, mint ahogy az asztali  Windows operációs rendszerek körében. Egy támadó által összeállított alkalmazás a memóriában található adatok kiolvasásával is megpróbálhat értékes adatokat (pl. jelszavak, egyéb bizalmas adatok) ellopni.

A mobiltelefonos környezetben használt alkalmazások alapvetően két kategóriába sorolhatóak: böngészőben elérhető vagy natív vastag kliens alapú alkalmazások. Különböző operációs rendszereken ugyanez a besorolás érvényben marad, alapvetően csak a böngészők, illetve a natív kódú alkalmazások működésének egyes részletei különbözhetnek.

Milyen eszközökre lehet szükség?

Az alábbiakban az alkalmazható eszközöket típusok szerint ismertetjük, részletes tárgyalásuk meghaladná a cikk terjedelmét, viszont némi Google-használattal mindegyikre találhatnak példát az érdeklődők.

A mobil eszközökön futó alkalmazások teszteléséhez használt módszer kiválasztásakor érdemes megfontolni, melyik vezet a leghatékonyabban eredményre, a vizsgált fenyegetettségeket figyelembe véve.

Az alkalmazható eszközök és megközelítések a teljesség igénye nélkül

Statikus analízis

Amennyiben az alkalmazás forráskódja rendelkezésre áll, a hagyományos módon kereshetjük az alkalmazás gyenge pontjai. Ennek külön szakirodalma létezik, és túlmutat a jelen cikk tartalmi keretein. Amennyiben a forráskód hiányában csak a futtatható kód áll rendelkezésre, ugyancsak léteznek eszközök a visszafejtésére. Így kicsit kevésbé „felhasználóbarát” módon, de lényegében ugyanúgy lehetőség van a statikus analízisre. A visszafejtésre használt eszközöket disassemblernek nevezzük, és operációs rendszer típusonként eltérőek lehetnek. Például az Androidos környezetben használt Dalvik virtuális gép a Javához hasonló módon, speciális byte-kódra fordított alkalmazások futtatását teszi lehetővé.

Emulátor

Lényegében az összes elterjedt mobiltelefon operációs rendszerhez elérhető emulátor, amivel egy szimulált környezetben futtathatjuk a vizsgálni kívánt alkalmazást. Előnye, hogy az alkalmazást korlátozások nélkül vizsgálhatjuk, és tetszőleges módon megváltoztathatjuk a működést. Általában lehetőség van a hálózati forgalmat tetszőleges proxy-n keresztül átirányítva a hálózati forgalom analízisére. Ugyancsak korlátozás nélkül elérhetőek az alkalmazás által tárolt állományok és adatbázisok. Az emulátorban viszonylag egyszerűen megoldható az alkalmazás dinamikus analízise (pl. remote debugging alkalmazásával). Hátránya, hogy az eredmények nem teljes mértékben tekinthetőek autentikusnak, mert az eredeti környezethez képest lehetnek eltérések (az emulátor nem képes teljes mértékben modellezni az eredeti eszközben megtalálható hardver eszközök viselkedését).

Operációs rendszer szintű jogosultságok vizsgálata

A mai mobil operációs rendszerek a jogosultságrendszer tekintetében is nagyban hasonlítanak a munkaállomásokon futtatott operációs rendszerekéhez. A felhasználó alap esetben nem rendelkezik minden jogosultsággal, így az általa elérhető funkciók és futtatott alkalmazások jogosultságai is korlátozottak. Telepítéskor ugyan a felhasználóknak külön engedélyezniük kell az alkalmazás számára egyes jogosultságok és rendszererőforrások (pl. fájlrendszer útvonalak, hálózati kommunikáció) elérését. Némi gyakorlati érzékkel elképzelhetjük, hogy ezek a kérdések egyes felhasználók esetében különösebb megfontolások nélkül jóváhagyásra kerülnek.

Rootolás

Ha egy alkalmazás eredeti környezetében és korlátozásoktól mentesen akarunk vizsgálni, akkor ezt a leghatékonyabban rootolt környezetben (Android, iOS) lehet megtenni. Ennek részleteit itt nem ismertetném, mert operációs rendszer és konkrét készüléktípus függő lehet. Egy rootolt készüléken gyakorlatilag korlátozások nélkül megfigyelhetjük és befolyásolhatjuk az alkalmazás működését.

Hálózati forgalom analízise

Egy szabványos firmware-rel rendelkező telefon esetében is lehetőség van a hálózati forgalom analízisére. Néhány feltétel alapján kiválasztható a használni kívánt eszközök köre. Ilyen szempontok a következők: titkosított-e a hálózati forgalom, milyen titkosítást használ az alkalmazás (SSL, tanúsítvány alapú autentikáció). Egyes alkalmazásoknál van lehetőség proxy megadására a beállítások módosításával, más esetekben ez csak egyéb trükkös megoldások alkalmazásával lehetséges. Egyes alkalmazásokban a szerver hálózati címe a lefordított kód szintjén van meghatározva pl. URL vagy IP-cím megadásával. Ilyenkor az alkalmazás IP vagy DNS spoofing (cache poisoning) technikák alkalmazásával rávehető, hogy az általunk előre beállított intercepting proxy (pl. burp) hallgatózó portjához csatlakozzon. Amennyiben a kommunikáció SSL-en keresztül történik, a közbeékelődő proxy egy saját szerveroldali certificate-et generál, és amennyiben ezt a kliens nem ellenőrzi, a forgalom lehallgatható és tetszőlegesen megváltoztatható.

Tárolt információk vizsgálata

Az alkalmazások által elmentett információk vizsgálata hasznos lehet a működés megértéséhez, és érdemes megpróbálni, az adatok módosításával mennyire befolyásolható az alkalmazás működése, illetve mennyire lehetséges a felhasználó számára egyébként nem engedélyezett funkciók elérése, és az értékhatárokon kívül eső adatok bevitele.

Tesztkörnyezet felállítása

Amennyiben nem csak emulált környezetben szeretnénk alkalmazásokat tesztelni, szükségünk van saját tesztkörnyezet kialakítására. Ehhez a legegyszerűbben egy WIFI Access Point felállításával és a proxizást, illetve a forgalom átirányítását elérhetővé tevő routerfunkciókat is ellátó számítógép (pl. Linux operációs rendszert futtató PC) konfigurálásával juthatunk. Adott esetben ezt az összes funkciót egy számítógép is elláthatja. Egy környezet felállításához, és a konkrét eszközök, illetve beállítások kiválasztásához sok információt találhatunk az interneten.

Mit teszteljünk?


Ha nagyon le akarjuk egyszerűsíteni a kérdést, akkor kijelenthetjük, hogy egy okostelefonon futó alkalmazás felfogható egy speciális szerver alkalmazáshoz készített böngészőnek. A sebezhetőségek köre ennek megfelelően ugyanazokba a kategóriákba eshet: autentikációval (felhasználók azonosításával), autorizációval (jogosultságok engedélyezésével), illetve a bemenő adatok nem megfelelő szűrésével kapcsolatos problémák. Ezek teszteléséhez rengeteg hasznos információt találhatunk az OWASP (Open Web Application Security Project) által elérhetővé tett anyagok között.

Szerző:
Major Marcell

<< Vissza