Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 -UserPEsDet här kommandot skapar en standardprincipfil med namnet
SystemCIPolicy.xmlsom 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
Auditläge. Om du vill testa principtillämpningen måste du inaktivera granskningsläget när du tillämpar principen.SystemCIPolicy.xmlRedigera filen med hjälp av en textredigerare somnotepad.exeeller 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-SelfSignedCertificatetillhandahå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 $certLä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 -UserKonvertera 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.p7bTillämpa appkontrollprincipen
Om du vill tillämpa principen på testdatorn kopierar du
SIPolicy.p7bfilen 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.p7bfilen. 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.