Skip to content

«No se encuentra la descripción del id. de evento»: solución

Por qué el Visor de eventos no encuentra la descripción de un Event ID, qué significan códigos como %%1833 y cómo leer el evento igualmente, sin conexión.

Por Florian AmettePublicado 7 {n} min de lectura

Copias un Security.evtx de un host sospechoso, lo abres en tu estación de análisis y cada registro muestra:

The description for Event ID 4625 from source Microsoft-Windows-Security-Auditing cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted. You can install or repair the component on the local computer. If the event originated on another computer, the display information had to be saved with the event.

En un Windows en español, el mismo mensaje empieza con «No se encuentra la descripción del id. de evento 4625 en el origen Microsoft-Windows-Security-Auditing.» Después aparece un bloque de valores en bruto: %%2313, 0xC000006A, 0x17. No hay nada roto ni perdido. Es un fallo de renderizado, no de datos. Este artículo explica dónde vive realmente el texto de la descripción, por qué desaparece, cómo arreglarlo cuando lo necesitas y por qué, para el triaje, normalmente no lo necesitas. (Si solo quieres los eventos legibles ya: el parser en navegador renderiza descripciones y decodifica esos códigos sin conexión.)

Qué significa realmente el error

Un registro .evtx no almacena la frase que lees en el Visor de eventos. Almacena el bloque <System> (proveedor, Event ID, hora, equipo) y las cadenas de inserción en <EventData> o <UserData> (qué hay dentro de un registro). La frase («An account failed to log on. Subject: … Failure Reason: …» en un Windows en inglés) es una plantilla con marcadores %1, %2 guardada en un recurso de tabla de mensajes dentro de una DLL o EXE que pertenece al proveedor del evento.

Dónde busca Windows ese archivo depende del tipo de proveedor:

  • Los orígenes de eventos clásicos (legacy) se registran en HKLM\SYSTEM\CurrentControlSet\Services\EventLog\<Log>\<Source>, con la ruta en el valor EventMessageFile (y opcionalmente ParameterMessageFile y CategoryMessageFile).
  • Los proveedores basados en manifiesto (Vista en adelante, la familia Microsoft-Windows-*) se registran en HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{GUID}. Los valores MessageFileName, ResourceFileName y ParameterFileName apuntan a los binarios que contienen el manifiesto compilado (recurso WEVT_TEMPLATE) y la tabla de mensajes.

La clave: el Visor de eventos renderiza el mensaje en la máquina donde consultas el registro, con el registro de Windows y las DLL de esa máquina. La máquina que escribió el evento no interviene en la visualización. Si el proveedor no está registrado localmente, no hay plantilla y obtienes el error seguido de las cadenas de inserción en bruto.

Causas habituales

  • El registro viene de otro host. El caso DFIR clásico. Un agente de terceros, un EDR, una instancia de SQL Server o una aplicación de negocio del host de origen no tienen proveedor en tu estación de análisis. Abrir el archivo en macOS, Linux o una VM limpia tiene el mismo efecto: ningún proveedor de Windows.
  • Se desinstaló el software. El desinstalador eliminó la DLL, pero los eventos antiguos siguen haciendo referencia al origen.
  • DLL ausente, dañada o movida. El registro apunta a una ruta que ya no existe, o EventMessageFile está guardado como REG_SZ en lugar de REG_EXPAND_SZ, así que %SystemRoot% nunca se expande.
  • Desajuste 32/64 bits. Un instalador de 32 bits escribió su DLL en lo que creía que era System32 (en realidad SysWOW64, por la redirección del sistema de archivos), mientras que la pila de Event Log de 64 bits lee la ruta registrada como el System32 real.
  • Idioma. La tabla de mensajes del proveedor existe pero no en el idioma de visualización, o abriste una exportación guardada «con información de visualización» para un idioma distinto del de tu visor.

Los códigos %%: mensajes de parámetros

Incluso cuando la descripción principal se renderiza, algunos campos muestran %%1833 o %%2313 en lugar de palabras. Son referencias a mensajes de parámetros: el valor es un identificador en una segunda tabla de mensajes, el ParameterMessageFile / ParameterFileName del proveedor. Para el proveedor de auditoría de seguridad ese archivo es msobjs.dll. Sin conexión, esas referencias quedan sin resolver. Las que conviene saberse de memoria (etiquetas tal como las muestra un Windows en inglés):

CódigoSignificadoDónde aparece
%%1833Impersonation4624 ImpersonationLevel
%%1840Delegation4624 ImpersonationLevel
%%1842 / %%1843Yes / No4624 VirtualAccount, ElevatedToken
%%1936Tipo 1, token completo (UAC desactivado o admin integrado)4688 TokenElevationType
%%1937Tipo 2, token elevado4688 TokenElevationType
%%1938Tipo 3, token limitado4688 TokenElevationType
%%2307Account locked out (cuenta bloqueada)4625 FailureReason
%%2310Account currently disabled (cuenta deshabilitada)4625 FailureReason
%%2313Unknown user name or bad password4625 FailureReason
%%2080Account Disabled4720 UserAccountControl
%%2082'Password Not Required' - Enabled4720 UserAccountControl
%%2084'Normal Account' - Enabled4720 UserAccountControl
%%1537DELETE4663 AccessList
%%4416 / %%4417ReadData / WriteData4663 AccessList

El triplete %%2080 %%2082 %%2084 es la firma normal de una cuenta recién creada en un 4720. Un %%1937 en un 4688 es un proceso iniciado con un token de administrador completo tras un aviso de UAC.

Los valores hexadecimales no son códigos %%. Los campos Status / SubStatus del 4625 son códigos NTSTATUS: 0xC000006A es una contraseña incorrecta para una cuenta válida, 0xC0000064 un nombre de usuario que no existe, 0xC0000234 una cuenta bloqueada. TicketEncryptionType en el 4769 es un etype de Kerberos: 0x17 es RC4-HMAC, 0x12 AES256. Ambos se muestran como hexadecimal en bruto incluso cuando el proveedor está presente.

Solución 1: exportar con información de visualización

Si todavía tienes acceso al host de origen, exporta el registro para que viaje con sus mensajes. En el Visor de eventos: clic derecho sobre el registro, Guardar todos los eventos como…, elige .evtx y en el siguiente diálogo selecciona mostrar información para los idiomas deseados (Display information for these languages en un Windows en inglés). El Visor escribe una carpeta LocaleMetaData junto al archivo, con un .MTA por idioma. Mantén la carpeta junto al .evtx al copiarlo; el Visor de la máquina de análisis la utiliza.

Desde la línea de comandos:

wevtutil epl Security C:\ir\Security.evtx
wevtutil al C:\ir\Security.evtx /l:en-US

wevtutil al (archive-log) añade los metadatos de idioma a un archivo exportado. Para recolección a escala, consulta recolectar EVTX de un sistema en vivo.

Solución 2: instalar o reparar el proveedor

En una máquina que administras, cuando los eventos de tu propio software no se renderizan:

  • Reinstala o repara la aplicación dueña del origen.
  • Revisa EventMessageFile en HKLM\SYSTEM\CurrentControlSet\Services\EventLog\<Log>\<Source>: la ruta debe existir y el tipo de valor debería ser REG_EXPAND_SZ si contiene %SystemRoot%.
  • Para proveedores con manifiesto, comprueba Get-WinEvent -ListProvider <Name>; si falla o no lista mensajes, el registro del manifiesto está roto (wevtutil im <manifest>.man lo vuelve a registrar, con los binarios en su sitio).

Solución 3: renderizar en el host de origen

Get-WinEvent solo rellena la propiedad Message cuando el proveedor está presente localmente. En el host de origen (o en una máquina con el mismo software instalado) esto funciona:

Get-WinEvent -Path .\Security.evtx -MaxEvents 20 | Select-Object TimeCreated, Id, Message

En tu estación, el mismo comando devuelve un Message vacío, pero .Properties y .ToXml() siguen exponiendo todos los valores. Más recetas de filtrado en consultar EVTX con Get-WinEvent (en inglés).

Solución 4: normalmente no necesitas el mensaje

En DFIR, la frase renderizada es una comodidad. Todos los valores que mostraría están en <EventData>: TargetUserName, LogonType, IpAddress, Status, SubStatus. La pestaña Detalles (Vista XML) del Visor los muestra aunque la pestaña General muestre el error. Quien analiza a escala lee los campos directamente de todos modos, y así es como conviene abordar el 4624 y el resto de la familia de eventos de inicio de sesión: los nombres de campo son estables entre versiones e idiomas de Windows; el texto renderizado no.

Leer eventos sin conexión en el navegador

El parser EVTX muestra ahora una descripción legible de una línea para unos 60 eventos DFIR habituales: inicios de sesión y fallos 4625, cambios de cuentas y grupos, Kerberos 4768/4769/4771, NTLM 4776, servicios 7045/4697, tareas programadas, Sysmon, PowerShell 4104 y RDP. También decodifica en línea los códigos %%, los códigos NTSTATUS (0xC000006A contraseña incorrecta, 0xC0000064 usuario desconocido) y los tipos de cifrado de tickets Kerberos (0x17 RC4). No necesita DLL de proveedores ni Windows; el archivo se analiza en tu navegador y nunca se sube. Para otras formas de abrir el archivo, consulta cómo abrir un archivo EVTX.

Checklist

  • El error significa que la máquina que visualiza no tiene el proveedor, no que el registro esté dañado.
  • Lee <EventData> en la pestaña Detalles, con .Properties de Get-WinEvent o con un parser.
  • Decodifica las referencias %% con la tabla anterior; decodifica Status / SubStatus como NTSTATUS.
  • ¿Necesitas el texto renderizado para un informe? Vuelve a exportar en el host de origen con información de visualización (LocaleMetaData) o wevtutil al.
  • Para tu propio software, corrige EventMessageFile o vuelve a registrar el manifiesto.

Artículos relacionados

Carving por firma de registros EVTX en espacio no asignado, pagefile y memoria, y las herramientas que manejan chunks malformados con elegancia cuando al log vivo le falta lo que necesitas.
Cómo las herramientas adversarias reales se mueven de host a host en parques Windows, y las combinaciones precisas de Event ID en Security.evtx que cazan a PsExec, Impacket y WMIExec.
Cómo los atacantes borran los registros de eventos de Windows, qué pruebas quedan en disco y en canales reenviados, y la diferencia entre wevtutil cl y herramientas de suspensión de hilos como Invoke-Phant0m.