Android hacking pro začátečníky – architektura

Začínáme seriál o testování bezpečnosti mobilních aplikací na platformě Android a v tomto příspěvku se zaměříme na samotnou architekturu Androidu.

Architektura

Architekturu Androidu tvoří různé vrstvy podpůrných “hejbátek” a knihoven, které připravují půdu pro běh mobilních aplikací.

Následující obrázek tyto vrstvy znázorňuje. Pojďme se blíže seznámit s každou vrstvou. Začneme odspodu linuxovým jádrem.

Linuxové jádro

Základním stavebním kamenem každého Androidu je linuxové jádro, které spolu s ovladači zařízení obsluhuje hardware telefonu. Linuxové jádro poskytuje elementární operace typu spusti aplikaci, čti/zapiš soubor nebo otevři síťové spojení.

Linuxové jádro má kolem sebe další podpůrné prostředky a konfigurace, které jsou pro Androida specifické. Například při instalaci nové aplikace operační systém Androidu vytváří nového uživatele a stejnojmennou skupinu. Následně pak vytváří její interní datové úložiště v adresáři /data/data/jméno-aplikace a nastaví potřebná vlastnická práva.

Na externím úložišti – paměťové kartě – už vládne větší nepořádek, zde aplikace operují s právy skupiny sdcard_r a sdcard_w a data jsou pak vystaveny na pospas i jiným aplikacím v těchto skupinách.

Mobilní aplikace jsou spouštěny v tzv. “sandboxu”, což znamená, že operační systém pro každou aplikaci vyhradí nový proces s virtuálním Java strojem (JVM), který teprve interpretuje programový kód mobilní aplikace.

Abstraktní vrstva HAL

Abstraktní vrstva hardwarového rozhraní (HAL) poskytuje rozhraní, které umožňuje využívat hardware telefonu, například kameru, bez nutnosti znát detaily hardwaru a jeho obsluhy.

Obsluha zařízení musí být rychlá a proto je rozhraní HAL napsáno v jazyce C a C++. Mobilní aplikace jsou ale napsány v Javě, tudíž musí existovat způsob, jak volat HAL z Javy. Odpověď nalezneme později.

Běhové prostředí – Dalvik Virtual Machine

Běhové prostředí umožňuje spustit mobilní Java aplikaci ve virtuálním Java stroji (JVM). Pro mobilní zařízení je ale klasická implementace JVM moc náročná a tak zjednodušeně řečeno vznikla přizpůsobená verze Dalvik Virtual Machine (DVM), která na mobilních zařízeních respektuje omezenou kapacitu baterie a operační paměti.

Aby mohla Java aplikace běžet v DVM, je potřeba zkompilovaný Java “byte kód” upravit pomocí “Dex kompilátoru”, jak ukazuje následující obrázek.

 

Nativní knihovny

Nativní knihovny tvoří logický doplněk k běhovému prostředí Androidu.  Mobilní aplikace potřebuje provolávat i jiné knihovny, které však nejsou v Javě, ale je možné je z Javy zavolat, například rozhraní HAL.

Prakticky to vypadá tak, že DVM zkompilovanou nativní knihovnu “natáhne” do paměťového prostoru mobilní aplikace. Programově lze pak volání přesměrovat do nativní knihovny. Pro první přiblížení nám tato představa bude stačit.

Aplikační Framework – Java API

Tuto vrstvu tvoří Java API, které je běžně dostupné programátorovi, který vyvíjí mobilní aplikace. Aplikační framework si můžete představit jako sadu Java knihoven, které poskytují základní služby každé mobilní aplikaci. Programátor se tak může soustředit na vývoj funkcionality.

Najdeme zde různé Java třídy, například “manažera” pro vykreslování oken nebo “správce obsahu” pro sdílení dat mezi aplikacemi.

Systémové a uživatelské aplikace

Na pomyslném vrcholu jsou systémové a uživatelské aplikace.

Systémové aplikace jsou v telefonu předinstalovány samotným Googlem nebo dodavatelem hardwaru. Tyto systémové aplikace jsou přítomny i po resetu zařízení do továrního nastavení, protože jsou z výroby součástí obrazu operačního systému v interním úložišti telefonu.

Najdeme zde aplikace jako Google kalendář, Gmail nebo Google Play Store, který na pozadí využívá další služby založené na Google API.

Vedle systémových aplikacích tu máme ty uživatelské, které běžně stahujeme z Google Play Storu.

Dokumentace

Pro další studium hackingu mobilních aplikací se nám bude hodit dokumentační projekt OWASP Mobile Security Testing Guide. V kapitole Android Platform Overview naleznete další detaily této platformy, které postupně budeme odkrývat.

Nesmíme zapomenout ani na oficiální dokumentaci pro vývojáře, kterou naleznete na adrese developer.android.com/guide/platform.

Tímto se blížíme k samotnému závěru příspěvku.

Závěr

V dnešním díle jsme se seznámili s architekturou Androidu a příště se podíváme na to, jak jej můžeme emulovat.

Pokud se vám článek líbil, připojte se do diskuze na našem Facebooku. Budeme rádi, když se podělíte nejen o své názory, ale také připojíte zajímavé odkazy ze světa hackingu a bezpečnosti Androida.