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 vynucovaly nebo auditovaly pravidlo politiky. 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í aplikuje PowerShell omezení těchto 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í.
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.
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.
New-SelfSignedCertificate
je zajištěn modulem PKI. 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řidejte podpisový certifikát kódu do zásady
Pomocí následujícího příkazu přidejte nový certifikát pro podepisování kódu do politiky.
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, který používá App Control k uplatnění zásad.
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 byla politika znovu povolena.Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
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í .
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 můžete zobrazit v Prohlížeči událostí Windows nebo pomocí rutiny Get-WinEvent
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.
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. Bod přerušení umožňuje ladit kód a zkontrolovat aktuální stav skriptu v reálném čase.
Zpětná vazba k produktu PowerShell
PowerShell je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: