it-swarm-eu.dev

Jak funguje režim „Zabezpečená plocha“ systému Windows?

Může někdo vysvětlit (nebo poskytnout odkaz na jednoduché vysvětlení) toho, co je režim „Zabezpečená plocha“ systému Windows a jak to funguje?

Právě jsem o tom slyšel v dokumentaci KeePass ( KeePass - Zadejte hlavní klíč na zabezpečené ploše ) a rád bych tomu porozuměl lépe.

59
snth

Krátká odpověď

Název „Zabezpečená plocha“ obsahuje tři samostatné problémy:

  • Windows vestavěné funkce jako GINA a Credential Provider Model .
  • Oddělení privilegovaných a neprivilegovaných aplikací běžících jako stejný uživatel (nominálně zabraňující eskalaci oprávnění), které mohou nebo nemusí souviset s:
  • SwitchDesktop(), což je to, co KeePass používá a může nebo nemusí (nejsem si jistý) být odolný vůči DLL Vstřikování.

Podrobná odpověď

Jako rychlý primer k tomu, jak jsou vytvářeny GUI Windows, v podstatě všechno běží funkcí nazvanou CreateWindow() (mám na mysli všechno, každé tlačítko, každé menu, všechno) a je mu dáno hWnd nebo popisovač okna . Úprava těchto Windows se provádí pomocí jiné funkce, SendMessage().

Tady je háček. Jako aplikace v uživatelském režimu mohu při správném volání rozhraní API docela snadno odesílat zprávy do jiných Windows. Je docela triviální, aby tlačítka zmizela z forem jiných lidí. Je o něco těžší provést DLL injekce a zavěsit smyčku zpráv, která přijímá zprávy (OS odesílá zprávy systému Windows, když se s nimi něco stane), ale ne o moc těžší. „Mohl bych automaticky odeslat váš formulář„ ano/ne “. Nebo bych mohl změnit štítek z ReallyDodgyVirus.exe Na Explorer.exe A nebyl byste moudřejší.

Insert: Opravdu dobrý článek o různých technikách, jak dostat svůj kód do adresního prostoru běžícího procesu.

Co teď dělá KeePass?

Velmi krátké vnímání zdroje ukazuje, že používají CreateDesktop(), SwitchDesktop() a CloseDesktop() k vytvoření druhé plochy připojené k fyzickému zobrazovacímu zařízení, na kterém jste. V angličtině žádají jádro, aby pro ně vytvořilo izolovanou plochu, jejíž objekty hWnd jsou mimo rozsah, který lze najít v SendMessage() jakékoli jiné aplikace.

Chtěl bych zdůraznit, že SwitchDesktop pozastaví aktualizaci uživatelského rozhraní výchozí plochy. Nejsem si jistý, zda jsou smyčky zpráv také zamrzlé - mám podezření, že ne, protože je pracovní plocha vytvořena jako nové vlákno.

V tomto případě KeePass is nakreslí UI, takže provedení je not, jak tomu rozumím, jako NT AUTHORITY/SYSTEM. Místo toho je nová plocha vytvořena odděleně od zbytku aktuální plochy, která ji chrání. Budu rád, že to napravím. Podívejte se však na MSDN for SwitchDesktop :

Funkce SwitchDesktop se nezdaří, pokud plocha patří k neviditelné okenní stanici. SwitchDesktop také selže, když je vyvolán z procesu, který je spojen se zabezpečenou plochou, jako jsou například pracovní plochy WinLogon a ScreenSaver. Procesy, které jsou přidruženy k zabezpečené ploše, zahrnují vlastní procesy UserInit. Taková volání obvykle selhávají s chybou „přístup odepřen“.

Věřím, že to znamená, že tyto dialogy (spořiče obrazovky, přihlášení do systému Windows) jsou do systému Windows vestavěny hlouběji, takže se vždy provádějí jako NT AUTHORITY\SYSTEM A proces UserInit vytvoří podprocesy při platné autentizaci v požadovaném úroveň oprávnění.

Důvod, proč to uvádím, je proto, že se domnívám, že existují dva problémy: různé stolní počítače a oddělení privilegií. Z diskuse na téma Secure Desktop :

Mechanismus integrace Windows a UIPI byly navrženy tak, aby vytvářely ochrannou bariéru kolem zvýšených aplikací. Jedním z jeho původních cílů bylo zabránit vývojářům softwaru v používání zkratek a využití již zvýšených aplikací k plnění administrativních úkolů. Aplikace běžící se standardními uživatelskými právy nemůže do zvýšené aplikace odesílat syntetické vstupy myši nebo klávesnice, aby mohla provádět nabízení nebo vkládat kód do zvýšené aplikace, aby mohla provádět administrativní operace.

Jak říká SteveS, UAC provozuje samostatný desktopový proces jako NT AUTHORITY/SYSTEM. Pokud můžete zachytit UAC v akci (consent.exe) Prostřednictvím Průzkumníka procesu, vypadá to takto:

UAC under process Explorer

Ekalace oprávnění jako procesu, který nemám specifika, ale zde je to, co si myslím, že chápu: Věřím, že proces eskalace oprávnění v rozhraní API systému Windows způsobí proces spuštěný jako NT AUTHORITY/SYSTEM (Tedy schopný vykonat) nový proces pod libovolnými oprávněními, v tomto případě správce). Když aplikace požádá o vyšší oprávnění, je tato otázka položena lokálně na nové ploše, na kterou žádná z vašich aplikací nemůže získat popisovač plochy nebo žádný z prvků grafického uživatelského rozhraní. Když souhlasíte, consent.exe Vytvoří proces jako privilegovaný uživatel. Proces spuštěný jako NT AUTHORITY\SYSTEM Je tedy důsledkem potřeby vytvořit nový privilegovaný proces, nikoli jako způsob vytvoření zabezpečené plochy. Skutečnost, že se pracovní plocha liší od výchozího, je to, co zvyšuje bezpečnost v obou případech.

Věřím, že Mark znamená výše, že kromě těchto zabezpečených stolních počítačů se dějí také dvě věci:

  • Vaše výchozí plocha správce je ve skutečnosti spuštěna bez oprávnění, na rozdíl od Windows XP a starších a
  • Neprivilegovaná a privilegovaná aplikace nyní existují na samostatných počítačích (zřeknutí se odpovědnosti: Mohlo by to být pouze ACL na objektech v paměti, nejsem si jistá), což zajišťuje, že neprivilegovaný kód nemůže přistupovat k privilegovaným objektům.

Uživatelské rozhraní pro přihlášení k systému Windows se ve Vista/7 opět liší.

Je zřejmé, že žádná z těchto metod vás nebude bránit před rootkity režimu jádra, ale brání ohrožení eskalací a kompromitaci integrity uživatelského rozhraní izolováním privilegovaných aplikací, nebo v případě KeePass, citlivého dialogu.

Upravit

Když jsem se podíval na kód KeePass, viděl jsem tento šikovný kus C #:

Bitmap bmpBack = UIUtil.CreateScreenshot();
if(bmpBack != null) UIUtil.DimImage(bmpBack);
/* ... */

SecureThreadParams stp = new SecureThreadParams();
stp.BackgroundBitmap = bmpBack;
stp.ThreadDesktop = pNewDesktop;

Z toho můžete vidět, že ve skutečnosti, aby napodobil souhlas.exe, KeePass vezme screenshot pozadí, ztlumí jej a vytvoří svou novou plochu na pozadí staré plochy. Mám tedy podezření, že stará plocha pokračuje v činnosti, i když není vykreslována. To si myslím, že to potvrzuje, že nedochází k žádné magické akci NT AUTHORITY\SYSTEM Jak s KeePassem, tak s consent.exe (Mám podezření, že souhlas.exe dělá to samé UI-moudré, prostě se to spustí v kontextu z NT AUTHORITY\SYSTEM).

Upravit 2

Když řeknu DLL Vstřikování, konkrétně přemýšlím o DLL vstřikování k poškození uživatelského rozhraní. DLL Vstřikování zůstává možné) Pokud jde o KeePass jako proces, nejsem si jistý, zda by mohl být použit k ovlivnění tohoto zabezpečeného uživatelského rozhraní. Mohl by však být použit pro přístup k paměti procesu a jeho podprocesů, a tím popadnout zadané předběžné šifrování hesla. Těžké, ale myslím, že je to možné. Ocenil bych někoho, kdo by se o tom radil, kdyby to věděl.

63
user2213

„Zabezpečená plocha“ je plocha, kterou může spustit pouze samotný systém. Zní to trochu divně a pravděpodobně to nevysvětluje mnoho.

V systému Windows je pracovní plocha pohled, který umožňuje interakci s procesy. Když se přihlásíte do Windows (přihlašovací výzva), jste na ploše. Když jste přihlášeni a uvidíte úvodní nabídku, jste na samostatné ploše. Když uzamknete svůj počítač, jste na další ploše. Když se objeví UAC, jste na jiné ploše. V systému Windows existuje několik různých stolních počítačů.

Zabezpečená plocha je plocha, která je mimo dosah dostupnosti jiných aplikací. Plocha pro přihlášení je zabezpečená plocha (vytvořená programem winlogon.exe), stejně jako plocha UAC. Žádný jiný proces nemůže interagovat s desktopem, takže žádný jiný proces nemůže dělat věci, jako je aktivace tlačítka nebo čtení obsahu textového pole. To je důvod, proč je UAC (teoreticky) užitečný.

Aplikace třetích stran mohou vytvořit zabezpečenou plochu pro vyžádání informací (jako je hlavní heslo) a poté je předat do příslušné aplikace. Tímto způsobem žádný jiný proces nemůže teoreticky zrušit heslo.

Dobrým startérem na zabezpečených počítačích je první polovina tohoto článku o tom, jak UAC pracuje na zabezpečené ploše: http://blogs.msdn.com/b/uac/archive/2006/05/03/589561 .aspx .

16
Steve

zabezpečená pracovní plocha běží pod lokálním systémovým účtem a žádný jiný proces s ním nemůže spolupracovat, kromě OSK, Narratoru atd., je spuštěn programem winlogon.exe a můžete jej zakázat v registru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System změnou hodnota PromptOnSecureDesktop od 1 do 0, pokud spustíte cmd.exe pod systémovým účtem, stále nebude interagovat se zabezpečenou pracovní plochou a slabá pracovní plocha, která se zobrazí, když kliknete na tlačítko Spustit jako správce pod UAC Prompt je zabezpečená pracovní plocha a když stisknete ctrl + Alt + Del a obrazovka skyblue, kterou vidíte, s několika možnostmi, jako je zámek tohoto kompilátoru atd., Je také zabezpečená plocha, Windows ve výchozím nastavení má tři desktop 1 winlogon 2 spořič obrazovky 3 userdesktop

1
Mudasir