Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Software
Je ve vězení bezpečno
11. srpna 2010, 01.00 | Co vlastně znamená uzavřený systém? A jak (ne)souvisí s povinnou a výhradní distribucí aplikací prostřednictvím AppStore? Jaké to má důsledky pro bezpečnost a komu a jak to pomáhá?.
V nedávné debatě jsem s překvapením narazil na tvrzení jednoho z uživatelů iPhone, že je rád, že je jeho systém uzavřený. Takhle totiž "má jistotu, že na AppStore nemůže být nic škodlivého nebo nebezpečného." Navíc nešlo o ironii a lidí, žijících v této nebezpečné iluzi, je víc.
Co je to zabezpečený systém
Odpradávna (hovoříme zde o půl století staré historii) byly operační systémy (vyjma hraček, které si to jméno ani nezasloužily, jako MS DOS nebo Mac OS bez X) navrhovány tak, aby v nich bylo možné rozlišit procesy a data různých uživatelů. Operační systém přitom zajišťoval, že procesy a data jednoho uživatele byly pečlivě chráněny před ostatními. Trochu podrobněji jsme se na realizaci tohoto principu v Mac OS X podívali v tomto článku a v několika následujících. Stejně funguje také iOS, v něm je ovšem uživatelských kont daleko méně než v Mac OS X. Podstatná jsou jen dvě: "root", s jehož právy běží jádro a běžný uživatel "mobile", pod jehož kontem pracují všechny aplikace.
Poslední léta ukazují, že je vhodné zabezpečení ještě poněkud zvýšit. V klasickém unixovém systému je sice samotný systém chráněn před kterýmkoli uživatelem a data jednoho uživatele jsou chráněna před ostatními, pokud si ale uživatel spustí nějakého "trojského koně" nebo program s nějakou neúmyslnou chybou, všechna jeho data jsou v nebezpečí. To je velmi nepříjemné dokonce i v Mac OS X a u zařízení jako je iPhone je to neúnosné.
Proto se používá tzv. "sandboxing" (neznám rozumný český překlad, takže budu střídat podle kontextu anglický termín s poněkud nešikovným českým pískovištěm). Jde o speciální službu operačního systému, která umožňuje při spuštění nějakého procesu, a tedy například také kterékoli aplikace, omezit to, co proces smí a nesmí, řadou velmi konkrétních pravidel. Pojem "sandbox" je odvozen od toho, že obvykle tato pravidla aplikaci pustí pouze do velmi omezené oblasti – jejího vlastního pískoviště, v němž si může hrát jak jí je libo. Vně této oblasti ale nemůže dělat vůbec nic a nemá především možnost jakkoli zasáhnout do pískovišť ostatních aplikací.
Pokud si v systému, v němž je důsledně využit sandboxing, uživatel spustí nějakého trojského koně, nestane se celkem nic. Aplikace může jakkoli poškodit vlastní data, ale vše ostatní je pro ni nepřístupné.
Sandboxing (jemuž Apple říká také seatbelt neboli bezpečnostní pás) je k dispozici rovněž v Mac OS X. iOS jde ještě dál a je v něm každá aplikace při spuštění omezena velmi striktními pravidly. Ta znamenají, že má skutečně přístup pouze do vlastní složky a nikam jinam. Ve skutečnosti sice existuje několik málo "veřejných" složek a navíc leccos, co se nesmí měnit, lze číst, ale to na principu nic nemění.
Poslední prvek zabezpečení, o němž se zde zmíníme, je podepisování kódu. Digitální podpis obecně garantuje to, že nějaký datový soubor nebo celá složka obsahuje přesně totéž, co v něm bylo ve chvíli, kdy jej někdo podpisem opatřil. Jakákoli dodatečná změna se ihned projeví (něco málo o technických principech digitálních podpisů najdete ve druhé polovině tohoto článku.) Pokud operační systém dokáže před spuštěním aplikace ověřit, je-li podepsaná a je-li podpis v pořádku, můžete se spolehnout na to, že od chvíle, kdy ji vývojář sestavil, do ní nikdo nemohl zasáhnout.
Operační systém iOS je chráněn pomocí všech zmíněných postupů:
- aplikace nemohou zasáhnout do operačního systému, protože je chráněný jako vlastnictví odlišného uživatele;
- nemohou zasahovat vzájemně do svých dat, protože jsou vždy spouštěny ve striktním sandboxu;
- a jsou vždy podepsané, takže je jisté, že do nich dodatečně nebyl připojen žádný malware.
Teoreticky existuje jediný způsob, jak tyto ochrany obejít. Ne nutně pro napadení systému, ale i pro řadu zcela korektních akcí, např. pro upgrade: speciální aplikace musí být spuštěna mimo sandbox a s právy superuživatele; ta pak může provést cokoli, co je zapotřebí.
Prakticky ovšem každý systém obsahuje chyby; zvláště pak systém tak složitý, jako je iOS. Proto existují a vždy budou existovat "exploity" – postupy, jež docela obyčejné aplikaci umožní spustit kód výše popsaným způsobem. Právě na základě takových "exploitů" funguje "jailbreak" – otevření systému. Zvláště roztomilé je, že Apple má dokonce chybu i na takové úrovni, že pro otevření systému stačí zajít na vhodnou webovou stránku (jailbreakme.com).
Co je to uzavřený systém
Výše popsaná zabezpečení tedy tvoří uzavřený systém? Kdepak. V Mac OS X jsou k dispozici všechna, ačkoli podepisování kódu není vynucováno a sandboxing je používán jen v omezené míře, a přesto jde o systém zcela otevřený. Rozdíl spočívá v tom, kdo má k dispozici klíče od všech bezpečnostních zámků:
- normální, slušné a správné je, aby tento klíč měl k dispozici vlastník systému. Správce u desktopů, majitel u kapesních zařízení s iOSem. Tak tomu je v otevřeném systému. V Mac OS X si můžete nastavit nejpřísnější zabezpečení nebo je naopak vypnout, zcela podle vlastního rozhodnutí;
- systém uzavřený jako iOS naopak klíče uživateli ani nepůjčí. Jediný, kdo je má k dispozici, je jeho výrobce. Ponecháme-li stranou výše zmíněné "exploity", uživatel nemůže se zabezpečením dělat vůbec nic. Nejenže je nemůže vypnout, ale nemůže je ani posílit, pokud by si to přál. Jediný, kdo může dělat nějaké změny, je autorizovaný servis, v našem případě Apple.
Povšimněte si, že otevřený systém obecně může nabízet stejnou nebo i vyšší úroveň zabezpečení jako systém uzavřený. Rozdíl není v zabezpečení samotném. Rozdíl je v tom, kdo má možnost o něm rozhodovat a odemykat a zamykat.
AppStore
AppStore je mechanismus pro instalaci aplikací do iOSu. Konkrétní technické detaily založené na kombinaci digitálních podpisů, specialisovaného software v iOS i v iTunes a odpovídajícího webového serveru, nejsou příliš důležité. Apple si důkladně hlídá, jaké aplikace bude prostřednictvím AppStore nabízet. Nakolik lze soudit, Apple každou aplikaci důkladně proklepe, a pokud zjistí, že aplikace:
- se snaží zasáhnout do systémových oblastí, nebo
- se snaží zasáhnout do sandboxů ostatních aplikací, nebo
- poškozuje uživatele (například zaplňuje paměť tak, že se běh ostatních aplikací stává problematickým), nebo
- může zcela libovolným způsobem (třeba prostřednictvím webového browseru) zobrazit neoblečenou dámu, nebo
- konkuruje aplikacím, jež produkuje Apple, nebo
- se Applu znelíbí z jakéhokoli dalšího důvodu,
na AppStore ji neumístí.
Na tom samozřejmě není zhola nic špatného a Apple to nelze vytýkat. Dokonce i proti poněkud absurdnímu čtvrtému bodu nelze mít zásadní výhrady. Jde o seznam aplikací přímo certifikovaný firmou Apple, a ta má plné právo certifikaci libovolně omezit.
Horší je to, že iOS je systém uzavřený a Apple klíče od jeho zabezpečení uživatelům neposkytuje. Sama si je nechává jen a jenom pro sebe. Důsledkem je to, že AppStore není seznam "těch aplikací, u nichž firma Apple ručí za splnění určitých pravidel", nýbrž seznam "jediných aplikací, jež vůbec lze do iOS instalovat."
Zaručí AppStore bezpečnost?
V žádném případě.
Bez ohledu na to, jak přesně Apple aplikace před umístěním na AppStore testuje, je naprosto jisté a dokonce matematicky dokazatelné, že neexistuje a nemůže existovat test, který by s jistotou odhalil jakýkoli potenciální problém.
Je třeba snadné napsat aplikaci pro iOS, která prostřednictvím služeb knihovny AddressBook načte kompletní seznam uživatelských kontaktů, zašifruje jej a odešle prostřednictvím standardní třídy NSURL na server, shromažďující zdrojová data pro spamery.
Jistě, pokud by to aplikace dělala po každém spuštění, je nepochybné, že by na to v Apple přišli a vývojářům by ji hodili na hlavu s velmi peprným komentářem.
Ale co když to aplikace udělá při každém spuštění teprve po 1. 1. 2011? Nebo lépe, co když to udělá pouze poté, kdy se na spamerském serveru objeví stránka s určitým obsahem?
Odhalit takové chování pomocí testů je samozřejmě, dokud spamer tuto stránku nevystaví (a on to udělá teprve poté, kdy nejenže aplikace bude dávno na AppStore, ale navíc kdy si ji koupí dostatek lidí, aby to stálo za to), naprosto nemožné.
Odhalit je analýzou kódu je sice v principu možné, ale extrémně nepravděpodobné. A je dokazatelné, že nemůže existovat nástroj pro analýzu, který by fungoval spolehlivě.
Tertium non datur: žádnou jinou možnost, než testovat a analyzovat kód, Apple nemá.
Hezkým příkladem zde může být známá aplikace Handy Light, která zdaleka nedělala nic tak strašného, naopak, přinášela službu jednoznačně pozitivní, ale konkurující Apple, a tedy zakázanou. Šlo o možnost použít iPhone jako modem pro připojení počítače k Internetu. Jakmile se její finta stala veřejně známou, firma Apple Handy Light z AppStore stáhla. Pokud by ovšem šlo o malware, škoda by již dávno byla napáchána.
Zvyšuje AppStore bezpečnost?
Ano. Testování, jemuž Apple aplikace před zařazením do AppStore podrobuje, určitě odchytí přinejmenším
- naprostou většinu aplikací, jež by mohly uživatele jakkoli poškodit vinou chyby (a nikoli úmyslu) programátora – ale ne všechny;
- prakticky všechny aplikace, jež by mohly uživatele nějak poškodit vinou nevhodného designu (zde je samozřejmě značný překryv s minulým bodem, protože takový design lze vždy považovat za chybu);
- úplně všechny aplikace, jejichž nešikovný programátor by chtěl uživatele poškodit, a udělá to mnohem hloupěji, než jak jsme naznačili v minulém odstavci;
- část aplikací, jež by mohly urazit prudérního hlupáka.
Zatímco je velmi sporné, zda je vhodné se chránit proti těm posledním, je zcela jisté, že ochrana proti prvým třem bodům je žádoucí, a je také naprosto jisté, že tuto ochranu Apple poskytuje.
Souvisí to ale nějak s uzavřeným systémem?
Ale kdež.
Zvyšuje tedy uzavřený systém bezpečnost?
Vůbec ne, spíše naopak. Představme si iOS jen nepatrně odlišný. Obsahující všechny výše popsané zabezpečovací mechanismy, ale otevřený. Namísto Apple by klíče měl uživatel. Speciálně by kdokoli mohl na svůj web umístit aplikaci, kterou by si uživatel iPhone či iPadu mohl nainstalovat, pokud se on sám k tomu rozhodne.
Mohl by AppStore fungovat přesně stejně, jako funguje dnes?
Ovšemže ano.
Mohl by Apple chránit AppStore před aplikacemi, jež jsou podle jeho měřítek nevhodné?
Bez jakéhokoli omezení, přesně v téže míře, v jaké tak činí dnes a stejně spolehlivě nebo nespolehlivě, jak tomu je nyní.
Mohl by se opatrný uživatel, který věří Apple, a který nechce žádnou aplikaci, již Apple předem neschválil a necertifikoval, naprosto spolehnout, že se na jeho iPhone nedostane nic jiného než z AppStore?
Jistěže mohl s výhradou "exploitů", jež ale hrozí i dnes. Připomeňme, že aplikace jsou digitálně podepsány. Neexistuje způsob, jak "našvindlovat" aplikaci z AppStore, pokud ji skutečně sám Apple necertifikoval.
Mohl by vývojář nějak "našvindlovat", aby se jeho aplikace instalovala při otevření stránky automaticky, bez schválení uživatelem?
Jen prostřednictvím "exploitů", tedy chyb v zabezpečení – jinými slovy, přesně v téže míře, v jaké toho může docílit nyní se systémem uzavřeným. Či spíše v míře nižší, jak si hned vysvětlíme.
Uzavřený systém tedy prokazatelně bezpečnost nemůže nijak zvýšit. Může ji ale snížit! Jak je to možné? Snadno. Pokud se totiž objeví nějaký "exploit", který umožní například sestavit takovou webovou stránku, která po otevření v Mobile Safari odešle tajně na server seznam všech kontaktů, Apple na to samozřejmě bude reagovat – v příští versi systému. Pokud by ovšem iOS byl otevřený, mohli by na problém programátoři třetích firem reagovat daleko rychleji a publikovat plugin pro Mobile Safari, který riziko odstraní. Každý uživatel by se pak mohl sám za sebe rozhodnout:
- má-li důvod věřit danému vývojáři, plugin by si mohl instalovat, a jeho systém by byl daleko bezpečnější;
- rozhodne-li se vývojáři nevěřit, plugin bez certifikace Apple prostě instalovat nebude; až do příštího release iOS tedy jeho systém bude napadnutelný.
V současnosti toto rozhodování není možné. Takový plugin, byť sebespolehlivěji otestovaný, Apple na AppStore nepustí. Jelikož je systém uzavřený, jsou všichni bohužel nutně v pozici toho druhého uživatele, ať chtějí nebo ne.
K čemu je tedy uzavřený systém dobrý?
Inu... uživatelům zhola k ničemu.
Apple naopak přináší spoustu výhod. Jen si představte, že byste měli automobil, jehož kapotu uživatel vůbec nemůže otevřít. Každé dolití ostřikovačů, kontrolu chladicí kapaliny nebo triviální výměnu vyběhaného ložiska ventilátoru by mohl dělat pouze firemní servis za cenu, jakou si nadiktuje. A na možnost upravit čip, který řídí elektroniku motoru tak, abychom měli nižší spotřebu, bychom mohli naprosto zapomenout, stejně jako třeba na instalaci nezávislého topení. Co je nejhorší, pokud by se náhodou ukázalo, že standardní zámky u dveří mají chybu, jejíž vinou lze vůz snadno ukrást, nepřipadala by v úvahu ani instalace vlastního imobilizéru. Museli bychom počkat, než zámky vymění výrobce a celou dobu jen doufat, že si zloděj nevyhlédne zrovna náš vůz.
Jaké výhody by to přineslo majiteli auta a jaké jeho výrobci? To je snad zřejmé.
A přesně stejně tomu je s iOSem. Je pochopitelné proč Apple jeho uzavřenost preferuje a podporuje. Naopak naprosto nepochopitelné je to, že existují uživatelé, kteří je v tom naivně podporují.
Vraťme se k otázce z titulku článku: kde se cítíte bezpečněji – ve vlastním domě, jehož zámky jste si sami vybrali, máte od nich klíče a máte naprostou kontrolu nad tím, komu klíč půjčíte a komu ne, nebo ve vězení, kde o tom, kdo se k vám dostane a kdo ne, rozhodují jiní a vy do toho nemůže vůbec nijak mluvit?
Obsah seriálu (více o seriálu):
- Je to bezpečné?
- Základy zabezpečení Mac OS X
- Identifikace a autorizace
- Jak je to s administrátory
- Šifrování
- Co jsou to ty šifry?
- Černý vzadu, podpisy, a vůbec...
- Certifikáty
- Kde vzít certifikát?
- Certifikát Thawte
- Keychain
- Keychain Access
- Kolik keychainů máš, tolikrát jsi paranoikem
- Lepší konfigurace keychainů
- Jeden na neděli, jeden na všední den...
- WEP or weep
- AirPort a nastavení bezdrátové sítě
- WEP and weep...
- Externí router
- Slušný člověk nešifruje!
- Je ve vězení bezpečno
Tématické zařazení:
» Rubriky » Tipy a Triky