Coletar registros do ESET EDR
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- 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
- 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
Instalação do 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
Instalação do Linux
- Abra um terminal com privilégios de root ou sudo.
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
- 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,viou Bloco de Notas).
- Localize o arquivo
Edite o arquivo
config.yamlda 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_labelsSubstitua 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.jsonpara 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-agentPara 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
- Faça login no console da Web do ESET Protect.
- Acesse Mais > Configurações > Configurações avançadas > Servidor Syslog.
- Selecione o botão ao lado de Ativar Syslog.
- 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 (
514para 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.
- Clique em Salvar.
Configurar o Syslog para o ESET PROTECT Cloud
- Faça login no console da Web do ESET Protect.
- Acesse Mais > Configurações > Servidor Syslog.
- Selecione o botão ao lado de Ativar Syslog.
- 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 (
514para UDP).
- 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.