Coletar registros do Microsoft IIS

Compatível com:

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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane no Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Outros recursos de instalação

Configurar o agente do Bindplane para processar o Syslog e enviar ao Google SecOps

  1. Antes de configurar o arquivo YAML, pare o serviço observIQ Distro for Open Telemetry Collector no painel de serviços.
  2. Acesse o arquivo de configuração:

    1. 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.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Notepad).
  3. 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]
    
  4. Substitua <customer_id> pelo ID real do cliente.

  5. 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.

  6. Depois de salvar o arquivo config.yaml, inicie o serviço observIQ 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 para additional.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 para observer_devicename.
  • O nome foi modificado de src_ip para observer_ip.
  • O nome foi modificado de dst_ip para principal_or_intermediary_ip.
  • O nome foi modificado de xff_ips para principal_xff_ips.
  • observer_ip foi mapeado para observer.ip.
  • observer_devicename foi mapeado para observer.hostname.
  • principal_xff_ips foi mapeado para principal.ip.
  • Se principal_xff_ips estiver presente, mapeie principal_or_intermediary_ip para intermediary.ip.
  • Se principal_xff_ips não estiver presente, mapeie principal_or_intermediary_ip para principal.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 para additional.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 para target.ip.
  • X-BackEndCookie,exchangecookie, OutlookSession, MapiContext, MapiRouting, content_type e MapiSequence foram mapeados para additional.fields.

2023-12-19

Melhoria:

  • Mapeou Configuration como um valor para metadata.product_event_type se EventType for igual a VERBOSE.
  • Message foi mapeado para security_result.description.
  • PhysicalPath foi mapeado para target.file.full_path.
  • OldValue, NewValue, Configuration e ConfigPath foram mapeados para additional.fields.

2023-12-06

Melhoria:

  • @timestamp foi mapeado para metadata.event_timestamp.
  • host.hostname foi mapeado para target.hostname.
  • logstash.process.host foi mapeado para intermediary.hostname.
  • logstash.collect.host foi mapeado para observer.hostname.
  • _user foi mapeado para principal.user.userid.
  • http_response foi mapeado para network.http.response_code.
  • referer foi mapeado para network.http.referral_url.
  • syslog_severity foi mapeado para security_result.severity_details.
  • message foi mapeado para security_result.description.
  • Quando request_url for /login.aspx e entity for AutoLogout=1, defina metadata.event_type como USER_LOGOUT.
  • Quando request_url for /login.aspx, defina metadata.event_type como USER_LOGIN.

2023-10-27

Melhoria:

  • Mapeou Noun.hostname e Noun.asset.hostname para o mesmo valor.
  • cIP foi mapeado para target.ip.
  • csUriStem foi mapeado para target.url.
  • sPort foi mapeado para principal.port.
  • csUserAgent foi mapeado para http.user_agent.
  • sIP foi mapeado para principal.ip.
  • csMethod foi mapeado para network.http.method.
  • scStatus foi mapeado para http.response_code.
  • sComputerName foi mapeado para target.hostname.
  • _resourceId foi mapeado para target.resource.id.
  • scBytes foi mapeado para network.sent_bytes.
  • csBytes foi mapeado para network.received_bytes.
  • Mapeamos sSiteName, TenantId, EventProcessedUtcTime, ManagementGroupName e EventEnqueuedUtcTime para additional.fields.
  • TimeGenerated foi mapeado para about.resource.attribute.labels.
  • SourceSystem foi mapeado para security_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.application
  • ChannelID foi mapeado para security_result.about.resource.attribute
  • Level foi mapeado para security_result.severity
  • ExecutionProcessID mapeado para principal.process.pid
  • ExecutionThreadID foi associado a principal.process.product_specific_process_id
  • Domain mapeado para principal.user.userid
  • UserID mapeado para principal.user.windows_sid
  • AccountType foi associado a principal.user.role_name

2023-05-12

Melhoria:

  • Registros JSON com falhas analisados
  • Mapeou cshost para principal.hostname
  • csusername foi mapeado para principal.user.user_display_name.
  • sip foi mapeado para target.ip.
  • uristem foi mapeado para target.url.
  • sport foi mapeado para target.port.
  • csversion foi mapeado para network.tls.version_protocol.
  • csuseragent foi mapeado para network.http.user_agent.
  • csip foi mapeado para principal.ip.
  • xforwardedfor foi mapeado para principal.ip.
  • csmethod foi mapeado para network.http.method.
  • csreferer foi mapeado para network.http.referral_url.
  • scstatus foi mapeado para network.http.response_code.
  • computername foi mapeado para target.asset.hostname.
  • scbyte foi mapeado para network.sent_bytes.
  • csbyte foi mapeado para network.received_bytes.
  • date e time foram mapeados para metadata.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 e received_bytes foram extraídos do registro.
  • dst_port alterado para src_port.
  • src_port foi mapeado para principal.port.
  • O mapeamento target.url foi atualizado para request_url+?+uri_query.
  • token_data foi mapeado para security_result.detection_fields como Cookie.
  • sent_bytes foi mapeado para network.sent_bytes.
  • received_bytes foi mapeado para network.received_bytes.
  • Mapeia intermediary_devicename para target.hostname se target_host estiver vazio. Caso contrário, ele será mapeado para intermediary.hostname.
  • principal_username foi mapeado para principal.user.userid.
  • Mapeou Devicename para target.hostname somente quando target_host está vazio.
  • Mapeou src_ip para principal.ip se xff_ips estiver vazio.
  • Se xff_ips não estiver vazio:
  • src_ip foi mapeado para intermediary.ip.
  • xff_ips foi mapeado para principal.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 para security_result.severity.
  • UserName foi mapeado para target.user.userid.
  • UserSid foi mapeado para target.user.windows_sid.
  • ProviderKey foi mapeado para security_result.about.resource.attribute.labels.
  • LayerKey foi mapeado para security_result.about.resource.attribute.labels.
  • LayerName foi mapeado para security_result.about.resource.attribute.labels.
  • LayerId foi mapeado para security_result.about.resource.attribute.labels.
  • Weight foi mapeado para security_result.about.resource.attribute.labels.
  • Conditions foi mapeado para security_result.about.resource.attribute.labels.
  • Action foi mapeado para security_result.about.resource.attribute.labels.
  • CalloutKey foi mapeado para security_result.about.resource.attribute.labels.
  • CalloutName foi mapeado para security_result.about.resource.attribute.labels.
  • Channel foi mapeado para security_result.about.resource.attribute.labels.
  • FilterId foi mapeado para security_result.about.resource.attribute.labels.
  • FilterKey foi mapeado para security_result.about.resource.attribute.labels.
  • FilterName foi mapeado para security_result.about.resource.attribute.labels.
  • FilterType foi mapeado para security_result.about.resource.attribute.labels.
  • ProviderGuid foi mapeado para security_result.about.resource.attribute.labels.
  • ProviderName foi mapeado para security_result.about.resource.attribute.labels.
  • SourceName foi mapeado para security_result.about.resource.attribute.labels.
  • SyslogSeverity foi mapeado para security_result.about.resource.attribute.labels.
  • Category foi mapeado para security_result.category_details.
  • EventType foi mapeado para metadata.product_event_type.
  • EventID foi mapeado para metadata.product_log_id.
  • ProcessID foi mapeado para principal.process.pid.
  • SourceModuleName foi mapeado para target.resource.name.
  • SourceModuleType foi mapeado para observer.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.