Sårbarhetsskyddsreferens

Gäller för:

Vill du uppleva Microsoft Defender för Endpoint? Registrera dig för en kostnadsfri utvärderingsversion.

Sårbarhetsskydd ger avancerat skydd för program som IT Pro kan använda efter att utvecklaren har kompilerat och distribuerat programvaran.

Den här artikeln hjälper dig att förstå hur sårbarhetsskydd fungerar, både på principnivå och på enskild minskningsnivå, så att du kan skapa och tillämpa sårbarhetsskyddsprinciper.

Hur minskningar tillämpas

Minskningar av sårbarhetsskydd tillämpas per program.

Åtgärder konfigureras via en registerpost för varje program som du konfigurerar skydd för. De här inställningarna lagras i registerposten Minskningsalternativ för varje program (HKEY_LOCAL_MACHINE\ PROGRAMVARA\Microsoft\Windows NT\CurrentVersion\Image File Execution Options*ImageFileName\MitigationOptions*). De börjar gälla när du startar om programmet och gäller tills du ändrar dem och startar om programmet igen.

Viktigt

Med Alternativ för filkörning kan du bara ange ett filnamn eller en sökväg, och inte ett versionsnummer, en arkitektur eller någon annan typ av information. Var noga med att rikta åtgärder till program som har unika namn eller sökvägar, och använd dem bara på enheter där du har testat den versionen och den arkitekturen för programmet.

Om du konfigurerar åtgärder mot sårbarhetsskydd med hjälp av en XML-konfigurationsfil, antingen via PowerShell, Group Policy eller MDM, kommer enskilda registerinställningar att konfigureras åt dig när den här XML-konfigurationsfilen bearbetas.

När principen som distribuerar XML-filen inte längre tillämpas tas inte inställningar som distribueras av den här XML-konfigurationsfilen bort automatiskt. För att ta bort inställningarna för sårbarhetsskydd exporterar du XML-konfigurationen från en ren Windows 10 eller Windows 11 och distribuerar den här nya XML-filen. Alternativt tillhandahåller Microsoft en XML-fil som en del av Windows-säkerhet grundläggande inställningar för återställning av sårbarhetsskydd.

Om du vill återställa inställningarna för sårbarhetsskydd med hjälp av PowerShell kan du använda följande kommando:

Set-ProcessMitigation -PolicyFilePath EP-reset.xml

Följande är EP-reset.xml distribueras med Windows-säkerhet baslinjer:

<?xml version="1.0" encoding="UTF-8"?>
<MitigationPolicy>
  <AppConfig Executable="ONEDRIVE.EXE">
    <DEP OverrideDEP="false" />
    <ASLR OverrideRelocateImages="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
    <ImageLoad OverrideBlockRemoteImages="false" />
  </AppConfig>
  <AppConfig Executable="firefox.exe">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
  </AppConfig>
  <AppConfig Executable="fltldr.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
    <ImageLoad OverrideBlockRemoteImages="false" />
    <ChildProcess OverrideChildProcess="false" />
  </AppConfig>
  <AppConfig Executable="GROOVE.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
    <ImageLoad OverrideBlockRemoteImages="false" />
    <ChildProcess OverrideChildProcess="false" />
  </AppConfig>
  <AppConfig Executable="Acrobat.exe">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="AcroRd32.exe">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="chrome.exe">
    <DEP OverrideDEP="false" />
  </AppConfig>
  <AppConfig Executable="EXCEL.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="iexplore.exe">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="INFOPATH.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="java.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="javaw.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="javaws.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="LYNC.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="MSACCESS.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="MSPUB.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="OIS.EXE">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="OUTLOOK.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="plugin-container.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="POWERPNT.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="PPTVIEW.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="VISIO.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="VPREVIEW.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="WINWORD.EXE">
    <DEP OverrideDEP="false" />
    <ASLR ForceRelocateImages="true" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="wmplayer.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
  <AppConfig Executable="wordpad.exe">
    <DEP OverrideDEP="false" />
    <Payload OverrideEnableExportAddressFilter="false" OverrideEnableExportAddressFilterPlus="false" OverrideEnableImportAddressFilter="false" OverrideEnableRopStackPivot="false" OverrideEnableRopCallerCheck="false" OverrideEnableRopSimExec="false" />
  </AppConfig>
</MitigationPolicy>

Minskningsreferens

I följande avsnitt beskrivs de skydd som tillhandahålls av varje minskning av sårbarhetsskydd, kompatibilitetsöverväganden för minskningar och tillgängliga konfigurationsalternativ.

Godtyckligt kodskydd

Beskrivning

Godtycklig kodskydd skyddar mot en skadlig attack som läser in valfri kod i minnet via ett minneshål och möjlighet att köra koden.

Skydd mot godtycklig kod skyddar ett program från att köra dynamiskt genererad kod (kod som inte läses in, till exempel från själva exe eller en dll). Godtyckligt kodskydd fungerar genom att förhindra att minnet markeras som körbart. När ett program försöker tilldela minne kontrollerar vi skyddsflaggor. (Minnet kan tilldelas med flaggor för läsning, skrivning och/eller skydd.) Om tilldelningen försöker inkludera flaggan för att utföra skydd misslyckas minnestilldelningen och returnerar en felkod (som STATUS_DYNAMIC_CODE_BLOCKED). På samma sätt misslyckas behörighetsändringen och returnerar en felkod (STATUS_DYNAMIC_CODE_BLOCKED) om ett program försöker ändra skyddsflaggor som redan har tilldelats och innehåller en STATUS_DYNAMIC_CODE_BLOCKED.

Genom att förhindra att flaggan kör anges kan dataexekveringsskyddsfunktionen i Windows 10 och Windows 11 sedan skydda mot att instruktionspekaren ställs in på minnet och kör koden.

Överväganden för kompatibilitet

Godtyckligt kodskydd förhindrar att du allokerar eventuellt minne som körbart, vilket ger ett kompatibilitetsproblem med metoder som JIT-kompilatorer (Just-in-Time). De flesta moderna webbläsare kompilerar till exempel JavaScript i inbyggd kod för att optimera prestanda. För att stödja den här begränsningen måste de åtgärdas på nytt för att flytta JIT-kompileringen utanför den skyddade processen. Andra program vars design dynamiskt genererar kod från skript eller andra mellanliggande språk är på liknande sätt inkompatibla med den här begränsningen.

Konfigurationsalternativ

Tillåt avanmälning av tråd – Du kan konfigurera åtgärder så att en enskild tråd kan avanmäla sig från det här skyddet. Utvecklaren måste ha skrivit programmet med information om den här begränsningen och har anropat SETThreadInformation API med parametern ThreadInformation inställd på ThreadDynamicCodePolicy för att kunna köra dynamisk kod i den här tråden.

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Defender för slutpunkt.

Blockera bilder med låg integritet

Beskrivning

Blockera bilder med låg integritet förhindrar att programmet läser in filer som inte är betrodda, oftast eftersom de har laddats ned från Internet från en webbläsare i begränsat läge.

Den här begränsningen blockerar bildin läses in om bilden har en Access Control Entry (ACE) som beviljar åtkomst till processer med låg IL och som inte har en betrodd etikett ACE. Den implementeras av minneshanteraren, som blockerar filen från att mappas till minnet. Om ett program försöker mappa en bild med låg integritet utlöser det STATUS_ACCESS_DENIED fel. Mer information om hur integritetsnivåer fungerar finns i Obligatorisk integritetskontroll.

Överväganden för kompatibilitet

Bilder med låg integritet hindrar programmet från att läsa in filer som har laddats ned från Internet. Om programarbetsflödet kräver inläsning av bilder som laddas ned bör du se till att de laddas ned från en process med högre förtroende eller uttryckligen har ometiketterats för att tillämpa den här begränsningen.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Blockera fjärrbilder

Beskrivning

Att blockera fjärrbilder hjälper till att förhindra att programmet läser in filer som finns på en fjärrenhet, till exempel en UNC-delning. Att blockera fjärrbilder skyddar mot inläsning av binärfiler i minne som finns på en extern enhet som kontrolleras av attackeraren.

Den här begränsningen blockerar bildbelastningar om bilden bestäms på en fjärrenhet. Den implementeras av minneshanteraren, som blockerar filen från att mappas till minnet. Om ett program försöker mappa en fjärrfil utlöses ett STATUS_ACCESS_DENIED fel.

Överväganden för kompatibilitet

Blockera fjärrbilder hindrar programmet från att läsa in bilder från fjärrenheter. Om programmet läser in filer eller plugin-program från fjärrenheter är det inte kompatibelt med den här begränsningen.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Blockera teckensnitt som inte är betrodda

Beskrivning

Blockera icke betrodda teckensnitt minskar risken för ett svagheter i teckensnitts parsningen som leder till att attackeraren kan köra kod på enheten. Endast teckensnitt som installeras i windows\fonts-katalogen läses in för bearbetning av GDI.

Den här begränsningen implementeras i GDI, som validerar filens plats. Om filen inte finns i systemteckensnittskatalogen läses inte teckensnittet in för tolkning och anropet misslyckas.

Den här minskningar följer den inbyggda minskning som ingår i Windows 10 1607 och senare, och Windows 11, som flyttar teckensnittsparsning från kerneln och till en appbehållare i användarläge. Sårbarheter baserade på teckensnitts parsing sker därför i begränsat och isolerat sammanhang, vilket minskar risken avsevärt. Mer information om den här begränsningen finns i bloggen Windows 10 med sårbarheter under nolldagar.

Överväganden för kompatibilitet

Den vanligaste användningen av teckensnitt utanför systemkatalogen för teckensnitt är med webbteckensnitt. Moderna webbläsare, till exempel Microsoft Edge, använder DirectWrite i stället för GDI och påverkas inte. Äldre webbläsare, till exempel Internet Explorer 11 (och IE-läge i nya Microsoft Edge) kan dock påverkas, särskilt program som Office 365 som använder teckensnittsglyf för att visa användargränssnittet.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Kodintegritetsskydd

Beskrivning

Kodintegritetsskydd ser till att alla binärfiler som läses in i en process signeras digitalt av Microsoft. Kodintegritetsskydd inkluderar signaturer för WHQL (Windows Hardware Quality Labs), som gör att VAQL-godkända drivrutiner kan köras i processen.

Den här begränsningen implementeras i minneshanteraren, vilket blockerar den binära binärfunktionen från att mappas till minnet. Om du försöker läsa in en binär fil som inte är signerad av Microsoft returnerar minnesmanger ett STATUS_INVALID_IMAGE_HASH. Genom att blockera på minneshanterarens nivå förhindrar detta båda binärfiler som läses in av processen och binärfiler som matas in i processen.

Överväganden för kompatibilitet

Den här begränsningen blockerar specifikt alla binära filer som inte har signerats av Microsoft. Därför är det inte kompatibelt med de flesta tredjepartsprogram, såvida inte programvaran distribueras av (och digitalt signeras av) Microsoft Store, och alternativet att tillåta inläsning av bilder signerade av Microsoft Store är markerat.

Konfigurationsalternativ

Tillåt även inläsning av bilder signerade av Microsoft Store – Program som distribueras av Microsoft Store kommer att signeras digitalt av Microsoft Store, och om du lägger till den här konfigurationen kan binärfiler som har gått genom lagercertifieringsprocessen läsas in i programmet.

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Kontrollflödesskydd (CFG)

Beskrivning

CfG (Control Flow Guard) minimerar risken för attacker med hjälp av säkerhetsproblem med minnesfel genom att skydda indirekt funktionsanrop. En attackerare kan till exempel använda en minnesbuffert för att skriva över minne som innehåller en funktionspekare och ersätta funktionspekaren med en pekare till valfri körbar kod (som också kan ha matats in i programmet).

Den här begränsningen tillhandahålls genom att mata in en annan kontroll på kompileringstiden. Innan varje indirekt funktionsanrop läggs till, läggs ytterligare instruktioner till som verifierar att målet är ett giltigt samtalsmål innan det anropas. Om målet inte är ett giltigt samtalsmål avslutas programmet. Därför kan endast program som sammanställs med CFG-stöd dra nytta av den här begränsningen.

Kontrollen av ett giltigt mål tillhandahålls av Windows kernel. När körbara filer läses in extraheras metadata för indirekta samtalsmål vid inläsningstid och markeras som giltiga samtalsmål. När minne tilldelas och markeras som körbar (till exempel för genererad kod) markeras även dessa minnesplatser som giltiga samtalsmål, för att stödja mekanismer som JIT-kompilering.

Överväganden för kompatibilitet

Eftersom programmen måste kompileras för att stödja CFG deklareras de implicit med sin kompatibilitet med den. De flesta program bör därför arbeta med den här minskning som aktiverats. Eftersom dessa kontroller sammanställs i den binära frågan är den konfiguration du kan använda bara för att inaktivera kontroller inom Windows kernel. Minskningar är med andra ord på standardinställningen, men du kan konfigurera Windows-kerneln så att den alltid returnerar "ja" om du senare upptäcker att det finns ett kompatibilitetsproblem som programutvecklaren inte upptäckte i sina tester, vilket skulle vara ovanligt.

Konfigurationsalternativ

Använd strikt CFG – I strikt läge måste alla binärfiler som lästs in i processen kompileras för Control Flow Guard (eller ha ingen körbar kod i dem – till exempel resurs-DLL:er) för att kunna läsas in.

Anteckning

Kontrollflödesskydd har inget granskningsläge. Binärfiler sammanställs med den här minskning aktiverad.

Dataexekveringsskydd (DEP)

Beskrivning

Skydd mot datakörning förhindrar att minne som inte uttryckligen tilldelats som körbart körs. DEP hjälper till att skydda mot en attackerare som matar in skadlig kod i processen, till exempel genom ett buffertöverflöde, och kör sedan koden.

Om du försöker ställa in instruktionspekaren till en minnesadress som inte är markerad som körbar får processorn ett undantag (allmän säkerhetsöverträdelse), vilket gör att programmet kraschar.

Överväganden för kompatibilitet

Alla körbara x64-, ARM- och ARM-64-filer har DEP aktiverat som standard och kan inte inaktiveras. Eftersom ett program aldrig har körts utan DEP förutsätts kompatibilitet.

Alla 32-bitars binärvärden (x86) har DEP aktiverat som standard, men DEP kan inaktiveras per process. Vissa äldre program, vanligtvis program som utvecklats tidigare än Windows XP SP2, kanske inte är kompatibla med DEP. Sådana program genererar vanligtvis kod dynamiskt (till exempel JIT-kompilerar) eller länkar till äldre bibliotek (till exempel äldre versioner av ATL) som dynamiskt genererar kod.

Konfigurationsalternativ

Enable ATL Thunk emulation – This configuration option disables ATL Thunk emulation. ATL, ActiveX, har utformats för att vara så litet och snabbt som möjligt. För att minska den binära storleken skulle den använda en teknik som kallas thunking. Thunking är vanligtvis tänkt på att interagera mellan 32-bitars och 16-bitars program, men det finns inga 16-bitarskomponenter till ATL här. För att i stället optimera för binär storlek lagrar ATL maskinkod i minnet som inte är ordjusterad (vilket skapar en mindre binär), och anropar sedan koden direkt. ATL-komponenter som har kompilerats med Visual Studio 7.1 eller tidigare (Visual Studio 2003) allokerar inte det här minnet som körbart - thunk emulation löser kompatibilitetsproblemet. Program som har en binär förlängningsmodell (till exempel Internet Explorer 11) måste ofta ha ATL Thunk-utökning aktiverad.

Inaktivera tilläggspunkter

Beskrivning

Den här begränsningen inaktiverar olika tilläggspunkter för ett program, som kan användas för att upprätta bestående eller förhöjda behörigheter för skadligt innehåll.

Detta omfattar följande:

  • AppInit DLL-filer – När en process startar läser systemet in den angivna DLL-filen i kontexten för den nyligen startade processen innan dess startpunktsfunktion anropas. Information om AppInit DLL-filer finns här. Med den här minskningen används inte URL-filer för AppInit. Från och med Windows 7 måste AppInit-DLL-filer signeras digitalt, enligt beskrivningen här. Från och med Windows 8 inte AppInit DLL-filer om SecureBoot är aktiverat, enligt beskrivningen här.
  • Äldre snabbmeddelanden – Med en IME (Input Method Editor) kan en användare skriva text på ett språk med fler tecken än vad som kan representeras på ett tangentbord. Tredje part kan skapa snabbmeddelanden. En skadlig IME kan erhålla autentiseringsuppgifter eller annan känslig information från den här indatainspelningen. Vissa snabbmeddelanden, så kallade äldre snabbmeddelanden, fungerar bara på Windows skrivbordsappar och inte i UWP-appar. Den här begränsningen förhindrar också att den äldre IME:en läses in i det Windows skrivbordsappen.
  • Windows Event Hooks – ett program kan anropa API:t SetWinEventHook för att registrera intresse för en händelse. En DLL anges och kan matas in i processen. Den här minskningen tvingar haken att publiceras till registreringsprocessen i stället för att köras i processen via en matad DLL.

Överväganden för kompatibilitet

De flesta av dessa tilläggspunkter används relativt sällan, så kompatibilitetseffekterna är i regel små, särskilt på enskilda programnivå. Den enda frågan är om användarna använder äldre snabbmeddelanden från tredje part som inte fungerar med det skyddade programmet.

Konfigurationsalternativ

Det finns inga konfigurationsalternativ för den här begränsningen.

Anteckning

Det finns inget granskningsläge för inaktivera tilläggspunkter.

Inaktivera Win32k-systemanrop

Beskrivning

Win32k.sys ger en bred attackyta för en attackerare. Som kernel-läge-komponent används den ofta som en escape-vektor för program som är begränsade i begränsat läge. Den här begränsningen förhindrar anrop till win32k.sys genom att blockera en tråd från att konvertera sig själv till en GUI-tråd, som sedan får åtkomst till Win32k-funktioner. En tråd är icke-GUI när den skapas, men konverteras vid första anrop till win32k.sys, eller via ett API-anrop till IsGuiThread.

Överväganden för kompatibilitet

Den här begränsningen är avsedd för processer som är dedikerade icke-användargränssnittsprocesser. Många moderna webbläsare använder till exempel processisolering och använder processer som inte har med användargränssnittet att göra. Alla program som visar ett GUI med en enda process kommer att påverkas av den här begränsningen.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Tillåt inte underprocesser

Beskrivning

Den här begränsningen förhindrar att ett program skapar nya underordnade program. En vanlig metod som används av adversaries är att initiera en betrodd process på enheten med skadliga indata (en attack som "lever på landet" ), som ofta kräver att ett annat program startas på enheten. Om det inte finns några legitima skäl till att ett program skulle starta en underordnad process, minimerar denna minskning den potentiella attackvektorn. Minskning tillämpas genom att ange en egenskap för processtoken, som blockerar skapandet av en token för den underordnade processen med felmeddelandet STATUS_CHILD_PROCESS_BLOCKED.

Överväganden för kompatibilitet

Om programmet startar underordnade program av någon anledning, till exempel för hyperlänkar som startar en webbläsare eller en extern webbläsare, eller som startar andra verktyg på datorn, fungerar den här funktionen inte som den här begränsningen.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Exportera adressfiltrering

Beskrivning

Export address filtering (EAF) mitigates the risk of malicious code looking at the export address table of all loaded modules to find modules that contain useful APIIs for their attack. Detta är en vanlig taktik som används av shellcode. För att minimera risken för en sådan attack skyddar den här minskning tre vanliga fallande moduler:

  • ntdll.dll
  • kernelbase.dll
  • kernel32.dll

Minskningar skyddar minnessidan i [exportkatalogen som pekar på exportadresstabellen. Den här minnessidan har PAGE_GUARD det skydd som används. När någon försöker komma åt det här minnet genereras en STATUS_GUARD_PAGE_VIOLATION. Begränsningshandtagen för det här undantaget och om instruktionen om åtkomst inte valideras avslutas processen.

Överväganden för kompatibilitet

Den här begränsningen är främst ett problem för program som felsökning, begränsade program, program som använder DRM eller program som implementerar teknik för felsökning.

Konfigurationsalternativ

Validera åtkomst för moduler som ofta utnyttjas av sårbarheter – Det här alternativet, som även kallas EAF+, ger skydd för andra moduler som ofta anar:

  • mshtml.dll
  • flash*.ocx
  • jscript*.ocx
  • vbscript.dll
  • vgx.dll
  • mozjs.dll
  • xul.dll
  • acrord32.dll
  • acrofx32.dll
  • acroform.api

Genom att aktivera EAF+ lägger den här begränsningen dessutom till PAGE_GUARD-skyddet på sidan som innehåller rubriken "MZ", de två första bytena av DOS-huvudet i en PE-fil, som är en annan del av det kända minnesinnehållet som shellcode kan leta efter för att identifiera moduler som kan vara intressanta i minnet.

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Framtvinga slumpmässighet för bilder (obligatorisk ASLR)

Beskrivning

ASLR (Address Space Layout Randomization) minimerar risken för en attacker genom att använda sin kunskap om systemets minneslayout för att köra kod som redan finns i processminnet och som redan har markerats som körbar. Detta kan minimera risken för en attackerare med hjälp av tekniker som return-to-libc-attacker, där adversaryen anger kontext och sedan ändrar returadressen för att köra befintlig kod med kontext som passar adversarys syfte.

Obligatorisk ASLR tvingar en ombasning av alla DLL-filer i processen. En utvecklare kan aktivera ASLR med hjälp av länkalternativet /DYNAMICBASE , och problemet har samma effekt.

När minneshanteraren mappas i bilden till processen återbasar obligatorisk ASLR dll-filer och EXES-filer som inte har valt ASLR. Observera dock att den här omgrundningen inte är pålitlig och kan därför placeras på en förutsägbar plats i minnet. För rebased och randomiserad plats för binärfiler bör den här minskningen paras ihop med Randomize minnestilldelningar (ASLR nedifrån och upp).

Överväganden för kompatibilitet

Den här kompatibilitetseffekterna av ASLR är vanligtvis begränsad till äldre program som skapats med hjälp av kompilatorer som gjorde antaganden om basadressen för en binär fil eller har rensat ut basdetaljinformation. Det kan leda till oförutsägbara fel när körningsflödet försöker hoppa till det förväntade stället för den faktiska platsen i minnet.

Konfigurationsalternativ

Tillåt inte bortskalade bilder – Det här alternativet blockerar inläsning av bilder som har rensat den här informationen. I Windows PE-filformatet finns absoluta adresser, och kompilatorn genererar också en [bastabell som inläsaren kan använda för att hitta alla relativa minnesreferenser och deras förskjutning, så att de kan uppdateras om den binära informationen inte läses in vid den önskade basadressen. Vissa äldre program tar bort den här informationen i produktions versioner och därför kan de här binärfilerna inte byggas om. I sådana åtgärder blockeras sådana binärfiler från att läsas in (i stället för att de kan läsas in på önskad basadress).

Anteckning

Tvinga slumpmässiga bilder (obligatorisk ASLR) har inget granskningsläge.

IAF (Import address filtering)

Beskrivning

Minskningar av importadressfiltrering (IAF) bidrar till att minska risken för att ett adversaryt ändrar kontrollflödet i ett program genom att ändra importadresstabellen (IAT) för att omdirigera till godtycklig kod för attackerarens val när den funktionen anropas. En attackerare kan använda den här metoden för att kapa kontrollen, eller för att snappa upp, kontrollera och potentiellt blockera samtal till känsliga API:er.

Minnessidorna för alla skyddade API:er har PAGE_GUARD skydda dem. När någon försöker komma åt det här minnet genereras en STATUS_GUARD_PAGE_VIOLATION. Begränsningshandtagen för det här undantaget och om instruktionen om åtkomst inte valideras avslutas processen.

Den här begränsningen skyddar följande Windows API:er:

  • GetProcAddress
  • GetProcAddressForCaller
  • LoadLibraryA
  • LoadLibraryExA
  • LoadLibraryW
  • LoadLibraryExW
  • LdrGetProcedureAddress
  • LdrGetProcedureAddressEx
  • LdrGetProcedureAddressForCaller
  • LdrLoadDll
  • VirtualProtect
  • VirtualProtectEx
  • VirtualAlloc
  • VirtualAllocEx
  • NtAllocateVirtualMemory
  • NtProtectVirtualMemory
  • CreateProcessA
  • CreateProcessW
  • WinExec
  • CreateProcessAsUserA
  • CreateProcessAsUserW
  • GetModuleHandleA
  • GetModuleHandleW
  • RtlDecodePointer
  • DecodePointer

Överväganden för kompatibilitet

Legitima program som utför API-avskärning kan upptäckas av den här begränsningen och orsaka att vissa program kraschar. Det finns till exempel säkerhetsprogramvara och programkompatibilitet.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Slumpmässiga minnestilldelningar (Nedifrån och upp ASLR)

Beskrivning

Slumpmässiga minnestilldelningar (Nedifrån och upp-ASLR) lägger till enkanten i målplatserna, så att deras plats slumpmässigt blir mer slumpmässig och därför mindre förutsägbar. Den här begränsningen kräver att obligatorisk ASLR verkställs.

Storleken på 32-bitarsadressutrymmet innebär att du måste lägga till praktiska begränsningar för den uppil som kan läggas till, och därför blir det svårare för en attackerare att gissa sig till en plats i minnet, vilket gör det svårare för en attackerare att gissa sig till en plats i minnet.

Överväganden för kompatibilitet

De flesta program som är kompatibla med Obligatorisk ASLR (rebasing) är också kompatibla med den andra uppifrån och upp-ASLR. Vissa program kan ha problem med pekarens trunkering om de sparar lokala pekare i 32-bitarsvariabler (om en basadress förväntas under 4 GB), och det innebär att det inte är kompatibelt med alternativet hög enfot (som kan inaktiveras).

Konfigurationsalternativ

Använd inte hög enpatisk – det här alternativet inaktiverar användningen av hög enaktivering ASLR, vilket lägger till 24 bitar av en kantiga (1 TB varians) i botten uppallokeringen för 64-bitarsprogram.

Anteckning

Randomisera minnestilldelningar (Nedifrån och upp ASLR) har inget granskningsläge.

Simulera körning (SimExec)

Beskrivning

Simulera körning (SimExec) är en minskning av endast 32-bitarsprogram. Det här hjälper till att verifiera att anrop till känsliga API:er återgår till legitima uppringningsfunktioner. Det gör detta genom att avlyssa anrop till känsliga API:er och sedan simulera körningen av dessa API:er genom att gå igenom de kodade sammansättningens språkinstruktioner, som bör återkomma till den som ringer. Sedan inspekteras den funktionen och går bakåt i minnet för att hitta föregående SAMTAL-instruktion för att avgöra om funktionen och ANROPA-instruktionen matchar, och att RET-instruktionen inte har skärningspunkt.

API:erna som snappas upp av den här begränsningen är:

  • LoadLibraryA
  • LoadLibraryW
  • LoadLibraryExA
  • LoadLibraryExW
  • LdrLoadDll
  • VirtualAlloc
  • VirtualAllocEx
  • NtAllocateVirtualMemory
  • VirtualProtect
  • VirtualProtectEx
  • NtProtectVirtualMemory
  • HeapCreate
  • RtlCreateHeap
  • CreateProcessA
  • CreateProcessW
  • CreateProcessInternalA
  • CreateProcessInternalW
  • NtCreateUserProcess
  • NtCreateProcess
  • NtCreateProcessEx
  • CreateRemoteThread
  • CreateRemoteThreadEx
  • NtCreateThreadEx
  • WriteProcessMemory
  • NtWriteVirtualMemory
  • WinExec
  • CreateFileMappingA
  • CreateFileMappingW
  • CreateFileMappingNumaW
  • NtCreateSection
  • MapViewOfFile
  • MapViewOfFileEx
  • MapViewOfFileFromApp
  • LdrGetProcedureAddressForCaller

Om en ROP-gadget upptäcks avslutas processen.

Överväganden för kompatibilitet

Program som utför API-avlyssning, särskilt säkerhetsprogramvara, kan orsaka kompatibilitetsproblem med den här begränsningen.

Den här minskningar är inkompatibla med minskning av Arbitrary Code Guard.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Verifiera API-anrop (CallerCheck)

Beskrivning

Verifiera API-anrop (CallerCheck) är en minskning av ROP-tekniker (Return-oriented Programming) som verifierar att känsliga API:er anropades från en giltig anropare. Minskningarna kontrollerar den godkända avsändaradressen och delar sedan upp samtalet bakåt för att fastställa om samtalsmålet matchar parametern som har passerat funktionen.

API:erna som snappas upp av den här begränsningen är:

  • LoadLibraryA
  • LoadLibraryW
  • LoadLibraryExA
  • LoadLibraryExW
  • LdrLoadDll
  • VirtualAlloc
  • VirtualAllocEx
  • NtAllocateVirtualMemory
  • VirtualProtect
  • VirtualProtectEx
  • NtProtectVirtualMemory
  • HeapCreate
  • RtlCreateHeap
  • CreateProcessA
  • CreateProcessW
  • CreateProcessInternalA
  • CreateProcessInternalW
  • NtCreateUserProcess
  • NtCreateProcess
  • NtCreateProcessEx
  • CreateRemoteThread
  • CreateRemoteThreadEx
  • NtCreateThreadEx
  • WriteProcessMemory
  • NtWriteVirtualMemory
  • WinExec
  • CreateFileMappingA
  • CreateFileMappingW
  • CreateFileMappingNumaW
  • NtCreateSection
  • MapViewOfFile
  • MapViewOfFileEx
  • MapViewOfFileFromApp
  • LdrGetProcedureAddressForCaller

Om en ROP-gadget upptäcks avslutas processen.

Överväganden för kompatibilitet

Program som utför API-avlyssning, särskilt säkerhetsprogramvara, kan orsaka kompatibilitetsproblem med den här begränsningen.

Den här minskningar är inkompatibla med minskning av Arbitrary Code Guard.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Verifiera undantagskedjor (SEHOP)

Beskrivning

Verifiera undantagskedjor (SEHOP) är en minskning mot SEH (Structured Exception Handler) överskrivningsteknik . Strukturerad undantagshantering är den process som ett program kan be att ta hand om ett visst undantag. Undantagshanterare är kedjehanterare så att om en undantagshanterare väljer att inte hantera ett visst undantag kan det skickas till nästa undantagshanterare i kedjan tills det är en som bestämmer sig för att hantera det. Eftersom listan med hanterare är dynamisk lagras den i stapeln. En attackerare kan använda ett stack overflow-sårbarhet för att sedan skriva över undantagshanteraren med en pekare till valfri kod för attackeraren.

Den här begränsningen beror på utformningen av SEH, där varje SEH-post innehåller både en pekare till undantagshanteraren och en pekare till nästa hanterare i undantagskedjan. Den här begränsningen anropas av undantagscentralen, som verifierar SEH-kedjan när ett undantag anropas. Det verifierar att:

  • Alla poster i undantagskedjan ligger inom stack-gränserna
  • Alla undantagsposter justeras
  • Pekare utan undantag pekar på högen
  • Det finns inga bakåtpekare
  • Undantagskedjan slutar vid en känd slutlig undantagshanterare

Om de här valideringarna misslyckas avbryts undantagshanteringen och undantaget hanteras inte.

Överväganden för kompatibilitet

Kompatibilitetsproblem med SEHOP är relativt sällsynta. Det är ovanligt att ett program tar ett beroende av att skada undantagskedjan. Men vissa program påverkas av diskreta ändringar i tidsinställningen, som kan visa sig som ett tävlingsvillkor som visar en sen trådande bugg i programmet.

Konfigurationsalternativ

Anteckning

Verifiera undantagskedjor (SEHOP) har inget granskningsläge.

Verifiera referensanvändning

Beskrivning

Verifiera användning av handtag är en minskning som hjälper till att skydda mot en attackerare med hjälp av ett befintligt handtag för att komma åt ett skyddat objekt. Ett handtag är en referens till ett skyddat objekt. Om programkoden refererar till ett ogiltigt handtag, kan det bero på att ett adversaryt försöker använda ett handtag som det har spelats in tidigare (men vilka programreferenser som inte räknas) Om programmet försöker använda ett ogiltigt objekt, i stället för att bara returnera null, kommer programmet att ta upp ett undantag (STATUS_INVALID_HANDLE).

Den här begränsningen tillämpas automatiskt på Windows Store-program.

Överväganden för kompatibilitet

Program som inte korrekt hanterar referenser och som inte radsluter dessa åtgärder i undantagshanterare kommer potentiellt att påverkas av den här begränsningen.

Konfigurationsalternativ

Anteckning

Verifieringshandtagsanvändning har inget granskningsläge.

Verifiera integritet för heap

Beskrivning

Minskningar av validera heapintegritet ökar skyddsnivån för heap-minskningar i Windows, genom att orsaka att programmet avbryts om en heapfel upptäcks. Minskningar omfattar:

  • Förhindra att ett HEAP-handtag frigörs
  • Utföra en ytterligare validering för utökade blockeringsrubriker för heapallokeringar
  • Verifiera att heaptilldelningar inte redan är flaggade som i bruk
  • Lägga till skyddsidor till stora tilldelningar, heapsegment och undersegment som är större än en minsta storlek

Överväganden för kompatibilitet

Den här begränsningen är redan tillämpad som standard för 64-bitarsprogram och för 32-bitarsprogram som är Windows Vista eller senare. Äldre program från Windows XP eller tidigare är mest riskerade, men kompatibilitetsproblem är sällsynta.

Konfigurationsalternativ

Anteckning

Verifiera att heapintegritet inte har något granskningsläge.

Verifiera integritet för bildberoende

Beskrivning

Minskning av verifiera bildberoende hjälper till att skydda mot attacker som försöker ersätta kod för DLL-filer som statiskt länkas av Windows binärfiler. Den teknik som används för att DLL-växt upp missbrukar inläsarens sökmekanism för att mata in skadlig kod som kan användas för att köra skadlig kod i ett förhöjdt sammanhang. När inläsaren läser in en Windows signerad binär och sedan läser in alla dll-filer som den binära filen är beroende av, verifieras de här binärfilerna för att säkerställa att de även är digitalt signerade Windows binär. Om de misslyckas i signaturkontrollen laddas inte DLL-filen och ett undantag returneras och statusen för den STATUS_INVALID_IMAGE_HASH.

Överväganden för kompatibilitet

Kompatibilitetsproblem är ovanliga. Program som är beroende av att ersätta Windows binärfiler med lokala privata versioner kommer att påverkas, och det finns också en liten risk att visa diskreta tidsbuggar i flertrådade program.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.

Verifiera stackintegritet (StackPivot)

Beskrivning

Minskningar av StackPivot-stack-integritet (StackPivot) skyddar mot Stack Pivot-attack, en ROP-attack där en attack skapar en falsk hög i högminnet och hjälper sedan programmet att gå tillbaka till den falska stacken som styr flödet av körning.

Den här minskningsskärningspunkt Windows API:er och kontrollerar värdet för stack-pekaren. Om adressen till stack-pekaren inte faller mellan nederkanten och toppen av högen registreras en händelse och, om den inte är i granskningsläge, avslutas processen.

API:erna som snappas upp av den här begränsningen är:

  • LoadLibraryA
  • LoadLibraryW
  • LoadLibraryExA
  • LoadLibraryExW
  • LdrLoadDll
  • VirtualAlloc
  • VirtualAllocEx
  • NtAllocateVirtualMemory
  • VirtualProtect
  • VirtualProtectEx
  • NtProtectVirtualMemory
  • HeapCreate
  • RtlCreateHeap
  • CreateProcessA
  • CreateProcessW
  • CreateProcessInternalA
  • CreateProcessInternalW
  • NtCreateUserProcess
  • NtCreateProcess
  • NtCreateProcessEx
  • CreateRemoteThread
  • CreateRemoteThreadEx
  • NtCreateThreadEx
  • WriteProcessMemory
  • NtWriteVirtualMemory
  • WinExec
  • CreateFileMappingA
  • CreateFileMappingW
  • CreateFileMappingNumaW
  • NtCreateSection
  • MapViewOfFile
  • MapViewOfFileEx
  • MapViewOfFileFromApp
  • LdrGetProcedureAddressForCaller

Överväganden för kompatibilitet

Program som använder falska staplar kommer att påverkas och det finns också en liten risk att diskreta tidsbuggar visas i flertrådade program. Program som utför API-avlyssning, särskilt säkerhetsprogramvara, kan orsaka kompatibilitetsproblem med den här begränsningen.

Den här minskningar är inkompatibla med minskning av Arbitrary Code Guard.

Konfigurationsalternativ

Endast granskning – Du kan aktivera den här begränsningen i granskningsläget för att mäta den potentiella kompatibilitets påverkan på ett program. Granskningshändelser kan sedan visas antingen i händelsevisaren eller med avancerad sökning i Microsoft Defender för slutpunkt.