Windows Exploit-Guard Konfiguration: Alle ProcessMitigations per PowerShell-Script löschen

Microsoft hat mit Windows 10 Version 1709 (RedStone 3 Release) die Funktionalität Windows Defender ExploitGuard zur produktiven Nutzung bereitgestellt. Dies löst das vormals hierfür verfügbare Produkt EMET – Enhanced Mitigation Experience Toolkit ab, welches mit 31.07.2018 aus der Wartung läuft und ab Win10 Release auch nicht mehr eingesetzt werden kann.

Problemstellung: Set-ProcessMitigation unterstützt weder Delete noch Delete-All

Grundsätzlich lässt sich Exploit-Guard ebenso wie EMET über Scripts administrieren. Hierzu stehen die PowerShell-Commandlets Get-ProcessMitigation und Set-ProcessMitigation zur Verfügung. Allerdings sind (zumindest in der aktuellen Windows Version v1709) hierbei noch Bugs vorhanden bzw. fehlen Funktionalitäten, die es einem Admin schwer machen die Exploit-Guard Konfiguration auf Geräten automatisiert zu verteilen:

  • Das Get-ProcessMitigation Commandlet listet z.B. nur Settings zu Executables auf, die nicht mit vollem Pfad konfiguriert sind (also z.B. “notepad.exe” wird angezeigt, nicht aber eine Mitigation mit vollem Pfad konfiguriert, wie z.B.: “C:\Windows\System32\notepad.exe”).
  • Das Set-ProcessMitigation Commandlet hat leider keine Funktionalität mit der sich konfigurierte Prozesse löschen lassen. Es können lediglich einzelne Mitigations ein- & ausgeschaltet bzw. entfernt werden, nicht jedoch der Eintrag des Prozesses selbst. Auch eine Funktionalität um alle Per-Process-Mitigations auf einmal zu löschen fehlt. Unter EMET gab es hierzu z.B. das EMET-Commandline-Tool EMET_Conf, mit den Funktionalitäten: EMET_Conf --delete <path to executable> sowie EMET_Conf --delete_apps und EMET_Conf --delete_all
  • Ergänzend ergibt sich noch eine Berechtigungs-Problematik, die zumindest in der aktuellen WindowsInsider-Build (Stand 26.01.2018: Build 17063.rs_prerelease.171213-1610) die Nutzung der Export- / Import-Möglichkeit mit XML-Files teils verhindert. Der Registry-Key in dem die vorausgelieferten Einstellungen des Prozesses CameraBarcodeScannerPreview.exe gespeichert sind, ist mit ACLs derart geschützt, dass nur TrustedInstaller diesen modifizieren kann, Administratoren und selbst SYSTEM sind nicht berechtigt. Dies führt sowohl im GUI als auch bei Nutzung der PowerShell-Commandlets zu Fehlermeldungen.
ExploitGuard Fehlermeldung beim Versuch CameraBarcodeScannerPreview.exe zu modifizieren
ExploitGuard-Fehlermeldung beim Versuch CameraBarcodeScannerPreview.exe zu modifizieren

Speicherung der Prozess-Mitigations

Konkret finden sich die Einstellungen aktuell (mit v1709, RS3) in den Registry-Schlüsseln unterhalb von HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options. Hierbei finden sich die Konfigurationen in den Values MitigationOptions und MitigationAuditOptions.

ExploitGuard: Per-Process Mitigation
ExploitGuard: Per-Process Mitigation (Executable ohne vollen Pfad konfiguriert)

Wenn Prozesse mit vollem Pfad konfiguriert werden, so finden sich diese Konfigurationen in einem SubKey wie folgt:

ExploitGuard: Per-Process-Mitigation FullPath
ExploitGuard: Per-Process Mitigation mit vollem Pfad konfiguriert

Lösung: PowerShell-Script Remove-all-ProcessMitigations.ps1

Ich habe unter https://github.com/gunnarhaslinger/Windows-Defender-Exploit-Guard-Configuration Scripts und XML-Files bereitgestellt, um folgendes zu bewerkstelligen:

  • Löschen aller Per-Process-Mitigations (sowohl mit vollem Pfad als auch die simple Form), hierbei wird sofern ein leerer Eintrag zurückbliebe auch dieser sauber entfernt. Es werden hierbei selbstverständlich nur die ExploitGuard Konfigurationen entfernt, andere im gleichen Registry-Key Image File Execution Options gespeicherten Einstellungen bleiben erhalten!
  • Korrektur etwaiger ACLs, die OwnerShip wird hierfür auf die Administratoren-Gruppe übernommen und die ACLs auf “Vererbung” zurückgesetzt.

PowerShell-Script Windows10-v1709_ExploitGuard-Config.ps1

  • Löscht mittels Remove-all-ProcessMitigations.ps1 zuerst alle Prozess-Konfigurationen
  • Importiert die Windows10-v1709_ExploitGuard-DefaultSettings.xml (Auslieferungszustand einer Win10 v1709 Maschine)
  • Importiert die seitens Microsoft als Ergänzung publizierten, empfohlenen Mitigations aus Windows10-v1709_ExploitGuard-Security-Baseline.xml, dieses File findet sich in der offiziellen Microsoft Baseline 
  • Diese Scripts sind als Administrator (PowerShell “als Administrator ausführen”) zu starten!
  • Hiermit kann – auch auf Maschinen auf denen die Konfiguration bereits modifiziert wurde – mit einem Script-Aufruf ein definierter Zustand herstellt werden.

You May Also Like

2 Comments

  1. Leider tauchen ein paar Fehler beim Ausführen der Scripts auf.

    PS Q:\Tools\Windows-Defender-Exploit-Guard-Configuration> .\Windows10-v1709_ExploitGuard-Config.ps1
    Removing all Process Mitigations
    ———————————————————————
    ———————————————————————
    Resetting ExploitGuard System-Settings
    Set-ProcessMitigation : Es wurde kein Parameter gefunden, der dem Parameternamen “Reset” entspricht.
    In Q:\Tools\Windows-Defender-Exploit-Guard-Configuration\Windows10-v1709_ExploitGuard-Config.ps1:15 Zeichen:31
    + Set-ProcessMitigation -System -Reset
    + ~~~~~~
    + CategoryInfo : InvalidArgument: (:) [Set-ProcessMitigation], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.Samples.PowerShell.Commands.SetProcessMitigationsComman
    d

    Applying .\Windows10-v1709_ExploitGuard-DefaultSettings.xml
    Set-ProcessMitigation : Die Sequenz enthält keine Elemente.
    In Q:\Tools\Windows-Defender-Exploit-Guard-Configuration\Windows10-v1709_ExploitGuard-Config.ps1:20 Zeichen:5
    + Set-ProcessMitigation -PolicyFilePath $XMLConfig
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Set-ProcessMitigation], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Samples.PowerShell.Commands.SetProcessMitigat
    ionsCommand

    Applying .\Windows10-v1709_ExploitGuard-Security-Baseline.xml
    WARNUNG: Payload is not supported. Line: 6
    WARNUNG: ChildProcess is not supported. Line: 7

    ProcessName: ONEDRIVE.EXE
    Source : None

    Danach laufen die Imports durch, melden aber immer mal wieder zwischendurch “Payload is not supported”. System ist Pro x64 16299.309.

    1. Hallo Ingo,
      Danke für das Feedback. Da Dein PowerShell-Commandlet Set-ProcessMitigation offenbar den “-System -Reset” Parameter nicht kennt, scheinst Du eine veraltete Version dieser Commandlets auf Deiner Maschine zu haben. Wie es dazu kommt ist mir unklar, denn Dein System-Build v16299.309 entspricht nämlich eigentlich meiner Test-Umgebung.

      Das betreffende PowerShell-Commandlet findet sich in Form der Datei Microsoft.ProcessMitigations.Commands.dll unter C:\Windows\Microsoft.NET\assembly\GAC_64\Microsoft.ProcessMitigations.Commands\v4.0_10.0.0.0__31bf3856ad364e35 und trägt bei mir die Versionsnummer 10.0.16299.15

      Unter C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ProcessMitigations findest Du weiters die ProcessMitigations.psd1, welche die ModuleVersion = “1.0.11” nennt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert