about_Logging_Windows

Descrição breve

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 fazer logon no Windows PowerShell 5.1, consulte about_Logging.

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

  • Log de módulo - Registre os eventos de execução de pipeline para membros de módulos especificados. O log de 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 de 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 de módulo para o 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, sejam eles 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 ele processa. Depois de 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 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 elevado do PowerShell.

$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 Aplicativo e Serviços e é denominado PowerShellCore. O GUID do provedor ETW associado é {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Quando o Log de Blocos de Script está habilitado, o PowerShell registra os seguintes eventos no log PowerShellCore/Operacional :

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

Cancelando 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 ser cancelado para liberar esse bloqueio.

Para cancelar o registro do provedor do PowerShell, execute o seguinte comando em um prompt elevado do PowerShell.

$PSHOME\RegisterManifest.ps1 -Unregister

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

Habilitando 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 ele processa. Depois de habilitada, qualquer nova sessão do PowerShell registra essas informações.

Observação

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

O Log de Blocos de Scripts pode ser habilitado por meio da Diretiva de Grupo ou de uma configuração do Registro.

Como usar a Política de Grupo

Para habilitar a transcrição automática, habilite o recurso Ativar Log de Blocos de Scripts do PowerShell na Política de Grupo por meio de Modelos Administrativos ->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 ScriptBlockLogging opção no arquivo que controla como o powershell.config.json PowerShell se comporta. Para obter mais informações, consulte about_PowerSHell_Config.

Registro de eventos protegido

Aumentar o nível de registro em 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, 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 Protegidos. O Log de Eventos Protegido 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 logs mais seguro e centralizado.

O conteúdo do log de eventos é protegido usando o padrão IETF Cryptographic Message Syntax (CMS). 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 sã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 - Criptografia de chave pública.

Para habilitar uma política de Log de Eventos Protegidos, implante uma chave pública em todos os computadores 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 LoggingAdministrative Templates -> Windows Components -> Event Logging. Essa configuração requer um certificado de criptografia, que você pode fornecer de uma das 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 encontrada 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 avançado (1.3.6.1.4.1.311.80.1) e um Data Encipherment ou Key Encipherment usos de chave habilitados.

Aviso

A chave privada não deve ser implantada nos eventos de log de máquinas. Ele deve ser mantido em um local seguro onde você descriptografar as mensagens.

Descriptografando mensagens de 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

Confira também