Partilhar via


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

Consulte também