Coletar registros do ESET EDR

Compatível com:

Neste documento, explicamos como ingerir registros do ESET no Google Security Operations usando o Bindplane. Primeiro, o código do analisador do Logstash tenta extrair campos dos registros do ESET EDR no formato SYSLOG ou JSON usando uma série de padrões grok. Dependendo dos campos extraídos e do formato deles, o sistema processa ainda mais os dados usando filtros de chave-valor (kv) ou análise JSON para estruturar as informações em uma representação do Modelo Unificado de Dados (UDM, na sigla em inglês).

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 estiver executando por trás de um proxy, as portas do firewall estarão abertas.
  • Acesso privilegiado ao ESET Protect

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

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
            ingestion_labels:
                log_type: 'ESET_EDR'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID do cliente real.

  5. 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 no 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 para o ESET PROTECT local

  1. Faça login no console da Web do ESET Protect.
  2. Acesse Mais > Configurações > Configurações avançadas > Servidor Syslog.
  3. Selecione o botão ao lado de Ativar Syslog.
  4. Informe os seguintes detalhes de configuração:
    • Host: insira o endereço IP do agente do Bindplane.
    • Porta: insira o número da porta do agente Bindplane (514 para UDP).
    • Formato: selecione Syslog.
    • Transporte: selecione UDP.
    • Nível de detalhe do registro de rastreamento: selecione Informativo.
    • Alternância "Exportar registros para Syslog": selecione Ativar.
    • Formato dos registros exportados: selecione JSON.
  5. Clique em Salvar.

Configurar o Syslog para o ESET PROTECT Cloud

  1. Faça login no console da Web do ESET Protect.
  2. Acesse Mais > Configurações > Servidor Syslog.
  3. Selecione o botão ao lado de Ativar Syslog.
  4. Informe os seguintes detalhes de configuração:
    • Formato do payload: selecione JSON.
    • Formato do envelope: selecione Syslog.
    • Nível mínimo de registro: selecione Informativo.
    • Tipos de eventos a serem registrados: selecione Todos os tipos de eventos.
    • IP de destino: insira o endereço IP do agente do Bindplane.
    • Porta: insira o número da porta do agente Bindplane (514 para UDP).
  5. Clique em Salvar.

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
ação event1.idm.read_only_udm.security_result.action Definido condicionalmente como BLOCK se o valor for Blocked.
actionTaken event2.idm.read_only_udm.metadata.event_type Definido condicionalmente como SCAN_PROCESS se o valor for Cleaned by deleting.
actionTaken event1.idm.read_only_udm.security_result.action_details Mapeado diretamente do campo actionTaken.
actionTaken event2.idm.read_only_udm.security_result.action_details Mapeado diretamente do campo actionTaken.
accountName event2.idm.read_only_udm.additional.fields.value.string_value Mapeado diretamente do campo accountName. A chave está definida como accountName.
app event3.idm.read_only_udm.principal.application Mapeado diretamente do campo app.
circunstâncias event2.idm.read_only_udm.additional.fields.value.string_value Mapeado diretamente do campo circumstances. A chave está definida como circumstances.
Computer_name event3.idm.read_only_udm.principal.hostname Mapeado diretamente do campo Computer_name.
Computer_name event3.idm.read_only_udm.principal.asset.hostname Mapeado diretamente do campo Computer_name.
date_time
Detection_name event3.idm.read_only_udm.security_result.threat_name Mapeado diretamente do campo Detection_name.
Detectiontype event3.idm.read_only_udm.security_result.category_details Mapeado diretamente do campo Detectiontype.
dst event2.idm.read_only_udm.target.ip Mapeado diretamente do campo dst.
dst event2.idm.read_only_udm.target.asset.ip Mapeado diretamente do campo dst.
dstPort event2.idm.read_only_udm.target.port Mapeado diretamente do campo dstPort depois de convertido em um número inteiro.
evento event1.idm.read_only_udm.metadata.description Mapeado diretamente do campo event.
event_type event1.idm.read_only_udm.metadata.product_event_type Mapeado diretamente do campo event_type.
event_type event1.idm.read_only_udm.metadata.event_type Definido condicionalmente como NETWORK_CONNECTION se o valor for FirewallAggregated_Event.
jogo da velha event1.idm.read_only_udm.target.file.sha1 Mapeado diretamente do campo hash depois de convertido para minúsculas.
nome do host event1.idm.read_only_udm.target.hostname Mapeado diretamente do campo hostname.
nome do host event1.idm.read_only_udm.target.asset.hostname Mapeado diretamente do campo hostname.
nome do host event.alert.devices.hostname Mapeado diretamente do campo hostname.
ipv4 event1.idm.read_only_udm.principal.ip Mapeado diretamente do campo ipv4. Primeiro, esse campo é armazenado em um campo temporário udm_ip.
ipv4 event1.idm.read_only_udm.principal.asset.ip Mapeado diretamente do campo ipv4. Primeiro, esse campo é armazenado em um campo temporário udm_ip.
ipv4 event.alert.devices.ip_addresses Mapeado diretamente do campo ipv4 após a conversão para um endereço IP.
Logged_user event3.idm.read_only_udm.principal.user.userid Mapeado diretamente do campo Logged_user.
objectUri event1.idm.read_only_udm.target.file.full_path Mapeado diretamente do campo objectUri.
objectUri event2.idm.read_only_udm.target.file.full_path Mapeado diretamente do campo objectUri.
processName event2.idm.read_only_udm.target.process.file.full_path Mapeado diretamente do campo processName.
processName event1.idm.read_only_udm.principal.process.file.full_path Mapeado diretamente do campo processName.
process_id event3.idm.read_only_udm.principal.process.pid Mapeado diretamente do campo process_id.
process_id event2.idm.read_only_udm.target.process.pid Mapeado diretamente do campo process_id.
protocolo event1.idm.read_only_udm.network.ip_protocol Mapeado diretamente do campo protocol.
proto event2.idm.read_only_udm.network.ip_protocol Mapeado diretamente do campo proto.
result event2.idm.read_only_udm.security_result.action Definido condicionalmente como ALLOW se o valor for Success.
Scanner event3.idm.read_only_udm.security_result.description Mapeado diretamente do campo Scanner.
gravidade, event1.idm.read_only_udm.security_result.severity Mapeado do campo severity com base nestas condições: - INFO, Informational, DEBUG, info: INFORMATIONAL - ERROR, error: ERROR - WARNING, Warning: LOW
source_address event1.idm.read_only_udm.principal.ip Mapeado diretamente do campo source_address.
source_address event1.idm.read_only_udm.principal.asset.ip Mapeado diretamente do campo source_address.
source_port event1.idm.read_only_udm.principal.port Mapeado diretamente do campo source_port depois de convertido em um número inteiro.
source_uuid event1.idm.read_only_udm.metadata.product_log_id Mapeado diretamente do campo source_uuid.
src event2.idm.read_only_udm.principal.ip Mapeado diretamente do campo src.
src event2.idm.read_only_udm.principal.asset.ip Mapeado diretamente do campo src.
srcPort event2.idm.read_only_udm.principal.port Mapeado diretamente do campo srcPort depois de convertido em um número inteiro.
target_address event1.idm.read_only_udm.target.ip Mapeado diretamente do campo target_address.
target_address event1.idm.read_only_udm.target.asset.ip Mapeado diretamente do campo target_address.
target_port event1.idm.read_only_udm.target.port Mapeado diretamente do campo target_port depois de convertido em um número inteiro.
threatName event2.idm.read_only_udm.security_result.threat_name Mapeado diretamente do campo threatName.
threatName event.alert.alert_short_name Mapeado diretamente do campo threatName.
Time_of_occurrence event3.idm.read_only_udm.additional.fields.value.string_value Mapeado diretamente do campo Time_of_occurrence. A chave está definida como Time_of_occurrence.
tipo event2.idm.read_only_udm.security_result.category_details Mapeado diretamente do campo type.
tipo event2.idm.read_only_udm.metadata.event_type Definido condicionalmente como GENERIC_EVENT se nenhum outro tipo de evento específico for correspondente.
user_id event2.idm.read_only_udm.principal.user.userid Mapeado diretamente do campo user_id.
event1.idm.read_only_udm.metadata.event_type Definido condicionalmente como FILE_UNCATEGORIZED se o valor de event_type for Threat_Event.
event1.idm.read_only_udm.metadata.log_type Defina como ESET_EDR.
event1.idm.read_only_udm.metadata.product_name Definido condicionalmente como ESET se o valor de event_type for FirewallAggregated_Event.
event2.idm.read_only_udm.metadata.log_type Defina como ESET_EDR.
event2.idm.read_only_udm.metadata.product_name Defina como EDR.
event2.idm.read_only_udm.metadata.vendor_name Defina como ESET.
event3.idm.read_only_udm.metadata.event_type Definido condicionalmente com base nestas regras: - USER_UNCATEGORIZED se principal_user_present for true. - STATUS_UPDATE se principal_machine_id_present for true. - GENERIC_EVENT caso contrário.
event3.idm.read_only_udm.metadata.log_type Defina como ESET_EDR.
event3.idm.read_only_udm.metadata.product_name Defina como EDR.
event3.idm.read_only_udm.metadata.vendor_name Defina como ESET.
event.alert.is_significant Definido como true e convertido em um booleano.
event3.idm.read_only_udm.security_result.description Definido condicionalmente como o valor de kv_data se Scanner estiver vazio.

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