Delen via


WPF-beveiligingsstrategie - Platformbeveiliging

Windows Presentation Foundation (WPF) biedt verschillende beveiligingsservices, maar maakt ook gebruik van de beveiligingsfuncties van het onderliggende platform, waaronder het besturingssysteem, de CLR en Internet Explorer. Deze lagen combineren om WPF een sterk, diepgaande beveiligingsmodel te bieden dat probeert een single point of failure te voorkomen, zoals wordt weergegeven in de volgende afbeelding:

diagram met het WPF-beveiligingsmodel.

In de rest van dit onderwerp worden de functies in elk van deze lagen besproken die specifiek betrekking hebben op WPF.

Beveiliging van besturingssysteem

De kern van Windows biedt verschillende beveiligingsfuncties die de beveiligingsbasis vormen voor alle Windows-toepassingen, met inbegrip van de toepassingen die zijn gebouwd met WPF. In dit onderwerp wordt de breedte van deze beveiligingsfuncties besproken die belangrijk zijn voor WPF, evenals de integratie van WPF met deze functies om diepgaande verdediging te bieden.

Microsoft Windows XP Service Pack 2 (SP2)

Naast een algemene beoordeling en versterking van Windows zijn er drie belangrijke functies van Windows XP SP2 die in dit onderwerp worden besproken:

  • /GS-compilatie

  • Microsoft Windows Update.

/GS-compilatie

Windows XP SP2 biedt beveiliging door veel kernsysteembibliotheken opnieuw te compileren, inclusief alle WPF-afhankelijkheden zoals de CLR, om bufferoverschrijdingen te beperken. Dit wordt bereikt met behulp van de /GS-parameter met de C/C++-opdrachtregelcompilator. Hoewel bufferoverschrijdingen expliciet moeten worden vermeden, biedt /GS-compilatie een voorbeeld van een diepgaande verdediging tegen potentiële beveiligingsproblemen die per ongeluk of opzettelijk door hen zijn gemaakt.

In het verleden zijn bufferoverschrijdingen de oorzaak geweest van veel beveiligingsexplots met hoge impact. Een bufferoverschrijding treedt op wanneer een aanvaller gebruikmaakt van een beveiligingsprobleem met code waarmee schadelijke code kan worden opgenomen die voorbij de grenzen van een buffer schrijft. Hierdoor kan een aanvaller het proces waarin de code wordt uitgevoerd kapen door het retouradres van een functie te overschrijven om de uitvoering van de code van de aanvaller te veroorzaken. Het resultaat is schadelijke code die willekeurige code uitvoert met dezelfde bevoegdheden als het gekaapte proces.

Op een hoog niveau beschermt de -GS compilervlag tegen een aantal mogelijke bufferoverschrijdingen door een speciale beveiligingscookie te injecteren om het retouradres te beschermen van een functie die lokale tekenreeksbuffers heeft. Nadat een functie is teruggekeerd, wordt de beveiligingscookie vergeleken met de vorige waarde. Als de waarde is gewijzigd, is er mogelijk een bufferoverschrijding opgetreden en wordt het proces gestopt met een foutvoorwaarde. Door het proces te stoppen, voorkomt u dat mogelijk schadelijke code wordt uitgevoerd. Zie -GS (Bufferbeveiligingscontrole) voor meer informatie.

WPF wordt gecompileerd met de vlag /GS om nog een andere verdedigingslaag toe te voegen aan WPF-toepassingen.

Windows Vista

WPF-gebruikers in Windows Vista profiteren van de extra beveiligingsverbeteringen van het besturingssysteem, waaronder 'Least-Privilege Gebruikerstoegang', controles van code-integriteit en isolatie van bevoegdheden.

Gebruikersaccountbeheer (UAC)

Tegenwoordig werken Windows-gebruikers meestal met beheerdersbevoegdheden, omdat veel applicaties deze nodig hebben voor installatie of uitvoering, of beide. Het schrijven van standaardtoepassingsinstellingen naar het register is een voorbeeld.

Uitvoeren met beheerdersbevoegdheden betekent echt dat toepassingen worden uitgevoerd vanuit processen waaraan beheerdersbevoegdheden zijn verleend. De beveiligingsimpact hiervan is dat elke schadelijke code die een proces kapt dat wordt uitgevoerd met beheerdersbevoegdheden, automatisch deze bevoegdheden overneemt, inclusief toegang tot kritieke systeembronnen.

Een manier om te beschermen tegen deze beveiligingsrisico is het uitvoeren van toepassingen met de minste hoeveelheid bevoegdheden die vereist zijn. Dit staat bekend als het principe van minimale bevoegdheden en is een kernfunctie van het Windows-besturingssysteem. Deze functie wordt gebruikersaccountbeheer (UAC) genoemd en wordt op twee belangrijke manieren gebruikt door Windows UAC:

  • Als u de meeste toepassingen met UAC-bevoegdheden standaard wilt uitvoeren, zelfs als de gebruiker een beheerder is; alleen toepassingen waarvoor beheerdersbevoegdheden nodig zijn, worden uitgevoerd met beheerdersbevoegdheden. Om met beheerdersbevoegdheden te draaien, moeten toepassingen expliciet worden gemarkeerd in hun toepassingsmanifest of als een vermelding in het beveiligingsbeleid.

  • Compatibiliteitsoplossingen bieden, zoals virtualisatie. Veel toepassingen proberen bijvoorbeeld te schrijven naar beperkte locaties, zoals C:\Program Files. Voor toepassingen die worden uitgevoerd onder UAC, bestaat er een alternatieve locatie per gebruiker waarvoor geen beheerdersbevoegdheden nodig zijn om naar te schrijven. Voor toepassingen die worden uitgevoerd onder UAC, virtualiseert UAC C:\Program Files, zodat toepassingen die denken dat ze hiernaar schrijven, in werkelijkheid naar een alternatieve locatie per gebruiker schrijven. Met dit soort compatibiliteitswerkzaamheden kan het besturingssysteem veel toepassingen uitvoeren die eerder niet konden worden uitgevoerd in UAC.

Controles van code-integriteit

Windows Vista bevat diepere code-integriteitscontroles om te voorkomen dat schadelijke code wordt geïnjecteerd in systeembestanden of in de kernel tijdens het laden/uitvoeren van de kernel. Dit gaat verder dan de beveiliging van systeembestanden.

Beperkt rechtenproces voor Browser-Hosted-toepassingen

Door de browser gehoste WPF-toepassingen worden uitgevoerd in de sandbox van de internetzone. WPF-integratie met Microsoft Internet Explorer breidt deze beveiliging uit met extra ondersteuning.

Waarschuwing

XBAPs vereisen dat verouderde browsers werken, zoals Internet Explorer en oude versies van Firefox. Deze oudere browsers worden meestal niet ondersteund in Windows 10 en Windows 11. Moderne browsers bieden geen ondersteuning meer voor de technologie die is vereist voor XBAP-apps vanwege beveiligingsrisico's. Invoegtoepassingen die XBAPs inschakelen, worden niet meer ondersteund. Zie Veelgestelde vragen over door de WPF-browser gehoste toepassingen (XBAP)voor meer informatie.

Omdat XBAPs (XAML-browsertoepassingen) over het algemeen in de sandbox worden geplaatst door de machtigingenset voor de internetzone, is het verwijderen van deze bevoegdheden niet schadelijk voor XAML-browsertoepassingen (XBAPs) vanuit een compatibiliteitsperspectief. In plaats daarvan wordt er een extra diepgaande verdedigingslaag gemaakt; als een sandbox-toepassing andere lagen kan misbruiken en het proces kan kapen, heeft het proces nog steeds slechts beperkte bevoegdheden.

Zie Een Least-Privileged gebruikersaccount gebruiken.

Common Language Runtime Beveiliging

De Common Language Runtime (CLR) biedt een aantal belangrijke beveiligingsvoordelen, waaronder validatie en verificatie, Code Access Security (CAS) en de beveiligingskritieke methodologie.

Validatie en verificatie

Om isolatie en integriteit van assembly's te bieden, maakt de CLR gebruik van een validatieproces. CLR-validatie zorgt ervoor dat assembly's worden geïsoleerd door de PE-bestandsindeling (Portable Executable) te valideren voor adressen die buiten de assembly vallen. CLR-validatie valideert ook de integriteit van de metagegevens die in een assembly zijn ingesloten.

Om de typeveiligheid te waarborgen, veelvoorkomende beveiligingsproblemen zoals bufferoverschrijdingen te helpen voorkomen en sandboxing door middel van subprocesisolatie mogelijk te maken, maakt de CLR-beveiliging gebruik van verificatie.

Beheerde toepassingen worden gecompileerd in Microsoft Intermediate Language (MSIL). Wanneer methoden in een beheerde toepassing worden uitgevoerd, wordt de MSIL gecompileerd in systeemeigen code via Just-In-Time -compilatie (JIT). JIT-compilatie bevat een verificatieproces dat veel veiligheids- en robuustheidsregels toepast die ervoor zorgen dat code niet:

  • Schenden van typecontracten

  • Bufferoverschrijdingen introduceren

  • Ongecontroleerde toegang tot geheugen.

Beheerde code die niet voldoet aan verificatieregels, mag niet worden uitgevoerd, tenzij deze wordt beschouwd als vertrouwde code.

Het voordeel van verifieerbare code is een belangrijke reden waarom WPF voortbouwt op .NET Framework. Voor zover verifieerbare code wordt gebruikt, wordt de mogelijkheid om mogelijke beveiligingsproblemen te misbruiken aanzienlijk verlaagd.

Beveiliging van codetoegang

Een clientcomputer maakt een groot aantal resources beschikbaar waartoe een beheerde toepassing toegang heeft, waaronder het bestandssysteem, het register, afdrukservices, de gebruikersinterface, weerspiegeling en omgevingsvariabelen. Voordat een beheerde toepassing toegang heeft tot alle resources op een clientcomputer, moet deze beschikken over de machtiging .NET Framework om dit te doen. Een machtiging in CAS is een subklasse van de CodeAccessPermission; CAS implementeert één subklasse voor elke resource waartoe beheerde toepassingen toegang hebben.

De set machtigingen waaraan een beheerde toepassing wordt verleend door CAS wanneer deze begint met uitvoeren, wordt een machtigingsset genoemd en wordt bepaald door bewijs dat door de toepassing wordt verstrekt. Voor WPF-toepassingen is het opgegeven bewijs de locatie of zone waaruit de toepassingen worden gestart. CAS identificeert de volgende zones:

  • Mijn computer. Toepassingen die worden gestart vanaf de clientcomputer (volledig vertrouwd).

  • lokaal intranet. Toepassingen die vanaf het intranet worden gestart. (Enigszins vertrouwd).

  • Internet-. Toepassingen die vanaf internet worden gestart. (Minst vertrouwd).

  • Vertrouwde Sites. Toepassingen die door een gebruiker worden geïdentificeerd als vertrouwd. (Minst vertrouwd).

  • Onbetrouwbare sites. Toepassingen die door een gebruiker worden geïdentificeerd als niet-vertrouwd. (Niet-vertrouwd).

Voor elk van deze zones biedt CAS een vooraf gedefinieerde machtigingenset die de machtigingen bevat die overeenkomen met het vertrouwensniveau dat aan elke zones is gekoppeld. Dit zijn onder andere:

  • FullTrust-. Voor toepassingen die worden gestart vanuit de Mijn computer zone. Alle mogelijke machtigingen worden verleend.

  • LocalIntranet. Voor toepassingen die worden gestart vanuit de zone lokaal intranet. Een subset van machtigingen wordt verleend om gemiddelde toegang te bieden tot de resources van een clientcomputer, waaronder geïsoleerde opslag, onbeperkte UI-toegang, onbeperkte bestandsdialoogvensters, beperkte weerspiegeling, beperkte toegang tot omgevingsvariabelen. Toestemmingen voor kritieke bronnen, zoals het register, worden niet verleend.

  • Internet-. Voor toepassingen die worden gestart vanuit de Internet-zone of de Vertrouwde Sites-zone. Een subset van machtigingen wordt verleend aan beperkte toegang tot de resources van een clientcomputer, waaronder geïsoleerde opslag, alleen bestand openen en beperkte gebruikersinterface. In wezen isoleert deze set machtigingen toepassingen van de clientcomputer.

Toepassingen die zijn geïdentificeerd als afkomstig van de niet-vertrouwde sites zone, krijgen helemaal geen machtigingen van CAS. Daarom is er geen vooraf gedefinieerde machtigingenreeks voor hen.

In de volgende afbeelding ziet u de relatie tussen zones, permissiesets, machtigingen en resources.

diagram met CAS-machtigingensets.

De beperkingen van de sandbox voor internetzonebeveiliging zijn evenzeer van toepassing op code die een XBAP importeert uit een systeembibliotheek, met inbegrip van WPF. Dit zorgt ervoor dat elke bit van de code is vergrendeld, zelfs WPF. Helaas moet een XBAP functionaliteit uitvoeren waarvoor meer machtigingen zijn vereist dan die zijn ingeschakeld door de sandbox voor de beveiliging van de internetzone.

Waarschuwing

XBAPs vereisen dat verouderde browsers werken, zoals Internet Explorer en oude versies van Firefox. Deze oudere browsers worden meestal niet ondersteund in Windows 10 en Windows 11. Moderne browsers bieden geen ondersteuning meer voor de technologie die is vereist voor XBAP-apps vanwege beveiligingsrisico's. Invoegtoepassingen die XBAPs inschakelen, worden niet meer ondersteund. Zie Veelgestelde vragen over door de WPF-browser gehoste toepassingen (XBAP)voor meer informatie.

Overweeg een XBAP-toepassing die de volgende pagina bevat:

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()

Als u deze XBAP wilt uitvoeren, moet de onderliggende WPF-code meer functionaliteit uitvoeren dan beschikbaar is voor de aanroepende XBAP, waaronder:

  • Een venstergreep (HWND) maken voor rendering

  • Berichten verzenden

  • Het lettertype Tahoma laden

Vanuit een beveiligingspunt zou het onherstelbaar zijn om rechtstreeks toegang te verlenen tot een van deze bewerkingen vanuit de sandbox-toepassing.

Gelukkig is WPF geschikt voor deze situatie doordat deze bewerkingen kunnen worden uitgevoerd met verhoogde bevoegdheden namens de sandbox-toepassing. Hoewel alle WPF-bewerkingen worden gecontroleerd op basis van de beperkte beveiligingsmachtigingen voor de internetzone van het toepassingsdomein van de XBAP, krijgt WPF (net als bij andere systeembibliotheken) een machtigingenset met alle mogelijke machtigingen.

Dit vereist dat WPF verhoogde bevoegdheden ontvangt terwijl wordt voorkomen dat deze bevoegdheden worden beheerd door de machtigingenset internetzone van het domein van de hosttoepassing.

WPF doet dit met behulp van de Assert methode van een machtiging. De volgende code laat zien hoe dit gebeurt.

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()

De Assert voorkomt in wezen dat de onbeperkte machtigingen die door WPF zijn vereist, worden beperkt door de machtigingen voor de internetzone van de XBAP.

WPF is vanuit een platformperspectief verantwoordelijk voor het correct gebruik van Assert; een onjuist gebruik van Assert kan schadelijke code mogelijk maken om privileges te verhogen. Daarom is het belangrijk om alleen Assert aan te roepen wanneer dat nodig is en om ervoor te zorgen dat sandboxbeperkingen intact blijven. Code in de sandbox mag bijvoorbeeld geen willekeurige bestanden openen, maar wel lettertypen gebruiken. Met WPF kunnen sandbox-toepassingen lettertype-functionaliteit gebruiken door Assertaan te roepen, en WPF kan bestanden lezen die bekend zijn deze lettertypen te bevatten namens de sandbox-toepassing.

ClickOnce-implementatie

ClickOnce is een uitgebreide implementatietechnologie die deel uitmaakt van .NET Framework en integreert met Visual Studio (zie ClickOnce-beveiliging en -implementatie voor gedetailleerde informatie). Zelfstandige WPF-toepassingen kunnen worden geïmplementeerd met ClickOnce, terwijl door de browser gehoste toepassingen moeten worden geïmplementeerd met ClickOnce.

Toepassingen die zijn geïmplementeerd met ClickOnce krijgen een extra beveiligingslaag via CAS (Code Access Security); In wezen vraagt ClickOnce geïmplementeerde toepassingen de machtigingen aan die ze nodig hebben. Hun worden alleen die machtigingen verleend als ze de set machtigingen voor de zone vanwaar de toepassing wordt geïmplementeerd niet overschrijden. Door de set machtigingen te beperken tot alleen de machtigingen die nodig zijn, zelfs als ze kleiner zijn dan de machtigingenset van de startzone, wordt het aantal resources waartoe de toepassing toegang heeft, beperkt tot een minimum. Als de toepassing daarom wordt gekaapt, wordt de kans op schade aan de clientmachine verminderd.

Security-Critical methodologie

De WPF-code die gebruikmaakt van machtigingen voor het inschakelen van de sandbox van de internetzone voor XBAP-toepassingen, moet worden gehouden tot de hoogst mogelijke mate van beveiligingscontrole en -controle. Om deze vereiste te vergemakkelijken, biedt .NET Framework nieuwe ondersteuning voor het beheren van code die bevoegdheden verhoogt. Met name stelt de CLR u in staat om code te identificeren die bevoegdheden verhoogt en deze te markeren met de SecurityCriticalAttribute; code die niet met SecurityCriticalAttribute is gemarkeerd, wordt met behulp van deze methodologie transparant. Omgekeerd wordt voorkomen dat beheerde code die niet is gemarkeerd met SecurityCriticalAttribute bevoegdheden verhoogt.

Waarschuwing

XBAPs vereisen dat verouderde browsers werken, zoals Internet Explorer en oude versies van Firefox. Deze oudere browsers worden meestal niet ondersteund in Windows 10 en Windows 11. Moderne browsers bieden geen ondersteuning meer voor de technologie die is vereist voor XBAP-apps vanwege beveiligingsrisico's. Invoegtoepassingen die XBAPs inschakelen, worden niet meer ondersteund. Zie Veelgestelde vragen over door de WPF-browser gehoste toepassingen (XBAP)voor meer informatie.

De Security-Critical Methodologie stelt de organisatie van WPF-code in staat om bevoegdheden te verhogen in beveiligingskritieke kernel, waarbij de rest transparant is. Door de beveiligingskritieke code te isoleren, richt het WPF-engineeringteam zich op een extra beveiligingsanalyse en broncodebeheer op de beveiligingskritieke kernel boven en buiten de standaardbeveiligingsprocedures (zie WPF-beveiligingsstrategie - Security Engineering).

Houd er rekening mee dat .NET Framework vertrouwde code toestaat om de sandbox van de XBAP-internetzone uit te breiden door ontwikkelaars toe te staan beheerde assembly's te schrijven die zijn gemarkeerd met AllowPartiallyTrustedCallersAttribute (APTCA) en geïmplementeerd in de Global Assembly Cache (GAC) van de gebruiker. Het markeren van een assembly met APTCA is een zeer gevoelige beveiligingsbewerking, aangezien het elke code, inclusief kwaadaardige code van het internet, toestaat die assembly aan te roepen. Extreme voorzichtigheid en best practices moeten worden gebruikt wanneer ze dit doen en gebruikers moeten ervoor kiezen om die software te vertrouwen om deze te kunnen installeren.

Microsoft Internet Explorer-beveiliging

Naast het verminderen van beveiligingsproblemen en het vereenvoudigen van de beveiligingsconfiguratie, bevat Microsoft Internet Explorer 6 (SP2) verschillende functies die de beveiliging verbeteren voor gebruikers van XAML-browsertoepassingen (XBAPs). De kracht van deze functies probeert gebruikers meer controle te geven over hun surfervaring.

Waarschuwing

XBAPs vereisen dat verouderde browsers werken, zoals Internet Explorer en oude versies van Firefox. Deze oudere browsers worden meestal niet ondersteund in Windows 10 en Windows 11. Moderne browsers bieden geen ondersteuning meer voor de technologie die is vereist voor XBAP-apps vanwege beveiligingsrisico's. Invoegtoepassingen die XBAPs inschakelen, worden niet meer ondersteund. Zie Veelgestelde vragen over door de WPF-browser gehoste toepassingen (XBAP)voor meer informatie.

Vóór IE6 SP2 kunnen gebruikers aan een van de volgende voorwaarden onderworpen zijn:

  • Willekeurige pop-upvensters.

  • Verwarrende scriptdoorverwijzing.

  • Talrijke beveiligingsdialoogvensters op sommige websites.

In sommige gevallen proberen onbetrouwbaar websites gebruikers te misleiden door de gebruikersinterface (UI) van de installatie te spoofen of herhaaldelijk een Microsoft ActiveX-installatiedialoogvenster weer te geven, ook al heeft de gebruiker het mogelijk geannuleerd. Door deze technieken te gebruiken, is het mogelijk dat een aanzienlijk aantal gebruikers is misleid om slechte beslissingen te nemen die het gevolg waren van de installatie van spywaretoepassingen.

IE6 SP2 bevat verschillende functies om dit soort problemen te beperken, die betrekking hebben op het concept van gebruikersinitiatie. IE6 SP2 detecteert wanneer een gebruiker vóór een actie op een koppeling of pagina-element heeft geklikt. Dit wordt ook wel gebruikersinitiatiegenoemd, en behandelt deze anders dan wanneer een vergelijkbare actie wordt geactiveerd door het script op een pagina. IE6 SP2 bevat bijvoorbeeld een Pop-Up Blocker- die detecteert wanneer een gebruiker op een knop klikt voordat de pagina een pop-upvenster maakt. Hierdoor kan IE6 SP2 de meeste onschuldige pop-ups toestaan, terwijl pop-ups worden voorkomen die gebruikers niet vragen of willen. Geblokkeerde pop-ups vallen onder de nieuwe Informatiebalk, waardoor de gebruiker het blok handmatig kan omzeilen en het pop-upvenster kan bekijken.

Dezelfde logica voor gebruikersinitiatie wordt ook toegepast op Openen/ beveiligingsprompts opslaan. ActiveX-installatiedialoogvensters worden altijd onder de informatiebalk geplaatst, tenzij ze een upgrade van een eerder geïnstalleerde control vertegenwoordigen. Deze maatregelen combineren om gebruikers een veiligere, meer gecontroleerde gebruikerservaring te bieden omdat ze worden beschermd tegen sites die hen lastig vallen om ongewenste of schadelijke software te installeren.

Deze functies beschermen klanten die IE6 SP2 gebruiken om te bladeren naar websites waarmee ze WPF-toepassingen kunnen downloaden en installeren. Dit komt met name doordat IE6 SP2 een betere gebruikerservaring biedt die de kans vermindert dat gebruikers schadelijke of onwillige toepassingen installeren, ongeacht welke technologie is gebruikt om deze te bouwen, waaronder WPF. WPF voegt deze beveiligingen toe met behulp van ClickOnce om het downloaden van de toepassingen via internet te vergemakkelijken. Omdat XBAPs (XAML-browsertoepassingen) worden uitgevoerd in een sandbox voor internetzonebeveiliging, kunnen ze naadloos worden gestart. Aan de andere kant vereisen zelfstandige WPF-toepassingen volledig vertrouwen om uit te voeren. Voor deze toepassingen geeft ClickOnce tijdens het startproces een beveiligingsdialoogvenster weer om de gebruiker te informeren over de aanvullende beveiligingsvereisten van de toepassing. Dit moet echter door de gebruiker worden geïnitieerd, wordt ook beheerd door door de gebruiker geïnitieerde logica en kan worden geannuleerd.

Internet Explorer 7 omvat en breidt de beveiligingsmogelijkheden van IE6 SP2 uit als onderdeel van een doorlopende toezegging voor beveiliging.

Zie ook