All articles

Vista Protected mode

Published 2006-11-10 - Last modified 2006-11-10

Huncut dolog ez az IE7 védett mód, illetve a mögötte levő technológiák (csak Vistán, XP-n nem).

Ha egy process Integrity Levelje mondjuk 100, pl. egy protected módban futó IE7-ben futó kódé ennyi, akkor az hiába ír ki OutputDebugStringgel valamit, nem látszik a DebugView-ban, mert a debugview 200-as szinten fut. Minden user processz, amit az explorer indít alapban ezen a szinten fut, mert a child processzek öröklik a szülő integrity leveljét.

Nem tudom az OutputDebugString illetve a DebugView belül hogyan működik (pont most jól jött volna a DebugView forráskódja…), de a jelek szerint messagekkel, mert pont azokat blokkolják az integrity levelekben különböző processzek között.

Ezért ha Low Integrity alatt futó folyamat OutputDebugStringjét akarom megnézni, akkor Low-ban indítom el a Debugview-t. De hogyan? A korábbi cikkben van egy kis kódrészlet, ami megmutatja hogyan kell Low-ban elindítani egy új processzt. Az ott található kódot beraktam egy kis console appban, így LI ize.exe-vel máris bármit el tudok indítani low integrity levelen.
Pontosan a következőket befolyásolja a protected mód a User Interface Privilege Isolation (UIPI)-re építve:

A lower privilege process cannot:

With UIPI enabled, the following shared USER resources are still shared between processes at different privilege levels.

Szóval a clipboard még oszott, szép is lenne, nem lehetne másolni az IE-ből pl. notepadba kopipasztával.

Ez úgy néz ki, hogy ha létrehozol pl. egy megnevezett mutexet egy 200-as szálban, és azt el akarod érni egy 100-as integrity levelű kódból, akkor access denied-ot kapsz. Azért, mert ha nincs ACL az erőforráson, akkor azt úgy értelmezi a Vista, mitha egy 200 vagy e fölöttieket beengedő ACL lenne rajta (részben írtam már erről).
Csak úgy férhet hozzá a 100-as szál a 200-as által létrehozott globális erőforráshoz, ha az erősebb szál kézzel rárak egy olyan ACL-t, ami beengedi a 100-asokat. De miféle ACL ez, hisz tudjuk, hogy csak DACL van, ami Józsinak ad read jogot mondjuk egy file esetén, vagy az SACL, ami az auditok igényét tárolja. Nos, az SACL-t bővítették ki, az Integrity leveleket itt tárolják.

Szopatós a Vista, beleköp több ponton az appok életébe, de jól teszi, végre látszik, hogy komolyan vették a secut az msnél. Persze, a Windows 2003 az XP SP2 már jól láthatóan ebbe az irányba ment el, de most befoltoztak olyan arhitekturális likat is, mint amilyen a mindenki küldhet mindenkinek üzenetből fakadt.

Ja, és még egy tapasztalat. Low, azaz 100-as Integrity level esetén virtualizálják a file és reg hozzáférést is, ezért számít, hogy ha neked csak read jog kell valamihez, akkor tényleg azt kérj, ne read write-ot. Gyakori, hogy az ember lazán lekér egy all accesses handle-t, pedig csak read kellett volna. Az ilyen akciók könnyen büntivel végzik Vistában. Még jobban észnél kell lenni programozáskor, ez a secu ára. De legalább precízebb munkára kényszerít.