Megosztás a következőn keresztül:


Az App Control használata a PowerShell biztonságossá tételéhez

Ez a cikk azt ismerteti, hogyan állíthat be alkalmazásvezérlő vállalati szabályzatot. Konfigurálhatja a szabályzatot a szabályzat szabályának kikényszerítésére vagy naplózására. Naplózási módban a PowerShell működése nem változik, de naplózza az eseményazonosító 16387-et az PowerShellCore/Analytic eseménynaplóba. Kényszerítési módban a PowerShell alkalmazza a szabályzat korlátozásait.

Ez a cikk feltételezi, hogy tesztgépet használ, hogy tesztelhesse a PowerShell működését egy gépszintű alkalmazásvezérlési szabályzatban, mielőtt üzembe helyezené a házirendet a környezetben.

Alkalmazásvezérlési szabályzat létrehozása

Az alkalmazásvezérlési szabályzatokat egy XML-fájl ismerteti, amely információkat tartalmaz a szabályzat beállításairól, az engedélyezett fájlokról és a szabályzat által felismert aláíró tanúsítványokról. A szabályzat alkalmazásakor csak a jóváhagyott fájlok tölthetőek be és futtathatók. A PowerShell vagy letiltja a nem jóváhagyott parancsfájlok futtatását, vagy a házirend beállításaitól függően módban futtatja őket ConstrainedLanguage .

Az alkalmazásvezérlési szabályzatot a ConfigCI modullal hozhatja létre és módosíthatja, amely az összes támogatott Windows-verzióban elérhető. Ez a Windows PowerShell-modul a Windows PowerShell 5.1-ben vagy a PowerShell 7-ben használható a Windows kompatibilitási rétegen keresztül. Ezt a modult egyszerűbben használhatja a Windows PowerShellben. A létrehozott szabályzat a PowerShell bármely verziójára alkalmazható.

Alkalmazásvezérlési szabályzat létrehozásának lépései

A teszteléshez csak létre kell hoznia egy alapértelmezett szabályzatot és egy önaláírt kódaláíró tanúsítványt.

  1. Alapértelmezett szabályzat létrehozása

    New-CIPolicy -Level PcaCertificate -FilePath .\SystemCIPolicy.xml -UserPEs
    

    Ez a parancs létrehoz egy alapértelmezett szabályzatfájlt, amelynek a neve SystemCIPolicy.xml lehetővé teszi az összes Microsoft kódaláírt fájl futtatását.

    Feljegyzés

    A parancs futtatása akár két órát is igénybe vehet, mert a teljes tesztgépet be kell vizsgálnia.

  2. Naplózási mód letiltása az alapértelmezett házirendben

    A rendszer mindig módban hoz létre új szabályzatot Audit . A szabályzatkényszerítés teszteléséhez le kell tiltania a naplózási módot a szabályzat alkalmazásakor. Szerkessze a SystemCIPolicy.xml fájlt egy szövegszerkesztővel, például notepad.exe a Visual Studio Code-tal (VS Code). Tegye megjegyzésbe a Audit mode lehetőséget.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Önaláírt kódaláíró tanúsítvány létrehozása

    A tesztgépen futtatni kívánt teszt bináris fájlok vagy parancsfájlok aláírásához kódaláíró tanúsítványra van szükség. Ezt New-SelfSignedCertificate a PKI modul biztosítja. A legjobb eredmény érdekében futtassa ezt a parancsot a Windows PowerShell 5.1-ben.

    $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. Kódaláíró tanúsítvány hozzáadása a szabályzathoz

    Az alábbi paranccsal adja hozzá az új kódaláíró tanúsítványt a szabályzathoz.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath C:\certs\signing.cer -User
    
  5. Az XML-szabályzatfájl konvertálása szabályzatkényszerítési bináris fájllá

    Végül az XML-fájlt bináris fájllá kell konvertálnia, amelyet az App Control használ egy szabályzat alkalmazásához.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Az Alkalmazásvezérlési szabályzat alkalmazása

    Ha a szabályzatot a tesztgépre szeretné alkalmazni, másolja a SIPolicy.p7b fájlt a szükséges rendszerhelyre. C:\Windows\System32\CodeIntegrity

    Feljegyzés

    Egyes szabályzatdefiníciókat át kell másolni egy almappába, például C:\Windows\System32\CodeIntegrity\CiPolicies. További információ: Alkalmazásvezérlési rendszergazdai tippek > Ismert problémák.

  7. Az alkalmazásvezérlési szabályzat letiltása

    A szabályzat letiltásához nevezze át a SIPolicy.p7b fájlt. Ha további tesztelést kell végeznie, módosíthatja a nevet a szabályzat újrakonzolására.

    Rename-Item -Path .\SIPolicy.p7b -NewName .\SIPolicy.p7b.off
    

Alkalmazásvezérlési szabályzat naplózásának tesztelése

A PowerShell 7.4 új funkciót adott hozzá az alkalmazásvezérlési szabályzatok naplózási módban való támogatásához. Naplózási módban a PowerShell hiba nélkül futtatja a nem megbízható szkripteket ConstrainedLanguage , de ehelyett naplózza az üzeneteket az eseménynaplóba. A naplóüzenetek azt írják le, hogy milyen korlátozások vonatkoznak, ha a szabályzat kényszerítés módban lenne.

Naplózási események megtekintése

A PowerShell naplózza az eseményeket a PowerShellCore/Analitikus eseménynaplóban. A napló alapértelmezés szerint nincs engedélyezve. A napló engedélyezéséhez nyissa meg a Windows Eseménynapló, kattintson a jobb gombbal a PowerShellCore/Elemzési naplóra, és válassza a Napló engedélyezése lehetőséget.

Másik lehetőségként futtathatja a következő parancsot egy emelt szintű PowerShell-munkamenetből.

wevtutil.exe sl PowerShellCore/Analytic /enabled:true /quiet

Megtekintheti az eseményeket a Windows Eseménynapló, vagy a Get-WinEvent parancsmag használatával lekérheti az eseményeket.

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

Az eseményüzenet tartalmazza azt a szkriptpozíciót, ahol a korlátozást alkalmazni szeretné. Ezek az információk segítenek megérteni, hogy hol kell módosítania a szkriptet, hogy az az Alkalmazásvezérlési szabályzatban fusson.

Fontos

A naplózási események áttekintése után le kell tiltania az elemzési naplót. Az elemzési naplók gyorsan növekednek, és nagy mennyiségű lemezterületet használnak fel.

Naplózási események megtekintése a PowerShell-hibakeresőben

Ha a $DebugPreference változót egy interaktív PowerShell-munkamenetre Break állítja be, a PowerShell a parancssori szkript hibakeresője lesz a szkript aktuális helyén, ahol a naplózási esemény történt. A töréspont lehetővé teszi a kód hibakeresését és a szkript aktuális állapotának valós idejű vizsgálatát.