Android
Historie OS Android
Operační systém Android je nejprodávanějším mobilním operačním systémem na světě – ve třetím kvartále roku 2011 dosáhl 52,6% podílu na trhu (podle prů- zkumu agentury Gartner). Uživatelé zařízení s OS Android vyhledávají nejen kvůli celkovému propojení s Google účtem (což obnáší například automatické zálohování kontaktů), ale i se sociálními sítěmi jako je Facebook nebo Twitter. Uživatelům jsou nabízeny statisí- ce aplikací, které jsou z velké části zdarma.
V roce 2005 odkoupila firma Google Inc., známá především provozováním internetového vyhledávače Google, společnost Android Inc. (vznik 2003), která vyvinula základ platformy Andorid. V roce 2007 pak byla založena Open Handset Alliance (dále jen OHA). Členové OHA se zavázali k tomu, že budou dohlížet na vývoj OS Android.
OHA se v současnosti skládá z 84 členů, kteří se dělí do 5 velkých skupin:
· Mobilní operátoři (např. Sprint Nextel, T-mobile, Telefónica, Vodafone, …)
· Výrobci mobilních telefonů (např. Acer Inc., Alcatel mobile phones, ASUSTek Computer Inc., Dell, Garmin Internetional, Inc., HTC Corporation, Huawei Technologies, LG Electronics, Inc., Motorola, Inc., Samsung Electronics, Sony Ericsson,.)
· Výrobci polovodičových součástek (Intel Corporation, MediaTek, Inc., NVIDIA Corporation, …)
· Softwarové společnosti (např. eBay Inc., Google Inc., MOTOYA Co., Ltd., )
· Obchodní společnosti (např. Borqs, L&T Infotech, TAT – The Astonishing Tribe AB)
První aplikace pro Android vzešly ze soutěže Android Developer Challenge (dále jen ADC), kterou pořádala v roce 2008 firma Google Inc. Vývojáři soutěžili se svými aplikacemi a projekty v deseti různých kategoriích (např. vzdělání, hry, sociální sítě aj.). Odborná porota vybrala 50 projektů, jejichž vývojáři získali k dalšímu vývoji 25.000 dolarů. V každé kategorii byl poté vyhlášen vítěz, který získal 250.000 dolarů. Soutěž ADC se konala ještě jednou v roce 2009 s obdobný- mi pravidly.Od roku 2007 již vyšlo několik verzí OS Android, za což je tato platforma často kritizována, kvůli velké roztříštěnosti. Každá nová verze OS Android odstraňuje chyby verze předchozí, přináší vždy nové funkce a snaží se být více uživatelsky přívětivá.
Android 1.0 Angel Cake
První verze OS Android se objevila ke konci září roku 2008. Byl to první open source mobilní operační systém. Byl plně integrován s tehdejšími službami Google, obsahoval webový prohlížeč, který zobrazoval HTML7 a XHTML8 stránky, 7 Značkovací jazyk pro vytváření webových stránek 8 Rozšíření značkovacího jazyka HTML 4 které se daly přibližovat. Součástí systému byl i Android Market pro stahování a aktualizaci aplikací (rozvedu dále), multitasking9 , instant messaging (internetový komunikační nástroj). Podporoval Wi-Fi a Bluetooth. Prvnim telefonem s OS Android byl HTC Dream (G1).
Android 1.1 Battenberg
Verze 1.1 v únoru 2009 nepřinesla nic zvláštního oproti verzi 1.0, byla určena pouze pro T-Mobile G1
Android 1.5 Cupcake
30. dubna 2009 vyšla verze 1.5, založena na jádře Linuxu 2.6.27, která obsahovala nové funkce, jako například rychlejší spouštění a práci fotoaparátu, rychlejší ur- čení GPS pozice (Global Positioning System), klávesnici na displeji a možnost nahrávání videí na Youtube a fotek s obrázky na Picassa10 přímo z telefonu.
Android 1.6 Donut
V polovině září téhož roku, kdy vyšla verze 1.5, byla vydána SDK11 verze 1.6, která obsahovala například okamžité vyhledávání a vyhledávání hlasem, integrovaný fotoaparát s kamerou (již se dalo přepínat mezi fotoaparátem a kamerou), galerii, indikátor využití baterie, podporu CDMA12 a funkci převodu textu na řeč ve více jazycích než v předchozích verzích. Android 1.6 Donut byl založen na Linuxovém jádře 2.6.29.
Android 2.0/2.1 Éclair
Verze Éclair s Linuxovým jádrem 2.6.29 vyšla 26. října 2009 a podporovala mimo jiné synchronizaci emailů a kontaktů z více účtů, Bluetooth 2.1, měla nové uživatelské rozhraní webového prohlížeče s podporou HTML513 a nové funkce měl i kalendář, vylepšení se dočkaly Google Mapy (verze 3.1.2). Android SDK 2.01 byl uvolněn v prosinci 2009, Android SDK 2.1 pak v lednu 2010.
Android 2.2 Froyo
20. května 2010 byla uvedena verze 2.2 na Linuxovém jádře 2.6.32 a s ní přišlo i celkové zlepšení rychlosti a paměti, nové widgety14 pro domovskou obrazovku, podpora a vytváření Wi-Fi hotspotů (poskytování bezdrátového internetu), přesouvání aplikací do rozšířené pamětí – na SD kartu, Adobe Flash 10.1 Plná verze byla lokalizována do mnoha jazyků včetně češtiny a většina telefonů s 2.1 bylo updatováno na novou verzi.
Android 2.3 Gingerbread
Verze 2.3 OS Android vyšla 6. prosince 2010 na Linuxovém jádře 2.6.33 nebo 34. Nastaly změny v uživatelském rozhraní – jednoduchost a rychlost, také nová klávesnice pro rychlejší zadávání textu a vyběr slova jedním dotykem pro ná- sledné zkopírování a vložení, podpora NFC15 a internetové volání. 22. února 2011 byl zveřejněn Android 2.3.3 na Linuxovém jádře 2.6.35 a také SDK Androidu pro tablety SDK Androidu 3.0 Honeycomb
Android 3.0 Honeycomb
Android 3.0 byl speciálně vyvinut pro tablety a zařízení s větší úhlopříčkou displeje, úhlednější multitasking, možnost vlastního nastavení domovské obrazovky, widgety, bluetooth tethering16 a zabudovaná podpora pro Media/Picture Transfer Protocol17 .
SDK 3.2 bylo představeno 18. července 2011.
Android 4.0 Ice Cream Sandwich
Zatím poslední verze OS Android vyšla 19. října 2011, je to jediný systém, který je určen jak pro mobily, tak pro tablety (s rozlišením WXGA18 - 1280 × 800), a kromě nového typu písma (Roboto) přichází i s detekcí lidské tváře pro odemčení tabletu a telefonu, Explore-by-touch – režim pro osoby s postižením zraku, Android Beam – pro výměnu kontaktů, odkazů aj. mezi dvěma telefony pomocí NFC, zabezpečením ASLR19 a mnoho dalšími.
Architektura OS Android
OS Android je otevřenou platformou, která využívá vyspělý hardware a software, vlastní i sdílená data, a proto je nutné, aby měl systém k dispozici takové prostředí, které zajistí zabezpečení uživatelů, jejich dat, aplikací a sítě. [5] Při vývoji OS Android byl kladen důraz na jednoduchost tvorby aplikací. Vývoj aplikací pro OS Android je pro vývojáře usnadněn flexibilitou bezpečnostních prvků. Pokud vývojář není dostatečně informován v otázce bezpečnosti OS Android, je výchozí nastavení bezpečnosti dostatečně elastické, aby jeho neznalost nebyla překážkou. Aby byla skutečně zajištěna bezpečnost otevřené platformy, je potřeba rozsáhlá bezpečnostní architektura a do detailu vyladěné bezpečnostní zásady. Pro to OS Android disponuje vícevrstvou ochranou, což zajišťuje nejen pružnost platformy, ale i dostatečnou ochranu jejích uživatelů.
Základní uspořádání OS Android
Jádro a operační systém Jádro je nejnižší vrstvou architektury. Je postaveno na upraveném monolitickém jádře Linuxu ve verzi 2.6.X. Platforma postavená na Linuxu zajišťuje výrobcům zařízení získat levně operační systém a vývojáři smí bez problémů pro tato za- řízení vyvíjet. Jádro je zprostředkovatelem komunikace mezi běžícími aplikacemi v různých procesech (IPC20) Ke všem zdrojům zařízení, jako jsou funkce kamery, GPS data, Bluetooth, funkce telefonu, připojení k síti aj., je přístup pomocí operačního systému. Linuxové jádro je již léta používáno v mnoha prostředích citlivých na bezpečnost. Nejednou bylo vývojáři zkoumáno, testováno na bezpečnost. Díky nalezeným a následně opraveným chybám se linuxové jádro stalo bezpečnějším a zís- 20 a Mezi procesy a jádrem vzniká komunikační tok z důvodu koordinace aktivit procesů 8 kalo si tak přízeň mnoha společností, vývojářů a odborníků na bezpečnost. I přesto není linuxové jádro vždy bezpečné. Za všechny bezpečnostní chyby související s linuxovým jádrem je nutno upozornit na jednu z nejaktuálnějších (září 2011), kdy útočník nahrál na oficiální online obchod aplikaci, která vypadala stejně jako jedna z nejstahovanějších her (Angry Birds21). Při instalaci však bez vě- domí uživatele povolila instalaci dalších tří aplikací, které měly přístup ke kontaktům, informaci o poloze a čtení textových zpráv. Všechny takto získané informace mohly být odesílány na vzdálený server a následně zneužity. Tato chyba byla již společností Google odstraněna. Jako základ pro mobilní prostředí poskytuje linuxové jádro v OS Android několik klíčových rysů bezpečností, které obsahují:
· Model oprávnění založený na aktuálním uživateli,
· izolaci procesů pomocí Aplikačního Sandboxu (více v kapitole 3.2),
· rozšiřitelný mechanismus pro bezpečnou meziprocesorovou komunikaci,
· schopnost odstranit zbytečné a potenciálně nebezpečné části jádra.
Jako operační systém s více uživateli je filozofií linuxového jádra oddělit uživatelské zdroje jeden od druhého. Úkolem Linuxu je:
· Zabraňovat uživateli A četbu souborů uživatele B,
· zajišťovat, že uživatel A neomezuje paměť uživatele B,
· zajišťovat, že uživatel A neomezuje výpočetní výkon uživatele B
· zajišťovat, že uživatel A neomezuje uživateli B využívání zařízení (telefonie22, GPS, Bluetooth).
Android Application Runtime
Aplikace na OS Android jsou nejčastěji psané v programovacím jazyce, který je velice podobný programovacímu jazyku Java23. Liší se pouze stavbou architektury a omezením paměti a procesoru zařízení, na kterých je program vyvíjený v programovacím jazyce Java pro Android spouštěn. Virtuální stroj Dalvik, na kterém jsou spouštěny všechny aplikace OS Android, je abstraktní vrstvou mezi operačním systémem a počítačem a úzce souvisí s virtuálním strojem Javy, rozdíl je pouze v architektuře a v koncovkách souborů, které stroj Dalvik spouští. Ty mají příponu .dex a oproti souborům programovacího jazyka Java odstraňují duplicitní konstanty a části kódu, čímž šetří místo a zajišťují přehlednost kódu.
Mezi další stavební bloky platformy OS Android patří:
Zařízení hardwaru
OS Android je kompatibilní s mnoha přístroji, jako jsou například telefony, tablety, televize nebo set-top-boxy. Android využívá výhod některých hardwarových bezpečnostních funkcí, jako je například ARMv6 eXecute-Never (architektura procesorů).
Nativní knihovny
OS Android se skládá z několika knihoven napsaných v programovacím jazyce C/C++, které využívají různé komponenty systému. Mezi nejznámější nativní knihovny řadíme například:
· Knihovna médií – podporuje přehrávání a nahrávání audio a video formátů, stejně jako práci s obrázky. Například formáty MPEG4, MP3, AAC, AMR, JPG nebo PNG.
· LibWebCore – podporuje webový prohlížeč v OS Android ●
· 3D knihovny ●
· FreeType – bitmapové a vektorové vykreslování písma ●
· SQLite - výkonný a jednoduchý nástroj pro správu relačních databází
Rozšíření základu OS Android
Pro rozšíření základu OS Android firma Google poskytuje dva hlavní zdroje – předinstalované aplikace a aplikace instalované uživatelem. K instalaci a šíření aplikací na zařízení s OS Android slouží zabalený ZIP balík, známý jako Android Package, od jehož názvu se odvozuje i jeho koncovka .apk. Jsou to zkomprimované zdrojové soubory (více informací o tomto tématu v kapitole 5.2.5).
Předinstalované aplikace
OS Android obsahuje sadu předinstalovaných aplikací včetně chytrými telefony a tablety hojně využívaného emailu, kalendáře, webového prohlížeče a kontaktů. Tyto aplikace jsou klíčovými aplikacemi. Mají přístup k hlavním funkcím telefonu. Předinstalované aplikace můžou být součástí samotného OS Android nebo jsou rozšířením výrobce daného zařízení a obvykle je nejde odinstalovat.
Aplikace instalované uživatelem
OS Android poskytuje otevřené vývojové prostředí, které podporuje vývoj aplikací třetích stran. Tzv. Android Market nabízí uživatelům stovky tisíc aplikací od různých firem a vývojářů.
OS Android byl navržen nejen s ohledem na vývojáře, ale hlavně s ohledem na uživatele. Ti mají přehled nad tím, jak aplikace fungují, a které funkce využívají. Předpokládá se totiž, že případný útočník bude využívat běžně známé útoky 11 (např. sociální inženýrství24), aby donutil uživatele nainstalovat si do svého za- řízení byť nechtěně malware (aplikace poškozující zařízení), a také že bude vyu- žívat aplikace třetích stran. Snahou vývojářů OS Android je snížit možnost jakéhokoliv útoku a minimalizoval případné dopady (více o této problematice v kapitole 3.1.), pokud by útok byl úspěšný.
Android Market
Android Market je cloudovou službou.25 Je to online obchod, pomocí něhož uživatel snadno a rychle hledá, kupuje a stahuje aplikace, které si pak může nainstalovat přímo ze svého zařízení s OS Android nebo z webových stránek. Díky Android Marketu mohou uživatelé nacházet aplikace na jednom místě a vývojáři publikovat své aplikace a přiblížit je tak uživatelům – potenciálním zákazníkům. Android Market poskytuje také uživatelské hodnocení aplikací, licenční ověření a bezpečnostní služby. Na Android Marketu může své aplikace uveřejnit každý, kdo si založí vývojářský profil, zaplatí poplatek 25 amerických dolarů a bude souhlasit s tzv. Prodejní dohodou Android Marketu pro vývojáře.Problémem Android Marketu je paradoxně jeho otevřenost. Aplikace nejsou kontrolovány individuálně před zveřejněním (jako třeba v online obchodu App Store firmy Apple), takže sem útočník může kdykoliv nahrát škodlivou aplikaci. Ta může působit například jako oblíbená hra (nejčastější) nebo jiná aplikace, jenomže bude mít povolena práva, která jsou pro její fungování naprosto zbytečná. Každá aplikace v Android Marketu má totiž povolena určitá přístupová práva. Ty definují, ke kterým funkcím telefonu bude mít aplikace pří- stup. Škodlivá aplikace bude mít práva navíc (například tapeta na plochu bude mít povolený přístup k textovým zprávám) a těch pak může zneužívat. V prosinci 2011 Android Market zaznamenal 10 miliard stažených aplikací.
Neznámé zdroje
Aby se předešlo šíření malwaru (například stahováním aplikací z neoficiálních 24 http://www.fi.muni.cz/usr/jkucera/pv109/2003p/xsimek3sociotechnika.htm 25 Pomocí cloudových služeb lze onilne sdílet hardware i software 12 online obchodů), má zařízení s OS Android primárně povoleno instalovat aplikace pouze z Android Marketu. V nastavení telefonu je možno tento zákaz zrušit
Android aktualizace
Aktualizace služeb OS Android mohou probíhat například prostřednictvím internetu nebo skrze mobilní sítě – Over The Air26 (dále jen OTA). Jedná se převážně o aktualizace verzí OS Android, které znamenají nové funkce a lepší zabezpečení zařízení. Společnost Google vydá oficiálně novou verzi OS Android a každý výrobce mobilních zařízení si ji upraví pro jednotlivé modely (z důvodu přizpůsobení každé verze OS Android danému typu zařízení). Výrobci se však více zabývají vývojem nových zařízení než aktualizováním verzí OS Android pro zařízení se starou verzí.
Služby aplikace
Pomocí tzv. frameworků, což jsou nástroje usnadňující programování [37], mají aplikace možnost například zálohovat svá data a nastavení pomocí cloud technologie skrze C2MD (což je například automatické zasílání informací o stavu zboží zákazníkům internetových obchodů, kde není zobrazeno telefonní číslo). Tyto služby nejsou součástí projektu otevřené platformy OS Android, ale jsou důležité pro bezpečnost mnoha zařízení s OS Android.
OS Android a jeho bezpečnost
Součásti bezpečnostního modelu OS Android
Jednou z velkých výhod zařízení s OS Android je možnost disponovat množ- stvím aplikací a podporovat službu cloudu. To je zásluhou rozšířeného bezpečnostního modelu. Ačkoliv jsou veřejně známy bezpečnostní chyby v OS Android, snaží se hlavní vývojáři operačního systému testovat pomocí vlastních bezpečnostních programů verze operačního systému po celý jejich životní cyklus. Inspirací k tomu, na co se zaměřit, se jim staly chyby ostatních mobilních, desktopových a serverových platforem. Vytváří tak silný zabezpe- čovací program, jehož úkolem je pohotově reagovat na bezpečnostní problémy a předcházet slabým místům, která byla vypozorována například u konkurence.
Design
Již v rané fázi vývoje životního cyklu platformy Android byl vytvořen uspořá- daný bezpečnostní model a design. Technický a bezpečnostní zdroj přezkoumává každou novou funkci platformy, která pokud projde testy, je zapojena do architektury systému.
Penetrační testy a šifry
Penetrační testy jsou simulace pokusů o útok na aplikaci zvenku i zevnitř pomocí různých nástrojů. Komponenty, které byly vytvořeny jako součást vývoje otevřené platformy Android, podléhají bezpečnostním hodnocením. Tato hodnocení provádí tzv. Android Security Team, Google's Information Security Engineering Team a nezávislí bezpečnostní konzultanti. Cílem hodnocení je co nejčastěji s dostatečným předstihem nalézt slabá místa bezpečnostního modelu a případné chyby v zabezpečení a simulovat typy analýz, které budou prováděny externími 14 bezpečnostními experty po uvolnění platformy
Open Source a Společenství
Všechny zúčastněné strany projektu Android Open Source (firma Google, vý- vojáři, bezpečnostní technici, uživatelé, aj.) mohou využívat široké bezpečnostní kontroly. Mezi tyto kontroly patří například fórum Android Marketu, kde firmy a vývojáři mohou poskytovat informace o určitých aplikacích přímo uživatelům
Reakce na události
I přes všechna bezpečnostní opatření vývojářů OS Android mohou nastat potíže, a proto Android vytvořil souhrnné bezpečnostní odezvy, které řeší vzniklý problém. Tým starající se o bezpečnost OS Android neustále monitoruje specializované i veřejně známé zabezpečení pomocí diskuzí (týkajících se možných chyb v zabezpečení) v Android Marketu. Objeví-li se nějak stížnost, bezpečnostní tým vše okamžitě prověří a pokud je stížnost oprávněná, ihned reaguje, aby tak minimalizoval potenciální rizika pro uživatele OS Android. Tyto reakce jsou prováděny například přes cloud pomocí aktualizace platformy OS Android (pomocí aktualizace OTA), odstraněním aplikace z Android Marketu, a také odstraněním aplikace přímo ze zařízení, ve kterém je nainstalována.
Všechny operační systémy a jejich bezpečnostní modely se snaží být nejlepší. Jejich cílem je :
· Ochrana uživatelských dat ●
· Ochrana všech systémových prostředků. ●
· Vzájemná izolace aplikací.
OS Android toho dosahuje pomocí těchto klíčových bezpečnostních složek:
· Rozsáhlé zabezpečení na úrovní OS Android pomocí Linuxového jádra. 15 ●
· Povinný Aplikační Sandbox (více k tomuto tématu v kapitole 3.2) pro všechny aplikace. ●
· Bezpečné meziprocesové komunikace. ●
· Poskytování oprávnění pro přístup k jednotlivým funkcím zařízení.
Na Obrázku č. 4 jsou zobrazeny bezpečnostní složky a uspořádání různých úrovní softwaru OS Android. Předpokládá, že každá složka využívá fakt, že složky na nižších vrstvách jsou (co se bezpečnosti týče) pečlivě zajištěny. Vý- jimkou je část jádra OS Android, která běží s nejvyšším oprávněním a bez jakýchkoliv omezení. Všechny ostatní nástavby jsou omezeny Aplikačím Sandboxem.
Aplikační sandbox
Platforma OS Android využívá výhod linuxového zabezpečení uživatelů, hlavně identifikaci a izolaci nástrojů aplikací. Každá aplikace je spouštěna jako oddělený proces s unikátním uživatelským ID (též UID), které je přiřazováno OS Android. Tímto způsobem nepracuje žádný jiný operační systém (ani tradiční linuxová konfigurace u které mají procesy v rámci jednoho uživatele stále stejná práva), na kterém také běží více aplikací se stejným uživatelským oprávněním. O tuto funkci se na úrovni jádra stará Aplikační Sandbox. Jádro zajišťuje bezpečnost mezi aplikacemi a systémem na procesní úrovni, kdy jsou aplikacím při- řazována ID, pomocí nichž mají aplikace povolení přístupu k určitým operacím. Běžně se aplikace nemohou vzájemně ovlivňovat a mají omezený přístup do operačního systému. Pokud se aplikace A pokouší o neoprávněný přístup k aplikaci B, například čtení jejích dat nebo vytáčení čísla bez povolení, je jí to operačním systémem zakázáno.
Ačkoliv je Aplikační Sandbox uložen v jádře, rozšiřuje se i do nativního kódu a do aplikací operačního systému. Všechen software vystavěný nad Linuxovým jádrem, včetně knihoven operačního systému, aplikačního frameworku, aplikační runtime a všech aplikací, je spouštěn pomocí Aplikačního Sandboxu. Problémem jiných platforem je, že jsou vývojáři nuceni pracovat se speciálním vývojářským frameworkem nebo specifickým jazykem za účelem zvýšení bezpečnosti. Díky Sandboxu je totiž nativní kód stejně bezpečný, jako kód interpretovaný, a proto nemá OS Android žádná omezení toho, jak má být aplikace napsána.Pokud v některých operačních systémech nastane porušení integrity paměti, jedná se o zásadní ohrožení bezpečnosti. V OS Android se tak neděje díky tomu, že všechny aplikace jsou na úrovni operačního systému kontrolovány Aplikačním Sandboxem. Chyba porušení integrity dovolí pouze spuštění libovolného kódu v rámci dané aplikace, která má povolena práva od OS Android.
Aplikační Sandbox stejně jako všechny ostatní bezpečnostní prvky OS Android není neprolomitelný. Aby však bylo možné obejít Aplikační Sandbox, je třeba narušit bezpečnost Linuxového jádra.
Ostatní bezpečnostní opatření
Systémový oddíl a nouzový režim
Systémový oddíl obsahuje nejen jádro OS Android, ale také knihovny operačního systému, aplikační runtime, aplikační framework a aplikace. Systémový oddíl je nastaven pouze ke čtení, nedá se do něj zapisovat. Pokud uživatel spustí zařízení v nouzovém režimu, jsou k dispozici pouze základní (předinstalované) aplikace. Uživatel tím zajistí, že se bude vyskytovat v prostředí bez aplikací třetích stran, kde může například zálohovat kontakty, fotky nebo jiná důležitá data. Může se stát, že se nám nepodaří zjistit, v které aplikaci se malware skrývá, a tak je praktické dostat se do prostředí, kde není žádná aplikace třetí strany.
Oprávnění souborového systému
V Unixovém prostředí zajišťuje oprávnění souborového systému to, že jeden uživatel nemůže měnit nebo číst ze souborů jiného uživatele. Podobně tak v pří- padě OS Android, kdy každá aplikace může číst pouze ze svých souborů a ne ze souborů jiné aplikace. Je pouze na vývojáři aplikace, zda k jeho aplikaci bude mít přístup pouze aplikace samotná, nebo jestli cíleně zveřejňuje soubory jiným aplikacím a umožňuje jim tak přečíst nebo změnit soubory.
Šifrování souborového systému
Od verze OS Android 3.0 je možno šifrovat souborový systém, takže všechna uživatelská data mohou být šifrována jádrem. Šifrovací klíč je chráněn šifrou AES128. Advanced Encryption Standard šifry (Pokročilý Šifrovací Standard) použí- vají na šifrování i dešifrování stejný klíč (délky klíčů jsou 128, 192 a 256 bitů) a nehrozí jim útok hrubou silou (vyzkoušení všech možných kombinací hesel).
V OS Android se tyto šifry používají s podporou klíče odvozeného z uživatelské- ho hesla zadávaného při každém spuštění aplikace, což zabraňuje neoprávněné- mu přístupu k uloženým datům bez zadání uživatelského hesla pro dané za- řízení. Pro zaručení odolnosti vůči systematickým útokům na uhodnutí hesla (například hrubou silou) je heslo v kombinaci s náhodnou „solí“. Sůl je řetě- zec, který se přidává k hashovanému27 heslu. Sůl je pokaždé jiná i pro stejná hesla. Heslo je také hashováno šifrou SHA-1, která vstup rozdělí na bloky použitím standardního algoritmu PBKDF228. Aby nešlo heslo snadno uhodnout pomocí slovníkového útoku29, jsou na OS Android stanovena pravidla složitosti hesla, která si však nastavuje každý výrobce zařízení sám.
Ochrana heslem
Pomocí hesla, které po uživateli může požadovat zařízení, aby k němu měl plný přístup, lze v OS Android šifrovat klíč celého souborového systému a také zamezit neoprávněnému užití přístroje. Výrobce zařízení může použití hesla vynutit, stejně jako může nastavit jeho minimální délku a složitost.
Posílení bezpečnosti správy paměti
OS Android obsahuje mnoho funkcí, které se starají o to, aby běžné bezpečností prvky byly méně zneužitelné. Android SDK, překladače i samotný operační systém používají nástroje, které ztěžují porušení integrity paměti. Mezi tyto nástroje řadíme například:
· Hardwarově založená No eXecute (NX) ochrana, která se používá k prevenci provedení kódu na zásobníku nebo haldě. ●
· ProPolice, díky kterému se vyvarujeme přetečení zásobníku30 .
· Safe_iop k redukci přetečení integeru31 .
· Rozšíření funkce dlmalloc zabraňující opakovanému volání funkce free() a použití již uvolněné paměti, které by vedlo k porušení integrity (uskutečnění zápisu ještě před tím než se paměť skutečně uvolní).
Root zařízení
Pouze jádro a malá část jádra některých aplikací mají ve výchozím nastavení za- řízení OS Android rootovská práva – práva superuživatele. Pokud uživatel nebo aplikace mají práva superuživatele, mohou měnit operační systém, jádro a jiné aplikace. Superuživatel má přístup ke všem aplikacím a do všech jejich dat. Uživatel zařízení, který root použije, nejen že přichází o záruku zařízení, ale sou- časně snižuje zabezpečení zařízení a vystavuje jej většímu množství potenci- álních rizik. Důvodem proč je root povolený a proč vůbec existuje je vývoj aplikací na platformě OS Android. Díky bootloaderu32, který mají uživatelé mnoha zařízení s OS Android možnost odemknout, je možné instalovat i jiné verze operačního systému. Tyto verze povolují uživateli získat root přístup za účelem ladění aplikací a systémových komponent nebo přístup k funkcím, které nejsou aplikacím běžně dostupné. Jinou verzi operačního systému, který umožňuje změnit obyčejného uživatele na uživatele s rootovskými právy, může nainstalovat i uživatel s fyzickou kontrolou zařízení a USB kabelem. Aby byl původní uživatel i jeho data chráněni, jsou při procesu zpřístupnění bootloaderu smazána veškerá uživatelská data. Rootovská práva, která jsou získaná pomocí chyby jádra nebo bezpečnostní díry, mohou tuto ochranu obejít.
Data aplikací nejsou chráněna před uživateli s právy root kvůli šifrování dat pomocí klíče uloženého na zařízení. Data aplikací, které mají práva superuživatele, nejsou chráněny pomocí klíče uloženého na daném zařízení. Ochrana aplikace může být zvýšena přidáním klí- če, který je uložen mimo zařízení (například na serveru) nebo pomocí uživatelského hesla. Tato ochrana je pouze dočasná. Ve chvíli kdy aplikace klíč využije, stane se přístupným i uživatelům s právy root. Odolnějším přístupem k ochraně dat před uživatelem s root právy je použití specializovaného hardwaru. OEM33 výrobce pak může omezit přístup k určitému obsahu, například při přehrávání videa nebo k úložišti dat elektronické peně- ženky používající NFC. Jelikož je klíč k dešifrování souborového systému chráněn uživatelským heslem, není možné (například v případě zcizení zařízení) uživatelská data zpřístupnit ani použitím bootloaderu, ani úpravou operačního systému.
Antiviry
I přes bezpečnostní opatření vývojářů OS Android se často z různých periodik lze dozvědět o bezpečnostních problémech, které nastaly, ať už chybou systému nebo nastražením škodlivých aplikací v Android Marketu. Aby nedošlo k odcizení dat, může se uživatel chránit sám několika způsoby.
Antiviry
Ve světě mobilních antivirů se snaží prorazit cestu hlavně velké firmy z oblasti bezpečnosti na počítačích, například firma AVG34 . Antiviry, které lze nalézt na Android Marketu mají hodně společných funkcí:
· Kontrolují nově stahovanou aplikaci,
· kontrolují v zařízení nainstalované aplikace,
· lokalizují zařízení (po přihlášení na účet, který se vytváří při prvním spuštění aplikace, se uživateli na mapě zobrazí poloha zařízení),
· obnovují zařízení do továrního nastavení,
· spouští na dálku alarm,
· antispam (například zablokování volání nežádoucího telefonního čísla).
Nevýhodou antivirů je jejich velká spotřeba baterie zařízení a také to, že se dají z telefonu jednoduše odinstalovat. Výjimečně jsou chráněny heslem, aby při krá- 34 https://market.android.com/details?id=com.antivirus 22 deži nebyl k antiviru snadný přístup, ale i to lze obejít přeinstalováním systému. Další nevýhodou je, že většina antivirů kontroluje pouze první stažení aplikace. Pokud aplikaci aktualizujeme a je v ní obsažen i nebezpečný kód, antivir to nezjistí.
Firewally
Největším úkolem firewallů pro OS Android je blokovat určitým aplikacím pří- stup na internet. I přes to, že se u blokace dá nastavit doba působení (obvykle na nějaký časový úsek, do restartu nebo napořád), u většiny firewallů je omezení tak jako tak dočasné – po nějaké době se zákaz sám odblokuje a aplikace se znovu (aniž by si toho uživatel všiml) připojuje dál. Některé firewally umí například blokovat sledování polohy. Se sledováním polohy se setkáváme u OS Android velice často. Využívá se například v cílených reklamách aplikací (aplikace OS Android jsou převážně bezplatné – peníze vydě- lávají vloženou reklamou, která je cílená buď podle věku uživatele nebo podle místa, kde se nachází). Také sám Google je anonymně sbírá pro své statistiky. Doplňkovými službami firewallů může být například sledování toku dat aplikací, nebo stejně jako u antivirů lokalizace či možnost nastavení antispamu.
Uživatelská rozvážnost
Nejúčinějším nástrojem pro zabezpečení telefonu před napadením je uživatelovo vlastní uvažování. Stahuje-li nějakou aplikaci z Android Marketu, vždy je u ní uveden seznam funkcí telefonu, ke kterým má povolen přístup. Ty jsou zapsány v kódu aplikace v tzv. AndroidManifestu (více o této tématice v kapitole 5.2.5). V okamžiku, kdy aplikace bude mít povolenou funkci, ke které by podle přimě- řeného logického uvažování neměla mít přístup, není doporučeno ji stahovat. Uživatel si však musí uvědomit, že například plný přístup k internetu je u mnoha aplikací nutný z důvodu načítání reklam, které jsou do nich vkládány. Před tím, 23 než si nějakou aplikaci stáhne do svého zařízení, by se měl podívat, jaká dostala hodnocení, případně si přečíst příspěvky v komentářích. Zajistí tím, že neudělá stejnou chybu jako uživatelé před ním a nestáhne si malware do svého telefonu.
Ochrana dat při krádeži nebo ztrátě.
Ztráta nebo krádež zařízení je velice nepříjemná záležitost, hlavně pak v případě chytrých telefonů, kdy uživatel může přijít nejen o kontakty a textové zprávy, ale i o citlivá data, jako například hesla a fotografie. Existují však aplikace, které se postarají o to, aby se uživatelova data nedostala do cizích rukou, a které mohou zařízení třeba i lokalizovat. Aplikací v Android Marketu najdeme hned několik. Obvykle jsou vybaveny upozorněním, že byla vyměněna karta SIM v telefonu. Pomocí webového rozhraní lze lokalizovat zařízení, spustit hlasitý alarm, obnovit tovární data, uzamknout zařízení nebo stáhnout výpis přijatých zpráv a hovorů. Aplikace obvykle nabízí i bonusové služby jako je například antivir, záloha dat na kartu SD nebo pořízení fotografie zloděje
Návrh aplikace
Vývoj aplikací pro chytré telefony
Již v polovině devadesátých let, byly zaznamenány první pokusy o propojení mobilního telefonu a internetu, byl vytvořen jednoduchý značkovací jazyk Handheld Device Markup Language (HDML)35, který byl předchůdcem WAP technologie36 . Internet je u chytrých telefonů velice důležitý. Všechna data (počasí, zprávy, zálohování) i všechny aplikace jsou svázány s internetovým připojením (např. z důvodu aktualizace nebo stahování reklam). Do podvědomí širší- ho spektra uživatelů se však chytré (dotykové) telefony dostaly až v posledních pár letech hlavně díky společnosti Apple Inc. a jejímu telefonu iPhone. S velkou popularitou chytrých telefonů přichází i možnost a chuť programovat aplikace. Jedním z nejzajímavějších faktorů OS Android je právě možnost programovat vlastní aplikace. Webová aplikace AppInventor umožňuje uživateli snadno vytvářet aplikace pro OS Android bez znalosti programovacího jazyka. Existuje mnoho návodů, jak si jednoduše vytvořit i pokročilejší aplikaci, avšak projekt AppInventor přestane být k 31. prosinci 2011 podporován ze strany firmy Google Inc. a služba bude ukončena.
Vývojové prostředí pro Android
Nejjednodušším způsobem jak vytvořit aplikaci pro OS Android je nainstalovat si vývojové prostředí Eclipse (nutnost minimálně verze Galileo 3.5)37 a rozšířit jej o modul Android Development Tools (ADT – umožňuje jednoduše vylepšovat funkčnost aplikace v emulátoru i v reálném telefonu). Dále je potřeba Android Virtual Device – AVD. Virtuální zařízení disponující OS Android. Je potřeba k tomu, abychom mohli vytvořenou aplikaci (nebo její části) testovat v emulátoru a vyzkoušet tak její funkčnost v různých verzích OS Android. Prakticky tak nepotřebujeme reálné telefony, i když na těch je testování přece jenom o něco přesnější. Během vytváření aplikace je nutno OS Android oznámit s jakou úrovní API38 bude pracovat. Aplikace DetectiveDroid je vytvořena na platformě Android 2.2 v jazyce Java. Android 2.2 není nejaktuálnější platformou, která je k dispozici, ale testovací telefon LG Optimus Black měl na začátku práce na aplikaci dostupnou pouze verzi Android 2.2. Výhodou OS Android je, že aplikace programované na starších verzích platforem jsou vždy kompatibilní s novějšími verzemi operační- ho systému.
Základ architektury OS Android
Aktivity
Hlavní stavební bloky aplikací OS Android se nazývají aktivity. Každá aktivita představuje jednu obrazovku aplikace. „Aktivity můžete chápat jako analogii oken či dialogů aplikace pro stolní počítač.“ To umožňuje, že se jednotlivé obrazovky a jejich části dají vyvolat i z jiné než mateřské aplikace.
Každá aktivita má svůj životní cyklus, který se skládá ze čtyř částí. Aplikace je:
· Aktivní (Running) – aktivita spuštěná uživatelem, běží v popředí
· Pozastavená (Paused) – aktivita byla narušena upozorněním. Je spuštěná uživatelem, běží a je čitelná, překrývá ji však okno s upozorněním - například oznámení o příchozí zprávě SMS
· Zastavená (Stopped) – aktivita je spuštěna uživatelem, ale byla skryta jinými aplikacemi, které byly spuštěny po ní, s uživatelem může stále komunikovat pomocí upozornění
· Mrtvá (Destroyed) – aktivita mohla být násilně ukončena (například kvů- li nedostatku paměti), nebo ji uživatel vůbec nespustil
Spouštění a ukončování aktivit funguje na principu LIFO39, kdy se aplikace po spuštění dostane na vrchol pomyslného balíku karet. Pokud uživatel právě spuštěnou aktivitu zavře nebo se vrátí o krok zpět, vždy se mu objeví aktivita dříve spuštěná.
Dodavatelé obsahu (Content providers)
Data uložená v zařízení mohou být přístupná několika rozličným aplikacím. Zá- kladem vývojového modelu OS Android je zpřístupnit data a obrazovky aplikace i jiným aplikacím. K tomu slouží Dodavatel obsahu, který zajišťuje kontrolu pří- stupu k uživatelským datům. Usnadní to tak práci programátorům, kteří mohou používat aktivity a data jiných dříve vytvořených aplikací.
Služby (Services)
Služba je kód, který je spuštěn na pozadí. Aktivity a Dodavatele obsahu můžeme kdykoliv vypnout a také nedisponují dlouhou životností. Oproti nim jsou služby neustále aktivní. Jsou nezávislé na aktivitách, kterými byly spuštěny. Využívají se například při přehrávání hudby, kdy uživatel hudbu spustí a poté ukončí uživatelské rozhraní, ale chce, aby hudba stále hrála na pozadí, k detekci aktualizací RSS, nebo ke kontrole aktualizace aplikací z Android Marketu.
Záměry (Intents)
Aplikace v OS Android mezi sebou komunikují pomocí Záměrů. Jsou to zprávy systému, které upozorňují sdružené aplikace, že se něco změnilo. Mezi takové změny patří například hardwarová konfigurace (např. nedostatek místa v pamě- ti), upozornění na příchozí data (např. příchozí volání) nebo samotné události aplikace (např. selhání aplikace).
AndroidManifest
AndroidManifest je řídícím souborem psaným ve značkovacím jazyce XML (více v kapitole 5.3.1 ), který popisuje celou aplikaci a její Aktivity, Služby, Dodavatele obsahu a Záměry aplikace. Obsahuje také soupis všech oprávnění, která říkají, ke kterým funkcím telefonu má aplikace přístup. Ty si poté může uživatel přečíst v informacích o aplikaci v Android Marketu nebo v nastavení aplikací ve svém telefonu. V AndroidManifest se také dozvídáme, jaké má naše aplikace Aktivity a jakou minimální verzi SDK musí naše zařízení mít, aby aplikace korektně fungovala. Součástí AndroidManifest.xml je package – jméno balíčku, ve kterém se skrývá celá aplikace. Aby mohla být aplikace distribuována v Android Marketu, musí být jméno balíčku jedinečné. Jméno balíčku také slouží jako Android Package – ZIP balík s koncovkou .apk, který slouží instalaci a šíření aplikací na zařízení s OS Android. Jsou v něm uloženy zkomprimované zdrojové soubory aplikace.
Při vytváření aplikace DetectiveDroid jsem se snažila využívat principu KISS (Keep It Simple, Stupid), který říká, že nejlepší cesta k úspěchu vede přes jednoduchost. [30]
Při tvorbě aplikace DetectiveDroid bylo potřeba uvědomit si, co všechno může uživateli nabízet.
· Zapni aplikaci – spuštění aplikace uživatelem.
· Zobraz funkce telefonu – zobrazí skupiny funkcí (povolení) telefonu, uživatel vybírá skupinu, jejíž funkce chce zobrazit.
· Zobraz funkce telefonu – pro vybranou kategorii se zobrazí funkce telefonu, k nimž mohou mít aplikace přístup, uživatel vybírá tu funkci, ke které chce zobrazit v telefonu nainstalované aplikace, jež ji využí- vají.
· Zobraz aplikace – zobrazení aplikací, které využívají uživatelem zvolenou funkci.
· Seřaď aplikace – seřadí aplikace podle abecedy nebo podle data aktualizace.
Základem bylo roztřídit funkce telefonu do nadřazených kategorií, aby byla aplikace přehlednější. Tím byl určen počet aktivit v aplikaci. Díky Záměrům a Dodavatelům úrovně mohly být funkce telefonu v aplikaci DetectiveDroid na totožné úrovni ve stejné aktivitě.
Návrh grafického rozhraní aplikace
Při plánování grafického rozhraní aplikace je nutné brát v potaz několik nevýhod chytrých telefonů. Patří mezi ně například velikost displeje, která je oproti počíta- čům velice malá, ale občas je zase úhlopříčka displeje natolik veliká, že uživatel těžko dosahuje z jednoho konce obrazovky na druhý. Nebo také nepohodlná klávesnice (ať už virtuální nebo vestavěná), která může dělat potíže lidem s větší- mi prsty. Při návrhu aplikace DetectiveDroid bylo úmyslem vytvořit aplikaci 31 jednoduchou a příznivou pro uživatele. Díky rozdělení do skupin funkcí, vznikly tři přehledné obrazovky, ve kterých se uživatel pohybuje jednoduše pomocí doteků na obrazovce, případně tlačítka zpět, které je na většině telefonů integrováno.
Extensible Markup Languate - XML
Vzhled aplikací v dotykových chytrých telefonech je jedním z nejpřitažlivějších faktorů těchto zařízení. Prvky uživatelského rozhraní, které používáme v aplikaci, a které nám aplikaci formují, dodávají jí sympatický vzhled, se nazývají Widgety. V OS Android můžete tvárnost aplikace určovat dvěma způsoby – pomocí značkovacího jazyka XML nebo pomocí kódu Javy. Mezi vývojáři je jazyk XML oblíbenější. XML totiž využívá principu Model-Viewer-Control, kdy je uživatelské rozhraní odděleno od logického kódu a vše tak působí přehledněji. Značkovací jazyk XML se skládá ze dvou hlavních prvků – elementů a atributů. Elementy jsou základní jednotkou celého dokumentu psaného ve značkovacím jazyce XML a je nutné, aby byly ohraničeny počátečním a koncovým tagem. Pod pojmem tag rozumíme ostré závorky – „<“ na začátku jako počáteční tag a „>“ na konci elementu jako tag koncový. Vezmeme si například tag elementu s názvem „string“. Jeho počáteční tag značíme a k němu náleží tag koncový . Obsah elementu, pokud se nejedná o element prázdný, se nachází mezi těmito značkami. Máme-li element prázdný, značíme jej . Atributy doplňují elementy – doplňují jejich význam, upřesňují element. Například určují elementu jeho ID, můžeme pomocí nich manipulovat se vzhledem výchozího dokumentu, odkazovat na další elementy aj. Atribut se skládá ze jmé- na a jeho příslušné hodnoty. Jméno i hodnotu udáváme v počáteční značce elementu (který může být opět prázdný). Hodnotu atributu od jména oddělujeme rovnítkem (=) a uvádíme ji vždy v uvozovkách nebo apostrofech. Například atribut android:gravity="center" zarovnává daný element na střed. Součástí jednoho elementu nemůžeme mít dva atributy nesoucí stejné jméno.
Pohledy a Skupiny pohledů
Okno aktivity se zobrazuje na celou obrazovku, ale může zabírat pouze část. To je specifikováno na základě nastavení Pohledů - Views. Vizuální komponenta Pohled představuje na obrazovce prostor ve tvaru obdélníku. Součástí Pohledů jsou Plány - Layouts, díky kterým je možno vhodně rozložit postavení prvků (tlačítek, obrázků, ikon, textu) na obrazovce. Speciálním typem Pohledů jsou ViewGroups – Skupiny pohledů. Ty obsahují a zároveň i řídí menší či větší množství Pohledů a také jiné Skupiny pohledů. Díky Skupinám pohledů mohou být jejich podřízené komponenty řešeny jako celek (mohou jim být hromadně nastavovány některé parametry). Tato hierarchie Skupin pohledů a Pohledů se nazývá Stromová struktura.