|
Uživatel který přejde z Windows XP na Windows Vista je jistě překvapen množstvím restrikcí a bezpečnostních dotazů, které na něj systém chrlí. Uživatel má možnost si na tento stav zvyknout, změnit některá nastavení či ochranu úplně vypnout. Má cenu si na nové bezpečnostní funkce zvykat? Nakolik zvyšují ochranu systému?
Ochrana Windows Vista v kostce:Uživatel patřící do grupy administrators má rozdvojený token. Jedna část obsahuje limitovaná práva a druhá administrátorská. Proces vytvořený standartním způsobem může využívat pouze část tokenu s limitovanými právy. Aby proces mohl využívat i administrátorská práva, musí být spuštěn elevovaně s plným tokenem. Systém rozlišuje tyto typy tokenů: * TokenElevationTypeDefault - Uživatel nepoužívá rozdvojený token * TokenElevationTypeFull - Uživatel má rozdvojený token a proces běží elevovaně * TokenElevationTypeLimited - Uživatel má rozdvojený token a proces běží limitovaně Dále systém rozlišuje 5 úrovní přístupu k objektům (Integrity Level): * System - Dostupné pro Systém, Lokální a síťové služby * High - Dostupné pro Administrátory, a různé druhy operátorů * Medium - Dostupné pro autorizované uživatele * Low - Dostupné pro Everyone * Untrusted - Dostupné pro Anonymous Každý systémový objekt (soubor, adresář, mutex, proces, thread) patří do jedné z těchto skupin. Pokud skupina objektu nebyla nastavena, pak automaticky patří do úrovně Medium Každý systémový objekt také obsahuje "Mandatory label". Ten určuje, co může s objektem provádět thread běžící na nižší úrovni. * NO_WRITE_UP - Zákaz zápisu/modifikace * NO_READ_UP - Zákaz čtení * NO_EXECUTE_UP - Zákaz spuštění Uživatel s právy administrátora má v úrovních Untrusted, Low a Medium pouze práva limitovaného uživatele. Jen pro úrovně High a vyšší může využívat svých plných práv. Systémové soubory a adresáře jsou nastaveny tak, aby je mohli limitovaní uživatelé pouze spouštět a číst. Modifikace je povolena pouze administrátorovi. Tedy: Integrity Level=High a Madatory label=NO_WRITE_UP a Security Práva: Everyone:Read&Execute Administrator:All. Toto platí např. pro root adresáře disků, program files adresář, Windows adresář,... Jak to vypadá v praxy?Uživatel který je nadefinovaný jako administrátor standartně spustí souborový manažer a chce vytvořit nový adresář v program files. Vytvoření bude zamítnuto ! Proč? * Proces spuštěný uživatelem běží na úrovni Medium. * Jak jsme si řekli výše, úroveň Medium = možnosti limitovaného uživatele. * Adresář Program Files je nadefinován pro limitované uživatele s právy Read&Execute. Zápis je tudíž zakázán. Vytvoříte malou utilitu, která se pokusí Security Práva změnit. Standartně ji spustíte,ale nepovede se jí to. Proč ? * Proces spuštěný uživatelem běží na úrovni Medium. * Adresář Program Files má ale nastavené Integrity Level=High a Madatory label=NO_WRITE_UP. * Z toho vyplívá že proces, který by mohl změnit nastavení objektu (v tomto případě security práva), musí běžet na úrovni High. Což utilita nemá. Jakto že programy přenesené z Windows XP fungují ?
Teoreticky by na základě výše popsaných pravidel nefungoval takřa žádný XP program. Jelikož si to nemohli vývojáři systému dovolit, zabudovali do systému virtualizační funkce. Tyto funkce jsou aktivní pouze pro aplikace, které nemají v manifestu zapsáno že jsou "Vista Ready". Při zapnuté virtualizaci se jakékoliv zápisy do zakázaných oblastí přesměrovávají do uživatelských virtualních storage adresářů/klíčů. Aplikaci se zdá že soubor do program files uložila a může ho bezproblémů číst. Ve skutečnosti ukládá a čte z jakéhosi virtuálního adresáře. Jak lze program spustit v úrovni High?Vraťme se od zpětné kompatibility (která skončí s vývojem SW pro WinXP) zpět k stěžejní části ochrany Windows Vista. Do teď jsme popsali pouze situace kdy aplikace nemají dostatečná práva na modifikaci důležitých částí systému. Je ale mnoho situací, kdy prostě něco nastavit potřebujeme. Například systémový čas. Systém zpřístupňuje v kontextové nabídce možnost "Run as Administrátor". Pokud tuto volbu zkusíte, pak dostane shell příkaz k spuštění procesu na úrovni High. Shell je naprogramovaný tak, že jakýkoliv požadavek na High úroveň musí být schválen uživatelem. Proto je před spuštěním zobrazen dotaz, zda lze požadavku vyhovět. Pokud uživatel povolí, pak je proces spuštěn na high úrovni. Zakáže li, spustí se na medium úrovni.Vizuální stránka dotazu (User Access Control) se liší podle toho zda je či není aplikace podepsána bezpečnostním certifikátem. Dotaz na nepodepsanou aplikaci je více varovný. Krom uživatele se může pokusit spustit aplikaci na High úrovni jakýkoliv proces. Musí k tomu ale využít služeb shellu, který postupuje standartně, což je dotazem. Pokus o vytvoření procesu přes jiné funkce (CreateProces..) většinou končí chybovou hláškou. Aby Installery fungovaliKdyž chcete nainstalovat aplikaci, pak se bez administrátorských práv neobejdete. Aby vývojáři Vist zajistili funkčnost ne "Vista Ready" instalerů, zavedli do shellu speciální detekční mechanizmus, který installery rozpozná a pokusí se je spustit na High úrovni. (Standartním způsobem přes dotaz uživateli). Vypadá to tajemně ale ve výsledku se shell snaží na High úrovni spustit každý soubor který obsahuje některé klíčové slovo jako např. Setup,Install,Update. Speciální ochrana Internet ExploreruInternet Explorer umožňuje běžet v tzv. protected modu. Což ve výsledku znamená že je jeho proces spuštěn v úrovni Low a tudíž nemá takřka žádné možnosti jak cokoliv v systému modifikovat. Aby aplikace Internet Exploreru fungovali, je opět zařazena virtualizace. Možné problémy v aplikacích spuštěných na vyšší úrovniNově vytvořené systémové objekty získávají úroveň výkonného threadu aplikace. Pokud je tedy aplikace úrovně High, pak i vytvořený mutex aplikace bude na úrovni High. Pokud se takový mutex pokusí modifikovat jiný proces, který běží na úrovni Medium, nebude mu to dovoleno. Proto je při programování potřeba zajistit, aby objekty které mají být přístupné z nišších úrovní, byly po vytvoření přenastaveny. Slabiny systému, jak jednoduše jej může škodlivý kód ovládnout.
Již víte že k tomu aby mohl být program systému nebezpečným, potřebuje administrátorská práva, to jest musí být spuštěn v úrovni High. Víte také že spouštění aplikací v úrovni High má pod palcem Shell, který se na nastavení High úrovně dotazuje uživatele. V důsledku je to tedy právě uživatel, který musí rozhodnout zda požadavek povolit či zamítnout. K rozhodování má pár informací o souboru a jeho digitálního podpisu. Pokud uživatel stáhne instalačku aplikace, která je skrytě (jak jinak ;-)) napadená škodlivým kódem, pak je pravděpodobné že uživatel povolí instalaci High úroveň a dojde ke spuštění škodlivého kódu a možná k fatálním následkům. Pokud škodlivý kód běží na High úrovni, pak mu nic nebrání k celkovému a jednoduchému ovládnutí systému. Kód může bezproblému nainstalovat a spustit službu. Služba je spuštěna v "izolované" session 0 na nejvyšší úrovni System. Nevím jak to s tou izolovaností session 0 vývojáři systému mysleli, ale služba v session 0 může vytvořit v jakýchkoliv session proces pod jakýmkoliv již zalogovaným uživatelem včetně uživatele System. Může si tedy dělat kdekoliv cokoliv. Uživatel už nebude otravován žádným dotazem! Může dojít k modifikacím jakýchkoliv nastavení či k instalacím jakýchkoliv dalších škodlivých programů, Adware systémů... Zmenou polozky v registru lze napr. vypnout cele UAC. Coz ve vysledku znamena ze po restartu pocitace budou vsechny procesy nabihat na urovni High. Škodlivý kód pavděpodobně nemůže získat žádným způsobem elevovaný token uživatele. Proto není schopen vytvořit elevovaný proces který by patřil k uživately. Nic ale nebrání vytvořit proces jako System a pomocí Impersonalizace se přepnout pod jakéhokoliv uživatele a mít přístupné jeho interní resource (např. HKCU). Zatím jsem nezkoumal jak může škodlivý kód modifikovat přímo systémové soubory. Windows Vista má údajně dokonalejší ochranu systémových souborů. Kde je pravda zkusím zjistit někdy příště. Chyby ve VistáchDotazující dialog (User Access Control) nezobrazuje správně informace Rozhodnutí zda spustit či nespustit je jak jste se dozvědeli zásadní. V dialogu je o aplikaci zobrazeno minimum informací z nichž mezi hlavní patří informace o digitálním podpisu. Bohužel je ale v systému chyba, která informace o podpisech u některých souborů zobrazuje nekorektně. Spouštění souborů na subst discích.Pokud se pokusíte na substitovaném disku spustit jakýkoliv soubor který obsahuje v názvu Setup,Install, Update,...pak se spuštění nedočkáte. Místo toho dostanete chybovou hlášku File Not Found. Zdroje: Windows Integrity Mechanism Design In-depth analysis of Vista UAC Vista - Disable UAC (User Account Control) User Account Control for Developers What Every Software Engineer Must Know About Windows Vista High elevation can be bad for your application Symantec Security Implications of Windows Vista |