Condividi tramite


Come usare Controllo app per proteggere PowerShell

Questo articolo descrive come impostare una Politica di App Control per Business. È possibile configurare la politica per applicare o monitorare la regola della politica. 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 applicazione, PowerShell applica le restrizioni della politica.

Questo articolo presume che si stia usando un computer di test in modo da poter testare il comportamento di PowerShell sotto una politica di controllo delle app a livello di macchina prima di distribuire la politica nel tuo 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 una politica di controllo delle applicazioni

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 creata una nuova politica in modalità Audit. 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. Il 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 alla politica

    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 la politica al computer di test, copiare il file SIPolicy.p7b 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 amministrativi su App Control 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 nuovamente il nome per riabilitare la politica.

    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 verrebbero applicate se la politica fosse in modalità di applicazione forzata.

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 variabile $DebugPreference su Break per una sessione interattiva di PowerShell, PowerShell entra nel debugger dello script della riga di comando nella posizione attuale 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.