Share via


Referenz zum Exploit-Schutz

Gilt für:

Möchten Sie Microsoft Defender für Endpunkt ausprobieren? Registrieren Sie sich für eine kostenlose Testversion.

Exploit-Schutz bietet erweiterten Schutz für Anwendungen, die Unternehmensadministratoren und IT-Experten anwenden können, nachdem ein Entwickler Software kompiliert und verteilt hat.

In diesem Artikel erfahren Sie, wie Exploit-Schutz sowohl auf Richtlinienebene als auch auf individueller Ebene funktioniert, um Sie beim erfolgreichen Erstellen und Anwenden von Exploit-Schutzrichtlinien zu unterstützen.

Wie Minderungen angewendet werden

Exploit-Schutzminderungen werden pro Anwendung angewendet.

Schadensbegrenzungen werden über einen Registrierungseintrag für jedes Programm konfiguriert, für das Sie Schutzmaßnahmen konfigurieren. Diese Einstellungen werden im Registrierungseintrag MitigationOptions für jedes Programm (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\*ImageFileName*\MitigationOptions) gespeichert. Sie werden wirksam, wenn Sie das Programm neu starten, und bleiben wirksam, bis Sie sie ändern und das Programm erneut starten.

Wichtig

Mit den Optionen für die Ausführung von Bilddateien können Sie nur einen Dateinamen oder Pfad angeben und nicht eine Versionsnummer, Architektur oder andere Unterscheidungsmerkmale. Achten Sie darauf, Risikominderungen auf Apps mit eindeutigen Namen oder Pfaden auszurichten, und wenden Sie sie nur auf Geräten an, auf denen Sie diese Version und diese Architektur der Anwendung getestet haben.

Wenn Sie Exploit-Schutzminderungen mithilfe einer XML-Konfigurationsdatei mithilfe von PowerShell, Gruppenrichtlinie oder MDM konfigurieren, werden bei der Verarbeitung dieser XML-Konfigurationsdatei individuelle Registrierungseinstellungen für Sie konfiguriert.

Wenn die Richtlinie, die die XML-Datei verteilt, nicht mehr erzwungen wird, werden die von dieser XML-Konfigurationsdatei bereitgestellten Einstellungen nicht automatisch entfernt. Exportieren Sie zum Entfernen der Exploit-Schutzeinstellungen die XML-Konfiguration von einem sauberen Windows 10- oder Windows 11-Gerät und stellen Sie diese neue XML-Datei bereit. Alternativ stellt Microsoft eine XML-Datei als Teil der Windows Security Baselines zum Zurücksetzen der Exploit-Schutzeinstellungen bereit.

Verwenden Sie den folgenden Befehl, um Exploit-Schutzeinstellungen mithilfe von PowerShell zurückzusetzen:

Set-ProcessMitigation -PolicyFilePath EP-reset.xml

Es folgt die EP-reset.xml, die mit den Windows Security Baselines verteilt wird:

<?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>

Minderungsreferenz

In den folgenden Abschnitten werden die Schutzmaßnahmen, die von jeder Exploit-Schutzminderung bereitgestellt werden, die Kompatibilitätsüberlegungen für die Minderung und die verfügbaren Konfigurationsoptionen beschrieben.

Willkürlicher Codewächter

Beschreibung

Arbitrary Code Guard schützt vor einem böswilligen Angreifer, der den Code seiner Wahl durch eine Speichersicherheitslücke in den Speicher lädt und diesen Code ausführen kann.

Ein beliebiger Code guard schützt eine Anwendung davor, dynamisch generierten Code auszuführen (Code, der nicht geladen wird, z. B. aus der EXE selbst oder einer DLL). Arbitrary Code Guard verhindert, dass Speicher als ausführbar markiert wird. Wenn eine Anwendung versucht, Speicher zuzuweisen, prüfen wir die Schutz-Flags. (Speicher kann mit Lese-, Schreib- und/oder Ausführungsschutz-Flags zugewiesen werden.) Wenn die Zuweisung versucht, das Ausführungsschutz-Flag einzuschließen, schlägt die Speicherzuweisung fehl und gibt einen Fehlercode (STATUS_DYNAMIC_CODE_BLOCKED) zurück. Wenn eine Anwendung versucht, die Schutzflags von Speicher zu ändern, der bereits zugewiesen wurde und das Ausführungsschutzflag enthält, schlägt die Berechtigungsänderung ähnlich fehl und gibt einen Fehlercode (STATUS_DYNAMIC_CODE_BLOCKED) zurück.

Indem verhindert wird, dass das Ausführungsflag gesetzt wird, kann die Datenausführungsverhinderungsfunktion von Windows 10 und Windows 11 dann davor schützen, dass der Anweisungszeiger auf diesen Speicher gesetzt wird und diesen Code ausführt.

Kompatibilitätsüberlegungen

Arbitrary Code Guard verhindert die Zuweisung von Speicher als ausführbar, was ein Kompatibilitätsproblem mit Ansätzen wie Just-in-Time (JIT)-Compilern darstellt. Die meisten modernen Browser kompilieren beispielsweise JavaScript in nativen Code, um die Leistung zu optimieren. Um diese Entschärfung zu unterstützen, müssen sie neu strukturiert werden, um die JIT-Kompilierung außerhalb des geschützten Prozesses zu verschieben. Andere Anwendungen, deren Entwurf dynamisch Code aus Skripts oder anderen Zwischensprachen generiert, sind mit dieser Entschärfung ebenfalls nicht kompatibel.

Konfigurationsoptionen

Thread-Opt-out zulassen – Sie können die Risikominderung so konfigurieren, dass ein einzelner Thread diesen Schutz deaktivieren kann. Der Entwickler muss die Anwendung in Kenntnis dieser Risikominderung geschrieben und die SetThreadInformation API aufgerufen haben, wobei der ThreadInformation Parameter auf ThreadDynamicCodePolicy festgelegt ist, um dynamischen Code in diesem Thread ausführen zu dürfen.

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Audit-Ereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Defender for Endpoint angezeigt werden.

Bilder mit niedriger Integrität blockieren

Beschreibung

Bilder mit niedriger Integrität blockieren verhindert, dass die Anwendung Dateien lädt, die nicht vertrauenswürdig sind, in der Regel, weil sie aus einem Sandkastenbrowser aus dem Internet heruntergeladen wurden.

Diese Entschärfung blockiert das Laden von Bildern, wenn das Image über einen Access Control Entry (ACE) verfügt, der Zugriff auf Low IL-Prozesse gewährt und nicht über eine Vertrauensbezeichnung ACE verfügt. Sie wird vom Speicher-Manager implementiert, der verhindert, dass die Datei dem Arbeitsspeicher zugeordnet wird. Wenn eine Anwendung versucht, ein Image mit niedriger Integrität zuzuordnen, wird ein STATUS_ACCESS_DENIED Fehler ausgelöst. Einzelheiten zur Funktionsweise von Integritätsstufen finden Sie unter Mandatory Integrity Control.

Kompatibilitätsüberlegungen

Blockieren von Images mit niedriger Integrität verhindern, dass die Anwendung Dateien lädt, die aus dem Internet heruntergeladen wurden. Wenn Ihr Anwendungsworkflow das Laden heruntergeladener Images erfordert, sollten Sie sicherstellen, dass sie aus einem prozess mit höherer Vertrauenswürdigeren Heruntergeladen werden oder explizit neu gekennzeichnet werden, um diese Entschärfung anzuwenden.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Remoteimages blockieren

Beschreibung

Durch das Blockieren von Remote-Images wird verhindert, dass die Anwendung Dateien lädt, die auf einem Remote-Gerät wie einer UNC-Freigabe gehostet werden. Das Blockieren von Remote-Images schützt vor dem Laden von Binärdateien in den Speicher, die sich auf einem externen Gerät befinden, das vom Angreifer kontrolliert wird.

Diese Entschärfung blockiert das Laden von Bildern, wenn festgestellt wird, dass es sich auf einem Remotegerät befindet. Sie wird vom Speicher-Manager implementiert, der verhindert, dass die Datei dem Arbeitsspeicher zugeordnet wird. Wenn eine Anwendung versucht, eine Remotedatei zuzuordnen, löst sie einen STATUS_ACCESS_DENIED Fehler aus.

Kompatibilitätsüberlegungen

Blockieren von Remoteimages verhindern, dass die Anwendung Bilder von Remotegeräten lädt. Wenn Ihre Anwendung Dateien oder Plug-Ins von Remotegeräten lädt, ist sie mit dieser Risikominderung nicht kompatibel.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Nicht vertrauenswürdige Schriftarten blockieren

Beschreibung

Durch das Blockieren nicht vertrauenswürdiger Schriftarten wird das Risiko verringert, dass ein Fehler beim Analysieren von Schriftarten dazu führt, dass der Angreifer Code auf dem Gerät ausführen kann. Nur Schriftarten, die im Verzeichnis windows\fonts installiert sind, werden zur Verarbeitung durch GDI geladen.

Diese Risikominderung wird in GDI implementiert, das den Speicherort der Datei überprüft. Wenn sich die Datei nicht im Verzeichnis "Systemschriftarten" befindet, wird die Schriftart nicht für die Analyse geladen, und dieser Aufruf schlägt fehl.

Diese Minderung erfolgt zusätzlich zu der integrierten Minderung, die in Windows 10 1607 und höher und Windows 11 bereitgestellt wird, wodurch die Schriftanalyse aus dem Kernel in einen App-Container im Benutzermodus verschoben wird. Jeder auf Font-Parsing basierende Exploit findet daher in einem Sandbox- und isolierten Kontext statt, wodurch das Risiko erheblich reduziert wird. Einzelheiten zu dieser Risikominderung finden Sie im Blog Hardening Windows 10 with Zero-Day Exploit Mitigations.

Kompatibilitätsüberlegungen

Die häufigste Verwendung von Schriftarten außerhalb des Systemschriftartenverzeichnisses sind Webschriftarten. Moderne Browser wie Microsoft Edge verwenden DirectWrite anstelle von GDI und sind nicht betroffen. Legacy-Browser wie Internet Explorer 11 (und der IE-Modus im neuen Microsoft Edge) können jedoch betroffen sein, insbesondere bei Anwendungen wie Office 365, die Schriftzeichen zur Anzeige der Benutzeroberfläche verwenden.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Codeintegritätsschutz

Beschreibung

Code Integrity Guard stellt sicher, dass alle in einen Prozess geladenen Binärdateien von Microsoft digital signiert werden. Der Codeintegritätsschutz umfasst WHQL-Signaturen (Windows Hardware Quality Labs), mit denen WHQL-genehmigte Treiber innerhalb des Prozesses ausgeführt werden können.

Diese Abschwächung wird innerhalb des Speichermanagers implementiert, der verhindert, dass die Binärdatei dem Speicher zugeordnet wird. Wenn Sie versuchen, eine Binärdatei zu laden, die nicht von Microsoft signiert ist, gibt die Speicherverwaltung den Fehler STATUS_INVALID_IMAGE_HASH zurück. Durch das Blockieren auf Speichermanagerebene wird verhindert, dass sowohl vom Prozess geladene Binärdateien als auch in den Prozess injizierte Binärdateien.

Kompatibilitätsüberlegungen

Diese Entschärfung blockiert insbesondere jede Binärdatei, die nicht von Microsoft signiert ist. Daher ist es mit den meisten Drittanbietersoftware nicht kompatibel, es sei denn, diese Software wird vom Microsoft Store verteilt (und digital signiert), und die Option zum Zulassen des Ladens von Bildern, die vom Microsoft Store signiert wurden, ist ausgewählt.

Konfigurationsoptionen

Lassen Sie auch das Laden von Bildern zu, die vom Microsoft Store signiert wurden. Anwendungen, die vom Microsoft Store verteilt werden, werden vom Microsoft Store digital signiert, und wenn Sie diese Konfiguration hinzufügen, können Binärdateien, die den Prozess der Store-Zertifizierung durchlaufen haben, von der Anwendung geladen werden.

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Ablaufsteuerungsschutz (Control Flow Guard, CFG)

Beschreibung

Control Flow Guard (CFG) mindert das Risiko, dass Angreifer Schwachstellen durch Speicherbeschädigung ausnutzen, indem indirekte Funktionsaufrufe geschützt werden. Beispielsweise kann ein Angreifer eine Pufferüberlauf-Schwachstelle verwenden, um Speicher zu überschreiben, der einen Funktionszeiger enthält, und diesen Funktionszeiger durch einen Zeiger auf ausführbaren Code seiner Wahl ersetzen (der möglicherweise auch in das Programm eingeschleust wurde).

Diese Minderung wird bereitgestellt, indem zur Kompilierzeit eine weitere Überprüfung eingefügt wird. Vor jedem indirekten Funktionsaufruf werden weitere Anweisungen hinzugefügt, die überprüfen, ob das Ziel ein gültiges Aufrufziel ist, bevor es aufgerufen wird. Wenn das Ziel kein gültiges Aufrufziel ist, wird die Anwendung beendet. Daher können nur Anwendungen, die mit CFG-Unterstützung kompiliert wurden, von dieser Minderung profitieren.

Die Überprüfung auf ein gültiges Ziel wird vom Windows-Kernel bereitgestellt. Wenn ausführbare Dateien geladen werden, werden die Metadaten für indirekte Aufrufziele zur Ladezeit extrahiert und als gültige Aufrufziele markiert. Wenn Speicher zugewiesen und als ausführbar markiert wird (z. B. für generierten Code), werden diese Speicherorte außerdem auch als gültige Aufrufziele markiert, um Mechanismen wie JIT-Kompilierung zu unterstützen.

Kompatibilitätsüberlegungen

Da Anwendungen zur Unterstützung von CFG kompiliert werden müssen, erklären sie implizit ihre Kompatibilität damit. Die meisten Anwendungen sollten daher mit aktivierter Minderung funktionieren. Da diese Prüfungen in die Binärdatei kompiliert werden, besteht die Konfiguration, die Sie anwenden können, lediglich darin, Prüfungen innerhalb des Windows-Kernels zu deaktivieren. Mit anderen Worten, die Entschärfung ist standardmäßig aktiviert, aber Sie können den Windows-Kernel so konfigurieren, dass immer "Ja" zurückgegeben wird, wenn Sie später feststellen, dass ein Kompatibilitätsproblem vorliegt, das der Anwendungsentwickler bei seinen Tests nicht entdeckt hat, was selten sein sollte.

Konfigurationsoptionen

Strict CFG verwenden – Im Strict-Modus müssen alle in den Prozess geladenen Binärdateien für Control Flow Guard kompiliert werden (oder keinen ausführbaren Code enthalten – wie z. B. Ressourcen-DLLs), um geladen zu werden.

Hinweis

Kontrollflusswächter hat keinen Prüfmodus. Binärdateien werden mit dieser aktivierten Risikominderung kompiliert.

Datenausführungsverhinderung (DATA Execution Prevention, DEP)

Beschreibung

Die Datenausführungsverhinderung (Data Execution Prevention, DEP) verhindert, dass Arbeitsspeicher ausgeführt wird, der nicht explizit als ausführbare Datei zugeordnet wurde. DEP schützt vor einem Angreifer, der bösartigen Code in den Prozess einfügt, z. B. durch einen Pufferüberlauf, und diesen Code dann ausführt.

Wenn Sie versuchen, den Anweisungszeiger auf eine Speicheradresse festzulegen, die nicht als ausführbare Datei gekennzeichnet ist, löst der Prozessor eine Ausnahme (allgemeine Schutzverletzung) aus, wodurch die Anwendung abstürzt.

Kompatibilitätsüberlegungen

Für alle ausführbaren x64-, ARM- und ARM-64-Dateien ist DEP standardmäßig aktiviert und kann nicht deaktiviert werden. Da eine Anwendung nie ohne DEP ausgeführt wurde, wird kompatibilität vorausgesetzt.

Bei allen x86-Binärdateien (32 Bit) ist DEP standardmäßig aktiviert, DEP kann jedoch pro Prozess deaktiviert werden. Einige alte ältere Anwendungen, typischerweise Anwendungen, die vor Windows XP SP2 entwickelt wurden, sind möglicherweise nicht mit DEP kompatibel. Solche Anwendungen generieren normalerweise Code dynamisch (z. B. JIT-Kompilierung) oder verknüpfen sich mit älteren Bibliotheken (z. B. älteren Versionen von ATL), die Code dynamisch generieren.

Konfigurationsoptionen

ATL-Thunk-Emulation aktivieren – Diese Konfigurationsoption deaktiviert die ATL-Thunk-Emulation. ATL, die ActiveX-Vorlagenbibliothek, ist darauf ausgelegt, so klein und schnell wie möglich zu sein. Um die Binärgröße zu reduzieren, würde es eine Technik namens thunking verwenden. Thunking ist normalerweise für die Interaktion zwischen 32-Bit- und 16-Bit-Anwendungen gedacht, aber hier gibt es keine 16-Bit-Komponenten für ATL. Um die Binärgröße zu optimieren, speichert ATL stattdessen Computercode im Arbeitsspeicher, der nicht wortbündig ist (erstellen sie eine kleinere Binärdatei), und ruft diesen Code dann direkt auf. ATL-Komponenten, die mit Visual Studio 7.1 oder früher (Visual Studio 2003) kompiliert wurden, weisen diesen Speicher nicht als ausführbare Datei zu. Die Thunk-Emulation behebt dieses Kompatibilitätsproblem. Bei Anwendungen mit einem binären Erweiterungsmodell (z. B. Internet Explorer 11) muss häufig die ATL-Thunk-Emulation aktiviert sein.

Deaktivieren von Erweiterungspunkten

Beschreibung

Diese Risikominderung deaktiviert verschiedene Erweiterungspunkte für eine Anwendung, die verwendet werden können, um Persistenz herzustellen oder Berechtigungen für schädliche Inhalte zu erhöhen.

Dies umfasst Folgendes:

  • AppInit-DLLs : Wenn ein Prozess gestartet wird, lädt das System die angegebene DLL in den Kontext des neu gestarteten Prozesses, bevor seine Einstiegspunktfunktion aufgerufen wird. Details zu AppInit-DLLs finden Sie hier. Wenn diese Entschärfung angewendet wird, werden AppInit-DLLs nicht geladen. Ab Windows 7 müssen AppInit-DLLs wie hier beschrieben digital signiert werden. Darüber hinaus werden appInit-DLLs ab Windows 8 nicht geladen, wenn SecureBoot aktiviert ist, wie hier beschrieben.
  • Ältere IMEs – Ein Input Method Editor (IME) ermöglicht es einem Benutzer, Text in einer Sprache einzugeben, die mehr Zeichen hat, als auf einer Tastatur dargestellt werden können. Dritte können IMEs erstellen. Ein böswilliger IME kann aus dieser Eingabeerfassung Anmeldeinformationen oder andere vertrauliche Informationen erhalten. Einige IMEs, die als Legacy-IMEs bezeichnet werden, funktionieren nur für Windows-Desktop-Apps und nicht für UWP-Apps. Diese Entschärfung verhindert auch, dass dieser Legacy-IME in die angegebene Windows-Desktop-App geladen wird.
  • Windows-Ereignis-Hooks – Eine Anwendung kann die SetWinEventHook-API aufrufen, um Interesse an einem stattfindenden Ereignis zu registrieren. Eine DLL wird angegeben und kann in den Prozess injiziert werden. Diese Minderung erzwingt, dass der Hook an den Registrierungsprozess gesendet wird, anstatt prozessintern über eine injizierte DLL ausgeführt zu werden.

Kompatibilitätsüberlegungen

Die meisten dieser Erweiterungspunkte werden relativ selten verwendet, sodass die Auswirkung auf die Kompatibilität in der Regel gering ist, insbesondere auf der Ebene einer einzelnen Anwendung. Die einzige Überlegung ist, ob Benutzer Legacy-IMEs von Drittanbietern verwenden, die nicht mit der geschützten Anwendung funktionieren.

Konfigurationsoptionen

Es gibt keine Konfigurationsoptionen für diese Risikominderung.

Hinweis

Erweiterungspunkte deaktivieren hat keinen Überwachungsmodus.

Win32k-Systemaufrufe deaktivieren

Beschreibung

Win32k.sys bietet einem Angreifer eine breite Angriffsfläche. Als Kernelmoduskomponente wird sie häufig als Escapevektor für Anwendungen mit Sandkasten verwendet. Diese Minderung verhindert Aufrufe in win32k.sys, indem ein Thread daran gehindert wird, sich selbst in einen GUI-Thread zu konvertieren, der dann Zugriff zum Aufrufen von Win32k-Funktionen erhält. Ein Thread ist nach seiner Erstellung keine GUI, wird aber beim ersten Aufruf in win32k.sys oder durch einen API-Aufruf in IsGuiThread konvertiert.

Kompatibilitätsüberlegungen

Diese Minderung ist für Prozesse konzipiert, die dedizierte Nicht-UI-Prozesse sind. Viele moderne Browser verwenden beispielsweise Prozessisolation und integrieren Nicht-Ui-Prozesse. Jede Anwendung, die eine GUI mit einem einzelnen Prozess anzeigt, ist von dieser Risikominderung betroffen.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Untergeordnete Prozesse nicht zulassen

Beschreibung

Diese Minderung verhindert, dass eine Anwendung neue untergeordnete Anwendungen erstellt. Eine gängige Technik, die von Angreifern verwendet wird, besteht darin, einen vertrauenswürdigen Prozess auf dem Gerät mit böswilligen Eingaben zu initiieren (ein „Living Off the Land“-Angriff), was häufig das Starten einer anderen Anwendung auf dem Gerät erfordert. Wenn es keine legitimen Gründe gibt, warum eine Anwendung einen untergeordneten Prozess starten würde, mindert diese Minderung diesen potenziellen Angriffsvektor. Die Risikominderung wird angewendet, indem eine Eigenschaft für das Prozesstoken festgelegt wird, die das Erstellen eines Tokens für den untergeordneten Prozess mit der Fehlermeldung STATUS_CHILD_PROCESS_BLOCKED blockiert.

Kompatibilitätsüberlegungen

Wenn Ihre Anwendung aus irgendeinem Grund untergeordnete Anwendungen startet, z. B. Hyperlinks unterstützt, die einen Browser oder einen externen Browser starten, oder die andere Dienstprogramme auf dem Computer starten, wird diese Funktionalität bei Anwendung dieser Risikominderung unterbrochen.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Adressfilterung exportieren

Beschreibung

Die Exportadressfilterung (EAF) mindert das Risiko, dass bösartiger Code die Exportadresstabelle aller geladenen Module durchsucht, um Module zu finden, die nützliche APIs für ihren Angriff enthalten. Dies ist eine gängige Taktik, die von Shellcode verwendet wird. Um das Risiko eines solchen Angriffs zu mindern, schützt diese Minderung drei häufig angegriffene Module:

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

Die Risikominderung schützt die Speicherseite im [Exportverzeichnis, das auf die Exportadresstabelle verweist. Auf diese Speicherseite wird der PAGE_GUARD Schutz angewendet. Wenn jemand versucht, auf diesen Speicher zuzugreifen, wird eine STATUS_GUARD_PAGE_VIOLATION generiert. Die Entschärfung behandelt diese Ausnahme, und wenn die Zugriffsanweisung die Überprüfung nicht besteht, wird der Prozess beendet.

Kompatibilitätsüberlegungen

Diese Minderung ist in erster Linie ein Problem für Anwendungen wie Debugger, Sandbox-Anwendungen, Anwendungen, die DRM verwenden, oder Anwendungen, die Anti-Debugging-Technologie implementieren.

Konfigurationsoptionen

Validieren Sie den Zugriff für Module, die häufig von Exploits missbraucht werden – Diese Option, auch bekannt als EAF+, fügt Schutz für andere häufig angegriffene Module hinzu:

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

Durch die Aktivierung von EAF+ fügt diese Risikominderung außerdem den PAGE_GUARD-Schutz zu der Seite hinzu, die den „MZ“-Header enthält, die ersten beiden Bytes des DOS-Headers in einer PE-Datei, was ein weiterer Aspekt des bekannten Speicherinhalts ist, nach dem Shellcode suchen kann, um ihn zu identifizieren Module, die im Speicher möglicherweise von Interesse sind.

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Erzwingen von zufälligen Abbildern (obligatorisches ASLR)

Beschreibung

Address Space Layout Randomization (ASLR) verringert das Risiko, dass ein Angreifer sein Wissen über das Speicherlayout des Systems nutzt, um Code auszuführen, der bereits im Prozessspeicher vorhanden und bereits als ausführbar markiert ist. Dies kann das Risiko eines Angreifers verringern, der Techniken wie Return-to-libc-Angriffe verwendet, bei denen der Angreifer den Kontext festlegt und dann die Rücksendeadresse ändert, um vorhandenen Code mit einem Kontext auszuführen, der dem Zweck des Angreifers entspricht.

Obligatorisches ASLR erzwingt eine Neubasierung aller DLLs innerhalb des Prozesses. Ein Entwickler kann ASLR mithilfe der /DYNAMICBASE Linkeroption aktivieren, und diese Minderung hat denselben Effekt.

Wenn der Speicher-Manager im Image dem Prozess zugeordnet wird, werden obligatorische ASLR-DLLs und EXEs, die sich nicht bei ASLR angemeldet haben, zwangsbasiert. Beachten Sie jedoch, dass diese Umbasierung keine Entropie hat und daher an einer vorhersagbaren Stelle im Speicher platziert werden kann. Für die rebasierte und randomisierte Lokalisierung von Binärdateien sollte diese Minderung mit Randomize Memory Allocations (Bottom-up ASLR) gekoppelt werden.

Kompatibilitätsüberlegungen

Diese Auswirkungen auf die Kompatibilität von ASLR sind in der Regel auf ältere Anwendungen beschränkt, die mit Compilern erstellt wurden, die Annahmen über die Basisadresse einer Binärdatei getroffen oder Basisverschiebungsinformationen entfernt haben. Dies kann zu unvorhersehbaren Fehlern führen, wenn der Ausführungsfluss versucht, zur erwarteten statt zur tatsächlichen Position im Speicher zu springen.

Konfigurationsoptionen

Entfernte Bilder nicht zulassen – Diese Option blockiert das Laden von Bildern, bei denen die Umzugsinformationen entfernt wurden. Das Windows PE-Dateiformat enthält absolute Adressen, und der Compiler generiert auch eine [Basisverlagerungstabelle, die der Ladeprogramm verwenden kann, um alle relativen Speicherverweise und deren Offset zu finden, sodass sie aktualisiert werden können, wenn die Binärdatei nicht an ihrer bevorzugten Basisadresse geladen wird. Einige ältere Anwendungen entfernen diese Informationen in Produktionsbuilds, sodass diese Binärdateien nicht rebasediert werden können. Diese Abschwächung blockiert das Laden solcher Binärdateien (anstatt ihnen zu erlauben, an ihrer bevorzugten Basisadresse geladen zu werden).

Hinweis

Randomisierung für Bilder erzwingen (obligatorische ASLR) hat keinen Prüfmodus.

Hardware-erzwungener Stapelschutz

Beschreibung

Hardware-erzwungener Stapelschutz bietet robusten Schutz vor ROP-Exploits, da er den beabsichtigten Ausführungsablauf eines Programms erfasst. Um eine reibungslose Einführung des Ökosystems und die Anwendungskompatibilität sicherzustellen, bietet Windows diesen Schutz als opt-in-Modell an, damit Entwickler diesen Schutz in Ihrem eigenen Tempo erhalten können.

Kompatibilitätsüberlegungen

Hardware-erzwungener Stapelschutz funktioniert nur für Chipsätze mit Unterstützung für Hardwareschattenstapel, Intels Control-Flow Enforcement Technology (CET) oder AMD-Schattenstapel.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Audit-Ereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Defender for Endpoint angezeigt werden.

Erzwingen für alle Module anstelle von Kompatiblen Modulen : Sie können diese Entschärfung aktivieren, um für alle Module anstelle von Kompatible Module zu erzwingen.

Import-Adressfilterung (IAF)

Beschreibung

Die Importadressfilterung (IAF) trägt dazu bei, das Risiko zu mindern, dass ein Angreifer den Kontrollfluss einer Anwendung ändert, indem er die Importadresstabelle (IAT) so ändert, dass sie beim Aufruf dieser Funktion auf beliebigen Code nach Wahl des Angreifers umleitet. Ein Angreifer könnte diesen Ansatz verwenden, um die Kontrolle zu übernehmen oder um Aufrufe sensibler APIs abzufangen, zu inspizieren und möglicherweise zu blockieren.

Auf die Speicherseiten für alle geschützten APIs wird der PAGE_GUARD-Schutz angewendet. Wenn jemand versucht, auf diesen Speicher zuzugreifen, wird eine STATUS_GUARD_PAGE_VIOLATION generiert. Die Entschärfung behandelt diese Ausnahme, und wenn die Zugriffsanweisung die Überprüfung nicht besteht, wird der Prozess beendet.

Diese Risikominderung schützt die folgenden Windows-APIs:

  • 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

Kompatibilitätsüberlegungen

Legitime Anwendungen, die das Abfangen von APIs durchführen, können von dieser Risikominderung erkannt werden und einige Anwendungen zum Absturz bringen. Beispiele hierfür sind Shims für Sicherheitssoftware und Anwendungskompatibilität.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Zufällige Speicherzuweisungen (Bottom-up-ASLR)

Beschreibung

Zufällige Speicherzuweisungen (Bottom-up-ASLR) fügen Verschiebungen Entropie hinzu, sodass ihre Position zufällig und daher weniger vorhersehbar ist. Diese Minderung erfordert, dass die obligatorische ASLR wirksam wird.

Die Größe des 32-Bit-Adressraums schränkt die hinzuzufügende Entropie praktisch ein, und daher erschweren es 64-Bit-Anwendungen einem Angreifer, einen Speicherort zu erraten.

Kompatibilitätsüberlegungen

Die meisten Anwendungen, die mit Mandatory ASLR (Rebasing) kompatibel sind, sind auch mit der anderen Entropie von Bottom-up-ASLR kompatibel. Einige Anwendungen haben möglicherweise Probleme beim Abschneiden von Zeigern, wenn sie lokale Zeiger in 32-Bit-Variablen speichern (die eine Basisadresse unter 4 GB erwarten) und daher nicht mit der Option für hohe Entropie kompatibel sind (die deaktiviert werden kann).

Konfigurationsoptionen

Keine hohe Entropie verwenden – Diese Option deaktiviert die Verwendung von High-Entropie-ASLR, wodurch 24 Bit Entropie (1 TB Varianz) zur Bottom-Up-Zuweisung für 64-Bit-Anwendungen hinzugefügt werden.

Hinweis

Zufällige Speicherzuweisungen (Bottom-up-ASLR) haben keinen Überwachungsmodus.

Simulieren der Ausführung (SimExec)

Beschreibung

Ausführung simulieren (SimExec) ist eine Risikominderung nur für 32-Bit-Anwendungen. Dies hilft bei der Validierung, dass Aufrufe an sensible APIs zu legitimen Aufruferfunktionen zurückkehren. Dazu werden Aufrufe in sensible APIs abgefangen und dann die Ausführung dieser APIs simuliert, indem die codierten Assembleranweisungen nach der RET-Anweisung gesucht werden, die an den Aufrufer zurückgegeben werden sollte. Er untersucht dann diese Funktion und geht im Speicher rückwärts, um den vorangehenden CALL-Befehl zu finden, um festzustellen, ob die Funktion und der CALL-Befehl übereinstimmen und ob RET nicht abgefangen wurde.

Die von dieser Minderung abgefangenen APIs sind:

  • 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

Wenn ein ROP-Gadget erkannt wird, wird der Prozess beendet.

Kompatibilitätsüberlegungen

Anwendungen, die APIs abfangen, insbesondere Sicherheitssoftware, können Kompatibilitätsprobleme mit dieser Minderung verursachen.

Diese Minderung ist nicht mit der Arbitrary Code Guard-Minderung kompatibel.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Überprüfen des API-Aufrufs (CallerCheck)

Beschreibung

Validate API Invocation (CallerCheck) ist eine Abschwächung für Techniken der rückgabeorientierten Programmierung (ROP), die überprüft, ob vertrauliche APIs von einem gültigen Aufrufer aufgerufen wurden. Diese Minderung überprüft die übergebene Rücksprungadresse und zerlegt dann heuristisch rückwärts, um einen Aufruf oberhalb der Rücksprungadresse zu finden und zu bestimmen, ob das Aufrufziel mit dem an die Funktion übergebenen Parameter übereinstimmt.

Die von dieser Minderung abgefangenen APIs sind:

  • 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

Wenn ein ROP-Gadget erkannt wird, wird der Prozess beendet.

Kompatibilitätsüberlegungen

Anwendungen, die APIs abfangen, insbesondere Sicherheitssoftware, können Kompatibilitätsprobleme mit dieser Minderung verursachen.

Diese Minderung ist nicht mit der Arbitrary Code Guard-Minderung kompatibel.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Überprüfen von Ausnahmeketten (SEHOP)

Beschreibung

Validate Exception Chains (SEHOP) ist eine Abwehrmaßnahme gegen die Überschreibungs-Ausnutzungstechnik des Structured Exception Handler (SEH). Die strukturierte Ausnahmebehandlung ist der Prozess, durch den eine Anwendung die Behandlung einer bestimmten Ausnahme anfordern kann. Ausnahmebehandler sind miteinander verkettet, sodass, wenn ein Ausnahmebehandler sich entscheidet, eine bestimmte Ausnahme nicht zu behandeln, diese an den nächsten Ausnahmebehandler in der Kette weitergegeben werden kann, bis einer entscheidet, sie zu behandeln. Da die Liste der Handler dynamisch ist, wird sie im Stapel gespeichert. Ein Angreifer kann eine Stapelüberlauf-Schwachstelle verwenden, um dann den Ausnahmehandler mit einem Zeiger auf den Code seiner Wahl zu überschreiben.

Diese Entschärfung basiert auf dem Entwurf von SEH, wobei jeder SEH-Eintrag sowohl einen Zeiger auf den Ausnahmehandler als auch einen Zeiger auf den nächsten Handler in der Ausnahmekette enthält. Diese Minderung wird vom Ausnahme-Dispatcher aufgerufen, der die SEH-Kette validiert, wenn eine Ausnahme aufgerufen wird. Es bestätigt Folgendes:

  • Alle Ausnahmekettenaufzeichnungen liegen innerhalb der Stapelgrenzen
  • Alle Ausnahmedatensätze werden ausgerichtet
  • Keine Exception-Handler-Zeiger zeigen auf den Stack
  • Es gibt keine Rückwärtszeiger
  • Die Ausnahmekette endet an einem bekannten letzten Ausnahmehandler

Wenn diese Überprüfungen fehlschlagen, wird die Ausnahmebehandlung abgebrochen, und die Ausnahme wird nicht behandelt.

Kompatibilitätsüberlegungen

Kompatibilitätsprobleme mit SEHOP sind relativ selten. Es ist ungewöhnlich, dass eine Anwendung eine Abhängigkeit von der Beschädigung der Ausnahmekette annimmt. Einige Anwendungen sind jedoch von den subtilen Änderungen des Timings betroffen, die sich als Race-Condition manifestieren können, die einen latenten Multithreading-Fehler in der Anwendung aufdeckt.

Konfigurationsoptionen

Hinweis

Ausnahmeketten validieren (SEHOP) hat keinen Prüfmodus.

Überprüfen der Handleverwendung

Beschreibung

Die Validierung der Handle-Nutzung ist eine Risikominderung, die zum Schutz vor einem Angreifer beiträgt, der ein vorhandenes Handle für den Zugriff auf ein geschütztes Objekt verwendet. Ein Handle ist eine Referenz auf ein geschütztes Objekt. Wenn Anwendungscode auf ein ungültiges Handle verweist, könnte dies darauf hindeuten, dass ein Angreifer versucht, ein Handle zu verwenden, das er zuvor aufgezeichnet hat (aber das Zählen von Anwendungsreferenzen nicht erkennen würde). Wenn die Anwendung versucht, ein ungültiges Objekt zu verwenden, anstatt einfach NULL zurückzugeben, löst die Anwendung eine Ausnahme aus (STATUS_INVALID_HANDLE).

Diese Risikominderung wird automatisch auf Windows Store-Anwendungen angewendet.

Kompatibilitätsüberlegungen

Anwendungen, die Handleverweise nicht genau nachverfolgt haben und die diese Vorgänge nicht in Ausnahmehandlern umschließen, sind möglicherweise von dieser Entschärfung betroffen.

Konfigurationsoptionen

Hinweis

Handle-Nutzung validieren hat keinen Audit-Modus.

Überprüfen der Heapintegrität

Beschreibung

Die Überprüfung der Heap-Integritätsminderung erhöht die Schutzebene der Heap-Minderungen in Windows, indem sie bewirkt, dass die Anwendung beendet wird, wenn eine Heap-Beschädigung erkannt wird. Zu den Minderungen gehören:

  • Verhindern, dass ein HEAP-Handle freigegeben wird
  • Durchführen einer weiteren Validierung an erweiterten Blockheadern für Heap-Zuweisungen
  • Überprüfen, ob Heapzuordnungen noch nicht als verwendet gekennzeichnet sind
  • Hinzufügen von Schutzseiten zu großen Zuordnungen, Heap-Segmenten und Untersegmenten über einer Mindestgröße

Kompatibilitätsüberlegungen

Diese Minderung wird bereits standardmäßig für 64-Bit-Anwendungen und für 32-Bit-Anwendungen angewendet, die auf Windows Vista oder höher abzielen. Ältere Anwendungen von Windows XP oder früher sind am stärksten gefährdet, obwohl Kompatibilitätsprobleme selten sind.

Konfigurationsoptionen

Hinweis

Heap-Integrität validieren hat keinen Prüfmodus.

Überprüfen der Integrität von Imageabhängigkeiten

Beschreibung

Die Abschwächung der Bildabhängigkeit validieren schützt vor Angriffen, die versuchen, Code für DLLs zu ersetzen, die statisch von Windows-Binärdateien verknüpft sind. Die Technik des DLL-Einpflanzens missbraucht den Suchmechanismus des Ladeprogramms, um schädlichen Code einzuschleusen, der verwendet werden kann, um schädlichen Code in einem erhöhten Kontext auszuführen. Wenn das Ladeprogramm eine signierte Windows-Binärdatei lädt und dann alle DLL-Dateien lädt, von denen die Binärdatei abhängt, werden diese Binärdateien überprüft, um sicherzustellen, dass sie auch digital als Windows-Binärdatei signiert sind. Wenn die Signaturprüfung fehlschlägt, wird die DLL nicht geladen und löst eine Ausnahme aus, wodurch eine status von STATUS_INVALID_IMAGE_HASH zurückgegeben wird.

Kompatibilitätsüberlegungen

Kompatibilitätsprobleme sind selten. Anwendungen, die vom Ersetzen von Windows-Binärdateien durch lokale private Versionen abhängig sind, sind betroffen, und es besteht auch ein geringes Risiko, dass in Multithreadanwendungen subtile Zeitsteuerungsfehler aufdecken.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Überprüfen der Stapelintegrität (StackPivot)

Beschreibung

Die Risikominderung Stack-Integrität validieren (StackPivot) schützt vor dem Stack-Pivot-Angriff, einem ROP-Angriff, bei dem ein Angreifer einen gefälschten Stapel im Heapspeicher erstellt und dann die Anwendung dazu verleitet, in den gefälschten Stapel zurückzukehren, der den Ausführungsablauf steuert.

Diese Risikominderung fängt viele Windows-APIs ab und untersucht den Wert des Stapelzeigers. Wenn die Adresse des Stapelzeigers nicht zwischen dem unteren und dem oberen Rand des Stapels liegt, wird ein Ereignis aufgezeichnet, und, wenn nicht im Überwachungsmodus, wird der Prozess beendet.

Die von dieser Minderung abgefangenen APIs sind:

  • 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

Kompatibilitätsüberlegungen

Anwendungen, die gefälschte Stapel verwenden, sind betroffen, und es besteht auch ein geringes Risiko, dass subtile Timingfehler in Multithreadanwendungen aufdecken. Anwendungen, die APIs abfangen, insbesondere Sicherheitssoftware, können Kompatibilitätsprobleme mit dieser Minderung verursachen.

Diese Minderung ist nicht mit der Arbitrary Code Guard-Minderung kompatibel.

Konfigurationsoptionen

Nur Überwachung: Sie können diese Risikominderung im Überwachungsmodus aktivieren, um die potenziellen Auswirkungen auf die Kompatibilität einer Anwendung zu messen. Überwachungsereignisse können dann entweder in der Ereignisanzeige oder mithilfe von Advanced Hunting in Microsoft Defender für Endpoint angezeigt werden.

Tipp

Möchten Sie mehr erfahren? Engage mit der Microsoft-Sicherheitscommunity in unserer Tech Community: Microsoft Defender for Endpoint Tech Community.