Recopila registros de Microsoft IIS
En este documento, se explica cómo transferir registros de Microsoft Internet Information Services (IIS) a Google Security Operations con Bindplane.
Antes de comenzar
Asegúrate de cumplir con 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 de IIS
- Si se ejecuta detrás de un proxy, asegúrate de que los puertos de firewall estén abiertos según los requisitos del agente de Bindplane.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane (por ejemplo,
C:\SecOps\ingestion-auth.json).
Obtén el ID de cliente de Google SecOps
- Accede a 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.
Configura el registro extendido de IIS W3C
Debes habilitar los campos correctos de W3C en el Administrador de IIS para que Google SecOps pueda analizar tus registros correctamente y las detecciones funcionen de manera confiable.
Abre el Administrador de IIS
- Haz clic en Iniciar.
- Escribe
inetmgry presiona Intro. - Se abrirá la ventana Administrador de Internet Information Services (IIS).
Método alternativo:
- Presiona Tecla de Windows + R.
- Escribe
inetmgry presiona Intro.
Navega a Configuración de registro
- En el panel Conexiones (lado izquierdo), expande el nombre de tu servidor.
- Para configurar el registro en todo el servidor (recomendado), haz lo siguiente:
- Haz clic en el nombre del servidor en el nivel raíz.
- Para configurar el registro específico del sitio, haz lo siguiente:
- Expande Sitios y, luego, haz clic en el sitio específico (por ejemplo, Sitio web predeterminado).
- En la Vista de funciones (panel central), haz doble clic en Logging.
Selecciona Formato de registro extendido de W3C
- En la página Logging, en la sección Log File, haz lo siguiente:
- En el menú desplegable Formato, selecciona W3C.
- Haz clic en el botón Seleccionar campos.
Configura los campos de registro de W3C
IMPORTANTE: El analizador de IIS de Google SecOps admite 8 configuraciones de campos. Debes habilitar TODOS los campos de UNO de los siguientes patrones. Habilitar diferentes campos o mezclar patrones provocará errores de análisis.
En el diálogo W3C Logging Fields, selecciona los campos según UNO de los siguientes patrones:
Patrón 1: Contexto completo del sitio 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)
- URI Stem (cs-uri-stem)
- URI Query (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 en los siguientes casos: Tu formato de nivel inferior incluye el contexto del sitio y la cadena de consulta, necesitas bytes enviados o recibidos, y tu canalización espera las columnas "username" y "referer" (incluso si los valores son -).
Patrón 2: Básico con subestado, estado de Win32 y rendimiento (sin URL de referencia)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Usa este patrón en los siguientes casos: Tu canalización no incluye el encabezado Referer, pero necesitas códigos de error y latencia detallados (time-taken).
Patrón 3: Básico con Substatus, Win32 Status y Performance (con URL de referencia)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Usa este patrón en los siguientes casos: Es igual al patrón 2, pero tu canalización incluye el encabezado Referer como una columna dedicada.
Patrón 4: TLS/Protocol-Version Aware con Referrer y Performance
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto de 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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
- Tiempo utilizado (time-taken)
Usa este patrón en los siguientes casos: Tu formato de nivel inferior registra de forma explícita cs-version (p.ej., HTTP/1.1) y también incluye la sincronización, y también tienes el puerto del cliente como una columna dedicada.
Patrón 5: TLS/Protocol-Version Aware con URL de referencia (sin rendimiento)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto de 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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón en los siguientes casos: Es igual que el patrón 4, pero tu canalización no incluye time-taken.
Patrón 6: Con cookie y URL de referencia (sin rendimiento, sin bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto de 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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón en los siguientes casos: Tu formato de nivel inferior espera que tanto la cookie como el encabezado Referer se incluyan como columnas específicas.
Patrón 7: Mínimo con Referer (sin cookie, sin rendimiento, sin bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto de 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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón en los siguientes casos: Tu formato de nivel inferior incluye Referer, pero no incluye Cookie/hora/bytes.
Patrón 8: Mínimo sin encabezado Referer (sin cookies, sin rendimiento, sin bytes)
Habilita estos campos en este orden exacto:
- Fecha (fecha)
- Hora (hora)
- Dirección IP del servidor (s-ip)
- Método (cs-method)
- URI Stem (cs-uri-stem)
- URI Query (cs-uri-query)
- Puerto de 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)
- Protocol Substatus (sc-substatus)
- Estado de Win32 (sc-win32-status)
Usa este patrón en los siguientes casos: Tu formato de nivel inferior no incluye Referer y solo necesitas el contexto de la solicitud principal más 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 W3C Logging Fields.
- Verifica la ruta de acceso del Directorio en el que se escribirán los registros.
- Valor predeterminado:
%SystemDrive%\inetpub\logs\LogFiles
- Valor predeterminado:
- En Log File Rollover, selecciona Daily (se recomienda para la transferencia de datos de Google SecOps).
- Haz clic en Aplicar en el panel Acciones (lado derecho).
Verifica el registro de IIS
Después de configurar los campos de W3C, verifica que IIS escriba los registros correctamente:
- Para generar tráfico de prueba en tu sitio de IIS, abre una página web en un navegador.
- Navega al directorio de registros:
C:\inetpub\logs\LogFiles\W3SVC1\- Nota:
W3SVC1corresponde al primer sitio (sitio web predeterminado). Para otros sitios, el nombre de la carpeta seráW3SVC2,W3SVC3, etcétera.
- 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 habilitaste en el orden exacto del patrón que elegiste.
Ejemplo del patrón 3
Si configuraste el patrón 3 (básico con subestado, estado de Win32 y rendimiento con URL de referencia), 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, si se reordenan o si provienen de varios patrones.
Instala el agente de BindPlane
Instala el agente de BindPlane en tu servidor de Windows según las siguientes instrucciones.
Instalación en Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el comando siguiente:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Recursos adicionales de instalación
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir registros de IIS y enviarlos a Google SecOps
Edita el archivo de configuración
- Ubica 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.
Reemplaza 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
Actualiza los valores de configuración
Reemplaza los marcadores de posición que se indican más abajo:
creds:: Es la ruta de acceso a tu archivo de autenticación de transferencia (por ejemplo,C:\SecOps\ingestion-auth.json).endpoint:: Es tu extremo regional.customer_id:: Tu ID de cliente real de Google SecOps de la sección Obtén 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 de Servicios o ingresar 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 | Es la marca de tiempo del evento tal como se registró en el registro sin procesar. |
| @version | metadata.product_version | Es la versión del servidor IIS. |
| AgentDevice | additional.fields.AgentDevice.value.string_value | Es el dispositivo que generó el registro. |
| AgentLogFile | additional.fields.AgentLogFile.value.string_value | Nombre del archivo de registro. |
| ASP.NET_SessionId | network.session_id | ID de sesión del usuario. |
| c-ip | principal.ip | Es la dirección IP del cliente. |
| Canal | security_result.about.resource.attribute.labels.Channel.value | Canal en el que se registró el evento. |
| ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | Es el ID del canal en el que se registró el evento. |
| Computadora | target.hostname | Es el nombre de host de la máquina de destino. |
| cs-bytes | network.received_bytes | Es la cantidad de bytes recibidos del cliente. |
| cs-host | principal.hostname, principal.asset.hostname | Es el nombre de host del cliente. |
| cs-method | network.http.method | Es el método HTTP que usa el cliente. |
| cs-uri-query | target.url | Es la cadena de consulta de la URL que solicitó el cliente. |
| cs-uri-stem | target.url | Es la ruta de la URL que solicitó el cliente. |
| cs-username | principal.user.user_display_name | Es el nombre de usuario del cliente. |
| cs-version | network.tls.version_protocol | Es la versión de HTTP que usa el cliente. |
| cs(Cookie) | Se usa para extraer información de las cookies. | |
| cs(Referer) | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| cs(User-Agent) | network.http.user_agent | Es el usuario-agente del cliente. |
| csbyte | network.received_bytes | Es la cantidad de bytes recibidos del cliente. |
| cshost | principal.hostname, principal.asset.hostname | Es el nombre de host del cliente. |
| csip | principal.ip, principal.asset.ip | Es la dirección IP del cliente. |
| csmethod | network.http.method | Es el método HTTP que usa el cliente. |
| csreferer | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| csuseragent | network.http.user_agent | Es el usuario-agente del cliente. |
| csusername | principal.user.user_display_name | Es el nombre de usuario del cliente. |
| csversion | network.tls.version_protocol | Es la versión de HTTP que usa el cliente. |
| fecha | Se usa para construir la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| descripción | security_result.description | Es una descripción del evento. |
| devicename | target.hostname | Es el nombre de host de la máquina de destino. |
| dst_ip | target.ip, target.asset.ip | Es la dirección IP de la máquina de destino. |
| dst_port | target.port | Número de puerto de la máquina de destino. |
| duración | Es la duración de la solicitud en milisegundos. | |
| EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | Es la fecha y hora en que se puso en cola el evento en UTC. |
| EventID | metadata.product_log_id | Es el ID del evento. |
| EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | Fecha y hora en que se procesó el evento en UTC. |
| EventTime | metadata.event_timestamp | Es la marca de tiempo del evento. |
| EventType | metadata.product_event_type | Es el tipo de evento. |
| file_path | target.file.full_path | Es la ruta de acceso completa del archivo involucrado en el evento. |
| FilterId | security_result.about.resource.attribute.labels.FilterId.value | Es el ID del filtro. |
| FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | Es la clave del filtro. |
| FilterName | security_result.about.resource.attribute.labels.FilterName.value | Es el nombre del filtro. |
| FilterType | security_result.about.resource.attribute.labels.FilterType.value | Es el tipo de filtro. |
| host | target.hostname | Es el nombre de host de la máquina de destino. |
| host.architecture | principal.asset.hardware.cpu_platform | Es la arquitectura de la máquina anfitrión. |
| host.geo.name | additional.fields.geo_name.value.string_value | Ubicación geográfica de la máquina anfitrión. |
| host.hostname | target.hostname, target.asset.hostname | Es el nombre de host de la máquina anfitrión. |
| host.id | observer.asset_id | Es el ID de la máquina anfitrión. |
| host.ip | principal.ip, principal.asset.ip | Es la dirección IP de la máquina anfitrión. |
| host.mac | principal.mac | Es la dirección MAC de la máquina anfitrión. |
| host.os.build | additional.fields.os_build.value.string_value | Número de compilación del sistema operativo en la máquina anfitrión. |
| host.os.kernel | principal.platform_patch_level | Es la versión del kernel del sistema operativo en la máquina anfitrión. |
| host.os.name | additional.fields.os_name.value.string_value | Nombre del sistema operativo en la máquina anfitrión. |
| host.os.platform | principal.platform | Es la plataforma del sistema operativo en la máquina anfitrión. |
| host.os.version | principal.platform_version | Es la versión del sistema operativo en la máquina anfitrión. |
| http_method | network.http.method | Es el método HTTP que usa el cliente. |
| http_response | network.http.response_code | El código de respuesta HTTP. |
| http_status_code | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| http_substatus | additional.fields.sc_substatus.value.string_value | Es el código de subestado HTTP de la respuesta. |
| instancia | additional.fields.instance.value.string_value | Es el ID de instancia de la tarea. |
| intermediary_devicename | intermediary.hostname, intermediary.asset.hostname | Es el nombre de host del dispositivo intermediario. |
| json_message | Es el mensaje de registro sin procesar 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 | Es la clave de la capa. |
| LayerName | security_result.about.resource.attribute.labels.LayerName.value | Es el nombre de la capa. |
| LayerId | security_result.about.resource.attribute.labels.LayerId.value | Es el ID de la capa. |
| log.file.path | target.file.full_path | Es la ruta de acceso completa del archivo de registro. |
| log.offset | metadata.product_log_id | Es el desplazamiento del evento en el archivo de registro. |
| logstash.collect.host | observer.hostname | Es el nombre de host de la máquina que recopiló el registro. |
| logstash.process.host | intermediary.hostname | Es el nombre de host de la máquina que procesó el registro. |
| logstash_json_message | Es el mensaje de registro sin procesar en formato JSON. | |
| mensaje | security_result.description | Es el mensaje de registro sin procesar. |
| ministerio | additional.fields.ministry.value.string_value | Es el ministerio asociado con el evento. |
| nombre | Es el nombre de la entidad. | |
| NewValue | additional.fields.NewValue.value.string_value | Es el valor nuevo del parámetro de configuración. |
| OldValue | additional.fields.OldValue.value.string_value | Es el valor anterior del parámetro de configuración. |
| puerto | principal.port | Número de puerto del cliente. |
| priority_code | Es el código de prioridad del mensaje de syslog. | |
| ProcessID | principal.process.pid | Es el ID del proceso que generó el evento. |
| ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | Es el GUID del proveedor. |
| ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | Es la clave del proveedor. |
| ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | Es el nombre del proveedor. |
| referrer_url | network.http.referral_url | Es la URL que remitió al cliente a la página actual. |
| request_url | target.url | Es la URL que solicitó el cliente. |
| s-computername | target.hostname | Es el nombre de host de la máquina de destino. |
| s-ip | target.ip, target.asset.ip | Es la dirección IP de la máquina de destino. |
| s-port | target.port | Número de puerto de la máquina de destino. |
| s-sitename | additional.fields.sitename.value.string_value | Es el nombre del sitio. |
| sc-bytes | network.sent_bytes | Es la cantidad de bytes enviados al cliente. |
| sc-status | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| sc-substatus | additional.fields.sc_substatus.value.string_value | Es el código de subestado HTTP de la respuesta. |
| sc-win32-status | Es el código de estado de Windows de la respuesta. | |
| scbyte | network.sent_bytes | Es la cantidad de bytes enviados al cliente. |
| scstatus | network.http.response_code | Es el código de estado HTTP de la respuesta. |
| gravedad, | security_result.severity | Es la gravedad del evento. |
| service.type | additional.fields.service_type.value.string_value | Es el tipo de servicio. |
| sIP | principal.ip, principal.asset.ip | Es la dirección IP del cliente. |
| sPort | principal.port | Número de puerto del cliente. |
| sSiteName | additional.fields.sitename.value.string_value | Es el nombre del sitio. |
| src_ip | principal.ip, principal.asset.ip, observer.ip | Es la dirección IP del cliente. |
| src_port | principal.port | Número de puerto del cliente. |
| sysdate | Fecha y hora del mensaje de syslog. | |
| syslog_facility | security_result.severity_details | Es la instalación del mensaje de syslog. |
| syslog_pri | Es la prioridad del mensaje de syslog. | |
| syslog_severity | security_result.severity_details | Es la gravedad del mensaje de syslog. |
| syslog_severity_code | Es el código de gravedad del mensaje de syslog. | |
| etiquetas | security_result.rule_name | Son las etiquetas asociadas al evento. |
| tarea | additional.fields.task.value.string_value | Es el nombre de la tarea. |
| hora | Se usa para construir la marca de tiempo del evento si la marca de tiempo del registro sin procesar no es válida. | |
| time-taken | Es la duración de la solicitud en milisegundos. | |
| uri_query | target.url | Es la cadena de consulta de la URL que solicitó el cliente. |
| user_agent | network.http.user_agent | Es el usuario-agente del cliente. |
| UserName | target.user.userid | Nombre de usuario de la persona. |
| UserSid | target.user.windows_sid | Es el SID de Windows del usuario. |
| Peso | security_result.about.resource.attribute.labels.Weight.value | Es el peso del filtro. |
| win32_status | Es 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? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.