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
,vi
ou Bloco de Notas).
- Localize o arquivo
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
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 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
- 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 (
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.
- 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 (
514
para 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.