Windows Vista internals – část 2

V tomto druhém dílu článků o technickém pozadí Windows Vista se zaměříme na technologie spojené s UAC, čili Řízením Uživatelských Účtů. Pokud jste nečetli díl první https://blogs.technet.com/technetczsk/pages/Windows-Vista-internals-cz.aspx , doporučuji to udělat před čtením pokračování.

V předchozím článku jsem popsal, že UAC je mechanismus jak používat počítač s právy běžného uživatele a zabezpečit zdroje operačního systému. Aplikace, které standardně běží v rámci těchto oprávnění mohou mít problémy s nemožností zápisu do systémových lokací, nicméně, operační systém obsahuje automatickou eliminaci těchto problémů a přesměruje tento zápis do virtuálních lokací, ve většině případů, tedy aplikace nepozná rozdíl a bude fungovat bez problémů, s virtualizací. Tento mechanizmus ale nefunguje pro instalace aplikací, které potřebují zápis např. do program files uskutečnit. Instalátory, využívající windows installeru, či spustitelné soubory obsahující klíčové slovo setup, jsou automaticky spuštěny s vyššími oprávněními a po potvrzení uživatelem tak mají možnost zápisu. Instalace jsou, stejně jako nástroje pro správu spuštěny v tzv. high integrity levelu.

Program Compatibility Assistant
Pokud spustíte spustitelný program, který je instalátor aplikace a Vista nepozná pomocí heuristické analýzy, že se jedná o instalátor, instalace se nezdaří.
Program Compatibility Assistant (PCA) je služba windows, která podobné pokusy o instalaci monitoruje a případně nabídne možnost automatického nastavení pro uspěšné provedení instalace.

A nejen to. V dalším pokračování si řekneme něco o databázi pro nastavení kompatibility aplikací, kterou PCA používá.
Nyní si řekneme jen, že pokud PCA nabídne takto vypadající obrazovku a zvolíte možnost spuštění jako správce, toto nastavení je uloženo a použije se vždy při spuštění instalátoru.

Integrity Levels
Opravdové pozadí UAC, umožňující použití vyšších oprávnění pro určité operace, jako například instalace aplikace. Každý objekt v rámci Windows Vista obsahuje v rámci systémových přístupových oprávnění (SACL – použito i pro definici auditování přístupů) příznak definující integrity level, který může získat přístup k tomuto objektu.
Pod objektem rozumějte běžící proces, soubor či adresář, registry, objekty pro přístup k síťovému rozhraní, uživatelé atd. 
Pokud se tedy přihlásíte k Windows Vista, všechny vaše programy běží s integrity levelem Medium. Při potřebě použití vyšších práv, pro spuštění instalace či spuštění nástroje na správu je třeba použití tokenu se členstvím ve skupině správců a špuštění aplikace v integrity levelu High, který již má práva zápisu do chráněných systémových lokací. Ku příkladu, tedy adresář program files má integrity level High a aplikace běžící v integrity levelu Medium (nespuštěná jako správce) nemá možnost zápisu. Při zápisu se použije výše zmíněná virtualizace, či při potřebě přístupu do lokací s integrity levelem High se použije UAC pro potvrzení povolení přístupu, či vyžádání přihlášení uživatele, který je členem skupiny správců. Stejná situace se děje i při souborových operacích při kterých se snažíte nakopírovat, či modifikovat obsah adresáře program files, a dalších.
Systémové služby běží v Integrity Levelu Systém, zatímco všechny uživatelské procesy v Levelu Medium, Internet Explorer pak v Levelu Low.


Tento princip zaručuje, že procesy běžící v rámci nižšího Levelu, nezískají přístup k objektům ve vyšším Levelu a umožňují izolaci běžících procesů a objektů na několik vrstev, ať již pro systém jako takový tak pro uživatelské procesy. Spustíte-li aplikaci vyžadující oprávnění správce, například nějakou konzolu pro správu a jiný proces (spuštěný běžným způsobem, či z Internet Exploreru7) se bude snažit zneužít vyšších oprávnění aplikace, požadavek na přístup bude zamítnut.
Pro zobrazení běžících procesů (aplikací) a jejich Integrity Levelů lze použít Process Explorer po přidání patřičného sloupce:

Všimněte si, v dolní části obrázku procesu mmc.exe spuštěný pomocí UAC jako správce, všechny ostatní procesy jsou spuštěny v Integrity Levelu Medium. Session 1 je má uživatelská session, Session 0 je systémová session určená pro běh služeb, procesy běží v Integrity Levelu System.

Příklad – při pokusu o modifikaci souboru hosts pomocí notepadu dostanete podivnou hlášku o neexistenci soboru. Pokud spustíte notepad jako správce, s Integrity Levelem High, modifikace hosts souboru se podaří.

Tyto příznaky jsou rozdílné od souborových oprávnění a nenajdete je v dialogu vlastností souboru, či jiného objektu. Jde o příznak, který obsahují standardně objekty Windows a o nastavení definující vývojář aplikace. Aplikace definuje požadovaný Integrity Level v rámci interní konfigurace (manifest), či pomocí nastavení vně aplikace. Tyto principy jsou popsány na WEBových stránkách MSDN. Integrity Levely lze nastavovat pomocí nástrojů icacls, který je standardně obsažen ve Windows, či pomocí nástroje chml.exe https://minasi.com/vista/chml.htm . Pro pochopení doporučuji pohrát si s nástojem, vytvořit adresář a přidělit mu Integrity Level High, následně pomocí průzkumníka přejít do tohoto adresáře. Získáte stejné chování jako při přístupu do program files a jinam.

Pozor - pokud vypnete UAC, všechny procesy a aplikace spuštěné uživatelem poběží v Integrity Levelu High, který jim umožňuje přístup k jinak chráněným zdrojům operačního systému a navíc nejste upozorněni, že nějaká aplikace vyžaduje přístup správce.

Pokud chcete víc informací, určitě si přečtěte tento článek na WEBu MSDN https://msdn2.microsoft.com/en-us/library/bb625963.aspx

Internet Explorer (IE) 7 a chráněný mód
Architektura IE ve Windows Vista byla úplně přepracována a plně využívá výše zmíněných bezpečnostních principů. Program jako takový běží v Integrity Levelu Low a systém k němu přistupuje jako k nedůvěryhodné aplikaci, které je třeba striktně omezit přístup. IE má přístup jen k adresáři Temporary Internet Files a několika adresářům v rámci uživatelského profilu (cookies, favorites,..) pro běžnou práci v prostředí WEBu. I zde funguje princip virtualizace přístupů do chráněných lokací, do lokací s vyššími Interity Levely. 


 
IE ve Windows Vista používá celkem 3 spustitelné soubory, každý z nich má jiný Integrity Level a tedy, jiné možnosti přístupu k systémovým objektům.  Standardní spuštění IE je spuštění procesu iexplore.exe (Level Low), při přístupu k důvěryhodným sites je spuštěn IE pomocí procesu ieuser.exe, který má přidělen Level Medium, má tedy stejné oprávnění jako uživatel. Při potřebě instalace ActiveX (například) je třeba Levelu High, který má třetí proces ieinstal.exe. Pro běžnou práci postačuje spuštění IE standardně, tedy v Levelu Low a procházet Internet se zamezením instalace nechtěného software, pokud tedy instalaci sám neschválím a nepovolím pomocí dialogu UAC.

Windows Resource Protection
Následník Windows File Protection, technologie známé již z Windows XP. Má za účel ochránit pro konzistenci operačního systému kritické soubory a klíče registry. Znamená to, že Vista nepovolí změnu souborů v adresáři Windows, které jsou chráněné pomocí WRP. WRP se vztahuje na celou řadu souborů od těch s koncovkou dll po soubory exe, sys apod. Kompletní seznam je dostupný na níže uvedeném odkazu na WEBu MSDN.

Windows Vista chrání zápisy do těchto lokací pomocí úpravy přístupových oprávnění, tedy klasických ACL. Při pohledu na přístupová oprávnění adresáře system32 zjistíte, že skupina správců nemá možnost mazat, či měnit oprávnění, zatímco uživatel TrustedInstaller má oprávnění plná.
TrustedInstaller je identita, kterou využívá služba Windows Modules Installer pro instalace aktualizací, service packů. Tento mechanismus zaručuje konzistentnost systémových souborů.
I když jde o poměrně účinný mechanismus a byl rozsáhle testován, můžete se setkat s problémy. Jde zejména o instalace starších aplikací, které obsahují i přiložené dll soubory určitých verzí, či vyžadují instalaci specifické verze runtime. I když je instalátor aplikace spuštěn v Integrity Levelu High (jako správce), aplikaci není umožněn zápis potřebných dll knihoven do adresáře windows chráněného pomocí WRP.
Windows Vista pomocí PCA umí detekovat i zmíněné problémy se staršími instalátory (legacy applications) a aplikovat kompatibilní mód umožňující instalaci aplikace, přičemž chráněné soubory nejsou přepsány. Nicméně, je třeba aplikace testovat.

Vývojářská komunita, je věřím s tímto faktem seznámena, již delší dobu existuje mnoho zdrojů popisujících jak se s touto změnou vypořádat.

Pro eliminaci problémů s touto ochranou:

• Použít instalátory aplikací pro Windows Vista
• Nepřikládat k instalaci aplikace systémové soubory
• Upravit existující instalační msi balíček pomocí msi editoru (Orca)
https://blogs.msdn.com/jsacks/archive/2007/02/15/where-to-find-orca-the-msi-editor-tool-in-the-windows-sdk.aspx

About Windows Resource Protection - https://msdn2.microsoft.com/en-us/library/aa382503.aspx

Závěr
Bezpečnost je pro Windows Vista priorita číslo 1. Zmíněné technologie mají ochránit bezpečnost uživatele a operačního systému. I zmírnění negativních dopadů možných problémů s aplikacemi bylo věnované velké usílí. Od zmiňovaných automatických eliminací a aplikace kompatibilních nastavení, po sadu nástrojů pro detekci a správu nastavení kompatibility. O těchto nástrojích budou další pokračování této série.
Na další technologie a vylepšení, například obousměrný pokročilý firewall, se v této sérii článků nedostane. Nicméně, budeme se jim věnovat na blogu.
Mimochodem, Windows Vista je první operační systém plně vyhovující specifikaci Trustworthy Computing.

Hezký den
Roman Černovský