Programátorské Stránky

  Domů 21 listopad 2008  
Main Menu
Domů
Odkazy
Vyhledat
Kniha návštěv
Login Form





Zapomenuté heslo
Nemáte účet? Vytvořte jej!




Mister Group Hosting
Zdají se vám Windows Vista bezpečná? Zdání klame.
Sobota, 01 září 2007

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 fungovali

Když 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 Exploreru

Internet 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šší úrovni

Nově 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ách

Dotazují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

 
< Předch.   Další >
V jakém jazyku převážně programujete?
 
mod_dbrss2 AJAX RSS Reader poweredbysimplepie
 

Zdroje Informací

Rubrika programování...   (833 hits)
JoelOnSoftware.com...   (726 hits)
DelphiTricks.com...   (723 hits)
Queer Research...   (631 hits)
OSR Online...   (593 hits)
Torry.net...   (516 hits)
w3.org...   (512 hits)
OpenGL.org...   (506 hits)
CodeGuru.com...   (489 hits)
ASP.net...   (485 hits)
CodeProject.com...   (482 hits)
Dr.Bob's Delphi Prog...   (467 hits)
SourceForge.net...   (466 hits)
Microsoft Developer ...   (465 hits)
Jedi API Lib...   (445 hits)

Užitečné Free Aplikace

Windows Sysinternals...   (1631 hits)
JEDI Version Control...   (609 hits)
Spyware Terminator...   (544 hits)
Visual Studio Expres...   (533 hits)
Turbo Explorer...   (487 hits)
Orbit Downloader...   (469 hits)
Delphi Search 2...   (451 hits)
Delphi API Conversio...   (397 hits)
System Explorer...   (264 hits)
© 2008 Programátorské Stránky
Joomla! is Free Software released under the GNU/GPL License.