about_Logging_Windows
Breve descrição
O PowerShell registra operações internas do mecanismo, provedores e cmdlets no log de eventos do Windows.
Descrição longa
O PowerShell registra detalhes sobre as operações do PowerShell, como iniciar e parar o mecanismo e os provedores e executar comandos do PowerShell.
Para obter informações sobre como registrar em log no Windows PowerShell 5.1, consulte about_Logging.
O PowerShell dá suporte à configuração de duas categorias de registro:
Log de módulos - Registre os eventos de execução do pipeline para membros de módulos especificados. O registro em log do módulo deve ser habilitado para a sessão e módulos específicos. Para obter mais informações sobre como configurar esse log, consulte about_PowerShell_Config.
Se o log do módulo estiver habilitado por meio da configuração, você poderá habilitar e desabilitar o log para módulos específicos em uma sessão definindo o valor da propriedade LogPipelineExecutionDetails do módulo.
Por exemplo, para habilitar o log do módulo PSReadLine :
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
Log de blocos de script - Registre o processamento de comandos, blocos de script, funções e scripts invocados interativamente ou por meio de automação.
Quando você habilita o Log de Blocos de Script, o PowerShell registra o conteúdo de todos os blocos de script que processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações. Para obter mais informações, consulte Habilitando o log de blocos de script.
Registrando o provedor de eventos do PowerShell no Windows
Ao contrário do Linux ou macOS, o Windows requer que o provedor de eventos seja registrado antes que os eventos possam ser gravados no log de eventos. Para habilitar o provedor de eventos do PowerShell, execute o seguinte comando em um prompt do PowerShell elevado.
$PSHOME\RegisterManifest.ps1
Exibindo as entradas do log de eventos do PowerShell no Windows
Os logs do PowerShell podem ser exibidos usando o Visualizador de Eventos do Windows. O log de eventos está localizado no grupo Logs de Aplicativos e Serviços e é chamado de PowerShellCore. O GUID do provedor ETW associado é {f90714a8-5509-434a-bf6d-b1624c8a19a2}
.
Quando o Log de Bloco de Script está habilitado, o PowerShell registra os seguintes eventos no log PowerShellCore/Operacional :
Campo | Value |
---|---|
EventId | 4104 / 0x1008 |
Canal | Operational |
Level | Verbose |
Opcode | Create |
Task | CommandStart |
Palavra-chave | Runspace |
Cancelar o registro do provedor de eventos do PowerShell no Windows
O registro do provedor de eventos coloca um bloqueio na biblioteca binária usada para decodificar eventos. Para atualizar essa biblioteca, o provedor deve não estar registrado para liberar esse bloqueio.
Para cancelar o registro do provedor do PowerShell, execute o seguinte comando em um prompt do PowerShell elevado.
$PSHOME\RegisterManifest.ps1 -Unregister
Depois de atualizar o PowerShell, execute $PSHOME\RegisterManifest.ps1
para registrar o provedor de eventos atualizado.
Ativando o log de blocos de script
Quando você habilita o Log de Blocos de Script, o PowerShell registra o conteúdo de todos os blocos de script que processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações.
Nota
É recomendável habilitar o Log de Eventos Protegido, conforme descrito abaixo, ao usar o Log de Bloqueio de Script para qualquer outra finalidade que não seja de diagnóstico.
O Registo de Blocos de Scripts pode ser ativado através da Política de Grupo ou de uma definição de registo.
Utilizar a Política de Grupo
Para habilitar a transcrição automática, habilite o recurso Ativar Log de Bloco de Script do PowerShell na Política de Grupo por meio de Modelos Administrativos ->PowerShell Core.
Utilizar o Registo
Execute a seguinte função:
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"
}
Usando o arquivo de configuração do PowerShell
Você pode definir a ScriptBlockLogging
opção no arquivo que controla como o powershell.config.json
PowerShell se comporta. Para obter mais informações, consulte about_PowerSHell_Config.
Registo de Eventos Protegido
Aumentar o nível de registro em um sistema aumenta a possibilidade de que o conteúdo registrado possa conter dados confidenciais. Por exemplo, com o log de scripts habilitado, as credenciais ou outros dados confidenciais usados por um script podem ser gravados no log de eventos. Quando uma máquina que registrou dados confidenciais é comprometida, os logs podem fornecer a um invasor as informações necessárias para estender seu alcance.
Para proteger essas informações, o Windows 10 introduz o Log de Eventos Protegido. O Log de Eventos Protegido permite que os aplicativos participantes criptografem dados confidenciais gravados no log de eventos. Mais tarde, você pode descriptografar e processar esses logs em um coletor de logs mais seguro e centralizado.
O conteúdo do log de eventos é protegido usando o padrão CMS (Cryptographic Message Syntax) IETF. O CMS usa criptografia de chave pública. As chaves usadas para encriptar conteúdo e desencriptar conteúdo são mantidas separadas.
A chave pública pode ser compartilhada amplamente e não são dados confidenciais. Qualquer conteúdo encriptado com esta chave pública só pode ser desencriptado pela chave privada. Para obter mais informações sobre Criptografia de Chave Pública, consulte Wikipedia - Criptografia de Chave Pública.
Para habilitar uma política de Log de Eventos Protegido, implante uma chave pública em todas as máquinas que tenham dados de log de eventos para proteger. A chave privada correspondente é usada para pós-processar os logs de eventos em um local mais seguro, como um coletor de log de eventos central ou agregador SIEM . Você pode configurar o SIEM no Azure. Para obter mais informações, consulte Integração SIEM genérica.
Habilitando o log de eventos protegidos por meio da Diretiva de Grupo
Para habilitar o Log de Eventos Protegidos, habilite o recurso na Diretiva de Grupo por meio do Enable Protected Event Logging
Administrative Templates -> Windows Components -> Event Logging
. Essa configuração requer um certificado de criptografia, que você pode fornecer de várias formas:
- O conteúdo de um certificado X.509 codificado em base 64 (por exemplo, conforme oferecido pela
Export
opção no Gerenciador de certificados). - A impressão digital de um certificado que pode ser encontrado no armazenamento de certificados do Computador Local (pode ser implantado pela infraestrutura PKI).
- O caminho completo para um certificado (pode ser local ou remoto).
- O caminho para um diretório que contém um certificado ou certificados (pode ser local ou um compartilhamento remoto).
- O nome do assunto de um certificado que pode ser encontrado no armazenamento de certificados do Computador Local (pode ser implantado pela infraestrutura PKI).
O certificado resultante deve ter Document Encryption
como um uso de chave aprimorado (1.3.6.1.4.1.311.80.1
) e um ou Key Encipherment
usos Data Encipherment
de chave habilitados.
Aviso
A chave privada não deve ser implantada nas máquinas registrando eventos. Deve ser mantido num local seguro onde desencripta as mensagens.
Desencriptação de mensagens de Registo de Eventos Protegidos
O script a seguir recupera e descriptografa eventos, supondo que você tenha a chave privada:
Get-WinEvent Microsoft-Windows-PowerShell/Operational |
Where-Object Id -eq 4104 |
Unprotect-CmsMessage