Sdílet prostřednictvím


Strategie zabezpečení WPF – zabezpečení platformy

I když Windows Presentation Foundation (WPF) poskytuje řadu služeb zabezpečení, využívá také funkce zabezpečení základní platformy, které zahrnují operační systém, CLR a Internet Explorer. Tyto vrstvy kombinují wpf silný model zabezpečení hloubkové ochrany, který se pokouší vyhnout jakémukoliv jedinému bodu selhání, jak je znázorněno na následujícím obrázku:

Diagram znázorňující model zabezpečení WPF

Zbývající část tohoto tématu popisuje funkce v každé z těchto vrstev, které se týkají wpF konkrétně.

Zabezpečení operačního systému

Jádro Systému Windows poskytuje několik funkcí zabezpečení, které tvoří základ zabezpečení pro všechny aplikace windows, včetně těch vytvořených pomocí WPF. Toto téma popisuje šířku těchto funkcí zabezpečení, které jsou pro WPF důležité, a také o tom, jak se s nimi WPF integruje, aby poskytovala další hloubkovou ochranu.

Microsoft Windows XP Service Pack 2 (SP2)

Kromě obecného hodnocení a posílení systému Windows existují tři klíčové funkce systému Windows XP SP2, které budeme probírat v tomto tématu:

  • Kompilace /GS

  • Microsoft služba Windows Update.

Kompilace /GS

Systém Windows XP SP2 poskytuje ochranu opětovným kompilováním mnoha základních systémových knihoven, včetně všech závislostí WPF, jako je CLR, a pomáhá tak zmírnit přetečení vyrovnávací paměti. Toho dosáhnete pomocí parametru /GS s kompilátorem příkazového řádku C/C++. Přestože by se přetečení vyrovnávací paměti mělo explicitně vyhnout, kompilace /GS poskytuje příklad hloubkové ochrany před potenciálními ohroženími zabezpečení, která jsou neúmyslně nebo škodlivě vytvořená.

V minulosti byly přetečení vyrovnávací paměti příčinou mnoha vysoce ovlivněných zneužití zabezpečení. K přetečení vyrovnávací paměti dojde, když útočník využije chybu zabezpečení kódu, která umožňuje injektáž škodlivého kódu, který zapisuje hranice vyrovnávací paměti. To pak umožní útočníkovi unést proces, ve kterém kód provádí přepsáním návratové adresy funkce, aby způsobil spuštění kódu útočníka. Výsledkem je škodlivý kód, který spouští libovolný kód se stejnými oprávněními jako u napadeného procesu.

Na vysoké úrovni chrání příznak kompilátoru -GS před některými potenciálními přetečeními vyrovnávací paměti vložením speciálního souboru cookie zabezpečení pro ochranu návratové adresy funkce, která má místní vyrovnávací paměti řetězců. Po vrácení funkce se soubor cookie zabezpečení porovná s předchozí hodnotou. Pokud se hodnota změnila, mohlo dojít k přetečení vyrovnávací paměti a proces se zastavil s chybovým stavem. Zastavení procesu zabraňuje spuštění potenciálně škodlivého kódu. Další podrobnosti najdete v tématu -GS (kontrola zabezpečení vyrovnávací paměti).

WPF se kompiluje s příznakem /GS a přidá další vrstvu ochrany aplikací WPF.

Windows Vista

Uživatelé WPF v systému Windows Vista budou těžit z dalších vylepšení zabezpečení operačního systému, včetně přístupu uživatele s nejnižšími oprávněními, kontroly integrity kódu a izolace oprávnění.

Řízení uživatelských účtů

V současné době uživatelé Windows používají oprávnění správce, protože mnoho aplikací je vyžaduje pro instalaci nebo spuštění, nebo obojí. Možnost zapisovat výchozí nastavení aplikace do registru je jedním z příkladů.

Spouštění s oprávněními správce ve skutečnosti znamená, že aplikace se spouštějí z procesů, kterým jsou udělena oprávnění správce. Dopad na zabezpečení spočívá v tom, že jakýkoli škodlivý kód, který zneškodní proces spuštěný s oprávněními správce, automaticky zdědí tato oprávnění, včetně přístupu k důležitým systémovým prostředkům.

Jedním ze způsobů, jak chránit před touto bezpečnostní hrozbou, je spouštět aplikace s minimálním množstvím požadovaných oprávnění. To se označuje jako princip nejnižších oprávnění a je základní funkcí operačního systému Windows. Tato funkce se nazývá Řízení uživatelských účtů (UAC) a používá se nástrojem Řízení uživatelských účtů systému Windows dvěma klíčovými způsoby:

  • Pokud chcete ve výchozím nastavení spouštět většinu aplikací s oprávněními řízení uživatelských účtů, i když je uživatel správcem; s oprávněními správce budou spuštěny pouze aplikace, které potřebují oprávnění správce. Pokud chcete spouštět oprávnění správce, musí být aplikace explicitně označené v manifestu aplikace nebo jako položka v zásadách zabezpečení.

  • Zajištění řešení kompatibility, jako je virtualizace. Mnoho aplikací se například pokusí zapisovat do omezených umístění, jako je C:\Program Files. U aplikací spuštěných v rámci řízení uživatelských účtů existuje alternativní umístění pro jednotlivé uživatele, které nevyžaduje oprávnění správce k zápisu. U aplikací spuštěných v nástroji Řízení uživatelských účtů virtualizuje nástroj C:\Program Files tak, aby aplikace, které si myslí, že do něj zapisují, ve skutečnosti zapisují na alternativní umístění pro jednotlivé uživatele. Tento druh kompatibility umožňuje operačnímu systému spouštět mnoho aplikací, které se dříve nedařilo spustit v nástroji Řízení uživatelských účtů.

Kontroly integrity kódu

Systém Windows Vista obsahuje hlubší kontroly integrity kódu, které pomáhají zabránit vkládání škodlivého kódu do systémových souborů nebo do jádra při načítání a spuštění. To přesahuje ochranu systémových souborů.

Omezený proces práv pro aplikace hostované v prohlížeči

Aplikace WPF hostované v prohlížeči se spouštějí v sandboxu zóny Internetu. Integrace WPF s Aplikací Microsoft Internet Explorer rozšiřuje tuto ochranu o další podporu.

Upozorňující

XBAPs vyžadují, aby fungovaly starší prohlížeče, jako je Internet Explorer a starší verze Firefoxu. Tyto starší prohlížeče jsou obvykle nepodporované ve Windows 10 a Windows 11. Moderní prohlížeče už kvůli rizikům zabezpečení nepodporují technologii potřebnou pro aplikace XBAP. Moduly plug-in, které umožňují XBAPs, se už nepodporují. Další informace najdete v tématu Nejčastější dotazy k aplikacím hostovaným v prohlížeči WPF (XBAP).

Vzhledem k tomu, že aplikace prohlížeče XAML (XBAPs) jsou obecně izolované (sandbox) nastavenou sadou oprávnění k internetové zóně, odebrání těchto oprávnění neuškodí aplikacím prohlížeče XAML (XBAPs) z hlediska kompatibility. Místo toho se vytvoří další vrstva hloubkové ochrany; Pokud aplikace v izolovaném prostoru (sandbox) dokáže zneužít jiné vrstvy a proces zneužije, bude mít tento proces stále pouze omezená oprávnění.

Viz Použití nejméně privilegovaného uživatelského účtu.

Common Language Runtime Security

Modul CLR (Common Language Runtime) nabízí řadu klíčových výhod zabezpečení, mezi které patří ověřování a ověřování, zabezpečení přístupu kódu (CAS) a metodologie kritické pro zabezpečení.

Ověření a ověření

K zajištění izolace a integrity sestavení používá CLR proces ověření. Ověření CLR zajišťuje, že sestavení jsou izolovaná ověřením formátu souboru PORTABLE Spustitelného souboru (PE) pro adresy, které odkazují mimo sestavení. Ověřování CLR také ověřuje integritu metadat, která jsou vložena do sestavení.

Pokud chcete zajistit bezpečnost typů, pomozte zabránit běžným problémům se zabezpečením (např. přetečení vyrovnávací paměti) a povolit sandboxing prostřednictvím izolace dílčích procesů, zabezpečení CLR používá koncept ověřování.

Spravované aplikace se kompilují do jazyka MSIL (Microsoft Intermediate Language). Když se spustí metody ve spravované aplikaci, jeho knihovna MSIL se zkompiluje do nativního kódu prostřednictvím kompilace JIT (Just-In-Time). Kompilace JIT zahrnuje proces ověření, který používá mnoho pravidel bezpečnosti a robustnosti, která zajišťují, že kód neobsahuje:

  • Porušení kontraktů typu

  • Zavedení přetečení vyrovnávací paměti

  • Zástupný přístup k paměti.

Spravovaný kód, který nevyhovuje ověřovacím pravidlům, se nesmí spouštět, pokud se nepovažuje za důvěryhodný kód.

Výhodou ověřitelného kódu je klíčový důvod, proč WPF staví na rozhraní .NET Framework. V rozsahu, v jakém se používá ověřitelný kód, je možnost zneužití možných ohrožení zabezpečení výrazně nižší.

Zabezpečení přístupu kódu

Klientský počítač zveřejňuje širokou škálu prostředků, ke kterým může mít spravovaná aplikace přístup, včetně systému souborů, registru, tiskových služeb, uživatelského rozhraní, reflexe a proměnných prostředí. Aby spravovaná aplikace měla přístup ke všem prostředkům na klientském počítači, musí k tomu mít oprávnění rozhraní .NET Framework. Oprávnění v CAS je podtřídou CodeAccessPermission; Cas implementuje jednu podtřídu pro každý prostředek, ke kterému mají spravované aplikace přístup.

Sada oprávnění, která spravovaná aplikace uděluje CAS při spuštění, se označuje jako sada oprávnění a je určena důkazy poskytnutými aplikací. U aplikací WPF jsou důkazy, které jsou poskytovány, umístění nebo zóna, ze kterých jsou aplikace spuštěny. Cas identifikuje následující zóny:

  • Můj počítač. Aplikace spuštěné z klientského počítače (plně důvěryhodné).

  • Místní intranet. Aplikace spouštěné z intranetu (Poněkud důvěryhodná).

  • Internet. Aplikace spouštěné z internetu. (Nejméně důvěryhodné).

  • Důvěryhodné weby. Aplikace identifikované uživatelem jako důvěryhodné (Nejméně důvěryhodné).

  • Nedůvěryhodné weby. Aplikace identifikované uživatelem jako nedůvěryhodné (Nedůvěryhodné).

Pro každou z těchto zón poskytuje cas předdefinovanou sadu oprávnění, která zahrnuje oprávnění, která odpovídají úrovni důvěryhodnosti přidružené k jednotlivým zónám. Tady jsou některé z nich:

  • FullTrust. Pro aplikace spuštěné ze zóny Můj počítač . Všechna možná oprávnění jsou udělena.

  • LocalIntranet. Pro aplikace spuštěné z zóny Místního intranetu. Podmnožina oprávnění je udělena k zajištění moderovaného přístupu k prostředkům klientského počítače, včetně izolovaného úložiště, neomezeného přístupu k uživatelskému rozhraní, neomezených dialogových oken souborů, omezené reflexe, omezeného přístupu k proměnným prostředí. Oprávnění pro důležité prostředky, jako je registr, nejsou k dispozici.

  • Internet. Pro aplikace spuštěné z zóny Internetu nebo důvěryhodných webů . Podmnožina oprávnění se uděluje k poskytnutí omezeného přístupu k prostředkům klientského počítače, včetně izolovaného úložiště, pouze otevření souboru a omezeného uživatelského rozhraní. Tato sada oprávnění v podstatě izoluje aplikace od klientského počítače.

Aplikace identifikované jako z zóny Nedůvěryhodné weby nemají udělená žádná oprávnění cas. V důsledku toho pro ně předdefinovaná sada oprávnění neexistuje.

Následující obrázek znázorňuje vztah mezi zónami, sadami oprávnění, oprávněními a prostředky:

Diagram znázorňující sady oprávnění CAS

Omezení sandboxu zabezpečení zóny Internetu platí stejně pro všechny kódy, které XBAP importuje ze systémové knihovny, včetně WPF. Tím zajistíte, že je každý bit kódu uzamčen, a to i WPF. Aby bylo možné spustit, musí XBAP bohužel spouštět funkce, které vyžadují více oprávnění, než jsou povolená sandboxem zabezpečení zóny Internetu.

Upozorňující

XBAPs vyžadují, aby fungovaly starší prohlížeče, jako je Internet Explorer a starší verze Firefoxu. Tyto starší prohlížeče jsou obvykle nepodporované ve Windows 10 a Windows 11. Moderní prohlížeče už kvůli rizikům zabezpečení nepodporují technologii potřebnou pro aplikace XBAP. Moduly plug-in, které umožňují XBAPs, se už nepodporují. Další informace najdete v tématu Nejčastější dotazy k aplikacím hostovaným v prohlížeči WPF (XBAP).

Představte si aplikaci XBAP, která obsahuje následující stránku:

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Aby bylo možné tento kód XBAP spustit, musí základní kód WPF spouštět více funkcí, než je k dispozici volajícímu XBAP, včetně:

  • Vytvoření úchytu okna (HWND) pro vykreslování

  • Odesílání zpráv

  • Načtení písma Tahoma

Z hlediska zabezpečení by povolení přímého přístupu k některé z těchto operací z aplikace v izolovaném prostoru (sandbox) bylo katastrofické.

WPF naštěstí tuto situaci řeší tím, že těmto operacím umožní provádět se zvýšenými oprávněními jménem aplikace v izolovaném prostoru (sandbox). I když jsou všechny operace WPF kontrolovány proti omezeným oprávněním zabezpečení zóny Internetu domény aplikace XBAP, WPF (stejně jako u jiných systémových knihoven) je udělena sada oprávnění, která zahrnuje všechna možná oprávnění.

To vyžaduje, aby WPF obdržela zvýšená oprávnění a zároveň zabránila tomu, aby tato oprávnění byla řízena sadou oprávnění zóny internetu domény hostitelské aplikace.

WPF to dělá pomocí Assert metoda oprávnění. Následující kód ukazuje, jak k tomu dochází.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();
Dim fp As New FileIOPermission(PermissionState.Unrestricted)
fp.Assert()

' Perform operation that uses the assert

' Revert the assert when operation is completed
CodeAccessPermission.RevertAssert()

Assert v podstatě brání neomezeným oprávněním vyžadovaným WPF omezit oprávněními zóny internetu XBAP.

Z hlediska platformy je WPF zodpovědný za správné použití assertu. Nesprávné použití assertu by mohlo umožnit zvýšení oprávnění škodlivého kódu. Proto je důležité volat assert pouze v případě potřeby a zajistit, aby omezení sandboxu zůstala nedotčená. Kód v izolovaném prostoru (sandbox) například nesmí otevírat náhodné soubory, ale může používat písma. WPF umožňuje aplikacím v izolovaném prostoru (sandbox) používat funkce písma voláním Assert a wpF číst soubory, o kterých je známo, že obsahují tato písma jménem aplikace v izolovaném prostoru (sandbox).

Nasazení ClickOnce

ClickOnce je komplexní technologie nasazení, která je součástí rozhraní .NET Framework, a integruje se se sadou Visual Studio (podrobné informace najdete v tématu Zabezpečení a nasazení ClickOnce). Samostatné aplikace WPF je možné nasadit pomocí ClickOnce, zatímco aplikace hostované v prohlížeči musí být nasazeny pomocí ClickOnce.

Aplikace nasazené pomocí Technologie ClickOnce mají další vrstvu zabezpečení nad zabezpečením přístupu kódu (CAS); Aplikace nasazené clickOnce v podstatě vyžadují potřebná oprávnění. Udělí se jim pouze tato oprávnění, pokud nepřekročí sadu oprávnění pro zónu, ze které je aplikace nasazená. Snížením sady oprávnění pouze na ty, které jsou potřeba, i když jsou menší než ty, které poskytuje sada oprávnění spouštěcí zóny, je počet prostředků, ke kterým má aplikace přístup, omezen na úplné minimum. V důsledku toho, pokud je aplikace napadena, je možné poškození klientského počítače snížit.

Metodologie kritická pro zabezpečení

Kód WPF, který používá oprávnění k povolení sandboxu internetové zóny pro aplikace XBAP, musí být uložen na nejvyšší možný stupeň auditu a řízení zabezpečení. Pro usnadnění tohoto požadavku poskytuje rozhraní .NET Framework novou podporu pro správu kódu, který zvyšuje oprávnění. ClR vám konkrétně umožňuje identifikovat kód, který zvyšuje oprávnění, a označit ho SecurityCriticalAttributepomocí ; jakýkoli kód, který SecurityCriticalAttribute není označený, bude transparentní pomocí této metodologie. Naopak spravovaný kód, který není označený SecurityCriticalAttribute , je znemožněn zvýšení oprávnění.

Upozorňující

XBAPs vyžadují, aby fungovaly starší prohlížeče, jako je Internet Explorer a starší verze Firefoxu. Tyto starší prohlížeče jsou obvykle nepodporované ve Windows 10 a Windows 11. Moderní prohlížeče už kvůli rizikům zabezpečení nepodporují technologii potřebnou pro aplikace XBAP. Moduly plug-in, které umožňují XBAPs, se už nepodporují. Další informace najdete v tématu Nejčastější dotazy k aplikacím hostovaným v prohlížeči WPF (XBAP).

Metodologie kritická pro zabezpečení umožňuje organizaci kódu WPF, který zvyšuje oprávnění na jádro kritické pro zabezpečení, přičemž zbytek je transparentní. Izolování kódu kritického pro zabezpečení umožňuje technickému týmu WPF zaměřit se na vyšší analýzu zabezpečení a kontrolu zdrojového kódu na jádro kritické pro zabezpečení nad rámec standardních postupů zabezpečení (viz Strategie zabezpečení WPF – Security Engineering).

Upozorňujeme, že rozhraní .NET Framework umožňuje důvěryhodnému kódu rozšířit sandbox internetové zóny XBAP tím, že vývojářům umožňuje psát spravovaná sestavení označená pomocí AllowPartiallyTrustedCallersAttribute (APTCA) a nasazená do globální mezipaměti sestavení uživatele (GAC). Označení sestavení pomocí APTCA je vysoce citlivá operace zabezpečení, protože umožňuje každému kódu volat toto sestavení, včetně škodlivého kódu z internetu. Při tom musí být použita extrémní opatrnost a osvědčené postupy a uživatelé se musí rozhodnout důvěřovat tomuto softwaru, aby byl nainstalován.

Zabezpečení aplikace Microsoft Internet Explorer

Kromě omezení problémů se zabezpečením a zjednodušení konfigurace zabezpečení obsahuje Microsoft Internet Explorer 6 (SP2) několik funkcí, které zlepšují zabezpečení pro uživatele aplikací prohlížeče XAML (XBAPs). Tah těchto funkcí se snaží uživatelům umožnit větší kontrolu nad jejich procházením.

Upozorňující

XBAPs vyžadují, aby fungovaly starší prohlížeče, jako je Internet Explorer a starší verze Firefoxu. Tyto starší prohlížeče jsou obvykle nepodporované ve Windows 10 a Windows 11. Moderní prohlížeče už kvůli rizikům zabezpečení nepodporují technologii potřebnou pro aplikace XBAP. Moduly plug-in, které umožňují XBAPs, se už nepodporují. Další informace najdete v tématu Nejčastější dotazy k aplikacím hostovaným v prohlížeči WPF (XBAP).

Před aktualizací IE6 SP2 mohou uživatelé podléhat některému z následujících způsobů:

  • Náhodná automaticky otevíraná okna

  • Matoucí přesměrování skriptu

  • Na některých webech existuje mnoho dialogů zabezpečení.

V některých případech by se nedůvěryhodné weby pokusily oklamat uživatele falšováním uživatelského rozhraní instalace (UI) nebo opakovaným zobrazením instalačního dialogového okna Microsoft ActiveX, i když ho uživatel mohl zrušit. Pomocí těchto technik je možné, že velký počet uživatelů byl zklamnut do špatného rozhodování, které vedlo k instalaci aplikací spywaru.

IE6 SP2 obsahuje několik funkcí pro zmírnění těchto typů problémů, které se týkají konceptu inicializace uživatelů. IE6 SP2 rozpozná, když uživatel před akcí kliknul na odkaz nebo prvek stránky, který se označuje jako inicializace uživatele, a považuje ji za odlišnou, než když skript na stránce aktivuje podobnou akci. Například IE6 SP2 obsahuje blokování automaticky otevíraných oken, které zjistí, že uživatel klikne na tlačítko před vytvořením automaticky otevíraných oken. To umožňuje IE6 SP2 povolit většinu nesrozených automaticky otevíraných oken a zároveň zabránit automaticky otevíraným okenám, které uživatelé ani nechtějí. Blokované automaticky otevíraná okna jsou zachycena pod novým informačním panelem, což uživateli umožňuje ručně přepsat blok a zobrazit automaticky otevírané okno.

Stejná logika inicializace uživatele se také použije pro výzvy zabezpečení Otevřít/uložit. Dialogová okna instalace ActiveX jsou vždy zachycena pod informačním panelem, pokud nepředstavují upgrade z dříve nainstalovaného ovládacího prvku. Tato opatření umožňují uživatelům bezpečnější a kontrolovanější uživatelské prostředí, protože jsou chráněny proti webům, které je obtěžují instalací nežádoucího nebo škodlivého softwaru.

Tyto funkce také chrání zákazníky, kteří používají IE6 SP2 k procházení webů, které jim umožňují stahovat a instalovat aplikace WPF. Konkrétně je to proto, že IE6 SP2 nabízí lepší uživatelské prostředí, které snižuje šanci uživatelům instalovat škodlivé nebo odchýlé aplikace bez ohledu na to, jaká technologie byla použita k jeho sestavení, včetně WPF. WPF tyto ochrany přidává pomocí ClickOnce k usnadnění stahování svých aplikací přes internet. Vzhledem k tomu, že se aplikace prohlížeče XAML (XBAPs) spouštějí v sandboxu zabezpečení zóny internetu, je možné je bez problémů spustit. Na druhou stranu samostatné aplikace WPF vyžadují k provedení úplný vztah důvěryhodnosti. U těchto aplikací zobrazí ClickOnce během procesu spuštění dialogové okno zabezpečení, které upozorní použití dalších požadavků na zabezpečení aplikace. Tento postup se ale musí iniciovat uživatelem, bude se řídit také logikou iniciovanou uživatelem a dá se zrušit.

Internet Explorer 7 zahrnuje a rozšiřuje možnosti zabezpečení IE6 SP2 jako součást průběžného závazku k zabezpečení.

Viz také