Coletar registros do Microsoft IIS
Neste documento, explicamos como coletar registros do Microsoft Internet Information Services (IIS) para as operações de segurança do Google usando o Bindplane. Primeiro, o analisador tenta limpar e normalizar os dados de entrada removendo caracteres desnecessários e padronizando os nomes dos campos. Em seguida, ele usa uma série de padrões grok
para extrair campos relevantes de vários formatos de registro do Microsoft IIS e os mapeia para o modelo de dados unificado (UDM).
Antes de começar
- Verifique se você tem uma instância do Google SecOps.
- Verifique se você tem o Windows 2016 ou mais recente.
- Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
Receber o arquivo de autenticação de ingestão do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.
Receber o ID de cliente do Google SecOps
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do Bindplane no Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Outros recursos de instalação
- Para mais opções de instalação, consulte este guia de instalação.
Configurar o agente do Bindplane para processar o Syslog e enviar ao Google SecOps
- Antes de configurar o arquivo YAML, pare o serviço
observIQ Distro for Open Telemetry Collector
no painel de serviços. Acesse o arquivo de configuração:
- Localize o arquivo
config.yaml
. Normalmente, ele está no diretório/etc/bindplane-agent/
no Linux ou no diretório de instalação no Windows. - Abra o arquivo usando um editor de texto (por exemplo,
nano
,vi
ou Notepad).
- Localize o arquivo
Edite o arquivo
config.yaml
da seguinte forma: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]
Substitua
<customer_id>
pelo ID real do cliente.Atualize
/path/to/ingestion-authentication-file.json
para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de transferência do Google SecOps.Depois de salvar o arquivo
config.yaml
, inicie o serviçoobservIQ Distro for Open Telemetry Collector
.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Windows, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Tabela de mapeamento do UDM
Campo de registro | Mapeamento de UDM | Lógica |
---|---|---|
@timestamp | metadata.event_timestamp | O carimbo de data/hora do evento conforme registrado no log bruto. |
@version | metadata.product_version | A versão do servidor IIS. |
AgentDevice | additional.fields.AgentDevice.value.string_value | O dispositivo que gerou o registro. |
AgentLogFile | additional.fields.AgentLogFile.value.string_value | O nome do arquivo de registro. |
ASP.NET_SessionId | network.session_id | O ID da sessão do usuário. |
c-ip | principal.ip | O endereço IP do cliente. |
Canal | security_result.about.resource.attribute.labels.Channel.value | O canal em que o evento foi registrado. |
ChannelID | security_result.about.resource.attribute.labels.ChannelID.value | O ID do canal em que o evento foi registrado. |
Computador | target.hostname | O nome do host da máquina de destino. |
cs-bytes | network.received_bytes | O número de bytes recebidos do cliente. |
cs-host | principal.hostname, principal.asset.hostname | O nome do host do cliente. |
cs-method | network.http.method | O método HTTP usado pelo cliente. |
cs-uri-query | target.url | A string de consulta do URL solicitado pelo cliente. |
cs-uri-stem | target.url | O caminho do URL solicitado pelo cliente. |
cs-username | principal.user.user_display_name | O nome de usuário do cliente. |
cs-version | network.tls.version_protocol | A versão HTTP usada pelo cliente. |
cs(Cookie) | Usado para extrair informações de cookies. | |
cs(Referer) | network.http.referral_url | O URL que encaminhou o cliente para a página atual. |
cs(User-Agent) | network.http.user_agent | O user agent do cliente. |
csbyte | network.received_bytes | O número de bytes recebidos do cliente. |
cshost | principal.hostname, principal.asset.hostname | O nome do host do cliente. |
csip | principal.ip e principal.asset.ip | O endereço IP do cliente. |
csmethod | network.http.method | O método HTTP usado pelo cliente. |
csreferer | network.http.referral_url | O URL que encaminhou o cliente para a página atual. |
csuseragent | network.http.user_agent | O user agent do cliente. |
csusername | principal.user.user_display_name | O nome de usuário do cliente. |
csversion | network.tls.version_protocol | A versão HTTP usada pelo cliente. |
data | Usado para construir o carimbo de data/hora do evento se o carimbo de data/hora do registro bruto for inválido. | |
description | security_result.description | Uma descrição do evento. |
devicename | target.hostname | O nome do host da máquina de destino. |
dst_ip | target.ip e target.asset.ip | O endereço IP da máquina de destino. |
dst_port | target.port | O número da porta da máquina de destino. |
duration | A duração da solicitação em milissegundos. | |
EventEnqueuedUtcTime | additional.fields.EventEnqueuedUtcTime.value.string_value | A hora em que o evento foi enfileirado em UTC. |
EventID | metadata.product_log_id | O ID do evento. |
EventProcessedUtcTime | additional.fields.EventProcessedUtcTime.value.string_value | A hora em que o evento foi processado em UTC. |
EventTime | metadata.event_timestamp | O carimbo de data/hora do evento. |
EventType | metadata.product_event_type | O tipo do evento. |
file_path | target.file.full_path | O caminho completo do arquivo envolvido no evento. |
FilterId | security_result.about.resource.attribute.labels.FilterId.value | O ID do filtro. |
FilterKey | security_result.about.resource.attribute.labels.FilterKey.value | A chave do filtro. |
FilterName | security_result.about.resource.attribute.labels.FilterName.value | O nome do filtro. |
FilterType | security_result.about.resource.attribute.labels.FilterType.value | O tipo do filtro. |
host | target.hostname | O nome do host da máquina de destino. |
host.architecture | principal.asset.hardware.cpu_platform | A arquitetura da máquina host. |
host.geo.name | additional.fields.geo_name.value.string_value | A localização geográfica da máquina host. |
host.hostname | target.hostname, target.asset.hostname | O nome do host da máquina. |
host.id | observer.asset_id | O ID da máquina host. |
host.ip | principal.ip e principal.asset.ip | O endereço IP da máquina host. |
host.mac | principal.mac | O endereço MAC da máquina host. |
host.os.build | additional.fields.os_build.value.string_value | O número da versão do sistema operacional na máquina host. |
host.os.kernel | principal.platform_patch_level | A versão do kernel do sistema operacional na máquina host. |
host.os.name | additional.fields.os_name.value.string_value | O nome do sistema operacional na máquina host. |
host.os.platform | principal.platform | A plataforma do sistema operacional na máquina host. |
host.os.version | principal.platform_version | A versão do sistema operacional na máquina host. |
http_method | network.http.method | O método HTTP usado pelo cliente. |
http_response | network.http.response_code | O código de resposta HTTP. |
http_status_code | network.http.response_code | O código de status HTTP da resposta. |
http_substatus | additional.fields.sc_substatus.value.string_value | O código de substatus HTTP da resposta. |
instância | additional.fields.instance.value.string_value | O ID da instância da tarefa. |
intermediary_devicename | intermediary.hostname, intermediary.asset.hostname | O nome do host do dispositivo intermediário. |
json_message | A mensagem de registro bruta no formato JSON. | |
kv_fields | Usado para extrair pares de chave-valor da mensagem de registro bruta. | |
LayerKey | security_result.about.resource.attribute.labels.LayerKey.value | A chave da camada. |
LayerName | security_result.about.resource.attribute.labels.LayerName.value | O nome da camada. |
LayerId | security_result.about.resource.attribute.labels.LayerId.value | O ID da camada. |
log.file.path | target.file.full_path | O caminho completo do arquivo de registro. |
log.offset | metadata.product_log_id | O deslocamento do evento no arquivo de registro. |
logstash.collect.host | observer.hostname | O nome do host da máquina que coletou o registro. |
logstash.process.host | intermediary.hostname | O nome do host da máquina que processou o registro. |
logstash_json_message | A mensagem de registro bruta no formato JSON. | |
mensagem | security_result.description | A mensagem de registro bruta. |
ministério | additional.fields.ministry.value.string_value | O ministério associado ao evento. |
nome | É o nome da entidade. | |
NewValue | additional.fields.NewValue.value.string_value | O novo valor da configuração. |
OldValue | additional.fields.OldValue.value.string_value | O valor antigo da configuração. |
porta | principal.port | O número da porta do cliente. |
priority_code | O código de prioridade da mensagem syslog. | |
ProcessID | principal.process.pid | O ID do processo que gerou o evento. |
ProviderGuid | security_result.about.resource.attribute.labels.ProviderGuid.value | O GUID do provedor. |
ProviderKey | security_result.about.resource.attribute.labels.ProviderKey.value | A chave do provedor. |
ProviderName | security_result.about.resource.attribute.labels.ProviderName.value | O nome do provedor. |
referrer_url | network.http.referral_url | O URL que encaminhou o cliente para a página atual. |
request_url | target.url | O URL solicitado pelo cliente. |
s-computername | target.hostname | O nome do host da máquina de destino. |
s-ip | target.ip e target.asset.ip | O endereço IP da máquina de destino. |
s-port | target.port | O número da porta da máquina de destino. |
s-sitename | additional.fields.sitename.value.string_value | O nome do site. |
sc-bytes | network.sent_bytes | O número de bytes enviados ao cliente. |
status-sc | network.http.response_code | O código de status HTTP da resposta. |
sc-substatus | additional.fields.sc_substatus.value.string_value | O código de substatus HTTP da resposta. |
sc-win32-status | O código de status do Windows da resposta. | |
scbyte | network.sent_bytes | O número de bytes enviados para o cliente. |
scstatus | network.http.response_code | O código de status HTTP da resposta. |
gravidade, | security_result.severity | A gravidade do evento. |
service.type | additional.fields.service_type.value.string_value | O tipo de serviço. |
sIP | principal.ip e principal.asset.ip | O endereço IP do cliente. |
sPort | principal.port | O número da porta do cliente. |
sSiteName | additional.fields.sitename.value.string_value | O nome do site. |
src_ip | principal.ip, principal.asset.ip, observer.ip | O endereço IP do cliente. |
src_port | principal.port | O número da porta do cliente. |
sysdate | A data e a hora da mensagem do syslog. | |
syslog_facility | security_result.severity_details | A facilidade da mensagem syslog. |
syslog_pri | A prioridade da mensagem syslog. | |
syslog_severity | security_result.severity_details | A gravidade da mensagem do syslog. |
syslog_severity_code | O código de gravidade da mensagem syslog. | |
tags | security_result.rule_name | Tags associadas ao evento. |
tarefa | additional.fields.task.value.string_value | O nome da tarefa. |
tempo | Usado para construir o carimbo de data/hora do evento se o carimbo de data/hora do registro bruto for inválido. | |
time-taken | A duração da solicitação em milissegundos. | |
uri_query | target.url | A string de consulta do URL solicitado pelo cliente. |
user_agent | network.http.user_agent | O user agent do cliente. |
Nome de usuário | target.user.userid | O nome de usuário. |
UserSid | target.user.windows_sid | O SID do Windows do usuário. |
Peso | security_result.about.resource.attribute.labels.Weight.value | O peso do filtro. |
win32_status | O código de status do Windows da resposta. | |
xforwardedfor | O cabeçalho X-Forwarded-For, que contém uma lista de endereços IP separados por vírgulas. | |
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 |
Alterações
2025-01-27
Melhoria:
- Foi adicionado suporte para analisar registros XML.
2024-06-20
Melhoria:
streamid
foi mapeado paraadditional.fields
.
2024-06-11
Melhoria:
- Adicionamos um padrão Grok para analisar registros não analisados.
2024-02-18
Melhoria:
- Os nomes de campo do padrão Grok foram modificados para mapear o valor corretamente.
- O nome foi modificado de
intermediary_devicename
paraobserver_devicename
. - O nome foi modificado de
src_ip
paraobserver_ip
. - O nome foi modificado de
dst_ip
paraprincipal_or_intermediary_ip
. - O nome foi modificado de
xff_ips
paraprincipal_xff_ips
. observer_ip
foi mapeado paraobserver.ip
.observer_devicename
foi mapeado paraobserver.hostname
.principal_xff_ips
foi mapeado paraprincipal.ip
.- Se
principal_xff_ips
estiver presente, mapeieprincipal_or_intermediary_ip
paraintermediary.ip
. - Se
principal_xff_ips
não estiver presente, mapeieprincipal_or_intermediary_ip
paraprincipal.ip
.
2024-02-12
Melhoria:
- Foram adicionados novos padrões Grok para oferecer suporte aos registros de rede com dados kv.
sc-substatus
foi mapeado paraadditional.fields
.
2024-01-09
Melhoria:
- Foram adicionados novos padrões Grok para oferecer suporte aos registros de rede com dados de chave-valor.
dst_ip2
foi mapeado paratarget.ip
.X-BackEndCookie
,exchangecookie
,OutlookSession
,MapiContext
,MapiRouting
,content_type
eMapiSequence
foram mapeados paraadditional.fields
.
2023-12-19
Melhoria:
- Mapeou
Configuration
como um valor parametadata.product_event_type
seEventType
for igual aVERBOSE
. Message
foi mapeado parasecurity_result.description
.PhysicalPath
foi mapeado paratarget.file.full_path
.OldValue
,NewValue
,Configuration
eConfigPath
foram mapeados paraadditional.fields
.
2023-12-06
Melhoria:
@timestamp
foi mapeado parametadata.event_timestamp
.host.hostname
foi mapeado paratarget.hostname
.logstash.process.host
foi mapeado paraintermediary.hostname
.logstash.collect.host
foi mapeado paraobserver.hostname
._user
foi mapeado paraprincipal.user.userid
.http_response
foi mapeado paranetwork.http.response_code
.referer
foi mapeado paranetwork.http.referral_url
.syslog_severity
foi mapeado parasecurity_result.severity_details
.message
foi mapeado parasecurity_result.description
.- Quando
request_url
for/login.aspx
eentity
forAutoLogout=1
, definametadata.event_type
comoUSER_LOGOUT
. - Quando
request_url
for/login.aspx
, definametadata.event_type
comoUSER_LOGIN
.
2023-10-27
Melhoria:
- Mapeou
Noun.hostname
eNoun.asset.hostname
para o mesmo valor. cIP
foi mapeado paratarget.ip
.csUriStem
foi mapeado paratarget.url
.sPort
foi mapeado paraprincipal.port
.csUserAgent
foi mapeado parahttp.user_agent
.sIP
foi mapeado paraprincipal.ip
.csMethod
foi mapeado paranetwork.http.method
.scStatus
foi mapeado parahttp.response_code
.sComputerName
foi mapeado paratarget.hostname
._resourceId
foi mapeado paratarget.resource.id
.scBytes
foi mapeado paranetwork.sent_bytes
.csBytes
foi mapeado paranetwork.received_bytes
.- Mapeamos
sSiteName
,TenantId
,EventProcessedUtcTime
,ManagementGroupName
eEventEnqueuedUtcTime
paraadditional.fields
. TimeGenerated
foi mapeado paraabout.resource.attribute.labels
.SourceSystem
foi mapeado parasecurity_result.detection_fields
.
2023-06-23
Correção de bugs:
- Mudança no formato do registro
- Definiu o grok para o padrão de registro alterado
- Mapeamento de cs-host para principal.application
- Mapeamento de uristem e cs-uri-stem usando if-else para target.url
- A cs-version foi mapeada para network.tls.version_protocol
- Substitui o valor de gravidade pelo valor no campo "Nível"
- Substituiu o valor de sitename por s-sitename
- O valor de UserSid foi substituído por UserID.
- AgentDevice mapeado como chave e valor do rótulo
app_name
mapeado para principal.applicationChannelID
foi mapeado para security_result.about.resource.attributeLevel
foi mapeado para security_result.severityExecutionProcessID
mapeado para principal.process.pidExecutionThreadID
foi associado a principal.process.product_specific_process_idDomain
mapeado para principal.user.useridUserID
mapeado para principal.user.windows_sidAccountType
foi associado a principal.user.role_name
2023-05-12
Melhoria:
- Registros JSON com falhas analisados
- Mapeou
cshost
paraprincipal.hostname
csusername
foi mapeado paraprincipal.user.user_display_name
.sip
foi mapeado paratarget.ip
.uristem
foi mapeado paratarget.url
.sport
foi mapeado paratarget.port
.csversion
foi mapeado paranetwork.tls.version_protocol
.csuseragent
foi mapeado paranetwork.http.user_agent
.csip
foi mapeado paraprincipal.ip
.xforwardedfor
foi mapeado paraprincipal.ip
.csmethod
foi mapeado paranetwork.http.method
.csreferer
foi mapeado paranetwork.http.referral_url
.scstatus
foi mapeado paranetwork.http.response_code
.computername
foi mapeado paratarget.asset.hostname
.scbyte
foi mapeado paranetwork.sent_bytes
.csbyte
foi mapeado paranetwork.received_bytes
.date
etime
foram mapeados parametadata.event_timestamp
.
2023-03-01
Melhoria:
- Adição de suporte a registros no formato JSON com chaves como:
c-*
,s-*
,cs-*
,sc-*
.
2022-10-25
Melhoria:
uri_query
,intermediary_device_name
,principal_username
,sent_bytes
ereceived_bytes
foram extraídos do registro.dst_port
alterado parasrc_port
.src_port
foi mapeado paraprincipal.port
.- O mapeamento
target.url
foi atualizado pararequest_url
+?+uri_query
. token_data
foi mapeado parasecurity_result.detection_fields
comoCookie
.sent_bytes
foi mapeado paranetwork.sent_bytes
.received_bytes
foi mapeado paranetwork.received_bytes
.- Mapeia
intermediary_devicename
paratarget.hostname
setarget_host
estiver vazio. Caso contrário, ele será mapeado paraintermediary.hostname
. principal_username
foi mapeado paraprincipal.user.userid
.- Mapeou
Devicename
paratarget.hostname
somente quandotarget_host
está vazio. - Mapeou
src_ip
paraprincipal.ip
sexff_ips
estiver vazio. - Se
xff_ips
não estiver vazio: src_ip
foi mapeado paraintermediary.ip
.xff_ips
foi mapeado paraprincipal.ip
.- Adicionamos um padrão Grok para outros tipos de registros.
2022-10-01
Melhoria:
- O grok foi escrito para analisar syslogs não analisados.
Severity
foi mapeado parasecurity_result.severity
.UserName
foi mapeado paratarget.user.userid
.UserSid
foi mapeado paratarget.user.windows_sid
.ProviderKey
foi mapeado parasecurity_result.about.resource.attribute.labels
.LayerKey
foi mapeado parasecurity_result.about.resource.attribute.labels
.LayerName
foi mapeado parasecurity_result.about.resource.attribute.labels
.LayerId
foi mapeado parasecurity_result.about.resource.attribute.labels
.Weight
foi mapeado parasecurity_result.about.resource.attribute.labels
.Conditions
foi mapeado parasecurity_result.about.resource.attribute.labels
.Action
foi mapeado parasecurity_result.about.resource.attribute.labels
.CalloutKey
foi mapeado parasecurity_result.about.resource.attribute.labels
.CalloutName
foi mapeado parasecurity_result.about.resource.attribute.labels
.Channel
foi mapeado parasecurity_result.about.resource.attribute.labels
.FilterId
foi mapeado parasecurity_result.about.resource.attribute.labels
.FilterKey
foi mapeado parasecurity_result.about.resource.attribute.labels
.FilterName
foi mapeado parasecurity_result.about.resource.attribute.labels
.FilterType
foi mapeado parasecurity_result.about.resource.attribute.labels
.ProviderGuid
foi mapeado parasecurity_result.about.resource.attribute.labels
.ProviderName
foi mapeado parasecurity_result.about.resource.attribute.labels
.SourceName
foi mapeado parasecurity_result.about.resource.attribute.labels
.SyslogSeverity
foi mapeado parasecurity_result.about.resource.attribute.labels
.Category
foi mapeado parasecurity_result.category_details
.EventType
foi mapeado parametadata.product_event_type
.EventID
foi mapeado parametadata.product_log_id
.ProcessID
foi mapeado paraprincipal.process.pid
.SourceModuleName
foi mapeado paratarget.resource.name
.SourceModuleType
foi mapeado paraobserver.application
.
2022-09-30
Melhoria:
- IPs de cabeçalho xff mapeados para intermediary.ip.
- Nome do host mapeado para target.hostname.
- Foi adicionado um padrão de grok extra para analisar corretamente alguns registros com informações extras e mapear essas informações em outros campos.
- O ASP.NET_Session_id foi mapeado para network.session_id.
2022-03-30
Melhoria:
- Analisar outros campos.
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.