Condividi tramite


Come usare Controllo app per proteggere PowerShell

Questo articolo descrive come configurare un criterio di Controllo app per le aziende . È possibile configurare i criteri per applicare o controllare la regola del criterio. In modalità di controllo, il comportamento di PowerShell non cambia, ma registra i messaggi dell'ID evento 16387 nel PowerShellCore/Analytic registro eventi. In modalità di imposizione PowerShell applica le restrizioni dei criteri.

Questo articolo presuppone che si stia usando un computer di test in modo da poter testare il comportamento di PowerShell in un criterio di controllo app a livello di computer prima di distribuire i criteri nell'ambiente.

Creare un criterio di controllo delle app

I criteri di controllo delle app sono descritti in un file XML, che contiene informazioni sulle opzioni dei criteri, sui file consentiti e sulla firma dei certificati riconosciuti dai criteri. Quando viene applicato il criterio, è consentito caricare ed eseguire solo i file approvati. PowerShell blocca l'esecuzione o l'esecuzione di file di script non approvati in ConstrainedLanguage modalità, a seconda delle opzioni dei criteri.

È possibile creare e modificare i criteri di controllo delle app usando il modulo ConfigCI , disponibile in tutte le versioni di Windows supportate. Questo modulo di Windows PowerShell può essere usato in Windows PowerShell 5.1 o in PowerShell 7 tramite il livello compatibilità di Windows. È più semplice usare questo modulo in Windows PowerShell. I criteri creati possono essere applicati a qualsiasi versione di PowerShell.

Passaggi per creare un criterio di controllo app

Per i test, è sufficiente creare un criterio predefinito e un certificato di firma del codice autofirmato.

  1. Creare un criterio predefinito

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

    Questo comando crea un file di criteri predefinito denominato SystemCIPolicy.xml che consente l'esecuzione di tutti i file con firma codice Microsoft.

    Nota

    L'esecuzione di questo comando può richiedere fino a due ore perché deve analizzare l'intero computer di test.

  2. Disabilitare la modalità di controllo nei criteri predefiniti

    Viene sempre creato un nuovo criterio in Audit modalità . Per testare l'imposizione dei criteri, è necessario disabilitare la modalità di controllo quando si applicano i criteri. Modificare il SystemCIPolicy.xml file usando un editor di testo come notepad.exe o Visual Studio Code (VS Code). Impostare come commento l'opzione Audit mode .

    <!--
    <Rule>
      <Option>Enabled:Audit Mode</Option>
    </Rule>
    -->
    
  3. Creare un certificato di firma del codice autofirmato

    È necessario un certificato di firma del codice per firmare i file binari di test o script da eseguire nel computer di test. Viene New-SelfSignedCertificate fornito dal modulo PKI . Per ottenere risultati ottimali, è consigliabile eseguire questo comando 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. Aggiungere il certificato di firma del codice al criterio

    Usare il comando seguente per aggiungere il nuovo certificato di firma del codice al criterio.

    Add-SignerRule -FilePath .\SystemCIPolicy.xml -CertificatePath c:\certs\signing.cer -User
    
  5. Convertire il file di criteri XML in un file binario di applicazione dei criteri

    Infine, è necessario convertire il file XML in un file binario usato da Controllo app per applicare un criterio.

    ConvertFrom-CIPolicy -XmlFilePath .\SystemCIPolicy.xml -BinaryFilePath .\SIPolicy.p7b
    
  6. Applicare i criteri di controllo delle app

    Per applicare il criterio al computer di test, copiare il SIPolicy.p7b file nel percorso di sistema richiesto, C:\Windows\System32\CodeIntegrity.

    Nota

    Alcune definizioni di criteri devono essere copiate in una sottocartella, C:\Windows\System32\CodeIntegrity\CiPoliciesad esempio . Per altre informazioni, vedere Suggerimenti per amministratori controllo app e problemi noti.

  7. Disabilitare i criteri di controllo delle app

    Per disabilitare il criterio, rinominare il SIPolicy.p7b file. Se è necessario eseguire più test, è possibile modificare di nuovo il nome per riabilitare i criteri.

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

Testare l'uso del controllo dei criteri di controllo delle app

PowerShell 7.4 ha aggiunto una nuova funzionalità per supportare i criteri di controllo delle app in modalità di controllo . In modalità di controllo PowerShell esegue gli script non attendibili in ConstrainedLanguage modalità senza errori, ma registra invece i messaggi nel registro eventi. I messaggi di log descrivono quali restrizioni verranno applicate se i criteri fossero in modalità di imposizione .

Visualizzazione degli eventi di controllo

PowerShell registra gli eventi di controllo nel registro eventi di PowerShellCore/Analytics . Il log non è abilitato per impostazione predefinita. Per abilitare il log, aprire il Visualizzatore eventi di Windows, fare clic con il pulsante destro del mouse sul log di PowerShellCore/Analytics e scegliere Abilita log.

In alternativa, è possibile eseguire il comando seguente da una sessione di PowerShell con privilegi elevati.

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

È possibile visualizzare gli eventi in Windows Visualizzatore eventi o usare il Get-WinEvent cmdlet per recuperare gli eventi.

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

Il messaggio di evento include la posizione dello script in cui verrà applicata la restrizione. Queste informazioni consentono di comprendere dove è necessario modificare lo script in modo che venga eseguito con i criteri di Controllo app.

Importante

Dopo aver esaminato gli eventi di controllo, è necessario disabilitare il log analitico. I log analitici aumentano rapidamente e consumano grandi quantità di spazio su disco.

Visualizzazione degli eventi di controllo nel debugger di PowerShell

Se si imposta la $DebugPreference variabile su Break per una sessione interattiva di PowerShell, PowerShell si interrompe nel debugger dello script della riga di comando nel percorso corrente nello script in cui si è verificato l'evento di controllo. Il punto di interruzione consente di eseguire il debug del codice ed esaminare lo stato corrente dello script in tempo reale.