Recopilar registros de Microsoft IIS
En este documento se explica cómo ingerir registros de Microsoft Internet Information Services (IIS) en Google Security Operations mediante Bindplane.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una instancia de Google SecOps
- Windows Server 2016 o una versión posterior con IIS instalado
- Acceso de administrador al servidor IIS
- Si se ejecuta a través de un proxy, asegúrese de que los puertos del cortafuegos estén abiertos según los requisitos del agente de Bindplane.
Obtener el archivo de autenticación de ingestión de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recogida.
- Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane (por ejemplo,
C:\SecOps\ingestion-auth.json).
Obtener el ID de cliente de Google SecOps
- Inicia sesión en la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Configurar el registro extendido W3C de IIS
Debes habilitar los campos W3C correctos en el Administrador de IIS para que Google SecOps pueda analizar tus registros correctamente y las detecciones funcionen de forma fiable.
Abre el Administrador de IIS.
- Haz clic en Empezar.
- Escribe
inetmgry pulsa Intro. - Se abrirá la ventana Administrador de Internet Information Services (IIS).
Método alternativo:
- Pulsa tecla de Windows + R.
- Escribe
inetmgry pulsa Intro.
Ve a Configuración de registro.
- En el panel Conexiones (en la parte izquierda), despliega el nombre de tu servidor.
- Para configurar el registro en todo el servidor (opción recomendada):
- Haz clic en el nombre del servidor en el nivel raíz.
- Para configurar el registro específico de un sitio, sigue estos pasos:
- Expanda Sitios y, a continuación, haga clic en el sitio específico (por ejemplo, Sitio web predeterminado).
- En la vista de funciones (panel central), haz doble clic en Registro.
Selecciona Formato de registro extendido W3C.
- En la página Registro, en la sección Archivo de registro, haz lo siguiente:
- En el menú desplegable Formato, selecciona W3C.
- Haz clic en el botón Seleccionar campos.
Configurar campos de registro W3C
IMPORTANTE: El analizador IIS de Google SecOps admite 8 configuraciones de campos. Debe habilitar TODOS los campos de UNO de los siguientes patrones. Si se habilitan campos diferentes o se mezclan patrones, se producirán errores de análisis.
En el cuadro de diálogo Campos de registro de W3C, seleccione los campos según UNO de los siguientes patrones:
Patrón 1: contexto de sitio completo con cadena de consulta y bytes
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Nombre del servicio (s-sitename)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Bytes enviados (sc-bytes)
- Bytes recibidos (cs-bytes)
Usa este patrón cuando: tu formato de nivel inferior incluya el contexto del sitio y la cadena de consulta, necesites los bytes enviados y recibidos, y tu canal espere las columnas "username" y "referer" (aunque los valores sean -).
Patrón 2: básico con subestado, estado de Win32 y rendimiento (sin remitente)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo empleado (time-taken)
Usa este patrón cuando: tu canalización no incluya el encabezado Referer, pero necesites códigos de error detallados y latencia (time-taken).
Patrón 3: básico con subestado, estado de Win32 y rendimiento (con remitente)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del servidor (s-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo empleado (time-taken)
Usa este patrón cuando: es igual que el patrón 2, pero tu canalización incluye la columna Referer.
Patrón 4: TLS/Protocol-Version Aware con Referer y Rendimiento
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del cliente (c-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- Versión del protocolo (cs-version)
- User-Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo empleado (time-taken)
Usa este patrón cuando: tu formato de nivel inferior registre explícitamente cs-version (por ejemplo, HTTP/1.1) e incluye la hora, y también tiene el puerto del cliente como columna específica.
Patrón 5: TLS/Protocol-Version Aware con Referer (sin rendimiento)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del cliente (c-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- Versión del protocolo (cs-version)
- User-Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón cuando: es igual que el patrón 4, pero tu canalización no incluye time-taken.
Patrón 6: con cookie y referer (sin rendimiento ni bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del cliente (c-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Cookie (cs(Cookie))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón cuando: tu formato de nivel inferior espera que tanto la cookie como el referer se incluyan en columnas específicas.
Patrón 7: mínimo con Referer (sin cookies, sin rendimiento y sin bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del cliente (c-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Referer (cs(Referer))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón cuando: tu formato de nivel inferior incluya Referer, pero no Cookie, tiempo o bytes.
Patrón 8: mínimo sin Referer (sin cookies, sin rendimiento y sin bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- Tallo de URI (cs-uri-stem)
- Consulta de URI (cs-uri-query)
- Puerto del cliente (c-port)
- Nombre de usuario (cs-username)
- Dirección IP del cliente (c-ip)
- User-Agent (cs(User-Agent))
- Estado del protocolo (sc-status)
- Subestado del protocolo (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón cuando: tu formato de nivel inferior no incluya el encabezado Referer y solo necesites el contexto de solicitud principal, además de los códigos de estado.
NO habilites campos de varios patrones. El analizador espera una de estas configuraciones exactas.
Aplicar configuración
- Haz clic en Aceptar para cerrar el cuadro de diálogo Campos de registro de W3C.
- Verifica la ruta del Directorio en el que se escribirán los registros.
- Predeterminado:
%SystemDrive%\inetpub\logs\LogFiles
- Predeterminado:
- En Rollover de archivos de registro, selecciona Diario (opción recomendada para la ingesta de Google SecOps).
- En el panel Acciones (en la parte derecha), haz clic en Aplicar.
Verificar el registro de IIS
Después de configurar los campos de W3C, compruebe que IIS escribe los registros correctamente:
- Genera tráfico de prueba a tu sitio de IIS abriendo una página web en un navegador.
- Ve al directorio de registro:
C:\inetpub\logs\LogFiles\W3SVC1\- Nota:
W3SVC1corresponde al primer sitio (Sitio web predeterminado). En otros sitios, el nombre de la carpeta seráW3SVC2,W3SVC3, etc.
- Nota:
- Abre el archivo de registro más reciente (por ejemplo,
u_ex251217.log) en el Bloc de notas. - Verifica que la línea
#Fields:contenga todos los campos que has habilitado en el orden exacto del patrón que has elegido.
Ejemplo del patrón 3
Si has configurado el patrón 3 (básico con subestado, estado de Win32 y rendimiento con referente), la línea #Fields: debería ser la siguiente:
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
Ejemplo de entrada de registro:
2025-12-17 14:23:15 192.168.1.10 GET /index.html - 80 - 203.0.113.45 Mozilla/5.0+(Windows+NT+10.0) https://example.com/previous.html 200 0 0 125
Notas importantes:
- Los campos vacíos se representan con un guion (
-). - El orden de los campos debe coincidir exactamente con el encabezado
#Fields:. - El analizador fallará si faltan campos, están desordenados o proceden de varios patrones
Instalar el agente de Bindplane
Instala el agente de Bindplane en tu servidor Windows siguiendo las instrucciones que se indican a continuación.
Instalación de Windows
- Abre Petición de comando o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Recursos de instalación adicionales
- Para ver otras opciones de instalación, consulta esta guía de instalación.
Configurar el agente de Bindplane para ingerir registros de IIS y enviarlos a Google SecOps
Editar el archivo de configuración
- Busca el archivo
config.yaml.- Ruta predeterminada:
C:\Program Files\observIQ OpenTelemetry Collector\config.yaml
- Ruta predeterminada:
- Abre el archivo con un editor de texto (por ejemplo, Bloc de notas, VS Code o Notepad++) como administrador.
Sustituye todo el contenido por la siguiente configuración:
receivers: iis: collection_interval: 60s processors: resourcedetection: detectors: ["system"] system: hostname_sources: ["os"] normalizesums: batch: exporters: chronicle/iis: endpoint: malachiteingestion-pa.googleapis.com creds: 'C:\SecOps\ingestion-auth.json' log_type: 'IIS' override_log_type: false raw_log_field: body customer_id: '<CUSTOMER_ID>' compression: gzip service: pipelines: logs/iis: receivers: - iis processors: - resourcedetection - normalizesums - batch exporters: - chronicle/iis
Actualizar valores de configuración
Sustituye los siguientes marcadores de posición:
creds:: ruta al archivo de autenticación de la ingestión (por ejemplo,C:\SecOps\ingestion-auth.json).endpoint:: tu endpoint regional.customer_id:: tu ID de cliente de Google SecOps real de la sección Obtener el ID de cliente de Google SecOps.
Reinicia el agente de Bindplane para aplicar los cambios
Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Servicios o introducir el siguiente comando:
net stop observiq-otel-collector && net start observiq-otel-collector
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
| @timestamp | metadata.event_timestamp | Marca de tiempo del evento tal como se registra en el registro sin procesar. |
| @version | metadata.product_version | La versión del servidor IIS. |
| AgentDevice | additional.fields.AgentDevice.value.string_value | El dispositivo que ha generado el registro. |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | El nombre del archivo de registro. |
| ASP.NET_SessionId | network.session_id | El ID de sesión del usuario. |
| c-ip | principal.ip | La dirección IP del cliente. |
| Canal | security_result.about.resource.attribute.labels.Channel.value | El canal en el que se ha registrado el evento. |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | ID del canal en el que se ha registrado el evento. |
| Ordenador | target.hostname | Nombre de host del equipo de destino. |
| cs-bytes | network.received_bytes | Número de bytes recibidos del cliente. |
| cs-host | principal.hostname, principal.asset.hostname | Nombre de host del cliente. |
| cs-method | network.http.method | Método HTTP usado por el cliente. |
| cs-uri-query | target.url | La cadena de consulta de la URL solicitada por el cliente. |
| cs-uri-stem | target.url | Ruta de la URL solicitada por el cliente. |
| nombre-de-usuario-cs | principal.user.user_display_name | Nombre de usuario del cliente. |
| cs-version | network.tls.version_protocol | Versión HTTP utilizada por el cliente. |
| cs(Cookie) | Se usa para extraer información de las cookies. | |
| cs(Referer) | network.http.referral_url | La URL que ha remitido al cliente a la página actual. |
| cs(User-Agent) | network.http.user_agent | User-agent del cliente. |
| csbyte | network.received_bytes | Número de bytes recibidos del cliente. |
| cshost | principal.hostname, principal.asset.hostname | Nombre de host del cliente. |
| csip | principal.ip, principal.asset.ip | La dirección IP del cliente. |
| csmethod | network.http.method | Método HTTP usado por el cliente. |
| csreferer | network.http.referral_url | La URL que ha remitido al cliente a la página actual. |
| csuseragent | network.http.user_agent | User-agent del cliente. |
| csusername | principal.user.user_display_name | Nombre de usuario del cliente. |
| csversion | network.tls.version_protocol | Versión HTTP utilizada por el cliente. |
| fecha | Se usa para crear la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| description | security_result.description | Descripción del evento. |
| devicename | target.hostname | Nombre de host del equipo de destino. |
| dst_ip | target.ip, target.asset.ip | La dirección IP del equipo de destino. |
| dst_port | target.port | El número de puerto de la máquina de destino. |
| duración | Duración de la solicitud en milisegundos. | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | La hora en la que se puso en cola el evento en UTC. |
| EventID | metadata.product_log_id | ID del evento. |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | La hora en la que se procesó el evento en UTC. |
| EventTime | metadata.event_timestamp | Marca de tiempo del evento. |
| EventType | metadata.product_event_type | El tipo del evento. |
| file_path | target.file.full_path | Ruta completa del archivo implicado en el evento. |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | El ID del filtro. |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | La clave del filtro. |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | Nombre del filtro. |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | El tipo de filtro. |
| host | target.hostname | Nombre de host del equipo de destino. |
| host.architecture | principal.asset.hardware.cpu_platform | La arquitectura del equipo host. |
| host.geo.name | additional.fields.geo_name.value.string_value | Ubicación geográfica de la máquina host. |
| host.hostname | target.hostname, target.asset.hostname | Nombre de host del equipo host. |
| host.id | observer.asset_id | El ID de la máquina host. |
| host.ip | principal.ip, principal.asset.ip | La dirección IP de la máquina host. |
| host.mac | principal.mac | La dirección MAC del host. |
| host.os.build | additional.fields.os_build.value.string_value | Número de compilación del sistema operativo de la máquina host. |
| host.os.kernel | principal.platform_patch_level | Versión del kernel del sistema operativo de la máquina host. |
| host.os.name | additional.fields.os_name.value.string_value | El nombre del sistema operativo de la máquina host. |
| host.os.platform | principal.platform | La plataforma del sistema operativo de la máquina host. |
| host.os.version | principal.platform_version | La versión del sistema operativo de la máquina host. |
| http_method | network.http.method | Método HTTP usado por el cliente. |
| http_response | network.http.response_code | El código de respuesta HTTP. |
| http_status_code | network.http.response_code | El código de estado HTTP de la respuesta. |
| http_substatus | additional.fields.sc_substatus.value.string_value | El código de subestado HTTP de la respuesta. |
| instancia | additional.fields.instance.value.string_value | El ID de instancia de la tarea. |
| intermediary_devicename | intermediary.hostname, intermediary.asset.hostname | El nombre de host del dispositivo intermediario. |
| json_message | El mensaje de registro sin formato en formato JSON. | |
| kv_fields | Se usa para extraer pares clave-valor del mensaje de registro sin procesar. | |
| LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | La clave de la capa. |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | Nombre de la capa. |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | El ID de la capa. |
| log.file.path | target.file.full_path | Ruta completa del archivo de registro. |
| log.offset | metadata.product_log_id | Desplazamiento del evento en el archivo de registro. |
| logstash.collect.host | observer.hostname | El nombre de host del equipo que ha recogido el registro. |
| logstash.process.host | intermediary.hostname | El nombre de host del equipo que ha procesado el registro. |
| logstash_json_message | El mensaje de registro sin formato en formato JSON. | |
| mensaje | security_result.description | El mensaje de registro sin procesar. |
| ministerio | additional.fields.ministry.value.string_value | El ministerio asociado al evento. |
| name | El nombre de la entidad. | |
| NewValue | additional.fields.NewValue.value.string_value | El nuevo valor del ajuste de configuración. |
| OldValue | additional.fields.OldValue.value.string_value | Valor anterior del ajuste de configuración. |
| puerto | principal.port | Número de puerto del cliente. |
| priority_code | El código de prioridad del mensaje syslog. | |
| ProcessID | principal.process.pid | ID de proceso del proceso que ha generado el evento. |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | El GUID del proveedor. |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | Clave del proveedor. |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | El nombre del proveedor. |
| referrer_url | network.http.referral_url | La URL que ha remitido al cliente a la página actual. |
| request_url | target.url | La URL solicitada por el cliente. |
| s-computername | target.hostname | Nombre de host del equipo de destino. |
| s-ip | target.ip, target.asset.ip | La dirección IP del equipo de destino. |
| s-port | target.port | El número de puerto de la máquina de destino. |
| s-sitename | additional.fields.sitename.value.string_value | El nombre del sitio. |
| sc-bytes | network.sent_bytes | Número de bytes enviados al cliente. |
| sc-status | network.http.response_code | El código de estado HTTP de la respuesta. |
| sc-substatus | additional.fields.sc_substatus.value.string_value | El código de subestado HTTP de la respuesta. |
| sc-win32-status | El código de estado de Windows de la respuesta. | |
| scbyte | network.sent_bytes | Número de bytes enviados al cliente. |
| scstatus | network.http.response_code | El código de estado HTTP de la respuesta. |
| gravedad | security_result.severity | La gravedad del evento. |
| service.type | additional.fields.service_type.value.string_value | El tipo de servicio. |
| sIP | principal.ip, principal.asset.ip | La dirección IP del cliente. |
| sPort | principal.port | Número de puerto del cliente. |
| sSiteName | additional.fields.sitename.value.string_value | El nombre del sitio. |
| src_ip | principal.ip, principal.asset.ip, observer.ip | La dirección IP del cliente. |
| src_port | principal.port | Número de puerto del cliente. |
| sysdate | Fecha y hora del mensaje syslog. | |
| syslog_facility | security_result.severity_details | La instalación del mensaje syslog. |
| syslog_pri | La prioridad del mensaje syslog. | |
| syslog_severity | security_result.severity_details | La gravedad del mensaje syslog. |
| syslog_severity_code | El código de gravedad del mensaje syslog. | |
| etiquetas | security_result.rule_name | Etiquetas asociadas al evento. |
| tarea | additional.fields.task.value.string_value | El nombre de la tarea. |
| Tiempo | Se usa para crear la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| tiempo empleado | Duración de la solicitud en milisegundos. | |
| uri_query | target.url | La cadena de consulta de la URL solicitada por el cliente. |
| user_agent | network.http.user_agent | User-agent del cliente. |
| Nombre de usuario | target.user.userid | Nombre de usuario del usuario actual. |
| UserSid | target.user.windows_sid | El SID de Windows del usuario. |
| Ponderación | security_result.about.resource.attribute.labels.Weight.value | El peso del filtro. |
| win32_status | El código de estado de Windows de la respuesta. | |
| xforwardedfor | El encabezado X-Forwarded-For, que contiene una lista de direcciones IP separadas por comas. | |
| metadata.log_type | "IIS" | |
| network.direction | "INBOUND" | |
| metadata.vendor_name | "Microsoft" | |
| metadata.product_name | "Internet Information Server" | |
| metadata.event_type | "NETWORK_HTTP", "USER_UNCATEGORIZED", "GENERIC_EVENT", "STATUS_UPDATE", "USER_LOGOUT", "USER_LOGIN" | |
| extensions.auth.type | "MACHINE" |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.