Coletar registros do ExtraHop RevealX

Compatível com:

Este documento explica como ingerir registros do ExtraHop RevealX no Google Security Operations usando o Bindplane. O analisador extrai campos de registros formatados em JSON e Syslog. Ele usa padrões grok e lógica condicional para processar diferentes formatos de registro, mapeando campos extraídos para a UDM e enriquecendo os dados com informações relacionadas à segurança, como gravidade e categorias. O analisador também processa tipos de eventos específicos do ExtraHop, como revinculação de DNS, erros de autenticação do Kerberos e conexões RDP, aplicando uma lógica de análise especializada para cada um.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Instância do Google SecOps
  • Windows 2016 ou mais recente ou um host Linux com systemd
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Acesso privilegiado ao ExtraHop Reveal X

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. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID do 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

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do 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
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

Para mais opções de instalação, consulte o guia de instalação.

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

  1. Acesse o arquivo de configuração:
    • Localize o arquivo config.yaml. Normalmente, ele fica 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 Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: "0.0.0.0:514"
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            log_type: 'EXTRAHOP'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane em Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o Syslog do ExtraHop

  1. Faça login na Administração do ExtraHop usando https://<extrahop-hostname-or-IP-address>/admin.
  2. Acesse Status e diagnósticos > Registro de auditoria.
  3. Clique em Configurar configurações do Syslog.
  4. Informe os seguintes detalhes de configuração:
    • Destino: insira o endereço IP do agente do Bindplane.
    • Protocolo: selecione UDP ou TCP, dependendo da sua configuração do Bindplane.
    • Porta: digite o número da porta do agente do Bindplane.
    • Clique em Configurações de teste.
  5. Clique em Salvar.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
alert_name security_result.summary O valor de alert_name do registro bruto é mapeado para security_result.summary.
answers[].data network.dns.answers[].data O valor de data para cada elemento na matriz answers do registro bruto é mapeado para o campo data do elemento correspondente na matriz network.dns.answers.
answers[].name network.dns.answers[].name O valor de name para cada elemento na matriz answers do registro bruto é mapeado para o campo name do elemento correspondente na matriz network.dns.answers.
answers[].ttl network.dns.answers[].ttl O valor de ttl para cada elemento na matriz answers do registro bruto é mapeado para o campo ttl do elemento correspondente na matriz network.dns.answers.
answers[].typeNum network.dns.answers[].type O valor de typeNum para cada elemento na matriz answers do registro bruto é mapeado para o campo type do elemento correspondente na matriz network.dns.answers.
client_ip principal.ip O valor de client_ip do registro bruto é mapeado para principal.ip.
cn1 security_result.rule_labels[].value O valor de cn1 do registro bruto é usado como o valor de um elemento security_result.rule_labels com a chave "ID da detecção".
cn2 security_result.detection_fields[].value O valor de cn2 do registro bruto é usado como o valor de um elemento security_result.detection_fields com a chave "riskscore".
cs1 security_result.rule_name O valor de cs1 do registro bruto é mapeado para security_result.rule_name.
cs2 security_result.category_details[] O valor de cs2 do registro bruto é adicionado como um elemento à matriz security_result.category_details.
description metadata.description O valor de description do registro bruto, após algum processamento (remoção de caracteres de nova linha e barras invertidas), é mapeado para metadata.description. Em alguns casos, outros campos do registro bruto podem contribuir ou substituir esse campo.
details principal.resource.resource_subtype, security_result.summary, principal.ip O campo details é analisado. O valor associado à chave "facility" é mapeado para principal.resource.resource_subtype. O valor associado à chave "details" é mapeado para security_result.summary. O valor associado à chave "src_ip" é mapeado para principal.ip.
dst target.ip ou target.mac O valor de dst do registro bruto é mapeado para target.ip se for um endereço IP ou target.mac se for um endereço MAC.
dst_ip target.ip O valor de dst_ip do registro bruto é mapeado para target.ip.
eh_event metadata.event_type, network.application_protocol Se eh_event for "dns", metadata.event_type será definido como NETWORK_DNS e network.application_protocol será definido como DNS. Se eh_event for "RDP", metadata.event_type será definido como NETWORK_CONNECTION e network.application_protocol será definido como RDP.
event_id metadata.product_event_type O valor de event_id do registro bruto é mapeado para metadata.product_event_type.
facility principal.resource.resource_subtype O valor de facility do registro bruto é mapeado para principal.resource.resource_subtype.
ipaddr principal.ip O valor de ipaddr do registro bruto é mapeado para principal.ip.
jsonPayload.description metadata.product_event_type, principal.hostname, principal.asset.hostname, security_result.summary O campo jsonPayload.description é analisado como JSON. O campo "operation" é mapeado para metadata.product_event_type. O campo "event" (depois de remover "Audit Log") é mapeado para principal.hostname e principal.asset.hostname. O campo "detalhes" é mapeado para security_result.summary.
jsonPayload.event metadata.product_event_type, principal.hostname, principal.asset.hostname O valor de jsonPayload.event do registro bruto (depois de remover "Registro de auditoria") é mapeado para metadata.product_event_type, principal.hostname e principal.asset.hostname.
jsonPayload.id metadata.product_log_id O valor de jsonPayload.id do registro bruto é mapeado para metadata.product_log_id.
macaddr principal.mac O valor de macaddr do registro bruto é mapeado para principal.mac.
name metadata.description O valor de name do registro bruto é mapeado para metadata.description.
object_id target.resource.product_object_id O valor de object_id do registro bruto é mapeado para target.resource.product_object_id.
object_name target.resource.name O valor de object_name do registro bruto é mapeado para target.resource.name.
object_type target.resource.resource_type O valor de object_type do registro bruto (convertido para maiúsculas) é mapeado para target.resource.resource_type.
operation metadata.product_event_type O valor de operation do registro bruto é mapeado para metadata.product_event_type.
priority security_result.severity, security_result.severity_details Se priority for "notice", security_result.severity será definido como MEDIUM e security_result.severity_details será definido como o valor de priority.
product_event_type metadata.product_event_type O valor de product_event_type do registro bruto é mapeado para metadata.product_event_type. Ele também é usado para determinar o metadata.event_type e outros campos com base no valor.
qname network.dns.questions[].name O valor de qname do registro bruto é mapeado para o campo name de um elemento network.dns.questions.
qname_or_host intermediary.hostname O valor de qname_or_host do registro bruto é mapeado para intermediary.hostname.
qtype network.dns.questions[].type O valor de qtype do registro bruto é mapeado para o campo type de um elemento network.dns.questions, convertendo a representação de string para o equivalente numérico de acordo com os tipos de registros DNS.
resource.labels.project_id target.resource.attribute.labels[].value O valor de resource.labels.project_id do registro bruto é usado como o valor de um elemento target.resource.attribute.labels com a chave "Project id".
resource.type target.resource.resource_subtype O valor de resource.type do registro bruto é mapeado para target.resource.resource_subtype.
rdp_record.clientBuild metadata.product_version O valor de rdp_record.clientBuild do registro bruto é mapeado para metadata.product_version.
rdp_record.clientBytes network.sent_bytes O valor de rdp_record.clientBytes do registro bruto é mapeado para network.sent_bytes.
rdp_record.clientName principal.hostname O valor de rdp_record.clientName do registro bruto é mapeado para principal.hostname.
rdp_record.clientPort principal.port O valor de rdp_record.clientPort do registro bruto é mapeado para principal.port.
rdp_record.cookie principal.user.userid O valor de rdp_record.cookie (depois de remover "mstshash=") do registro bruto é mapeado para principal.user.userid.
rdp_record.proto network.ip_protocol O valor de rdp_record.proto do registro bruto é mapeado para network.ip_protocol, convertendo "TCP" para "TCP" e "UDP" para "UDP".
rdp_record.selectedProtocol security_result.description O valor de rdp_record.selectedProtocol do registro bruto é mapeado para security_result.description.
rdp_record.serverBytes network.received_bytes O valor de rdp_record.serverBytes do registro bruto é mapeado para network.received_bytes.
rdp_record.serverPort target.port O valor de rdp_record.serverPort do registro bruto é mapeado para target.port.
rt metadata.event_timestamp O valor de rt do registro bruto é analisado como um carimbo de data/hora e mapeado para metadata.event_timestamp.
severity security_result.severity, security_result.severity_details, event.idm.is_alert, event.idm.is_significant O valor de severity é mapeado para security_result.severity_details. Ele também é usado para determinar o valor de security_result.severity, event.idm.is_alert e event.idm.is_significant.
src principal.ip ou principal.mac O valor de src do registro bruto é mapeado para principal.ip se for um endereço IP ou principal.mac se for um endereço MAC.
src_ip principal.ip ou principal.mac O valor de src_ip do registro bruto é mapeado para principal.ip se for um endereço IP ou principal.mac se for um endereço MAC.
summary security_result.summary O valor de summary do registro bruto é mapeado para security_result.summary.
ts metadata.event_timestamp O valor de ts do registro bruto é analisado como um carimbo de data/hora e mapeado para metadata.event_timestamp.
user principal.user.userid O valor de user do registro bruto é mapeado para principal.user.userid.
(N/A) metadata.log_type Sempre definido como "EXTRAHOP".
(N/A) metadata.vendor_name Sempre definido como "EXTRAHOP".
(N/A) metadata.product_name Sempre definido como "EXTRAHOP".
(N/A) security_result.severity Definido como CRITICAL por padrão ou com base no valor de severity ou priority.
(N/A) event.idm.is_alert Defina como true se security_result.severity for "HIGH" ou "CRITICAL".
(N/A) event.idm.is_significant Defina como true se security_result.severity for "HIGH" ou "CRITICAL".
(N/A) metadata.event_type Determinado com base nos valores de outros campos, como eh_event, product_event_type, has_principal e dst. O padrão é GENERIC_EVENT.
(N/A) network.application_protocol Definido como DNS se eh_event for "dns" ou message contiver "DNS Rebinding". Defina como RDP se eh_event for "RDP".
(N/A) security_result.rule_labels[].key Definido como "ID da detecção" para o rótulo da regra derivado de cn1.
(N/A) security_result.detection_fields[].key Definido como "riskscore" para o campo de detecção derivado de cn2.
(N/A) principal.user.attribute.roles[].type Defina como SERVICE_ACCOUNT se user_name estiver presente.
(N/A) extensions.auth.type Definido como SSO se product_event_type for "Erros de autenticação do cliente Kerberos".
(N/A) extensions.auth.mechanism Definido como USERNAME_PASSWORD se product_event_type for "Unsafe LDAP Authentication" ou "Kerberos Client Auth Errors".
(N/A) security_result.category Definido como NETWORK_SUSPICIOUS se product_event_type for "Verificação de pesquisa inversa interna de DNS" ou contiver "Conexões suspeitas de entrada". Definido como NETWORK_MALICIOUS se product_event_type for "Solicitação ao servidor de banco de dados externo".
(N/A) network.http.response_code Definido com base no status_code extraído de product_event_type se ele corresponder ao padrão "HTTP Server %{INT:status_code} %{GREEDYDATA}".
jsonPayload.cs1 security_result.detection_fields[].value O valor de jsonPayload.cs1 do registro bruto é usado como o valor de um elemento security_result.detection_fields.
jsonPayload.cn1 security_result.detection_fields[].value O valor de jsonPayload.cn1 do registro bruto é usado como o valor de um elemento security_result.detection_fields.
jsonPayload.cn2 security_result.detection_fields[].value O valor de jsonPayload.cn2 do registro bruto é usado como o valor de um elemento security_result.detection_fields.
jsonPayload.cs1Label, jsonPayload.cn1Label, jsonPayload.cn2Label security_result.detection_fields[].key Esses campos do registro bruto são usados como chaves para os elementos correspondentes em security_result.detection_fields.
jsonPayload.src principal.ip O valor de jsonPayload.src do registro bruto é mapeado para principal.ip.
jsonPayload.dst target.ip O valor de jsonPayload.dst do registro bruto é mapeado para target.ip.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.