Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 la 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 eventos del módulo PSReadLine:
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetailsName LogPipelineExecutionDetails ---- --------------------------- PSReadLine TrueRegistro de bloques de scripts: registre el procesamiento de comandos, bloqueos 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 scriptblock.
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 una consola de PowerShell con permisos 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 | Valor |
|---|---|
| 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 una consola 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 scriptblock
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 script de PowerShell en la directiva de grupo a través de Plantillas administrativas ->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 opción ScriptBlockLogging en el archivo powershell.config.json que controla el comportamiento de PowerShell. Para obtener más información, consulte about_PowerShell_Config.
Registro de eventos protegido
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 utiliza para posprocesar los registros de eventos en una ubicación más segura, como un recopilador central de registros de eventos o un agregador SIEM. Puede configurar SIEM en Azure. Para obtener más información, consulte integración genérica de SIEM.
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 de Enable Protected Event Logging en la directiva de grupo a través de Administrative Templates -> Windows Components -> Event Logging. 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 opción
Exporten 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 un uso mejorado de claves (1.3.6.1.4.1.311.80.1) y Data Encipherment o Key Encipherment usos de claves habilitados.
Advertencia
La clave privada no se debe desplegar en las máquinas que registran eventos. 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