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.
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.
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 somnotepad.exe
eller Visual Studio Code (VS Code). Kommentera ut alternativetAudit mode
.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
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
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
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
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.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.