Compartilhar via


about_Logging_Windows

Descrição curta

O PowerShell registra operações internas do mecanismo, provedores e cmdlets para o 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 o registro em log no Windows PowerShell 5.1, consulte about_Logging.

O PowerShell dá suporte à configuração de duas categorias de log:

  • Registro em log do módulo – registre os eventos de execução de 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 registro em log, consulte about_PowerShell_Config.

    Se o log do módulo estiver habilitado por meio da configuração, você poderá habilitar e desabilitar o registro em log para módulos específicos em uma sessão definindo o valor da propriedade LogPipelineExecutionDetails do módulo.

    Por exemplo, para habilitar o registro em 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, scriptblocks, funções e scripts, sejam invocados interativamente ou por meio da automação.

    Quando você habilita o Script Block Logging, o PowerShell registra o conteúdo de todos os scriptblocks que ele processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações. Para obter mais informações, consulte Habilitar o registro em log do scriptblock.

Registrando o provedor de eventos do PowerShell no Windows

Ao contrário do Linux ou macOS, o Windows exige 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 com privilégios elevados.

$PSHOME\RegisterManifest.ps1

Exibindo as entradas de 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 do e é nomeado PowerShellCore. O GUID do provedor ETW associado é {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Quando o Log do Bloco de Scripts está habilitado, o PowerShell registra os seguintes eventos no log PowerShellCore/Operational:

Campo Valor
EventId 4104 / 0x1008
Canal Operational
Nível Verbose
Opcode Create
Tarefa CommandStart
Palavra-chave Runspace

Cancelar o registro do provedor de eventos do PowerShell no Windows

Registrar o provedor de eventos coloca um bloqueio na biblioteca binária usada para decodificar eventos. Para atualizar essa biblioteca, o provedor deve não ser registrado para liberar esse bloqueio.

Para cancelar o registro do provedor do PowerShell, execute o seguinte comando em um prompt do PowerShell com privilégios elevados.

$PSHOME\RegisterManifest.ps1 -Unregister

Depois de atualizar o PowerShell, execute $PSHOME\RegisterManifest.ps1 para registrar o provedor de eventos atualizado.

Habilitando o registro em log do scriptblock

Quando você habilita o Script Block Logging, o PowerShell registra o conteúdo de todos os scriptblocks que ele processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações.

Nota

É recomendável habilitar o Registro em Log de Eventos Protegidos, conforme descrito abaixo, ao usar o Log de Blocos de Script para qualquer outra coisa que não seja para fins de diagnóstico.

O log de blocos de script pode ser habilitado por meio da Política de Grupo ou de uma configuração do Registro.

Usando a política de grupo

Para habilitar a transcrição automática, habilite o recurso Ativar de Log de Blocos de Script do PowerShell na Política de Grupo por meio de modelos administrativos –>do PowerShell Core.

Usando o Registro

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 opção ScriptBlockLogging no arquivo powershell.config.json que controla como o PowerShell se comporta. Para obter mais informações, consulte about_PowerShell_Config.

Registro em log de eventos protegido

Aumentar o nível de log em um sistema aumenta a possibilidade de que o conteúdo registrado possa conter dados confidenciais. Por exemplo, com o log de script habilitado, as credenciais ou outros dados confidenciais usados por um script podem ser gravados no log de eventos. Quando um computador com dados confidenciais registrados é comprometido, os logs podem fornecer a um invasor informações necessárias para estender seu alcance.

Para proteger essas informações, o Windows 10 apresenta o Log de Eventos Protegidos. O Log de Eventos Protegidos permite que os aplicativos participantes criptografem dados confidenciais gravados no log de eventos. Posteriormente, você pode descriptografar e processar esses logs em um coletor de log mais seguro e centralizado.

O conteúdo do log de eventos é protegido usando o padrão cms (sintaxe de mensagem criptográfica) IETF. O CMS usa criptografia de chave pública. As chaves usadas para criptografar conteúdo e descriptografar conteúdo são mantidas separadas.

A chave pública pode ser compartilhada amplamente e não é dados confidenciais. Qualquer conteúdo criptografado com essa chave pública só pode ser descriptografado pela chave privada. Para obter mais informações sobre criptografia de chave pública, consulte Wikipedia – Public Key Cryptography.

Para habilitar uma política de Registro em Log de Eventos Protegido, implante uma chave pública em todos os computadores que têm 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 de SIEM. Você pode configurar o SIEM no Azure. Para obter mais informações, consulte de integração siem genérica.

Habilitando o registro em log de eventos protegidos por meio da Política de Grupo

Para habilitar o Registro em Log de Eventos Protegidos, habilite o recurso Enable Protected Event Logging na Política de Grupo por meio de Administrative Templates -> Windows Components -> Event Logging. Essa configuração requer um certificado de criptografia, que você pode fornecer em uma das várias formas:

  • O conteúdo de um certificado X.509 codificado em base 64 (por exemplo, conforme oferecido pela opção Export no Gerenciador de Certificados).
  • A impressão digital de um certificado que pode ser encontrado no repositório de certificados do Computador Local (pode ser implantada pela infraestrutura PKI).
  • O caminho completo para um certificado (pode ser local ou um compartilhamento remoto).
  • O caminho para um diretório que contém um certificado ou certificados (pode ser local ou um compartilhamento remoto).
  • O nome da entidade de um certificado que pode ser encontrado no repositório 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 Data Encipherment ou Key Encipherment usos de chave habilitados.

Aviso

A chave privada não deve ser implantada nos eventos de registro em log dos computadores. Ele deve ser mantido em um local seguro em que você descriptografe as mensagens.

Descriptografando mensagens de registro em log 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

Consulte também