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-ToolEMET_Conf
, mit den Funktionalitäten:EMET_Conf --delete <path to executable>
sowieEMET_Conf --delete_apps
undEMET_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.
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
.
Wenn Prozesse mit vollem Pfad konfiguriert werden, so finden sich diese Konfigurationen in einem SubKey wie folgt:
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.
Leider tauchen ein paar Fehler beim Ausführen der Scripts auf.
Danach laufen die Imports durch, melden aber immer mal wieder zwischendurch „Payload is not supported“. System ist Pro x64 16299.309.
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
unterC:\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.15Unter
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ProcessMitigations
findest Du weiters dieProcessMitigations.psd1
, welche die ModuleVersion = „1.0.11“ nennt.