Ir al contenido
10 · Auditoría y registroParte 3 de 4Intermedio

Windows Event Forwarding a escala

Windows Event Forwarding que aguanta: recopiladores, suscripciones iniciadas por el origen, consultas XPath, entrega, acceso al registro de seguridad y estado.

Florian Amette8 min de lectura

La línea base de directiva de auditoría y Sysmon termina con cuatro líneas sobre el reenvío: ejecutar wecutil qc, crear una suscripción, apuntar los orígenes al recopilador y conceder acceso al registro. Eso basta para un laboratorio. En producción, WEF falla de formas más silenciosas: una suscripción que trae diez veces más de lo previsto, un recopilador que se queda atrás, controladores de dominio que nunca reenvían su registro de seguridad. Esta guía cubre el diseño, la configuración y la operación de Windows Event Forwarding para miles de equipos.

La arquitectura en un párrafo

Los orígenes (todos los equipos Windows) ejecutan un cliente de reenvío de eventos que usa el servicio WinRM. Los recopiladores ejecutan el servicio Windows Event Collector (Wecsvc) y alojan las suscripciones: consultas XPath más la configuración de entrega. Con las suscripciones iniciadas por el origen, los orígenes obtienen la dirección del recopilador por directiva de grupo, recogen las suscripciones que les corresponden y envían los eventos coincidentes por WinRM. Los eventos recopilados llegan a ForwardedEvents (o a un registro personalizado), donde los recoge un agente de SIEM. El modelo iniciado por el origen es el adecuado a escala; las suscripciones iniciadas por el recopilador exigen enumerar cada origen individualmente.

Paso 1: diseña las suscripciones

Agrupa los eventos por finalidad, no por registro. Un conjunto típico:

SuscripciónDestinosContenido
Baseline-SecurityTodos los equiposInicios de sesión, cambios de cuentas, creación de procesos, creación de servicios y tareas, borrado de registros
DC-SecurityControladores de dominioKerberos, cambios en el directorio, derechos de replicación, cambios de grupos
PowerShellTodos los equipos4103, 4104, 400
SysmonEquipos con SysmonSysmon Operational, ya ajustado en el origen
DefenderTodos los equipos1116, 1117, 5001, 5007

Las suscripciones pequeñas y centradas son más fáciles de diagnosticar y dimensionar, y una consulta defectuosa solo rompe una de ellas. Usa la referencia de ID de eventos de seguridad para decidir qué va en cada una.

ForwardedEvents o registros personalizados

De forma predeterminada, cada suscripción escribe en ForwardedEvents, un único registro para todo. Es sencillo, pero una suscripción ruidosa puede desplazar eventos importantes, y el agente del SIEM tiene que leer un registro muy grande. La alternativa son los canales de eventos personalizados: una pequeña DLL de manifiesto registrada en el recopilador que crea registros separados, por ejemplo uno para Security, otro para Sysmon y otro para PowerShell, cada uno con su propio tamaño. Hay proyectos comunitarios que publican manifiestos de canales WEF y conjuntos de suscripciones listos para adaptar. Los canales personalizados añaden un paso de compilación y despliegue, así que empieza con ForwardedEvents y cambia cuando el volumen o las necesidades de retención lo exijan.

Paso 2: construye el recopilador

Usa recopiladores dedicados (no controladores de dominio), dimensionados ante todo por la E/S de disco. En cada recopilador:

PowerShell
wecutil qc /q                                        # configura Wecsvc (inicio automático retrasado)
wevtutil sl ForwardedEvents /ms:4294967296           # búfer de 4 GB

Permite el tráfico TCP 5985 entrante desde las subredes de origen en el firewall del equipo. El recopilador es un servidor de registros de alto valor: adminístralo desde tu nivel de administración y aplícale el endurecimiento de WinRM como a cualquier otro servidor.

A mayor escala, plantéate dar al servicio del recopilador su propio proceso con sc.exe config Wecsvc type= own, para que no comparta un host de servicio con WinRM. Microsoft documenta los cambios relacionados en las reservas de URL HTTP para esa configuración; sigue la guía actual de escalabilidad del recopilador en lugar de copiar fragmentos de foros.

Paso 3: escribe el XML de la suscripción

Crea las suscripciones a partir de archivos para que vivan en control de código fuente. Una suscripción iniciada por el origen para los equipos del dominio:

XML
<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
  <SubscriptionId>Baseline-Security</SubscriptionId>
  <SubscriptionType>SourceInitiated</SubscriptionType>
  <Description>Core security events from all domain computers</Description>
  <Enabled>true</Enabled>
  <Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
  <ConfigurationMode>Custom</ConfigurationMode>
  <Delivery Mode="Push">
    <Batching>
      <MaxItems>50</MaxItems>
      <MaxLatencyTime>60000</MaxLatencyTime>
    </Batching>
    <PushSettings>
      <Heartbeat Interval="3600000"/>
    </PushSettings>
  </Delivery>
  <Query><![CDATA[
    <QueryList>
      <Query Id="0" Path="Security">
        <Select Path="Security">*[System[(EventID=4624 or EventID=4625 or EventID=4648 or EventID=4672)]]</Select>
        <Select Path="Security">*[System[(EventID=4688 or EventID=4697 or EventID=4698 or EventID=4720 or EventID=4732)]]</Select>
        <Select Path="Security">*[System[(EventID=1102)]]</Select>
        <Select Path="System">*[System[(EventID=7045 or EventID=104)]]</Select>
      </Query>
    </QueryList>
  ]]></Query>
  <ReadExistingEvents>false</ReadExistingEvents>
  <TransportName>HTTP</TransportName>
  <ContentFormat>RenderedText</ContentFormat>
  <Locale Language="en-US"/>
  <LogFile>ForwardedEvents</LogFile>
  <AllowedSourceNonDomainComputers></AllowedSourceNonDomainComputers>
  <AllowedSourceDomainComputers>O:NSG:BAD:P(A;;GA;;;DC)S:</AllowedSourceDomainComputers>
</Subscription>
PowerShell
wecutil cs .\Baseline-Security.xml
wecutil gs Baseline-Security          # muestra la suscripción tal como la ve el recopilador

Decisiones clave en ese archivo:

  • AllowedSourceDomainComputers es una cadena SDDL. DC es Domain Computers. Para la suscripción DC-Security, concede el acceso al grupo de controladores de dominio, o al SID de un grupo de AD dedicado, para que cada suscripción llegue solo a los equipos previstos.
  • ReadExistingEvents a false significa que los orígenes solo reenvían eventos nuevos. Ponerlo a true en una suscripción nueva hace que cada origen suba de golpe todo su historial coincidente, lo que puede tumbar un recopilador.
  • ContentFormat RenderedText incluye el mensaje representado, que esperan muchos analizadores de SIEM; Events es más pequeño porque solo envía el XML en bruto.
  • Entrega. El modo Custom con un MaxLatencyTime de 60 segundos es un buen valor predeterminado para eventos de seguridad. Los modos integrados son Normal (por lotes, hasta 15 minutos), MinLatency (unos 30 segundos) y MinBandwidth (horas, para enlaces lentos).
  • Tamaño de la consulta. Las expresiones XPath muy largas pueden no aplicarse. Reparte los ID en varios elementos Select, como se muestra, en lugar de una única cadena or enorme.

Paso 4: configura los orígenes por GPO

En los orígenes, en Computer Configuration > Policies > Administrative Templates > Windows Components > Event Forwarding:

  • Configure target Subscription Manager = Enabled, con Server=http://wec01.corp.example:5985/wsman/SubscriptionManager/WEC,Refresh=60. Usa el FQDN del recopilador para que Kerberos funcione. Puedes indicar más de un servidor; en ese caso, cada origen reenvía a todos los recopiladores de la lista, lo que da redundancia pero duplica el volumen.

Después asegúrate de que los orígenes pueden realmente leer y enviar los registros:

  • Servicio WinRM en ejecución. El cliente de reenvío lo necesita, incluso en estaciones de trabajo sin agente de escucha WinRM. Configura Windows Remote Management (WS-Management) como Automatic en Security Settings > System Services si tu línea base lo deshabilita.
  • Acceso al registro de seguridad. El reenviador se ejecuta como Network Service, que de forma predeterminada no puede leer el registro de seguridad. Agrega NT AUTHORITY\NETWORK SERVICE al grupo local Event Log Readers mediante directiva de grupo, o añade (A;;0x1;;;NS) a la cadena de acceso del canal Security con Windows Components > Event Log Service > Security > Configure log access. Los controladores de dominio no tienen grupos locales, así que allí usa el método de acceso al registro o el grupo integrado Event Log Readers del dominio.

Reparte los orígenes entre recopiladores mediante el ámbito de las GPO, por ejemplo una GPO por OU o por sitio que apunte a un recopilador distinto. WEF no tiene equilibrador de carga integrado.

Qué se rompe

  • Faltan eventos de seguridad de los DC: casi siempre es el paso del acceso al registro. Comprueba la cadena de acceso del canal con wevtutil gl Security.
  • Nombre de recopilador incorrecto (nombre corto o IP): sin Kerberos, los orígenes no pueden autenticarse.
  • El estado de ejecución de las suscripciones en el registro crece con cada origen; las suscripciones únicas muy grandes hacen que el recopilador tarde en arrancar. Más suscripciones, más pequeñas, y más recopiladores lo resuelven.
  • El disco del recopilador se llena si el agente del SIEM deja de leer. ForwardedEvents es un búfer, no un archivo histórico.
  • Los cambios de firewall en los recopiladores o un servicio WinRM deshabilitado en los orígenes detienen el reenvío en silencio.

Paso 5: dimensiona y supervisa

Dimensiona por eventos por segundo medidos, no por número de equipos. Haz un piloto de cada suscripción en un grupo representativo y lee la tasa en el recopilador y en tu SIEM. Deja margen suficiente para que el recopilador absorba los picos de recuperación tras una interrupción, cuando cada origen envía su atraso.

Comprueba el estado de las suscripciones desde el recopilador:

PowerShell
wecutil gr Baseline-Security    # estado en tiempo de ejecución: cada origen, estado, último latido

Los orígenes en estado inactivo, o con un último latido más antiguo que el intervalo de latido, requieren atención. En un origen, los errores aparecen en Applications and Services Logs > Microsoft > Windows > Eventlog-ForwardingPlugin > Operational, y la conectividad puede probarse con Test-WSMan wec01.corp.example.

Crea tres alertas en el SIEM: un recopilador que deja de enviar, una suscripción cuyo número de orígenes cae bruscamente y equipos críticos (controladores de dominio, servidores de Tier 0) que no han reenviado ningún evento en la última hora.

Paso 6: lleva los eventos al SIEM

Ejecuta el agente de tu SIEM solo en los recopiladores. Para Microsoft Sentinel, Azure Monitor Agent puede recopilar ForwardedEvents mediante el conector de datos Windows Forwarded Events. Para otros SIEM, apunta su agente de Windows al registro ForwardedEvents (o a tus registros personalizados). El registro de reglas de firewall de registro y supervisión del firewall y Sysmon de despliegue y ajuste de Sysmon pueden viajar por la misma canalización.

Verificación

  1. En un origen: gpresult /r /scope computer muestra la GPO de Event Forwarding; wevtutil gl Security muestra el acceso de Network Service.
  2. Genera un evento conocido, por ejemplo un inicio de sesión fallido con una contraseña incorrecta (4625).
  3. En el recopilador: Get-WinEvent -LogName ForwardedEvents -MaxEvents 20 lo muestra dentro de la latencia configurada.
  4. En el SIEM: el evento se puede buscar con el nombre de equipo y la marca de tiempo correctos.
  5. wecutil gr muestra el número esperado de orígenes activos.

Encontrarás más sobre toda la cadena de registro en la página temática de auditoría y registro.

Lista de comprobación

  • Suscripciones diseñadas por finalidad y almacenadas como XML en control de código fuente
  • Recopiladores dedicados y endurecidos, con ForwardedEvents dimensionado como búfer
  • Suscripciones iniciadas por el origen con ámbito limitado mediante AllowedSourceDomainComputers
  • ReadExistingEvents a false en las suscripciones nuevas; latencia de entrega personalizada configurada
  • La GPO Target Subscription Manager usa el FQDN del recopilador
  • Servicio WinRM en ejecución en los orígenes; registro de seguridad legible por Network Service, también en los DC
  • Carga del recopilador medida en eventos por segundo, con margen para los atrasos
  • Alertas sobre el estado de las suscripciones, el número de orígenes y los equipos críticos silenciosos

Preguntas frecuentes

¿Está cifrado el tráfico de Windows Event Forwarding?

Sí. En un dominio, el reenvío iniciado por el origen sobre HTTP en el puerto 5985 se autentica con Kerberos y cifra la carga útil con la clave de sesión, igual que el resto del tráfico WinRM. Para orígenes fuera del dominio, usa HTTPS con certificados de cliente y de servidor. Mantén deshabilitado 'Allow unencrypted traffic' en orígenes y recopiladores para que esa protección no pueda desactivarse.

¿Cuántos orígenes puede gestionar un recopilador?

Depende mucho más de la tasa de eventos que del número de equipos. Un recopilador que recibe solo unos pocos ID de evento concretos de estaciones de trabajo gestiona muchos miles de orígenes, mientras que uno que recibe registros de seguridad completos de controladores de dominio gestiona muchos menos. La regla práctica de Microsoft para un recopilador estable en hardware estándar es de unos 3.000 eventos por segundo de media entre todas sus suscripciones. Mide los eventos por segundo en un piloto y deja margen por debajo de esa cifra.

¿Sigo necesitando WEF si tengo un agente de SIEM?

No necesariamente. Si un agente ya recopila los mismos eventos de todos los equipos con baja latencia, WEF aporta poco. WEF es valioso donde no puedes o no quieres desplegar agentes en todas partes: viene integrado en Windows, no necesita licencia y permite que unos pocos servidores recopiladores lleven el agente del SIEM en lugar de cada equipo final.

Windows Event Forwarding a escala

Guías relacionadas

Auditoría y registro

Desplegar y ajustar Sysmon a escala

Elige una configuración de Sysmon, reduce el ruido sin crear puntos ciegos, despliega actualizaciones con seguridad en miles de equipos y supervisa el propio Sysmon.

Intermedio