Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
App-Steuerungsrichtlinien
Eine App-Control-Richtlinie wird in einer XML-Datei beschrieben, die Informationen zu Richtlinienoptionen, zulässigen Dateien und von der Richtlinie erkannten Signaturzertifikaten enthält. 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. Sie können dieses Windows PowerShell-Modul in Windows PowerShell 5.1 oder in PowerShell 7 über die Windows Kompatibilitätsebene verwenden. 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-Kontrollrichtlinie
Zum Testen müssen Sie lediglich eine Standardrichtlinie und ein selbstsigniertes Codesignaturzertifikat erstellen.
Erstellen einer Standardrichtlinie
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEsMit diesem Befehl wird eine Standardrichtliniendatei mit dem Namen
SystemCIPolicy.xmlerstellt, 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.
Überwachungsmodus in der Standardrichtlinie deaktivieren
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.xmlmit einem Text-Editor wienotepad.exeoder 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-SelfSignedCertificatewird 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 $certHinzufü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 -UserKonvertieren 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.p7bAnwenden der Richtlinie für die App-Steuerung
Um die Richtlinie auf Ihren Testcomputer anzuwenden, kopieren Sie die Datei
SIPolicy.p7ban den erforderlichen Systemspeicherort,C:\Windows\System32\CodeIntegrity.Hinweis
Sie müssen einige Richtliniendefinitionen in einen Unterordner wie z. B.
C:\Windows\System32\CodeIntegrity\CiPolicieskopieren. Weitere Informationen finden Sie unter [Tipps für App-Steuerungsadministratoren und bekannte Probleme][01].Deaktivieren Sie die App-Kontrollrichtlinie
Um die Richtlinie zu deaktivieren, benennen Sie die Datei
SIPolicy.p7bum. 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 mithilfe der Überwachung der Richtlinie für die App-Steuerung
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, unterbricht PowerShell den Befehlszeilenskript-Debugger an der Stelle im Skript, 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.
Zusätzliche Konfigurationseinstellungen für PowerShell
Die App-Steuerung unterstützt zusätzliche Konfigurationseinstellungen für PowerShell.
BlockScriptOnPolicyFailure: Diese Einstellung blockiert die Ausführung von Skripts, die die Richtlinienanforderungen der App-Steuerung nicht erfüllen. Wenn diese Option aktiviert ist, blockiert die App-Steuerung alle Skripte, die nicht explizit durch die Richtlinie zugelassen sind, anstatt sie im Modus ConstrainedLanguage auszuführen.Hinweis
Diese Einstellung wird von Der App-Steuerung erzwungen und gilt für alle Versionen von PowerShell (
powershell.exeundpwsh.exe).FileOnlyEntry: Diese Einstellung verhindert, dass PowerShell mit Argumenten ausgeführt wird, die nicht zur Ausführung einer angegebenen Datei führen. Wenn diese Option aktiviert ist, blockiert App Control die Ausführung von PowerShell-Befehlen, die über die Pipeline, über die Parameter-Commandoder-EncodedCommandoder über interaktive Sitzungen übergeben werden, die die direkte Ausführung von Befehlen ermöglichen. Wenn diese Option aktiviert ist, führt PowerShell nur Skripts aus, die mit dem-FileParameter angegeben sind.Beispiele für blockierte Ausführungen:
pwsh pwsh -NoExit -File ./file.ps1 pwsh -Command Get-ChildItem "Get-ChildItem" | pwsh -File - pwsh -EncodedCommand <base64-string>Beispiele für zulässige Ausführungsbeispiele:
pwsh -File ./file.ps1 pwsh -NoProfile -NonInteractive -File ./file.ps1 arg1 arg2Hinweis
Diese Einstellung gilt nur für PowerShell 7.6.6 und neuere Versionen. Wenn Sie diese Einstellung für frühere Versionen konfigurieren, wird appSetting im Hintergrund ignoriert.
Um diese Einstellungen zu verwenden, müssen Sie sie der XML-Datei der App-Steuerelementrichtlinie hinzufügen (SystemCIPolicy.xml).
Öffnen Sie die XML-Datei in einem Text-Editor, und fügen Sie den <AppSettings> Abschnitt der Richtlinie hinzu. Das folgende Beispiel zeigt das <AppSettings>-XML, wenn beide Einstellungen aktiviert sind.
<?xml version="1.0" encoding="utf-8"?>
<SiPolicy xmlns="urn:schemas-microsoft-com:sipolicy">
<!-- Existing policy content -->
<AppSettings>
<AppSetting
AppManifest="Powershell"
Name="BlockScriptOnPolicyFailure"
Value="true" />
<AppSetting
AppManifest="Powershell"
Name="FileOnlyEntry"
Value="true" />
</AppSettings>
</SiPolicy>