Verwenden des App-Steuerelements zum Sichern von PowerShell
In diesem Artikel wird beschrieben, wie Sie eine App Control for Business-Richtlinie einrichten. Sie können die Richtlinie so konfigurieren, dass die Richtlinienregel erzwungen oder überwacht wird. Im Überwachungsmodus ändert sich das PowerShell-Verhalten nicht, die Meldungen mit der Ereignis-ID 16387 werden aber im PowerShellCore/Analytic
-Ereignisprotokoll protokolliert. Im Erzwingungsmodus wendet PowerShell die Einschränkungen der Richtlinie an.
In diesem Artikel wird davon ausgegangen, dass Sie einen Testcomputer verwenden, damit Sie das PowerShell-Verhalten unter einer computerweiten App-Steuerungsrichtlinie testen können, bevor Sie die Richtlinie in Ihrer Umgebung bereitstellen.
Erstellen einer App-Steuerelementrichtlinie
Eine App-Steuerelementrichtlinie wird in einer XML-Datei beschrieben, die Informationen zu Richtlinienoptionen, zulässigen Dateien und Signaturzertifikaten enthält, die von der Richtlinie erkannt werden. Wenn die Richtlinie angewendet wird, dürfen nur genehmigte Dateien geladen und ausgeführt werden. PowerShell blockiert entweder die Ausführung nicht genehmigter Skriptdateien oder führt sie je nach Richtlinienoptionen im ConstrainedLanguage
-Modus aus.
Sie erstellen und bearbeiten die App-Steuerelementrichtlinie mithilfe des ConfigCI-Moduls , das in allen unterstützten Windows-Versionen verfügbar ist. Dieses Windows PowerShell-Modul kann in Windows PowerShell 5.1 oder in PowerShell 7 über die Windows-Kompatibilitätsebene verwendet werden. Es ist einfacher, dieses Modul in Windows PowerShell zu verwenden. Die von Ihnen erstellte Richtlinie kann auf eine beliebige Version von PowerShell angewendet werden.
Schritte zum Erstellen einer App-Steuerelementrichtlinie
Zum Testen müssen Sie lediglich eine Standardrichtlinie und ein selbstsigniertes Codesignaturzertifikat erstellen.
Erstellen einer Standardrichtlinie
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
Mit diesem Befehl wird eine Standardrichtliniendatei mit dem Namen
SystemCIPolicy.xml
erstellt, die die Ausführung aller von Microsoft-Dateien mit Codesignatur ermöglicht.Hinweis
Das Ausführen dieses Befehls kann bis zu zwei Stunden dauern, da der gesamte Testcomputer gescannt werden muss.
Deaktivieren des Überwachungsmodus in der Standardrichtlinie
Eine neue Richtlinie wird immer im
Audit
-Modus erstellt. Zum Testen der Richtlinienerzwingung müssen Sie den Überwachungsmodus deaktivieren, wenn Sie die Richtlinie anwenden. Bearbeiten Sie die DateiSystemCIPolicy.xml
mit einem Text-Editor wienotepad.exe
oder Visual Studio Code (VS Code). Kommentieren Sie dieAudit mode
-Option aus.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
Erstellen eines selbstsignierten Codesignaturzertifikats
Sie benötigen ein Codesignaturzertifikat, um alle Testbinärdateien oder Skriptdateien zu signieren, die Sie auf Ihrem Testcomputer ausführen möchten. Das
New-SelfSignedCertificate
wird vom PKI-Modul bereitgestellt. Um optimale Ergebnisse zu erzielen, sollten Sie diesen Befehl in Windows PowerShell 5.1 ausführen.$newSelfSignedCertificateSplat = @{ DnsName = $env:COMPUTERNAME CertStoreLocation = "Cert:\CurrentUser\My\" Type = 'CodeSigningCert' } $cert = New-SelfSignedCertificate @newSelfSignedCertificateSplat Export-Certificate -Cert $cert -FilePath c:\certs\signing.cer Import-Certificate -FilePath C:\certs\signing.cer -CertStoreLocation "Cert:\CurrentUser\Root\" $cert = Get-ChildItem Cert:\CurrentUser\My\ -CodeSigningCert dir c:\bin\powershell\pwsh.exe | Set-AuthenticodeSignature -Certificate $cert
Hinzufügen des Codesignaturzertifikats zur Richtlinie
Verwenden Sie den folgenden Befehl, um der Richtlinie das neue Codesignaturzertifikat hinzuzufügen.
Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
Konvertieren der XML-Richtliniendatei in eine Binärdatei für die Richtlinienerzwingung
Schließlich müssen Sie die XML-Datei in eine binärdatei konvertieren, die von App Control verwendet wird, um eine Richtlinie anzuwenden.
ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
Anwenden der App-Steuerelementrichtlinie
Um die Richtlinie auf Ihren Testcomputer anzuwenden, kopieren Sie die Datei
SIPolicy.p7b
an den erforderlichen Systemspeicherort,C:\Windows\System32\CodeIntegrity
.Hinweis
Einige Richtliniendefinitionen müssen in einen Unterordner kopiert werden, z. B.
C:\Windows\System32\CodeIntegrity\CiPolicies
. Weitere Informationen finden Sie unter App-Steuerungs-Administratortipps und bekannte Probleme.Deaktivieren der App-Steuerelementrichtlinie
Um die Richtlinie zu deaktivieren, benennen Sie die Datei
SIPolicy.p7b
um. Wenn Sie weitere Tests durchführen müssen, können Sie den Namen wieder ändern, um die Richtlinie erneut zu aktivieren.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
Testen der Überwachung von App-Steuerelementrichtlinien
PowerShell 7.4 hat ein neues Feature zur Unterstützung von App-Steuerelementrichtlinien im Überwachungsmodus hinzugefügt. Im Überwachungsmodus führt PowerShell die nicht vertrauenswürdigen Skripts im ConstrainedLanguage
-Modus ohne Fehler aus, protokolliert jedoch Meldungen im Ereignisprotokoll. In den Protokollmeldungen wird beschrieben, welche Einschränkungen gelten, wenn sich die Richtlinie im Erzwingungsmodus befindet.
Anzeigen von Überwachungsereignissen
PowerShell protokolliert Überwachungsereignisse im PowerShellCore/Analytic-Ereignisprotokoll. Das Protokoll ist standardmäßig nicht aktiviert. Um das Protokoll zu aktivieren, öffnen Sie die Windows-Ereignisanzeige, klicken Sie mit der rechten Maustaste auf das PowerShellCore/Analytic-Protokoll, und wählen Sie Protokoll aktivieren aus.
Sie können alternativ auch den folgenden Befehl in einer PowerShell-Sitzung mit erhöhten Rechten ausführen.
wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet
Sie können die Ereignisse in der Windows-Ereignisanzeige anzeigen oder das Get-WinEvent
-Cmdlet verwenden, um die Ereignisse abzurufen.
Get-WinEvent -LogName PowerShellCore/Analytic -Oldest |
Where-Object Id -eq 16387 | Format-List
TimeCreated : 4/19/2023 10:11:07 AM
ProviderName : PowerShellCore
Id : 16387
Message : App Control Audit.
Title: Method or Property Invocation
Message: Method or Property 'WriteLine' on type 'System.Console' invocation will not
be allowed in ConstrainedLanguage mode.
At C:\scripts\Test1.ps1:3 char:1
+ [System.Console]::WriteLine("pwnd!")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FullyQualifiedId: MethodOrPropertyInvocationNotAllowed
Die Ereignismeldung enthält die Skriptposition, an der die Einschränkung angewendet wird. Diese Informationen helfen Ihnen zu verstehen, wo Sie Ihr Skript ändern müssen, damit es unter der App-Steuerelementrichtlinie ausgeführt wird.
Wichtig
Nachdem Sie die Überwachungsereignisse überprüft haben, sollten Sie das Analyseprotokoll deaktivieren. Analyseprotokolle wachsen schnell und erfordern große Mengen an Speicherplatz.
Anzeigen von Überwachungsereignissen im PowerShell-Debugger
Wenn Sie die $DebugPreference
-Variable für eine interaktive PowerShell-Sitzung auf Break
festlegen, wird der Befehlszeilenskript-Debugger von PowerShell an der aktuellen Stelle im Skript unterbrochen, an der das Überwachungsereignis aufgetreten ist. Mit diesem Breakpoint können Sie Ihren Code debuggen und den aktuellen Status des Skripts in Echtzeit überprüfen.