Kommentar
Å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 App Control for Business-policy. Du kan konfigurera principen så att den tillämpar eller granskar efterlevnaden av dess 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ö.
Appkontrollprinciper
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. Du kan använda den här Windows PowerShell-modulen i Windows PowerShell 5.1 eller i PowerShell 7 via kompatibilitetslagret Windows. 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 standardpolicy
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 policy skapas alltid i läget
Audit. 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 policyn.
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 App Control-principen
Om du vill tillämpa principen på testdatorn kopierar du
SIPolicy.p7bfilen till den systemplats som krävs,C:\Windows\System32\CodeIntegrity.Kommentar
Du måste kopiera vissa principdefinitioner till en undermapp, till exempel
C:\Windows\System32\CodeIntegrity\CiPolicies. Mer information finns i [Tips för appkontrolladministratör och kända problem][01].Inaktivera principen för App Control
Om du vill inaktivera principen byter du namn på
SIPolicy.p7bfilen. Om du behöver göra fler tester kan du ändra namnet tillbaka för att återaktivera policyn.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 icke betrodda skripten i ConstrainedLanguage-läge utan fel, men loggar i stället meddelanden i händelseloggen. 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.
Ytterligare konfigurationsinställningar för PowerShell
App Control stöder ytterligare konfigurationsinställningar för PowerShell.
BlockScriptOnPolicyFailure: Den här inställningen blockerar körningen av skript som inte uppfyller appkontrollprincipkraven. När den är aktiverad blockerar App Control alla skript som inte uttryckligen tillåts av principen i stället för att köra det i begränsatLanguage-läge .Kommentar
Den här inställningen tillämpas av App Control och gäller för alla versioner av PowerShell (
powershell.exeochpwsh.exe).FileOnlyEntry: Den här inställningen förhindrar att PowerShell körs med argument som inte resulterar i körning av en angiven fil. När det är aktiverat blockerar App Control körningen av PowerShell-kommandon som skickas via pipelinen, till parametrarna-Commandeller-EncodedCommandeller de interaktiva sessioner som tillåter direkt kommandokörning. När det är aktiverat kör PowerShell endast skript som anges med parametern-File.Exempel på blockerade körningar:
pwsh pwsh -NoExit -File ./file.ps1 pwsh -Command Get-ChildItem "Get-ChildItem" | pwsh -File - pwsh -EncodedCommand <base64-string>Exempel på tillåtna körningar:
pwsh -File ./file.ps1 pwsh -NoProfile -NonInteractive -File ./file.ps1 arg1 arg2Kommentar
Den här inställningen gäller endast för PowerShell 7.6.6 och senare versioner. Om du konfigurerar den här inställningen för tidigare versioner ignoreras AppSetting tyst.
Om du vill använda de här inställningarna måste du lägga till dem i XML-filen för appkontrollprincip (SystemCIPolicy.xml).
Öppna XML-filen i en textredigerare och lägg till <AppSettings>-avsnittet i principyn. I följande exempel visas <AppSettings> XML med båda inställningarna aktiverade.
<?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>