# Die folgenden Codebeispiele zeigen, wie man mit Powershell eine Windows Defender # Application-Control-Richtlinie erstellt. # Der Beispielcode wurde der Microsoft-Dokumentation entnommen. Die jeweiligen Links zum Original # finden Sie als Kommentare im Code. Beachten Sie, dass die Beispiele älter sind und die Website # aktualisierte Beispiele enthält. # Eine WDAC-Richtlinie auf einem Referenzcomputer erstellen # Das Beispiel geht davon aus, dass Sie einen sauberen Referenzcomputer verwenden, auf dem alle Programme, # die freigegeben werden sollen, bereits installiert sind. # # Quelle: https://docs.microsoft.com/en-us/windows/device-security/device-guard/deploy-code-integrity-policies-steps # WDAC benötigt die Regeldateien im XML-Format. Diese werden in eine BIN-Datei konvertiert. Die folgenden Variablen # enthalten die Pfade zu den Dateien - im Beispiel werden die Dateien auf dem Userdesktop abgelegt. $CIPolicyPath = $HOME + "\Desktop" $InitialCIPolicy = $CIPolicyPath+"InitialScan.xml" $CIPolicyBin = $CIPolicyPath+"DeviceGuardPolicy.bin" # Zuerst wird eine CIPolicy (CI steht für CodeIntegrity) erstellt.Der Level pcaCertificate legt fest, dass nur nach Dateisingaturen # gescannt wird. Dieser Prozess dauert lange, da der gesamte Datenträger nach signierten Programmen durchsucht wird! # UserPEs setzt in der Policy die Option, die die Codeprüfung aktiviert. # Ohne den Schalter werden CI-Policys nur für Treiber aktiviert. New-CIPolicy -Level PcaCertificate -FilePath $InitialCIPolicy –UserPEs # Anschließend wird die XML-Datei ins Binärformat konvertiert ConvertFrom-CIPolicy -XmlFilePath $InitialCIPolicy -BinaryFilePath $CIPolicyBin # Anschließend kann die binäre Policy-Datei zur Aktivierung in SIPolicy.p7b umbenannt und in den Windows-Ordner unter # $env:windir\System32\CodeIntegrity kopiert werden. Copy-Item -Path $CIPolicyBin -Destination $env:windir\System32\CodeIntegrity\sipolicy.p7b # Alternativ kann die Binär-Datei mit einer Gruppenrichtlinie verteilt werden. Legen Sie sie dafür ein einer Freigabe ab # und geben Sie den UNC-Pfad zur Datei in der Gruppenrichtlinie "Windows Defender-Anwendungssteuerung bereitstellen" unter # "Computer Configuration\Administrative Templates\System\Windows Defender Device Guard" an. Die Datei kann einen beliebigen # Namen haben - Sie wird von Windows beim Kopieren automatisch in SIPolicy.p7b umbennant. # Der Client muß zum aktivieren der Policy neu gestartet werden. Sie können im Windows-Eventlog prüfen, ob die Policy angewendet # wird: 'Applications and Services Logs\Microsoft\Windows\CodeIntegrity\Operational' # Alternativ verwenden Sie Powershell zur Anzeige: Get-WinEvent -LogName 'Microsoft-Windows-CodeIntegrity/Operational' | Out-GridView # Sie können noch immer alle Anwendungen starten - die Policy läuft im Audit-Mode. Dieser Modus protokolliert blockierte # Anwendungen lediglich lim Codeintegrity-Eventlog, ohne die Ausführung zu verhindern. Sie können aus den im Eventlog protokollierten # Anwendungen jetzt aber eine neue Policy erstellen, die die Hashes der protokollierten Dateien erlaubt. $CIAuditPolicy = $CIPolicyPath + "DeviceGuardAuditPolicy.xml" New-CIPolicy -Audit -Level Hash -FilePath $CIAuditPolicy –UserPEs # Anschließend können die zwei Policy-Dateien zu einer zusammengefügt werden. $MergedCIPolicy = $CIPolicyPath + "MergedPolicy.xml" $CIPolicyBin = $CIPolicyPath + "NewDeviceGuardPolicy.bin" Merge-CIPolicy -PolicyPaths $InitialCIPolicy,$CIAuditPolicy -OutputFilePath $MergedCIPolicy # Die neue XML-Datei muß anschließend wieder ins Binärformat konvertiert werden. ConvertFrom-CIPolicy -XmlFilePath $MergedCIPolicy -BinaryFilePath $CIPolicyBin ### Die XML-Datei enthält neben der Liste der erlaubten Herausgeber und Dateien auch eine Liste von Anwendungsregeln. # Die Regeloptionen können mit Set-Ruleoption aufgelistet und angepasst werden. # Anzeigen der konfigurierbaren Regeln: Set-RuleOption -help # In der Standardeinstellung befindet sich die Policy im Überwachungs-Modus. Zum Erzwingen der Richtlinie muß der Audit-Moduse # deaktiviert werden. $EnforcedCIPolicy = $CIPolicyPath + "EnforcedPolicy.xml" $EnforcedCIPolicyBin = $CIPolicyPath + "EnforcedDeviceGuardPolicy.bin" # Die Option "Advanced Boot Options Menu" und "Boot Audit on Failure" erlauben, die Policy im Bootmenü zu deaktivieren. # Diese Einstellungen sind zum Testen der Richtlinie gedacht, falls Windows durch die Policy am Starten gehindert wird. # Sie sollten nach erfolgreichem Test deaktiviert werden. Set-RuleOption -FilePath $MergedCIPolicy -Option 9 # “Advanced Boot Options Menu” Set-RuleOption -FilePath $MergedCIPolicy -Option 10 # “Boot Audit on Failure” # Erstellen Sie eine Sicherungskopie Copy-Item -Path $MergedCIPolicy -Destination $EnforcedCIPolicy # Anschließend wird die Audit-Regel entfernt Set-RuleOption -FilePath $EnforcedCIPolicy -Option 3 -Delete # Auditing aus der Regel entfernen ConvertFrom-CIPolicy -XmlFilePath $EnforcedCIPolicy -BinaryFilePath $CIPolicyBin # Um die Deaktivierung von Policies zu verhindern, kann die Binärdatei digitial signiert werden. # Hierfür benötigen Si eine Codesignaturzertifikat. Das Zertifikat können Sie sich zu Testzwecken mit Powershell # erstellen $Cert = New-SelfSignedCertificate -Subject "codesignatur" -Type CodeSigningCert -CertStoreLocation Cert:\CurrentUser\my | Export-Certificate -Type CERT -FilePath $HOME\desktop\codesig.cer # Für Produktivumgebungen benötigen Sie eine eigene Zertifizierungsstelle oder ein gekauftes Zertifikat. # Codesignaturzertifikat erstellen mit eigener PKI: # https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/create-code-signing-cert-for-windows-defender-application-control $CIPolicyBin = $CIPolicyBin # Fügen Sie das Zertifikat, mit dem die Signatur erfolgen muß, der XML-Datei hinzu Add-SignerRule -FilePath $EnforcedCIPolicy -CertificatePath $Cert.FullName -Kernel -User –Update # Entfernen Sie anschließend die Regel, die eine nicht-signierte Policy erlaubt Set-RuleOption -FilePath $env:userprofile -Option 6 -Delete ConvertFrom-CIPolicy $InitialCIPolicy $CIPolicyBin # Anschließende können Sie das Signtool (gehört zu den Windows-Bordmitteln) verwenden, um die Datei zu signieren. Der String # "codesignatur" entspricht dem Namen (Subject) des Zertifikats, dass für die Signatur verwendet werden soll. Signtool # holt sich das Zertifikat dann aus dem Windows Zertifikatsspeicher. signtool.exe sign -v /n "codesignatur" -p7 . -p7co 1.3.6.1.4.1.311.79.1 -fd sha256 $CIPolicyBin # Zum Entfernen einer signierten Policy müssen Si eine neue Policy erstellen, die mit dem gleichen Schlüssel signiert wurde # und die Option 6 gestetzt hat: Unsigned System Integrity Policy # Anschließend ersetzen Sie die alte Policy durch die neue und starten das Betriebssytem einmal durch. ### Katalogdateien # Mit Katalogfiles können Sie die Liste der erlaubten Programme erweitern, ohne eine neue Policy erstellen zu müssen. # Ein Katalogfile ist eine Textdatei mit Hashes von Dateien, die erlaubt sind. Die Datei muß anschließend signiert werden. # Das Erstellen der Datei erledigt packageinspector.exe. Die Datei gehört zu den Windows-Bordmitteln und ist unter # Windows\system32 zu finden. # # https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/deploy-catalog-files-to-support-windows-defender-application-control # Starten Sie Überwachung auf dem Laufwerk, auf dem das neue Programm installiert werden soll. PackageInspector.exe Start C: # Installieren Sie die Software, die in den Katalog aufgenommen werden soll. $CatFileName = $CIPolicyPath + "\LOBApp-Contoso.cat" $CatDefName = $CIPolicyPath + "\LOBApp.cdf" # Beenden Sie die Überwachung unter Angabe des neuen Katalogs PackageInspector.exe Stop C: -Name $CatFileName -cdfpath $CatDefName # Alternativ kann auch ein Verzeichnis gesannt werden PackageInspector.exe scan 'c:\Program Files' # Anschließend muß der Katalog signiert werden signtool.exe sign /n "codesignatur" /fd sha256 /v $CatFileName # Sie können mehrere Katalog-Dateien erstellen. Die Dateien müssen im Ornder \catroot\ abgelegt werden. Copy-Item -Path $CatFileName -Destination (Join-Path -Path $env:windir -ChildPath "System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}") # Das Zertifikat, mit dem die katalogdatei signiert wurde, muß der Policy hinzugefügt werden. Add-SignerRule -FilePath $MergedCIPolicy -CertificatePath $cert.FullName -User ConvertFrom-CIPolicy -XmlFilePath $EnforcedCIPolicy -BinaryFilePath $CIPolicyBin # Mit dem Managed Installer kann ab Windows 10 1703 jedem Programm automatisch vertraut werden, wenn # es durch eine Softwareverteilung bereitgestellt wird. # https://learn.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/configure-authorized-apps-deployed-with-a-managed-installer