Coletar registros do ESET AV
Neste documento, explicamos como ingerir registros do ESET AV no Google Security Operations usando o Bindplane. O código do analisador Logstash extrai dados de ocorrência de segurança de registros ESET_AV formatados em SYSLOG ou JSON. Primeiro, ela normaliza a mensagem bruta e a analisa com base no formato identificado, mapeando os campos extraídos para o esquema correspondente do Modelo de Dados Unificado (UDM, na sigla em inglês) para representação e análise consistentes.
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_AV' 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 |
---|---|---|
conta | principal.administrative_domain | Extraído do campo account usando o padrão grok %{DATA:admin_domain}\\\\%{WORD:user_id} . |
conta | principal.user.userid | Extraído do campo account usando o padrão grok %{DATA:admin_domain}\\\\%{WORD:user_id} . |
ação | security_result.action | Se action for Block (sem diferenciar maiúsculas de minúsculas), defina como BLOCK . Se action for Start (sem diferenciar maiúsculas de minúsculas), defina como ALLOW . |
action_taken | security_result.action_details | Mapeado diretamente do campo action_taken . |
computer_severity_score | security_result.detection_fields | Um par de chave-valor é criado com a chave computer_severity_score e o valor do campo computer_severity_score . Esse par é anexado à matriz security_result.detection_fields . |
detail | security_result.description | Mapeado diretamente do campo detail . |
domínio | principal.domain.name | Mapeado diretamente do campo domain . |
eialarmid | security_result.detection_fields | Um par de chave-valor é criado com a chave eialarmid e o valor do campo eialarmid . Esse par é anexado à matriz security_result.detection_fields . |
eiconsolelink | principal.url | Mapeado diretamente do campo eiconsolelink . |
evento | metadata.description | Renomeado de event para event_desc e mapeado para metadata.description . |
event_type | metadata.product_event_type | Mapeado diretamente do campo event_type . |
group_name | principal.group.group_display_name | Mapeado diretamente do campo group_name . |
jogo da velha | principal.file.sha1 | Convertido para minúsculas. Se o valor em letras minúsculas corresponder à regex SHA-1, mapeado para principal.file.sha1 . |
jogo da velha | principal.resource.attribute.labels | Um par de chave-valor é criado com a chave hash e o valor do campo hash . Esse par é anexado à matriz principal.resource.attribute.labels . |
nome do host | principal.asset.hostname | Mapeado diretamente do campo hostname . |
nome do host | principal.hostname | Mapeado diretamente do campo hostname . |
entrada | network.direction | Se for verdadeiro, defina como INBOUND . Se for "false", defina como OUTBOUND . |
ipv4 | target.asset.ip | Mapeado diretamente do campo ipv4 se target_address estiver vazio. |
ipv4 | target.ip | Mapeado diretamente do campo ipv4 se target_address estiver vazio. |
json_data | Analisado como JSON para extrair vários campos. | |
mensagem | Analisado usando grok para extrair carimbo de data/hora, host e json_data. | |
need_restart | additional.fields | Um par de chave-valor é criado com a chave need_restart e o valor do campo need_restart (convertido em string). Esse par é anexado à matriz additional.fields . |
os_name | principal.platform | Se contiver Window ou window (sem distinção entre maiúsculas e minúsculas), defina como WINDOWS . Se contiver Linux ou linux (sem distinção entre maiúsculas e minúsculas), defina como LINUX . Se contiver Mac ou mac (sem distinção entre maiúsculas e minúsculas), defina como MAC . |
os_name | principal.platform_version | Mapeado diretamente do campo os_name . |
process_name | principal.process.file.full_path | Mapeado diretamente do campo process_name . Se estiver vazio, vai usar o valor de processname . |
processname | principal.process.file.full_path | Se process_name estiver vazio, será mapeado para process_name . |
protocolo | network.ip_protocol | Convertido para maiúsculas. Se o valor em maiúsculas corresponder a protocolos conhecidos (TCP, UDP, ICMP etc.), será mapeado para network.ip_protocol . |
result | security_result.summary | Mapeado diretamente do campo result . |
rulename | security_result.rule_name | Mapeado diretamente do campo rulename . |
scan_id | security_result.detection_fields | Um par de chave-valor é criado com a chave scan_id e o valor do campo scan_id . Esse par é anexado à matriz security_result.detection_fields . |
scanner_id | security_result.detection_fields | Um par de chave-valor é criado com a chave scanner_id e o valor do campo scanner_id . Esse par é anexado à matriz security_result.detection_fields . |
gravidade, | security_result.severity | Se contiver Warn ou warn (sem distinção entre maiúsculas e minúsculas), defina como HIGH . Se contiver Info ou info (sem distinção entre maiúsculas e minúsculas), defina como LOW . |
severity_score | security_result.detection_fields | Um par de chave-valor é criado com a chave severity_score e o valor do campo severity_score . Esse par é anexado à matriz security_result.detection_fields . |
source_address | principal.asset.ip | Mapeado diretamente do campo source_address . |
source_address | principal.ip | Mapeado diretamente do campo source_address . |
source_port | principal.port | Convertido para string e depois para inteiro. Mapeado para principal.port . |
source_uuid | metadata.product_log_id | Mapeado diretamente do campo source_uuid . |
target | Renomeada como target1 . |
|
target_address | target.asset.ip | Mapeado diretamente do campo target_address . |
target_address | target.ip | Mapeado diretamente do campo target_address . |
target_port | target.port | Convertido para string e depois para inteiro. Mapeado para target.port . |
threat_handled | security_result.detection_fields | Um par de chave-valor é criado com a chave threat_handled e o valor do campo threat_handled (convertido em string). Esse par é anexado à matriz security_result.detection_fields . |
threat_name | security_result.threat_name | Mapeado diretamente do campo threat_name . |
threat_type | security_result.threat_id | Mapeado diretamente do campo threat_type . |
tempo | metadata.event_timestamp | Usado para preencher metadata.event_timestamp . |
nome de usuário | principal.user.userid | Mapeado diretamente do campo username se user_id e user estiverem vazios. |
usuário | principal.user.userid | Mapeado diretamente do campo user se user_id estiver vazio. |
metadata.event_type | Se source_address e target_address não estiverem vazios, defina como NETWORK_CONNECTION . Caso contrário, se has_user for verdadeiro, defina como USER_UNCATEGORIZED . Caso contrário, se has_principal for verdadeiro, defina como STATUS_UPDATE . Caso contrário, defina como GENERIC_EVENT . |
|
metadata.log_type | Defina como ESET_AV . |
|
metadata.product_name | Defina como ESET_AV . |
|
metadata.vendor_name | Defina como ESET_AV . |
|
intermediary.hostname | O valor desse campo é extraído do campo host da mensagem de registro. |
|
principal.user.userid | Se o campo account não estiver vazio, o analisador vai extrair o ID do usuário do campo account usando um padrão grok. Caso contrário, ele verifica se o campo user não está vazio e, se estiver, usa o valor dele. Se account e user estiverem vazios, ele vai verificar se o campo username não está vazio e, se estiver, vai usar o valor dele. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.