Použití Řízení aplikací k zabezpečení PowerShellu
Tento článek popisuje, jak nastavit zásady řízení aplikací pro firmy . Zásady můžete nakonfigurovat tak, aby vynucovali nebo auditovali pravidlo zásady. V režimu auditu se chování PowerShellu nemění, ale protokoluje zprávy s ID události 16387 do PowerShellCore/Analytic
protokolu událostí. V režimu vynucení použije PowerShell omezení zásad.
Tento článek předpokládá, že používáte testovací počítač, abyste mohli otestovat chování PowerShellu v rámci zásad řízení aplikací pro celý počítač před nasazením zásad ve vašem prostředí.
Vytvoření zásady řízení aplikací
Zásady řízení aplikací jsou popsány v souboru XML, který obsahuje informace o možnostech zásad, souborech povolených a podpisových certifikátech rozpoznané zásadou. Při použití zásady se můžou načítat a spouštět jenom schválené soubory. PowerShell buď blokuje neschválené soubory skriptů, nebo je spouští v ConstrainedLanguage
režimu v závislosti na možnostech zásad.
Zásady řízení aplikací vytváříte a manipulujete s nimi pomocí modulu ConfigCI , který je k dispozici ve všech podporovaných verzích Windows. Tento modul Windows PowerShellu je možné použít ve Windows PowerShellu 5.1 nebo v PowerShellu 7 prostřednictvím vrstvy kompatibility windows. Tento modul je jednodušší používat ve Windows PowerShellu. Zásady, které vytvoříte, se dají použít pro libovolnou verzi PowerShellu.
Postup vytvoření zásady řízení aplikací
K testování stačí vytvořit výchozí zásadu a podpisový certifikát kódu podepsaný svým držitelem.
Vytvoření výchozí zásady
New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
Tento příkaz vytvoří výchozí soubor zásad,
SystemCIPolicy.xml
který umožňuje spuštění všech souborů podepsaných kódem Microsoftu.Poznámka:
Spuštění tohoto příkazu může trvat až dvě hodiny, protože musí zkontrolovat celý testovací počítač.
Zakázání režimu auditování ve výchozích zásadách
Nová zásada se vždy vytvoří v
Audit
režimu. Pokud chcete otestovat vynucování zásad, musíte režim auditování zakázat, když zásadu použijete.SystemCIPolicy.xml
Upravte soubor pomocí textového editoru, jako jenotepad.exe
Visual Studio Code (VS Code). ZakomentujteAudit mode
možnost.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
Vytvoření podpisového certifikátu kódu podepsaného svým držitelem
K podepsání testovacích binárních souborů nebo souborů skriptu, které chcete spustit na testovacím počítači, potřebujete podpisový certifikát kódu. Modul
New-SelfSignedCertificate
PKI poskytuje. Nejlepších výsledků dosáhnete, když tento příkaz spustíte ve Windows PowerShellu 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
Přidání podpisového certifikátu kódu do zásady
Pomocí následujícího příkazu přidejte do zásady nový podpisový certifikát kódu.
Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath C:\certs\signing.cer -User
Převod souboru zásad XML na binární soubor vynucení zásad
Nakonec musíte převést soubor XML na binární soubor používaný ovládacím prvek aplikace k použití zásady.
ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
Použití zásad řízení aplikací
Pokud chcete zásadu použít na testovacím počítači, zkopírujte
SIPolicy.p7b
soubor do požadovaného systémového umístěníC:\Windows\System32\CodeIntegrity
.Poznámka:
Některé definice zásad se musí zkopírovat do podsložky, například
C:\Windows\System32\CodeIntegrity\CiPolicies
. Další informace najdete v tématu Tipy pro správce řízení aplikací a známé problémy.Zakázání zásad řízení aplikací
Pokud chcete zásadu zakázat, přejmenujte
SIPolicy.p7b
soubor. Pokud potřebujete provést další testování, můžete název změnit zpět, aby se zásady znovu mohly obnovit.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
Testování pomocí auditování zásad řízení aplikací
PowerShell 7.4 přidal novou funkci pro podporu zásad řízení aplikací v režimu auditování . V režimu auditu PowerShell spouští nedůvěryhodné skripty v ConstrainedLanguage
režimu bez chyb, ale protokoluje zprávy do protokolu událostí. Zprávy protokolu popisují, jaká omezení by se použila, pokud by zásady byly v režimu vynucení .
Zobrazení událostí auditu
PowerShell protokoluje události auditu do protokolu událostí PowerShellCore/Analytic . Protokol není ve výchozím nastavení povolený. Pokud chcete protokol povolit, otevřete windows Prohlížeč událostí, klikněte pravým tlačítkem na protokol PowerShellCore/Analytic a vyberte Povolit protokol.
Případně můžete z relace PowerShellu se zvýšenými oprávněními spustit následující příkaz.
wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet
Události ve Windows Prohlížeč událostí můžete zobrazit nebo pomocí Get-WinEvent
rutiny události načíst.
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
Zpráva události obsahuje umístění skriptu, kde by se omezení použilo. Tyto informace vám pomůžou pochopit, kde potřebujete změnit skript tak, aby běžel v zásadách řízení aplikací.
Důležité
Po kontrole událostí auditu byste měli analytický protokol zakázat. Analytické protokoly se rychle zvětšují a spotřebovávají velké množství místa na disku.
Zobrazení událostí auditu v ladicím programu PowerShellu
Pokud nastavíte $DebugPreference
proměnnou Break
na interaktivní relaci PowerShellu, PowerShell se rozdělí do ladicího programu skriptu příkazového řádku v aktuálním umístění ve skriptu, kde došlo k události auditu. Zarážka umožňuje ladit kód a kontrolovat aktuální stav skriptu v reálném čase.