Sdílet prostřednictvím


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.

  1. 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č.

  2. 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 je notepad.exe Visual Studio Code (VS Code). Zakomentujte Audit mode možnost.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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.

  7. 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.