Coletar registros de DNS do Infoblox
Este documento explica como ingerir registros de DNS do Infoblox no Google Security Operations usando o Bindplane.
O analisador extrai campos de registros formatados em SYSLOG e CEF do DNS Infoblox. Ele usa grok e/ou kv para analisar a mensagem de registro e mapeia esses valores para o modelo de dados unificado (UDM). Ele também define valores de metadados padrão para a origem e o tipo do evento.
Antes de começar
Verifique se você tem os pré-requisitos a seguir:
- Uma instância do Google SecOps
- Windows Server 2016 ou mais recente ou host Linux com
systemd - Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente Bindplane.
- Acesso privilegiado à interface da Web do Infoblox Grid Manager.
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 de 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
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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" /quietAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sc query observiq-otel-collector
O serviço vai aparecer como EM EXECUÇÃO.
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.shAguarde a conclusão da instalação.
Execute o seguinte comando para confirmar a instalação:
sudo systemctl status observiq-otel-collector
O serviço vai aparecer como ativo (em execução).
Outros recursos de instalação
Para mais opções de instalação e solução de problemas, consulte o guia de instalação do agente do Bindplane.
Configurar o agente do Bindplane para ingerir syslog e enviar ao Google SecOps
Localizar o arquivo de configuração
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Editar o arquivo de configuração
Substitua todo o conteúdo de
config.yamlpela seguinte configuração:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'INFOBLOX_DNS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Parâmetros de configuração
Substitua os seguintes marcadores de posição:
Configuração do receptor:
udplog: useudplogpara syslog UDP outcplogpara syslog TCP.0.0.0.0: endereço IP para escutar (0.0.0.0para escutar em todas as interfaces)514: número da porta a ser detectada (porta syslog padrão).
Configuração do exportador:
creds_file_path: caminho completo para o arquivo de autenticação de ingestão:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: ID do cliente da seção "Receber ID do cliente"endpoint: URL do endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte a lista completa em Endpoints regionais.
- EUA:
log_type: tipo de registro exatamente como aparece no Chronicle (INFOBLOX_DNS)
Salve o arquivo de configuração.
- Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
- Linux: pressione
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 observiq-otel-collectorVerifique se o serviço está em execução:
sudo systemctl status observiq-otel-collectorVerifique se há erros nos registros:
sudo journalctl -u observiq-otel-collector -f
Para reiniciar o agente do Bindplane em Windows, escolha uma das seguintes opções:
Prompt de comando ou PowerShell como administrador:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole de serviços:
- Pressione
Win+R, digiteservices.msce pressione Enter. - Localize o Coletor do OpenTelemetry da observIQ.
Clique com o botão direito do mouse e selecione Reiniciar.
Verifique se o serviço está em execução:
sc query observiq-otel-collectorVerifique se há erros nos registros:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Pressione
Configurar o encaminhamento de Syslog no DNS do Infoblox
- Faça login na interface da Web do Infoblox Grid Manager.
- Acesse Grade > Gerenciador de grade > Participantes.
- Selecione o membro a ser configurado e clique em Editar.
- Acesse a guia Monitoramento.
- Em Syslog, clique em Adicionar para adicionar um novo servidor syslog.
- Informe os seguintes detalhes de configuração:
- Endereço: insira o endereço IP do host do agente do Bindplane.
- Porta: insira
514. - Transporte: selecione UDP.
- ID do nó: selecione o nó do Infoblox (para pares de alta disponibilidade).
- Gravidade: selecione Informações (ou o nível de gravidade de sua preferência).
- Instalação: selecione local0 (ou sua instalação preferida).
- Ative as seguintes categorias de registros:
- Consultas DNS: selecione Registrar consultas DNS em Propriedades de DNS da grade > Registro.
- Respostas de DNS: selecione Registrar respostas de DNS.
- DHCP: ative o registro em log do DHCP em Propriedades do DHCP da grade.
- Auditoria: ative o registro de auditoria em Propriedades da grade > Monitoramento.
- Clique em Salvar e fechar.
- Reinicie o serviço DNS, se necessário.
- Verifique se as mensagens syslog estão sendo enviadas conferindo os registros do agente Bindplane.
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| agent.hostname | principal.hostname | Para registros formatados em CEF, se agent.hostname existir, ele será mapeado para principal.hostname. |
| client_ip | principal.ip | Para registros formatados em CEF, se "client_ip" existir, ele será mapeado para "principal.ip". |
| client_port | principal.port | Para registros formatados em CEF, se client_port existir, ele será mapeado para principal.port. |
| dados | answers.data | Extraído do campo de dados da seção de respostas no registro bruto. Várias ocorrências são mapeadas como objetos de respostas separados. |
| descrição | metadata.description | Mapeado diretamente do campo de descrição do registro bruto ou extraído usando padrões grok de outros campos, como "message" e "msg2". |
| dest_ip1 | target.ip | Extraído do registro bruto e mapeado para target.ip. |
| destinationDnsDomain | dns_question.name | Para registros formatados em CEF, se "destinationDnsDomain" existir, ele será mapeado para "dns_question.name". |
| dns_class | dns_question.class | Mapeado usando a tabela de pesquisa dns_query_class_mapping.include. |
| dns_domain | dns_question.name | Extraído do campo de mensagem do registro bruto usando padrões grok e mapeado para dns_question.name. |
| dns_name | dns_question.name | Extraído do campo "dns_domain" usando padrões grok e mapeado para "dns_question.name". |
| dns_records | answers.data | Para registros formatados em CEF, se dns_records existir, ele será mapeado para answers.data. Várias ocorrências são mapeadas como objetos de respostas separados. |
| dst_ip | target.ip ou target.hostname | Extraído do campo de mensagem do registro bruto usando padrões grok. Se for um endereço IP válido, ele será mapeado para target.ip. Caso contrário, será mapeado para target.hostname. |
| dst_ip1 | target.ip ou target.hostname | Extraído do campo "message" ou "msg2" do registro bruto usando padrões grok. Se for um endereço IP válido, ele será mapeado para target.ip. Caso contrário, será mapeado para target.hostname. Só é mapeado se for diferente de dst_ip. |
| evt_type | metadata.product_event_type | Mapeado diretamente do campo "evt_type" do registro bruto, que é extraído do campo "message" usando padrões grok. |
| InfobloxB1OPHIPAddress | principal.ip | Para registros formatados em CEF, se InfobloxB1OPHIPAddress existir, ele será mapeado para principal.ip. |
| InfobloxB1Region | principal.location.country_or_region | Para registros formatados em CEF, se InfobloxB1Region existir, ele será mapeado para principal.location.country_or_region. |
| InfobloxDNSQType | dns_question.type | Para registros formatados em CEF, se InfobloxDNSQType existir, ele será mapeado para dns_question.type. |
| intermediário | intermediary.ip ou intermediary.hostname | Extraído do campo de mensagem do registro bruto usando padrões grok. Se for um endereço IP válido, ele será mapeado para intermediary.ip. Caso contrário, será mapeado para intermediary.hostname. |
| msg2 | metadata.description, dns.response_code, dns_question.name, target.ip, target.hostname, answers.name, answers.ttl, answers.data, answers.class, answers.type, security_result.severity | Extraído do campo de mensagem do registro bruto usando padrões grok. Usado para extrair vários campos, mas não mapeado diretamente para a UDM. |
| name1 | answers.name | Extraído do campo "msg2" do registro bruto usando padrões grok e mapeado para "answers.name". |
| name2 | answers.name | Extraído do campo "msg2" do registro bruto usando padrões grok e mapeado para "answers.name". |
| protocolo | network.ip_protocol | Mapeado diretamente do campo "protocol" do registro bruto, se ele corresponder a protocolos conhecidos. |
| qclass | dns_question.class | Campo intermediário usado para mapear dns_class para UDM. |
| qclass1 | answers.class | Campo intermediário usado para mapear dns_class1 para UDM. |
| qclass2 | answers.class | Campo intermediário usado para mapear dns_class2 para UDM. |
| query_type | dns_question.type | Mapeado usando a tabela de pesquisa dns_record_type.include. |
| query_type1 | answers.type | Mapeado usando a tabela de pesquisa dns_record_type.include. |
| query_type2 | answers.type | Mapeado usando a tabela de pesquisa dns_record_type.include. |
| recursion_flag | network.dns.recursion_desired | Se o recursion_flag contiver um "+", ele será mapeado como "true" para network.dns.recursion_desired. |
| record_type | dns_question.type | Campo intermediário usado para mapear query_type para UDM. |
| record_type1 | answers.type | Campo intermediário usado para mapear query_type1 para UDM. |
| record_type2 | answers.type | Campo intermediário usado para mapear query_type2 para UDM. |
| res_code | network.dns.response_code | Mapeado usando a tabela de pesquisa dns_response_code.include. |
| response_code | network.dns.response_code | Para registros formatados em CEF, se response_code existir, ele será mapeado para network.dns.response_code usando a tabela de pesquisa dns_response_code.include. |
| security_action | security_result.action | Derivado do campo de status. Se o status for "denied", security_action será definido como "BLOCK". Caso contrário, será definido como "ALLOW". |
| gravidade, | security_result.severity | Para registros formatados em CEF, se a gravidade existir e for "informativa", ela será mapeada para security_result.severity como "INFORMATIONAL". |
| src_host | principal.hostname | Extraído da descrição ou do campo de mensagem do registro bruto usando padrões grok e mapeado para principal.hostname. |
| src_ip | principal.ip ou principal.hostname | Extraído do campo de mensagem do registro bruto usando padrões grok. Se for um endereço IP válido, ele será mapeado para principal.ip. Caso contrário, será mapeado para principal.hostname. |
| src_port | principal.port | Extraído do campo de mensagem do registro bruto usando padrões grok e mapeado para principal.port. |
| ttl1 | answers.ttl | Extraído do campo "msg2" do registro bruto usando padrões grok e mapeado para "answers.ttl". |
| ttl2 | answers.ttl | Extraído do campo "msg2" do registro bruto usando padrões grok e mapeado para "answers.ttl". |
| metadata.event_type | metadata.event_type | Derivado de vários campos e lógica de análise. O padrão é GENERIC_EVENT se nenhum outro tipo de evento for identificado. Os valores possíveis incluem NETWORK_DNS, NETWORK_CONNECTION e STATUS_UPDATE. |
| metadata.log_type | metadata.log_type | Definido como "INFOBLOX_DNS" pelo analisador. |
| metadata.product_name | metadata.product_name | Definido como "Infoblox DNS" pelo analisador. |
| metadata.vendor_name | metadata.vendor_name | Definido como "INFOBLOX" pelo analisador. |
| metadata.product_version | metadata.product_version | Extraído de mensagens CEF. |
| metadata.event_timestamp | metadata.event_timestamp | Copiado do campo de carimbo de data/hora. |
| network.application_protocol | network.application_protocol | Definido como "DNS" se o event_type não for "GENERIC_EVENT" ou "STATUS_UPDATE". |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.