about_Logging_Windows
Descrizione breve
PowerShell registra le operazioni interne dal motore, dai provider e dai cmdlet al registro eventi di Windows.
Descrizione lunga
PowerShell registra informazioni dettagliate sulle operazioni di PowerShell, ad esempio l'avvio e l'arresto del motore e dei provider e l'esecuzione di comandi di PowerShell.
Per informazioni sulla registrazione in Windows PowerShell 5.1, vedere about_Logging.
PowerShell supporta la configurazione di due categorie di registrazione:
Registrazione dei moduli: registrare gli eventi di esecuzione della pipeline per i membri dei moduli specificati. La registrazione dei moduli deve essere abilitata sia per la sessione che per i moduli specifici. Per altre informazioni sulla configurazione di questa registrazione, vedere about_PowerShell_Config.
Se la registrazione dei moduli è abilitata tramite la configurazione, è possibile abilitare e disabilitare la registrazione per moduli specifici in una sessione impostando il valore della proprietà LogPipelineExecutionDetails del modulo.
Ad esempio, per abilitare la registrazione dei moduli per il modulo PSReadLine :
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
Registrazione di blocchi di script: registrare l'elaborazione di comandi, blocchi di script, funzioni e script, se richiamati in modo interattivo o tramite l'automazione.
Quando si abilita la registrazione blocco di script, PowerShell registra il contenuto di tutti i blocchi di script elaborati. Dopo l'abilitazione, qualsiasi nuova sessione di PowerShell registra queste informazioni. Per altre informazioni, vedere Abilitazione della registrazione di blocchi di script.
Registrazione del provider di eventi di PowerShell in Windows
A differenza di Linux o macOS, Windows richiede che il provider di eventi venga registrato prima che gli eventi possano essere scritti nel registro eventi. Per abilitare il provider di eventi di PowerShell, eseguire il comando seguente da un prompt di PowerShell con privilegi elevati.
$PSHOME\RegisterManifest.ps1
Visualizzazione delle voci del registro eventi di PowerShell in Windows
I log di PowerShell possono essere visualizzati usando windows Visualizzatore eventi. Il registro eventi si trova nel gruppo Registri applicazioni e servizi ed è denominato PowerShellCore. Il GUID del provider ETW associato è {f90714a8-5509-434a-bf6d-b1624c8a19a2}
.
Quando la registrazione blocchi di script è abilitata, PowerShell registra gli eventi seguenti nel log di PowerShellCore/Operational :
Campo | valore |
---|---|
EventId | 4104 / 0x1008 |
Channel | Operational |
Livello | Verbose |
Opcode | Create |
Attività | CommandStart |
Parola chiave | Runspace |
Annullamento della registrazione del provider di eventi di PowerShell in Windows
La registrazione del provider di eventi inserisce un blocco nella libreria binaria usata per decodificare gli eventi. Per aggiornare questa libreria, è necessario annullare la registrazione del provider per rilasciare questo blocco.
Per annullare la registrazione del provider PowerShell, eseguire il comando seguente da un prompt di PowerShell con privilegi elevati.
$PSHOME\RegisterManifest.ps1 -Unregister
Dopo l'aggiornamento di PowerShell, eseguire $PSHOME\RegisterManifest.ps1
per registrare il provider di eventi aggiornato.
Abilitazione della registrazione blocchi di script
Quando si abilita la registrazione blocco di script, PowerShell registra il contenuto di tutti i blocchi di script elaborati. Dopo l'abilitazione, qualsiasi nuova sessione di PowerShell registra queste informazioni.
Nota
È consigliabile abilitare la registrazione eventi protetta, come descritto di seguito, quando si usa la registrazione di blocchi di script per scopi diversi dalla diagnostica.
La registrazione blocco script può essere abilitata tramite Criteri di gruppo o un'impostazione del Registro di sistema.
Utilizzando criteri di gruppo
Per abilitare la trascrizione automatica, abilitare la funzionalità Attiva registrazione blocchi script di PowerShell in Criteri di gruppo tramite modelli amministrativi ->PowerShell Core.
Usare il Registro di sistema
Eseguire la funzione seguente:
function Enable-PSScriptBlockLogging {
$basePath = @(
'HKLM:\Software\Policies\Microsoft'
'PowerShellCore\ScriptBlockLogging'
) -join '\'
if (-not (Test-Path $basePath)) {
$null = New-Item $basePath -Force
}
Set-ItemProperty $basePath -Name EnableScriptBlockLogging -Value "1"
}
Uso del file di configurazione di PowerShell
È possibile impostare l'opzione ScriptBlockLogging
nel powershell.config.json
file che controlla il comportamento di PowerShell. Per altre informazioni, vedere about_PowerSHell_Config.
Registrazione eventi protetta
L'aumento del livello di registrazione in un sistema aumenta la possibilità che il contenuto registrato possa contenere dati sensibili. Ad esempio, con la registrazione degli script abilitata, le credenziali o altri dati sensibili usati da uno script possono essere scritti nel registro eventi. Quando un computer che ha registrato dati sensibili viene compromesso, i log possono fornire a un utente malintenzionato informazioni necessarie per estendere la copertura.
Per proteggere queste informazioni, Windows 10 introduce la registrazione eventi protetta. La registrazione eventi protetta consente alle applicazioni partecipanti di crittografare i dati sensibili scritti nel registro eventi. Successivamente, è possibile decrittografare ed elaborare questi log in un agente di raccolta log più sicuro e centralizzato.
Il contenuto del registro eventi è protetto usando lo standard IETF Cryptographic Message Syntax (CMS). CMS usa la crittografia a chiave pubblica. Le chiavi usate per crittografare il contenuto e decrittografare il contenuto vengono mantenute separate.
La chiave pubblica può essere condivisa ampiamente e non è dati sensibili. Qualsiasi contenuto crittografato con questa chiave pubblica può essere decrittografato solo dalla chiave privata. Per altre informazioni sulla crittografia a chiave pubblica, vedere Wikipedia - Crittografia a chiave pubblica.
Per abilitare i criteri di registrazione eventi protetti, distribuire una chiave pubblica in tutti i computer con dati del registro eventi da proteggere. La chiave privata corrispondente viene usata per post-elaborare i registri eventi in una posizione più sicura, ad esempio un agente di raccolta registri eventi centrale o un aggregatore SIEM . È possibile configurare SIEM in Azure. Per altre informazioni, vedere Integrazione SIEM generica.
Abilitazione della registrazione eventi protetta tramite Criteri di gruppo
Per abilitare la registrazione eventi protetta, abilitare la Enable Protected Event Logging
funzionalità in Criteri di gruppo tramite Administrative Templates -> Windows Components -> Event Logging
. Questa impostazione richiede un certificato di crittografia, che è possibile fornire in una delle diverse forme:
- Contenuto di un certificato X.509 codificato in base 64( ad esempio, come offerto dall'opzione
Export
in Gestione certificati). - Identificazione personale di un certificato disponibile nell'archivio certificati Computer locale (può essere distribuita dall'infrastruttura PKI).
- Percorso completo di un certificato (può essere locale o una condivisione remota).
- Percorso di una directory contenente un certificato o un certificato (può essere locale o una condivisione remota).
- Nome soggetto di un certificato disponibile nell'archivio certificati Computer locale (può essere distribuito dall'infrastruttura PKI).
Il certificato risultante deve avere Document Encryption
come utilizzo chiavi avanzato (1.3.6.1.4.1.311.80.1
) e Data Encipherment
gli utilizzi delle chiavi o Key Encipherment
abilitati.
Avviso
La chiave privata non deve essere distribuita nei computer che registrano gli eventi. Deve essere mantenuto in una posizione sicura in cui decrittografare i messaggi.
Decrittografia dei messaggi di registrazione eventi protetti
Lo script seguente recupera e decrittografa gli eventi, presupponendo che la chiave privata sia disponibile:
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 |
Unprotect-CmsMessage