Dela via


Så här använder du App Control för att skydda PowerShell

I den här artikeln beskrivs hur du konfigurerar en appkontroll för företag-princip . Du kan konfigurera principen för att framtvinga eller granska principens regel. I granskningsläge ändras inte PowerShell-beteendet, men händelse-ID 16387-meddelanden loggas i händelseloggen PowerShellCore/Analytic . I tvingande läge tillämpar PowerShell principens begränsningar.

Den här artikeln förutsätter att du använder en testdator så att du kan testa PowerShell-beteendet under en appkontrollprincip för hela datorn innan du distribuerar principen i din miljö.

Skapa en appkontrollprincip

En appkontrollprincip beskrivs i en XML-fil som innehåller information om principalternativ, tillåtna filer och signeringscertifikat som identifieras av principen. När principen tillämpas kan endast godkända filer läsas in och köras. PowerShell blockerar antingen icke godkända skriptfiler från att köra eller kör dem i ConstrainedLanguage läge, beroende på principalternativ.

Du skapar och ändrar appkontrollprincipen med hjälp av ConfigCI-modulen , som är tillgänglig i alla Windows-versioner som stöds. Den här Windows PowerShell-modulen kan användas i Windows PowerShell 5.1 eller i PowerShell 7 via Windows-kompatibilitetslagret . Det är enklare att använda den här modulen i Windows PowerShell. Principen du skapar kan tillämpas på valfri version av PowerShell.

Steg för att skapa en appkontrollprincip

För testning behöver du bara skapa en standardprincip och ett självsignerat kodsigneringscertifikat.

  1. Skapa en standardprincip

    New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
    

    Det här kommandot skapar en standardprincipfil med namnet SystemCIPolicy.xml som gör att alla Kodsignerade Filer från Microsoft kan köras.

    Kommentar

    Det kan ta upp till två timmar att köra det här kommandot eftersom det måste genomsöka hela testdatorn.

  2. Inaktivera granskningsläge i standardprincip

    En ny princip skapas alltid i Audit läge. Om du vill testa principtillämpningen måste du inaktivera granskningsläget när du tillämpar principen. SystemCIPolicy.xml Redigera filen med hjälp av en textredigerare som notepad.exe eller Visual Studio Code (VS Code). Kommentera ut alternativet Audit mode .

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Skapa ett självsignerat kodsigneringscertifikat

    Du behöver ett kodsigneringscertifikat för att signera eventuella test binärfiler eller skriptfiler som du vill köra på testdatorn. New-SelfSignedCertificate tillhandahålls av PKI-modulen. För bästa resultat bör du köra det här kommandot i Windows PowerShell 5.1.

    $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. Lägg till kodsigneringscertifikatet i principen

    Använd följande kommando för att lägga till det nya kodsigneringscertifikatet i principen.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
    
  5. Konvertera XML-principfilen till en binär fil för principframtvingande

    Slutligen måste du konvertera XML-filen till en binär fil som används av App Control för att tillämpa en princip.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Tillämpa appkontrollprincipen

    Om du vill tillämpa principen på testdatorn kopierar du SIPolicy.p7b filen till den systemplats som krävs, C:\Windows\System32\CodeIntegrity.

    Kommentar

    Vissa principdefinitioner måste kopieras till en undermapp, till exempel C:\Windows\System32\CodeIntegrity\CiPolicies. Mer information finns i Administratörstips för appkontroll och kända problem.

  7. Inaktivera appkontrollprincipen

    Om du vill inaktivera principen byter du namn på SIPolicy.p7b filen. Om du behöver göra mer testning kan du ändra tillbaka namnet till att återaktivera principen.

    Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
    

Testa med appkontrollprincipgranskning

PowerShell 7.4 har lagt till en ny funktion som stöder App Control-principer i granskningsläge . I granskningsläge kör PowerShell de ej betrodda skripten i läge utan fel, men loggar meddelanden till händelseloggen i ConstrainedLanguage stället. Loggmeddelandena beskriver vilka begränsningar som skulle gälla om principen var i framtvinga läge.

Visa granskningshändelser

PowerShell loggar granskningshändelser till händelseloggen PowerShellCore/Analys . Loggen är inte aktiverad som standard. Om du vill aktivera loggen öppnar du Windows-Loggboken, högerklickar på PowerShellCore/Analysloggen och väljer Aktivera logg.

Du kan också köra följande kommando från en upphöjd PowerShell-session.

wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet

Du kan visa händelserna i Windows Loggboken eller använda cmdleten Get-WinEvent för att hämta händelserna.

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

Händelsemeddelandet innehåller skriptpositionen där begränsningen skulle tillämpas. Den här informationen hjälper dig att förstå var du behöver ändra skriptet så att det körs under appkontrollprincipen.

Viktigt!

När du har granskat granskningshändelserna bör du inaktivera analysloggen. Analysloggar växer snabbt och förbrukar stora mängder diskutrymme.

Visa granskningshändelser i PowerShell-felsökningsprogrammet

Om du anger variabeln $DebugPreference till Break för en interaktiv PowerShell-session bryter PowerShell in i felsökningsprogrammet för kommandoradsskriptet på den aktuella platsen i skriptet där granskningshändelsen inträffade. Med brytpunkten kan du felsöka koden och kontrollera skriptets aktuella tillstånd i realtid.