about_Logging_Windows

Descripción breve

PowerShell registra las operaciones internas del motor, los proveedores y los cmdlets en el registro de eventos de Windows.

Descripción larga

PowerShell registra detalles sobre las operaciones de PowerShell, como iniciar y detener el motor y los proveedores, y ejecutar comandos de PowerShell.

Para obtener información sobre el registro en Windows PowerShell 5.1, consulte about_Logging.

PowerShell admite la configuración de dos categorías de registro:

  • Registro de módulos: registre los eventos de ejecución de canalización para los miembros de los módulos especificados. El registro de módulos debe estar habilitado para la sesión y los módulos específicos. Para obtener más información sobre cómo configurar este registro, consulte about_PowerShell_Config.

    Si el registro de módulos está habilitado a través de la configuración, puede habilitar y deshabilitar el registro de módulos específicos en una sesión estableciendo el valor de la propiedad LogPipelineExecutionDetails del módulo.

    Por ejemplo, para habilitar el registro de módulos para el módulo PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Registro de bloques de script: registre el procesamiento de comandos, bloques de scripts, funciones y scripts, tanto si se invocan de forma interactiva como a través de la automatización.

    Al habilitar el registro de bloques de scripts, PowerShell registra el contenido de todos los bloques de script que procesa. Una vez habilitada, cualquier nueva sesión de PowerShell registra esta información. Para obtener más información, consulte Habilitación del registro de bloques de scripts.

Registro del proveedor de eventos de PowerShell en Windows

A diferencia de Linux o macOS, Windows requiere que el proveedor de eventos se registre antes de que se puedan escribir eventos en el registro de eventos. Para habilitar el proveedor de eventos de PowerShell, ejecute el siguiente comando desde un símbolo del sistema de PowerShell con privilegios elevados.

$PSHOME\RegisterManifest.ps1

Visualización de las entradas del registro de eventos de PowerShell en Windows

Los registros de PowerShell se pueden ver mediante el Visor de eventos de Windows. El registro de eventos se encuentra en el grupo Registros de aplicaciones y servicios y se denomina PowerShellCore. El GUID del proveedor ETW asociado es {f90714a8-5509-434a-bf6d-b1624c8a19a2}.

Cuando el registro de bloques de scripts está habilitado, PowerShell registra los siguientes eventos en el registro de PowerShellCore/Operational :

Campo Value
EventId 4104 / 0x1008
Canal Operational
Nivel Verbose
Código de operación Create
Tarea CommandStart
Palabra clave Runspace

Anulación del registro del proveedor de eventos de PowerShell en Windows

El registro del proveedor de eventos coloca un bloqueo en la biblioteca binaria que se usa para descodificar eventos. Para actualizar esta biblioteca, el proveedor debe anular el registro para liberar este bloqueo.

Para anular el registro del proveedor de PowerShell, ejecute el siguiente comando desde un símbolo del sistema de PowerShell con privilegios elevados.

$PSHOME\RegisterManifest.ps1 -Unregister

Después de actualizar PowerShell, ejecute $PSHOME\RegisterManifest.ps1 para registrar el proveedor de eventos actualizado.

Habilitación del registro de bloques de scripts

Al habilitar el registro de bloques de scripts, PowerShell registra el contenido de todos los bloques de script que procesa. Una vez habilitada, cualquier nueva sesión de PowerShell registra esta información.

Nota:

Se recomienda habilitar el registro de eventos protegidos, como se describe a continuación, al usar el registro de bloques de scripts para cualquier otro propósito que no sea de diagnóstico.

El registro de bloques de script se puede habilitar a través de la directiva de grupo o una configuración del Registro.

Uso de la directiva de grupo

Para habilitar la transcripción automática, habilite la característica Activar el registro de bloques de scripts de PowerShell en la directiva de grupo a través de Administración plantillasistrative ->PowerShell Core.

Uso del Registro

Ejecute la siguiente función:

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 archivo de configuración de PowerShell

Puede establecer la ScriptBlockLogging opción en el powershell.config.json archivo que controla el comportamiento de PowerShell. Para obtener más información, consulte about_PowerSHell_Config.

Registro de eventos protegidos

Aumentar el nivel de registro en un sistema aumenta la posibilidad de que el contenido registrado pueda contener datos confidenciales. Por ejemplo, con el registro de scripts habilitado, las credenciales u otros datos confidenciales utilizados por un script se pueden escribir en el registro de eventos. Cuando una máquina que ha registrado datos confidenciales está en peligro, los registros pueden proporcionar a un atacante información necesaria para ampliar su alcance.

Para proteger esta información, Windows 10 presenta el registro de eventos protegidos. El registro de eventos protegido permite a las aplicaciones participantes cifrar los datos confidenciales escritos en el registro de eventos. Más adelante, puede descifrar y procesar estos registros en un recopilador de registros más seguro y centralizado.

El contenido del registro de eventos está protegido mediante el estándar de sintaxis de mensajes criptográficos (CMS) de IETF. CMS usa criptografía de clave pública. Las claves usadas para cifrar el contenido y descifrar el contenido se mantienen independientes.

La clave pública se puede compartir ampliamente y no es información confidencial. Cualquier contenido cifrado con esta clave pública solo se puede descifrar mediante la clave privada. Para obtener más información sobre la criptografía de clave pública, vea Wikipedia - Criptografía de clave pública.

Para habilitar una directiva de registro de eventos protegidos, implemente una clave pública en todas las máquinas que tengan datos de registro de eventos para proteger. La clave privada correspondiente se usa para posprocesar los registros de eventos en una ubicación más segura, como un recopilador de registros de eventos central o un agregador SIEM . Puede configurar SIEM en Azure. Para obtener más información, consulte Integración de SIEM genérica.

Habilitación del registro de eventos protegido a través de la directiva de grupo

Para habilitar el registro de eventos protegidos, habilite la característica en la Enable Protected Event Logging directiva de grupo a través Administrative Templates -> Windows Components -> Event Loggingde . Esta configuración requiere un certificado de cifrado, que puede proporcionar en uno de varios formularios:

  • Contenido de un certificado X.509 codificado en base 64 (por ejemplo, como ofrece la Export opción en el Administrador de certificados).
  • Huella digital de un certificado que se puede encontrar en el almacén de certificados del equipo local (puede implementarse mediante la infraestructura de PKI).
  • Ruta de acceso completa a un certificado (puede ser local o un recurso compartido remoto).
  • Ruta de acceso a un directorio que contiene un certificado o certificados (puede ser local o un recurso compartido remoto).
  • El nombre del firmante de un certificado que se puede encontrar en el almacén de certificados del equipo local (se puede implementar mediante la infraestructura de PKI).

El certificado resultante debe tener Document Encryption como uso mejorado de clave (1.3.6.1.4.1.311.80.1) y usos de Data Encipherment clave habilitados Key Encipherment .

Advertencia

La clave privada no se debe implementar en los eventos de registro de máquinas. Debe mantenerse en una ubicación segura donde descifre los mensajes.

Descifrar mensajes de registro de eventos protegidos

El script siguiente recupera y descifra eventos, suponiendo que tenga la clave privada:

Get-WinEvent Microsoft-Windows-PowerShell/Operational |
    Where-Object Id -eq 4104 |
    Unprotect-CmsMessage

Consulte también