Freigeben über


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.

  1. 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.

  2. 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 Datei SystemCIPolicy.xml mit einem Text-Editor wie notepad.exe oder Visual Studio Code (VS Code). Kommentieren Sie die Audit mode-Option aus.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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.

  7. 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.