Delen via


App Control gebruiken om PowerShell te beveiligen

In dit artikel wordt beschreven hoe u een App Control for Business-beleid instelt. U kunt het beleid configureren om de regel van het beleid af te dwingen of te controleren. In de controlemodus verandert het PowerShell-gedrag niet, maar registreert gebeurtenis-id 16387-berichten in het PowerShellCore/Analytic gebeurtenislogboek. In de afdwingingsmodus past PowerShell de beperkingen van het beleid toe.

In dit artikel wordt ervan uitgegaan dat u een testmachine gebruikt, zodat u PowerShell-gedrag kunt testen onder een machinebreed App Control-beleid voordat u het beleid in uw omgeving implementeert.

Beleid voor app-beheer maken

Een App Control-beleid wordt beschreven in een XML-bestand, dat informatie bevat over beleidsopties, toegestane bestanden en ondertekeningscertificaten die door het beleid worden herkend. Wanneer het beleid wordt toegepast, mogen alleen goedgekeurde bestanden worden geladen en uitgevoerd. PowerShell blokkeert niet-goedgekeurde scriptbestanden of voert ze uit in ConstrainedLanguage de modus, afhankelijk van beleidsopties.

U maakt en bewerkt app-beheerbeleid met behulp van de ConfigCI-module , die beschikbaar is in alle ondersteunde Windows-versies. Deze Windows PowerShell-module kan worden gebruikt in Windows PowerShell 5.1 of in PowerShell 7 via de Windows-compatibiliteitslaag . Het is eenvoudiger om deze module te gebruiken in Windows PowerShell. Het beleid dat u maakt, kan worden toegepast op elke versie van PowerShell.

Stappen voor het maken van een app-beheerbeleid

Voor testen hoeft u alleen een standaardbeleid en een zelfondertekend certificaat voor ondertekening van programmacode te maken.

  1. Een standaardbeleid maken

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

    Met deze opdracht maakt u een standaardbeleidsbestand met de naam SystemCIPolicy.xml waarmee alle door Microsoft-code ondertekende bestanden kunnen worden uitgevoerd.

    Notitie

    Het uitvoeren van deze opdracht kan maximaal twee uur duren, omdat deze de hele testmachine moet scannen.

  2. Controlemodus uitschakelen in standaardbeleid

    Er wordt altijd een nieuw beleid gemaakt in Audit de modus. Als u het afdwingen van beleid wilt testen, moet u de controlemodus uitschakelen wanneer u het beleid toepast. Bewerk het SystemCIPolicy.xml bestand met een teksteditor zoals notepad.exe Visual Studio Code (VS Code). Markeer de Audit mode optie als commentaar.

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Een zelfondertekend certificaat voor ondertekening van programmacode maken

    U hebt een certificaat voor ondertekening van code nodig om binaire testbestanden of scriptbestanden te ondertekenen die u wilt uitvoeren op uw testcomputer. De New-SelfSignedCertificate module wordt geleverd door de PKI-module . Voor de beste resultaten moet u deze opdracht uitvoeren in 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 $cert
    
  4. Het certificaat voor ondertekening van programmacode toevoegen aan het beleid

    Gebruik de volgende opdracht om het nieuwe certificaat voor ondertekening van programmacode toe te voegen aan het beleid.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
    
  5. Het XML-beleidsbestand converteren naar een binair bestand voor het afdwingen van beleid

    Ten slotte moet u het XML-bestand converteren naar een binair bestand dat door App Control wordt gebruikt om een beleid toe te passen.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Het beleid voor app-beheer toepassen

    Als u het beleid wilt toepassen op uw testcomputer, kopieert u het SIPolicy.p7b bestand naar de vereiste systeemlocatie. C:\Windows\System32\CodeIntegrity

    Notitie

    Sommige beleidsdefinities moeten worden gekopieerd naar een submap, zoals C:\Windows\System32\CodeIntegrity\CiPolicies. Zie Tips voor app-beheer en bekende problemen voor meer informatie.

  7. Het beleid voor app-beheer uitschakelen

    Wijzig de naam van het bestand om het SIPolicy.p7b beleid uit te schakelen. Als u meer tests wilt uitvoeren, kunt u de naam weer wijzigen om het beleid opnieuw in te schakelen.

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

Testen met app-beheerbeleidscontrole

PowerShell 7.4 heeft een nieuwe functie toegevoegd ter ondersteuning van app-beheerbeleid in de controlemodus . In de controlemodus voert PowerShell de niet-vertrouwde scripts uit in ConstrainedLanguage de modus zonder fouten, maar registreert berichten in het gebeurtenislogboek. In de logboekberichten wordt beschreven welke beperkingen van toepassing zijn als het beleid zich in de modus Afdwingen bevindt .

Controlegebeurtenissen weergeven

PowerShell registreert auditgebeurtenissen in het Gebeurtenislogboek PowerShellCore/Analytic . Het logboek is niet standaard ingeschakeld. Als u het logboek wilt inschakelen, opent u de Windows-Logboeken, klikt u met de rechtermuisknop op het PowerShellCore-/analyselogboek en selecteert u Logboek inschakelen.

U kunt ook de volgende opdracht uitvoeren vanuit een PowerShell-sessie met verhoogde bevoegdheid.

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

U kunt de gebeurtenissen in de Windows-Logboeken bekijken of de Get-WinEvent cmdlet gebruiken om de gebeurtenissen op te halen.

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

Het gebeurtenisbericht bevat de scriptpositie waar de beperking zou worden toegepast. Deze informatie helpt u te begrijpen waar u uw script moet wijzigen, zodat het wordt uitgevoerd onder het beleid voor app-beheer.

Belangrijk

Nadat u de controlegebeurtenissen hebt gecontroleerd, moet u het analyselogboek uitschakelen. Analytische logboeken groeien snel en verbruiken grote hoeveelheden schijfruimte.

Controlegebeurtenissen weergeven in het PowerShell-foutopsporingsprogramma

Als u de $DebugPreference variabele Break instelt voor een interactieve PowerShell-sessie, breekt PowerShell het foutopsporingsprogramma voor opdrachtregelscripts in op de huidige locatie in het script waar de controlegebeurtenis heeft plaatsgevonden. Met het onderbrekingspunt kunt u fouten opsporen in uw code en de huidige status van het script in realtime inspecteren.