Recopila registros de Microsoft IIS

Compatible con:

En este documento, se explica cómo recopilar registros de Microsoft Internet Information Services (IIS) en Google Security Operations con Bindplane. Primero, el analizador intenta limpiar y normalizar los datos de entrada quitando caracteres innecesarios y estandarizando los nombres de los campos. Luego, usa una serie de patrones grok para extraer campos relevantes de varios formatos de registro de Microsoft IIS y asignarlos al modelo de datos unificado (UDM).

Antes de comenzar

  • Asegúrate de tener una instancia de Google SecOps.
  • Asegúrate de tener Windows 2016 o una versión posterior.
  • Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recopilación.
  3. Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtén el ID de cliente de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de Bindplane en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. 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

Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps

  1. Antes de configurar el archivo YAML, detén el servicio observIQ Distro for Open Telemetry Collector en el panel de servicios.
  2. Accede al archivo de configuración:

    1. Ubica el archivo config.yaml. Por lo general, se encuentra en el directorio /etc/bindplane-agent/ en Linux o en el directorio de instalación en Windows.
    2. Abre el archivo con un editor de texto (por ejemplo, nano, vi o Bloc de notas).
  3. Edita el archivo config.yaml de la siguiente manera:

    receivers:
      iis:
        collection_interval: 60s
    
    processors:
      # Resourcedetection is used to add a unique (host.name) to the metric resource(s), allowing users to filter between multiple agent systems.
      resourcedetection:
        detectors: ["system"]
        system:
          hostname_sources: ["os"]
    
      normalizesums:
    
      batch:
    
    exporters:
      chronicle/powershell:
        endpoint: malachiteingestion-pa.googleapis.com
        # Adjust the path to the credentials file you downloaded in Step 1
        creds: '/path/to/ingestion-authentication-file.json'
        log_type: 'IIS'
        override_log_type: false
        raw_log_field: body
        customer_id: '<customer_id>'
    
    service:
      pipelines:
        logs/winpowershell:
          receivers:
            - iis
          processors:
            - resourcedetection
            - normalizesums
            - batch
          exporters: [chronicle/iis]
    
  4. Reemplaza <customer_id> por el ID de cliente real.

  5. Actualiza /path/to/ingestion-authentication-file.json a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Obtén el archivo de autenticación de transferencia de Google SecOps.

  6. Después de guardar el archivo config.yaml, inicia el servicio observIQ Distro for Open Telemetry Collector.

Reinicia el agente de Bindplane para aplicar los cambios.

  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola Services o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

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 La versión del servidor IIS.
AgentDevice additional.fields.AgentDevice.value.string_value El dispositivo que generó el registro.
AgentLogFile additional.fields.AgentLogFile.value.string_value Es 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 registró el evento
ChannelID security_result.about.resource.attribute.labels.ChannelID.value 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 HTTP que usa el cliente.
cs(Cookie) Se usa para extraer información de cookies.
cs(Referer) network.http.referral_url Es la URL que derivó al cliente a la página actual.
cs(User-Agent) network.http.user_agent 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 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 derivó al cliente a la página actual.
csuseragent network.http.user_agent 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 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 Es el número de puerto de la máquina de destino.
duración Es la duración de la solicitud, expresada 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 El 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 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 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 La arquitectura de la máquina host
host.geo.name additional.fields.geo_name.value.string_value Es la ubicación geográfica de la máquina host.
host.hostname target.hostname, target.asset.hostname Es el nombre de host de la máquina host.
host.id observer.asset_id Es 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 de la máquina host
host.os.build additional.fields.os_build.value.string_value Es el número de compilación del sistema operativo en la máquina host.
host.os.kernel principal.platform_patch_level Es la versión del kernel del sistema operativo en la máquina host.
host.os.name additional.fields.os_name.value.string_value Es el nombre del sistema operativo en la máquina host.
host.os.platform principal.platform Es la plataforma del sistema operativo en la máquina host.
host.os.version principal.platform_version Es la versión del sistema operativo de la máquina host.
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 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 la instancia de la tarea.
intermediary_devicename intermediary.hostname, intermediary.asset.hostname Es el nombre de host del dispositivo intermediario.
json_message 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 El mensaje de registro sin procesar en formato JSON
mensaje security_result.description El mensaje de registro sin formato.
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 El número de puerto del cliente.
priority_code Es el código de prioridad del mensaje de syslog.
ProcessID principal.process.pid 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 derivó 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 Es el 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 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 Es la cantidad 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 Es el tipo de servicio.
sIP principal.ip, principal.asset.ip La dirección IP del cliente.
sPort principal.port El 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 La dirección IP del cliente.
src_port principal.port El número de puerto del cliente.
sysdate La fecha y hora del mensaje de syslog.
syslog_facility security_result.severity_details Es la facilidad del mensaje de syslog.
syslog_pri Es la prioridad del mensaje syslog.
syslog_severity security_result.severity_details La gravedad del mensaje de syslog.
syslog_severity_code El código de gravedad del mensaje de syslog.
tags security_result.rule_name Son las etiquetas asociadas con el 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, expresada en milisegundos.
uri_query target.url Es la cadena de consulta de la URL que solicitó el cliente.
user_agent network.http.user_agent El usuario-agente del cliente
UserName target.user.userid Nombre de usuario de la persona.
UserSid target.user.windows_sid El SID de Windows del usuario.
Peso security_result.about.resource.attribute.labels.Weight.value Es el grosor 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

Cambios

2025-01-27

Mejora:

  • Se agregó compatibilidad para analizar registros XML.

2024-06-20

Mejora:

  • Se asignó streamid a additional.fields.

2024-06-11

Mejora:

  • Se agregó un patrón Grok para analizar registros sin analizar.

2024-02-18

Mejora:

  • Se modificaron los nombres de los campos del patrón Grok para asignar el valor correctamente.
  • Se modificó el nombre de intermediary_devicename a observer_devicename.
  • Se modificó el nombre de src_ip a observer_ip.
  • Se modificó el nombre de dst_ip a principal_or_intermediary_ip.
  • Se modificó el nombre de xff_ips a principal_xff_ips.
  • Se asignó observer_ip a observer.ip.
  • Se asignó observer_devicename a observer.hostname.
  • Se asignó principal_xff_ips a principal.ip.
  • Si principal_xff_ips está presente, se asigna principal_or_intermediary_ip a intermediary.ip.
  • Si principal_xff_ips no está presente, se asignó principal_or_intermediary_ip a principal.ip.

2024-02-12

Mejora:

  • Se agregaron nuevos patrones de Grok para admitir los registros de red con datos de kv.
  • Se asignó sc-substatus a additional.fields.

2024-01-09

Mejora:

  • Se agregaron nuevos patrones de Grok para admitir los registros de red con datos de par clave-valor.
  • Se asignó dst_ip2 a target.ip.
  • Se asignaron X-BackEndCookie,exchangecookie, OutlookSession, MapiContext, MapiRouting, content_type y MapiSequence a additional.fields.

2023-12-19

Mejora:

  • Se asignó Configuration como un valor a metadata.product_event_type si EventType es igual a VERBOSE.
  • Se asignó Message a security_result.description.
  • Se asignó PhysicalPath a target.file.full_path.
  • Se asignaron OldValue, NewValue, Configuration y ConfigPath a additional.fields.

2023-12-06

Mejora:

  • Se asignó @timestamp a metadata.event_timestamp.
  • Se asignó host.hostname a target.hostname.
  • Se asignó logstash.process.host a intermediary.hostname.
  • Se asignó logstash.collect.host a observer.hostname.
  • Se asignó _user a principal.user.userid.
  • Se asignó http_response a network.http.response_code.
  • Se asignó referer a network.http.referral_url.
  • Se asignó syslog_severity a security_result.severity_details.
  • Se asignó message a security_result.description.
  • Cuando request_url sea /login.aspx y entity sea AutoLogout=1, establece metadata.event_type como USER_LOGOUT.
  • Cuando request_url sea /login.aspx, establece metadata.event_type como USER_LOGIN.

2023-10-27

Mejora:

  • Se asignaron Noun.hostname y Noun.asset.hostname al mismo valor.
  • Se asignó cIP a target.ip.
  • Se asignó csUriStem a "target.url".
  • Se asignó sPort a principal.port.
  • Se asignó csUserAgent a http.user_agent.
  • Se asignó sIP a principal.ip.
  • Se asignó csMethod a network.http.method.
  • Se asignó scStatus a http.response_code.
  • Se asignó sComputerName a target.hostname.
  • Se asignó _resourceId a target.resource.id.
  • Se asignó scBytes a network.sent_bytes.
  • Se asignó csBytes a network.received_bytes.
  • Se asignaron sSiteName, TenantId, EventProcessedUtcTime, ManagementGroupName y EventEnqueuedUtcTime a additional.fields.
  • Se asignó TimeGenerated a about.resource.attribute.labels.
  • Se asignó SourceSystem a security_result.detection_fields.

2023-06-23

Corrección de errores:

  • Cambio en el formato de registro
  • Se definió el grok para el patrón de registro modificado
  • Se asignó cs-host a principal.application
  • Se asignaron uristem y cs-uri-stem con if-else a target.url
  • Se asignó cs-version a network.tls.version_protocol
  • Se reemplazó el valor de gravedad por el valor del campo Nivel.
  • Se reemplazó el valor de sitename por s-sitename
  • Se reemplazó el valor de UserSid por UserID.
  • Se asignó AgentDevice como clave y valor de etiqueta
  • Se asignó app_name a principal.application
  • Se asignó ChannelID a security_result.about.resource.attribute
  • Se asignó Level a security_result.severity
  • Se asignó ExecutionProcessID a principal.process.pid
  • Se asignó ExecutionThreadID a principal.process.product_specific_process_id
  • Se asignó Domain a principal.user.userid
  • Se asignó UserID a principal.user.windows_sid
  • Se asignó AccountType a principal.user.role_name

2023-05-12

Mejora:

  • Registros JSON analizados con errores
  • Se asignó cshost a principal.hostname
  • Se asignó csusername a principal.user.user_display_name.
  • Se asignó sip a target.ip.
  • Se asignó uristem a target.url.
  • Se asignó sport a target.port.
  • Se asignó csversion a network.tls.version_protocol.
  • Se asignó csuseragent a network.http.user_agent.
  • Se asignó csip a principal.ip.
  • Se asignó xforwardedfor a principal.ip.
  • Se asignó csmethod a network.http.method.
  • Se asignó csreferer a network.http.referral_url.
  • Se asignó scstatus a network.http.response_code.
  • Se asignó computername a target.asset.hostname.
  • Se asignó scbyte a network.sent_bytes.
  • Se asignó csbyte a network.received_bytes.
  • Se asignaron date y time a metadata.event_timestamp.

2023-03-01

Mejora:

  • Se agregó compatibilidad con registros en formato JSON que tienen claves como c-*, s-*, cs-* y sc-*.

2022-10-25

Mejora:

  • Se extrajeron uri_query,intermediary_device_name,principal_username,sent_bytes,received_bytes del registro.
  • Se cambió dst_port por src_port.
  • Se asignó src_port a principal.port.
  • Se actualizó la asignación de target.url a request_url+?+uri_query.
  • Se asignó token_data a security_result.detection_fields como Cookie.
  • Se asignó sent_bytes a network.sent_bytes.
  • Se asignó received_bytes a network.received_bytes.
  • Se asignó intermediary_devicename a target.hostname si target_host está vacío, de lo contrario, se asignó a intermediary.hostname.
  • Se asignó principal_username a principal.user.userid.
  • Se asignó Devicename a target.hostname solo cuando target_host está vacío.
  • Se asignó src_ip a principal.ip si xff_ips está vacío.
  • Si xff_ips no está vacío, haz lo siguiente:
  • Se asignó src_ip a intermediary.ip.
  • Se asignó xff_ips a principal.ip.
  • Se agregó un patrón Grok para tipos de registros adicionales.

2022-10-01

Mejora:

  • Se escribió grok para analizar los syslogs sin analizar.
  • Se asignó Severity a security_result.severity.
  • Se asignó UserName a target.user.userid.
  • Se asignó UserSid a target.user.windows_sid.
  • Se asignó ProviderKey a security_result.about.resource.attribute.labels.
  • Se asignó LayerKey a security_result.about.resource.attribute.labels.
  • Se asignó LayerName a security_result.about.resource.attribute.labels.
  • Se asignó LayerId a security_result.about.resource.attribute.labels.
  • Se asignó Weight a security_result.about.resource.attribute.labels.
  • Se asignó Conditions a security_result.about.resource.attribute.labels.
  • Se asignó Action a security_result.about.resource.attribute.labels.
  • Se asignó CalloutKey a security_result.about.resource.attribute.labels.
  • Se asignó CalloutName a security_result.about.resource.attribute.labels.
  • Se asignó Channel a security_result.about.resource.attribute.labels.
  • Se asignó FilterId a security_result.about.resource.attribute.labels.
  • Se asignó FilterKey a security_result.about.resource.attribute.labels.
  • Se asignó FilterName a security_result.about.resource.attribute.labels.
  • Se asignó FilterType a security_result.about.resource.attribute.labels.
  • Se asignó ProviderGuid a security_result.about.resource.attribute.labels.
  • Se asignó ProviderName a security_result.about.resource.attribute.labels.
  • Se asignó SourceName a security_result.about.resource.attribute.labels.
  • Se asignó SyslogSeverity a security_result.about.resource.attribute.labels.
  • Se asignó Category a security_result.category_details.
  • Se asignó EventType a metadata.product_event_type.
  • Se asignó EventID a metadata.product_log_id.
  • Se asignó ProcessID a principal.process.pid.
  • Se asignó SourceModuleName a target.resource.name.
  • Se asignó SourceModuleType a observer.application.

2022-09-30

Mejora:

  • Se asignaron las IP del encabezado xff a intermediary.ip.
  • Se asignó el nombre de host a target.hostname.
  • Se agregó un patrón de grok adicional para analizar correctamente ciertos registros con información adicional y se asignó esa información adicional en campos adicionales.
  • Se asignó ASP.NET_Session_id a network.session_id.

2022-03-30

Mejora:

  • Analiza campos adicionales.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.