Recopila registros de Microsoft IIS
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
- 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.
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.
Instala el agente de Bindplane en Windows
- Abre el símbolo del sistema 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 obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de Bindplane para transferir Syslog y enviarlo a Google SecOps
- Antes de configurar el archivo YAML, detén el servicio
observIQ Distro for Open Telemetry Collector
en el panel de servicios. Accede al archivo de configuración:
- 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. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Ubica el archivo
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]
Reemplaza
<customer_id>
por el ID de cliente real.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.Después de guardar el archivo
config.yaml
, inicia el servicioobservIQ 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
aadditional.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
aobserver_devicename
. - Se modificó el nombre de
src_ip
aobserver_ip
. - Se modificó el nombre de
dst_ip
aprincipal_or_intermediary_ip
. - Se modificó el nombre de
xff_ips
aprincipal_xff_ips
. - Se asignó
observer_ip
aobserver.ip
. - Se asignó
observer_devicename
aobserver.hostname
. - Se asignó
principal_xff_ips
aprincipal.ip
. - Si
principal_xff_ips
está presente, se asignaprincipal_or_intermediary_ip
aintermediary.ip
. - Si
principal_xff_ips
no está presente, se asignóprincipal_or_intermediary_ip
aprincipal.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
aadditional.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
atarget.ip
. - Se asignaron
X-BackEndCookie
,exchangecookie
,OutlookSession
,MapiContext
,MapiRouting
,content_type
yMapiSequence
aadditional.fields
.
2023-12-19
Mejora:
- Se asignó
Configuration
como un valor ametadata.product_event_type
siEventType
es igual aVERBOSE
. - Se asignó
Message
asecurity_result.description
. - Se asignó
PhysicalPath
atarget.file.full_path
. - Se asignaron
OldValue
,NewValue
,Configuration
yConfigPath
aadditional.fields
.
2023-12-06
Mejora:
- Se asignó
@timestamp
ametadata.event_timestamp
. - Se asignó
host.hostname
atarget.hostname
. - Se asignó
logstash.process.host
aintermediary.hostname
. - Se asignó
logstash.collect.host
aobserver.hostname
. - Se asignó
_user
aprincipal.user.userid
. - Se asignó
http_response
anetwork.http.response_code
. - Se asignó
referer
anetwork.http.referral_url
. - Se asignó
syslog_severity
asecurity_result.severity_details
. - Se asignó
message
asecurity_result.description
. - Cuando
request_url
sea/login.aspx
yentity
seaAutoLogout=1
, establecemetadata.event_type
comoUSER_LOGOUT
. - Cuando
request_url
sea/login.aspx
, establecemetadata.event_type
comoUSER_LOGIN
.
2023-10-27
Mejora:
- Se asignaron
Noun.hostname
yNoun.asset.hostname
al mismo valor. - Se asignó
cIP
atarget.ip
. - Se asignó
csUriStem
a "target.url
". - Se asignó
sPort
aprincipal.port
. - Se asignó
csUserAgent
ahttp.user_agent
. - Se asignó
sIP
aprincipal.ip
. - Se asignó
csMethod
anetwork.http.method
. - Se asignó
scStatus
ahttp.response_code
. - Se asignó
sComputerName
atarget.hostname
. - Se asignó
_resourceId
atarget.resource.id
. - Se asignó
scBytes
anetwork.sent_bytes
. - Se asignó
csBytes
anetwork.received_bytes
. - Se asignaron
sSiteName
,TenantId
,EventProcessedUtcTime
,ManagementGroupName
yEventEnqueuedUtcTime
aadditional.fields
. - Se asignó
TimeGenerated
aabout.resource.attribute.labels
. - Se asignó
SourceSystem
asecurity_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
aprincipal.hostname
- Se asignó
csusername
aprincipal.user.user_display_name
. - Se asignó
sip
atarget.ip
. - Se asignó
uristem
atarget.url
. - Se asignó
sport
atarget.port
. - Se asignó
csversion
anetwork.tls.version_protocol
. - Se asignó
csuseragent
anetwork.http.user_agent
. - Se asignó
csip
aprincipal.ip
. - Se asignó
xforwardedfor
aprincipal.ip
. - Se asignó
csmethod
anetwork.http.method
. - Se asignó
csreferer
anetwork.http.referral_url
. - Se asignó
scstatus
anetwork.http.response_code
. - Se asignó
computername
atarget.asset.hostname
. - Se asignó
scbyte
anetwork.sent_bytes
. - Se asignó
csbyte
anetwork.received_bytes
. - Se asignaron
date
ytime
ametadata.event_timestamp
.
2023-03-01
Mejora:
- Se agregó compatibilidad con registros en formato JSON que tienen claves como
c-*
,s-*
,cs-*
ysc-*
.
2022-10-25
Mejora:
- Se extrajeron
uri_query
,intermediary_device_name
,principal_username
,sent_bytes
,received_bytes
del registro. - Se cambió
dst_port
porsrc_port
. - Se asignó
src_port
aprincipal.port
. - Se actualizó la asignación de
target.url
arequest_url
+?+uri_query
. - Se asignó
token_data
asecurity_result.detection_fields
comoCookie
. - Se asignó
sent_bytes
anetwork.sent_bytes
. - Se asignó
received_bytes
anetwork.received_bytes
. - Se asignó
intermediary_devicename
atarget.hostname
sitarget_host
está vacío, de lo contrario, se asignó aintermediary.hostname
. - Se asignó
principal_username
aprincipal.user.userid
. - Se asignó
Devicename
atarget.hostname
solo cuandotarget_host
está vacío. - Se asignó
src_ip
aprincipal.ip
sixff_ips
está vacío. - Si
xff_ips
no está vacío, haz lo siguiente: - Se asignó
src_ip
aintermediary.ip
. - Se asignó
xff_ips
aprincipal.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
asecurity_result.severity
. - Se asignó
UserName
atarget.user.userid
. - Se asignó
UserSid
atarget.user.windows_sid
. - Se asignó
ProviderKey
asecurity_result.about.resource.attribute.labels
. - Se asignó
LayerKey
asecurity_result.about.resource.attribute.labels
. - Se asignó
LayerName
asecurity_result.about.resource.attribute.labels
. - Se asignó
LayerId
asecurity_result.about.resource.attribute.labels
. - Se asignó
Weight
asecurity_result.about.resource.attribute.labels
. - Se asignó
Conditions
asecurity_result.about.resource.attribute.labels
. - Se asignó
Action
asecurity_result.about.resource.attribute.labels
. - Se asignó
CalloutKey
asecurity_result.about.resource.attribute.labels
. - Se asignó
CalloutName
asecurity_result.about.resource.attribute.labels
. - Se asignó
Channel
asecurity_result.about.resource.attribute.labels
. - Se asignó
FilterId
asecurity_result.about.resource.attribute.labels
. - Se asignó
FilterKey
asecurity_result.about.resource.attribute.labels
. - Se asignó
FilterName
asecurity_result.about.resource.attribute.labels
. - Se asignó
FilterType
asecurity_result.about.resource.attribute.labels
. - Se asignó
ProviderGuid
asecurity_result.about.resource.attribute.labels
. - Se asignó
ProviderName
asecurity_result.about.resource.attribute.labels
. - Se asignó
SourceName
asecurity_result.about.resource.attribute.labels
. - Se asignó
SyslogSeverity
asecurity_result.about.resource.attribute.labels
. - Se asignó
Category
asecurity_result.category_details
. - Se asignó
EventType
ametadata.product_event_type
. - Se asignó
EventID
ametadata.product_log_id
. - Se asignó
ProcessID
aprincipal.process.pid
. - Se asignó
SourceModuleName
atarget.resource.name
. - Se asignó
SourceModuleType
aobserver.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.