Recolha registos do ExtraHop RevealX

Compatível com:

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

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Windows 2016 ou posterior, ou um anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas
  • Acesso privilegiado ao ExtraHop Reveal X

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

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

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:
    • Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    • Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro 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
    

Reinicie o agente do Bindplane para aplicar as alterações

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

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog do ExtraHop

  1. Inicie sessão na administração do ExtraHop através do https://<extrahop-hostname-or-IP-address>/admin.
  2. Aceda a Estado e diagnósticos > Registo de auditoria.
  3. Clique em Configurar definições do Syslog.
  4. Indique os seguintes detalhes de configuração:
    • Destino: introduza o endereço IP do agente Bindplane.
    • Protocolo: selecione UDP ou TCP, consoante a configuração do Bindplane.
    • Porta: introduza o número da porta do agente do Bindplane.
    • Clique em Testar definições.
  5. Clique em Guardar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
alert_name security_result.summary O valor de alert_name do registo não processado é mapeado para security_result.summary.
answers[].data network.dns.answers[].data O valor de data para cada elemento na matriz answers do registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é mapeado para o campo type do elemento correspondente na matriz network.dns.answers.
client_ip principal.ip O valor de client_ip do registo não processado é mapeado para principal.ip.
cn1 security_result.rule_labels[].value O valor de cn1 do registo não processado é usado como o valor de um elemento security_result.rule_labels com a chave "ID de deteção".
cn2 security_result.detection_fields[].value O valor de cn2 do registo não processado é 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 registo não processado é mapeado para security_result.rule_name.
cs2 security_result.category_details[] O valor de cs2 do registo não processado é adicionado como um elemento à matriz security_result.category_details.
description metadata.description O valor de description do registo não processado, após algum processamento (remoção de carateres de nova linha e barras invertidas), é mapeado para metadata.description. Em alguns casos, outros campos do registo não processado podem contribuir para este campo ou substituí-lo.
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 registo não processado é 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 registo não processado é mapeado para target.ip.
eh_event metadata.event_type, network.application_protocol Se eh_event for "dns", metadata.event_type é definido como NETWORK_DNS e network.application_protocol é definido como DNS. Se eh_event for "RDP", metadata.event_type é definido como NETWORK_CONNECTION e network.application_protocol é definido como RDP.
event_id metadata.product_event_type O valor de event_id do registo não processado é mapeado para metadata.product_event_type.
facility principal.resource.resource_subtype O valor de facility do registo não processado é mapeado para principal.resource.resource_subtype.
ipaddr principal.ip O valor de ipaddr do registo não processado é 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" está mapeado para metadata.product_event_type. O campo "event" (após a remoção de " Audit Log") é mapeado para principal.hostname e principal.asset.hostname. O campo "details" está mapeado para security_result.summary.
jsonPayload.event metadata.product_event_type, principal.hostname, principal.asset.hostname O valor de jsonPayload.event do registo não processado (após a remoção de "Registo 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 registo não processado é mapeado para metadata.product_log_id.
macaddr principal.mac O valor de macaddr do registo não processado é mapeado para principal.mac.
name metadata.description O valor de name do registo não processado é mapeado para metadata.description.
object_id target.resource.product_object_id O valor de object_id do registo não processado é mapeado para target.resource.product_object_id.
object_name target.resource.name O valor de object_name do registo não processado é mapeado para target.resource.name.
object_type target.resource.resource_type O valor de object_type do registo não processado (convertido em maiúsculas) é mapeado para target.resource.resource_type.
operation metadata.product_event_type O valor de operation do registo não processado é mapeado para metadata.product_event_type.
priority security_result.severity, security_result.severity_details Se priority for "notice", security_result.severity é definido como MEDIUM e security_result.severity_details é definido como o valor de priority.
product_event_type metadata.product_event_type O valor de product_event_type do registo não processado é mapeado para metadata.product_event_type. Também é usado para determinar o metadata.event_type e outros campos com base no respetivo valor.
qname network.dns.questions[].name O valor de qname do registo não processado é mapeado para o campo name de um elemento network.dns.questions.
qname_or_host intermediary.hostname O valor de qname_or_host do registo não processado é mapeado para intermediary.hostname.
qtype network.dns.questions[].type O valor de qtype do registo não processado é mapeado para o campo type de um elemento network.dns.questions, convertendo a representação de string no respetivo equivalente numérico de acordo com os tipos de registos DNS.
resource.labels.project_id target.resource.attribute.labels[].value O valor de resource.labels.project_id do registo não processado é 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 registo não processado é mapeado para target.resource.resource_subtype.
rdp_record.clientBuild metadata.product_version O valor de rdp_record.clientBuild do registo não processado é mapeado para metadata.product_version.
rdp_record.clientBytes network.sent_bytes O valor de rdp_record.clientBytes do registo não processado é mapeado para network.sent_bytes.
rdp_record.clientName principal.hostname O valor de rdp_record.clientName do registo não processado é mapeado para principal.hostname.
rdp_record.clientPort principal.port O valor de rdp_record.clientPort do registo não processado é mapeado para principal.port.
rdp_record.cookie principal.user.userid O valor de rdp_record.cookie (após a remoção de "mstshash=") do registo não processado é mapeado para principal.user.userid.
rdp_record.proto network.ip_protocol O valor de rdp_record.proto do registo não processado é mapeado para network.ip_protocol, convertendo "TCP" em "TCP" e "UDP" em "UDP".
rdp_record.selectedProtocol security_result.description O valor de rdp_record.selectedProtocol do registo não processado é mapeado para security_result.description.
rdp_record.serverBytes network.received_bytes O valor de rdp_record.serverBytes do registo não processado é mapeado para network.received_bytes.
rdp_record.serverPort target.port O valor de rdp_record.serverPort do registo não processado é mapeado para target.port.
rt metadata.event_timestamp O valor de rt do registo não processado é analisado como uma 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 está mapeado para security_result.severity_details. 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 registo não processado é 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 registo não processado é 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 registo não processado é mapeado para security_result.summary.
ts metadata.event_timestamp O valor de ts do registo não processado é analisado como uma data/hora e mapeado para metadata.event_timestamp.
user principal.user.userid O valor de user do registo não processado é mapeado para principal.user.userid.
(N/A) metadata.log_type Está sempre definido como "EXTRAHOP".
(N/A) metadata.vendor_name Está sempre definido como "EXTRAHOP".
(N/A) metadata.product_name Está sempre definido como "EXTRAHOP".
(N/A) security_result.severity Por predefinição, está definido como CRITICAL ou com base no valor de severity ou priority.
(N/A) event.idm.is_alert Definido como true se security_result.severity for "ALTO" ou "CRÍTICO".
(N/A) event.idm.is_significant Definido como true se security_result.severity for "ALTO" ou "CRÍTICO".
(N/A) metadata.event_type Determinado com base nos valores de outros campos, como eh_event, product_event_type, has_principal e dst. A predefinição é GENERIC_EVENT.
(N/A) network.application_protocol Definido como DNS se eh_event for "dns" ou message contiver "DNS Rebinding". Definido como RDP se eh_event for "RDP".
(N/A) security_result.rule_labels[].key Definido como "ID de deteção" para a etiqueta de regra derivada de cn1.
(N/A) security_result.detection_fields[].key Definido como "riskscore" para o campo de deteção derivado de cn2.
(N/A) principal.user.attribute.roles[].type Definido 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 "Autenticação LDAP não segura" ou "Erros de autenticação do cliente Kerberos".
(N/A) security_result.category Definido como NETWORK_SUSPICIOUS se product_event_type for "DNS Internal Reverse Lookup Scan" ou contiver "Inbound Suspicious Connections". Definido como NETWORK_MALICIOUS se product_event_type for "Pedido ao servidor de base de dados externo".
(N/A) network.http.response_code Definido com base no status_code extraído de product_event_type se corresponder ao padrão "HTTP Server %{INT:status_code} %{GREEDYDATA}".
jsonPayload.cs1 security_result.detection_fields[].value O valor de jsonPayload.cs1 do registo não processado é usado como valor para um elemento security_result.detection_fields.
jsonPayload.cn1 security_result.detection_fields[].value O valor de jsonPayload.cn1 do registo não processado é usado como valor para um elemento security_result.detection_fields.
jsonPayload.cn2 security_result.detection_fields[].value O valor de jsonPayload.cn2 do registo não processado é usado como valor para um elemento security_result.detection_fields.
jsonPayload.cs1Label, jsonPayload.cn1Label, jsonPayload.cn2Label security_result.detection_fields[].key Estes campos do registo não processado são usados como chaves para os elementos correspondentes em security_result.detection_fields.
jsonPayload.src principal.ip O valor de jsonPayload.src do registo não processado é mapeado para principal.ip.
jsonPayload.dst target.ip O valor de jsonPayload.dst do registo não processado é mapeado para target.ip.

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