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.
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.
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 ilSystemCIPolicy.xml
file usando un editor di testo comenotepad.exe
o Visual Studio Code (VS Code). Impostare come commento l'opzioneAudit mode
.<!-- <Rule> <Option>Enabled:Audit Mode</Option> </Rule> -->
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
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
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
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\CiPolicies
ad esempio . Per altre informazioni, vedere Suggerimenti per amministratori controllo app e problemi noti.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.