Coletar registros de DDI da EfficientIP
Este documento explica como ingerir registros de DDI da EfficientIP no Google Security Operations usando o agente do Bindplane.
O EfficientIP SOLIDserver é uma solução abrangente de DDI (DNS-DHCP-IPAM) que oferece dispositivos virtuais e de hardware altamente escalonáveis, seguros e robustos para serviços de rede essenciais, incluindo DNS, DHCP, gerenciamento de endereços IP, NTP e TFTP. A plataforma oferece gerenciamento e automação centralizados para infraestrutura de rede com recursos avançados de monitoramento e segurança.
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 um host Linux com
systemd - Conectividade de rede entre o agente do Bindplane e o appliance SOLIDserver da EfficientIP
- Se você estiver executando um proxy, verifique se as portas do firewall estão abertas de acordo com os requisitos do agente do Bindplane.
- Acesso administrativo ao console da Web do EfficientIP SOLIDserver.
- SOLIDserver versão 8.0 ou mais recente (testado com 8.3.x e 8.4.x)
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 seu 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-collectorO status do serviço deve ser 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-collectorO status do serviço precisa ser active (running).
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/efficientip_ddi: compression: gzip creds_file_path: '/etc/bindplane-agent/ingestion-auth.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: EFFICIENTIP_DDI raw_log_field: body ingestion_labels: env: production source: solidserver service: pipelines: logs/efficientip_to_chronicle: receivers: - udplog exporters: - chronicle/efficientip_ddiSubstitua os seguintes marcadores de posição:
Configuração do receptor:
listen_address: defina como0.0.0.0:514para detectar todas as interfaces na porta UDP 514.- Para implantações não raiz do Linux, use a porta
1514ou mais recente. - Verifique se a porta corresponde à configuração no SOLIDserver.
- Para implantações não raiz do Linux, use a porta
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:
customer_id: substituaYOUR_CUSTOMER_IDpelo ID do cliente da etapa anterior.endpoint: endpoint regional:- EUA:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Ásia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Consulte Endpoints regionais para ver uma lista completa.
- EUA:
log_type: defina comoEFFICIENTIP_DDI(é necessário uma correspondência exata).ingestion_labels: rótulos opcionais para categorizar registros (personalize conforme necessário).
Salve o arquivo de configuração.
Depois de editar, salve o arquivo:
- Linux: pressione
Ctrl+O,EntereCtrl+X. - Windows: clique em Arquivo > Salvar.
Reinicie o agente do Bindplane para aplicar as mudanças
Para reiniciar o agente do Bindplane no Linux:
Execute este 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.
- Pressione
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"
Configurar o encaminhamento de syslog da DDI do EfficientIP
- Faça login no console da Web do EfficientIP SOLIDserver.
- No painel de navegação à esquerda, clique em Administração.
- Na seção Monitoring, clique em Configuration.
- No menu, clique em + Adicionar.
- Na lista Serviços, selecione os seguintes serviços: named (para registros do DNS)
- No campo Servidor de destino, insira o endereço IP e a porta do host do agente do Bindplane no formato
<ip-address>:<port>.- Exemplo:
192.168.1.100:514 - Se você estiver usando uma porta não padrão no Linux, especifique a porta de acordo com a situação (por exemplo,
192.168.1.100:1514).
- Exemplo:
Clique em OK para salvar a configuração.
Verificar o encaminhamento de registros
- Verifique os registros do agente do Bindplane para confirmar se eles estão sendo recebidos:
- Linux:
sudo journalctl -u observiq-otel-collector -f - Windows:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Linux:
- Procure entradas de registro que contenham eventos de consulta e resposta de DNS do SOLIDserver.
- Faça login no console do Google SecOps e verifique se os registros de DDI da EfficientIP aparecem na página Eventos.
Tipos de registros compatíveis
Essa integração coleta os seguintes tipos de registros do EfficientIP SOLIDserver:
- Registros de consultas DNS: consultas DNS do cliente com tipo de consulta, nome de domínio e IP do cliente
- Registros de respostas DNS: respostas DNS com registros de respostas, TTL e códigos de resposta
- Registros do DHCP: operações do DHCP, incluindo DISCOVER, OFFER, REQUEST, ACK, NAK, RELEASE e INFORM.
- Registros do DNS Guardian: eventos de segurança, incluindo detecção de comportamento suspeito e ativação/desativação de gatilhos.
- Registros de transferência de zona de DNS: operações e notificações de transferência de zona
- Registros de erros de DNS: erros de formato, SERVFAIL, REFUSED e outros erros de DNS
Tabela de mapeamento do UDM
| Campo de registro | Mapeamento do UDM | Lógica |
|---|---|---|
| ip_version | additional.fields | Unido como rótulo com a chave "ip_version" se não estiver vazio |
| message_size | additional.fields | Unido como rótulo com a chave "message_size" se não estiver vazio |
| domain_name | additional.fields | Unido como rótulo com a chave "domain_name" se não estiver vazio |
| N/A | intermediário | Mesclado de um objeto intermediário |
| descrição | metadata.description | O valor é copiado diretamente se não estiver vazio. |
| msg2 | metadata.description | Definido como msg2 se event_type for GENERIC_EVENT e a descrição estiver vazia |
| su_cmd | metadata.event_type | Defina como "PROCESS_OPEN" se su_cmd for "sudo" |
| activity_type | metadata.event_type | Definido como "NETWORK_DNS" se activity_type corresponder a dns e has_dns_questions for verdadeiro |
| mensagem | metadata.event_type | Definido como "NETWORK_DHCP" se a mensagem corresponder a dhcp |
| inner_message | metadata.event_type | Definido como "NETWORK_UNCATEGORIZED" se inner_message corresponder a padrões específicos e has_principal e has_target forem verdadeiros |
| difusão reversa que restaura | metadata.event_type | Definido como "NETWORK_DNS" se o processo for "named" e has_dns_questions for verdadeiro; definido como "STATUS_UPDATE" se o processo for "named" e has_principal for verdadeiro; definido como "GENERIC_EVENT" se o processo for "named"; definido como "NETWORK_DHCP" se o processo for "dhcpd". |
| PWD | metadata.event_type | Definido como "PROCESS_OPEN" se PWD não estiver vazio e has_target ou has_principal for verdadeiro |
| activity_type | metadata.product_event_type | Valor copiado diretamente |
| N/A | metadata.vendor_name | Defina como "EFFICIENTIP_DDI" |
| N/A | metadata.product_name | Defina como "EFFICIENTIP_DDI DHCP" |
| activity_type | network.application_protocol | Definido como "DNS" se activity_type corresponder a dns e has_dns_questions for verdadeiro. |
| mensagem | network.application_protocol | Definido como "DHCP" se a mensagem corresponder a dhcp |
| difusão reversa que restaura | network.application_protocol | Definido como "DNS" se o processo for "named" ou como "DHCP" se o processo for "dhcpd". |
| src_mac | network.dhcp.chaddr | Valor copiado diretamente se o processo for "dhcpd" |
| src_ip | network.dhcp.ciaddr | O valor é copiado diretamente se dhcp_info for "REQUEST" |
| giaddr | network.dhcp.giaddr | Valor copiado diretamente |
| dhcp_info | network.dhcp.opcode | Defina como "BOOTREQUEST" se dhcp_info for "INFORM", "DISCOVER" ou "REQUEST"; defina como "BOOTREPLY" se dhcp_info for "OFFER" ou "ACK" |
| siaddr | network.dhcp.siaddr | Valor copiado diretamente |
| transaction_id | network.dhcp.transaction_id | Valor convertido em uinteger se não estiver vazio ou for "0" |
| dhcp_info | network.dhcp.type | Definido como "INFORM" se dhcp_info for "INFORM"; definido como "DISCOVER" se for "DISCOVER"; definido como "OFFER" se for "OFFER"; definido como "REQUEST" se for "REQUEST"; definido como "ACK" se for "PACK" |
| yiaddr | network.dhcp.yiaddr | Valor copiado diretamente |
| src_ip | network.dhcp.yiaddr | Definido como "src_ip" se o processo for "dhcpd" e yiaddr estiver vazio |
| answer_rrs | network.dns.answers | Mesclado do objeto de resposta para cada rd em answer_rrs |
| N/A | network.dns.questions | Unido do objeto de perguntas se "has_dns_questions" for verdadeiro. |
| rcode | network.dns.response_code | Valor convertido em uinteger |
| response_code | network.dns.response_code | Valor mapeado para código numérico e convertido em uinteger |
| transport | network.ip_protocol | Valor em maiúsculas se corresponder a UDP ou TCP |
| observador | observer.ip | Valor convertido em ipaddress |
| su_cmd | principal.application | O valor é copiado diretamente se su_cmd for "sudo" |
| difusão reversa que restaura | principal.application | Definido para processar se o processo for "named" ou "dhcpd". |
| host | principal.asset.hostname | O valor é copiado diretamente se não estiver vazio. |
| nome do host | principal.asset.hostname | O valor é copiado diretamente se não estiver vazio e o host estiver vazio. |
| src_ip | principal.asset.ip | Valor copiado diretamente |
| asset_id | principal.asset_id | Concatenado como "ID:" + asset_id |
| host | principal.hostname | O valor é copiado diretamente se não estiver vazio. |
| nome do host | principal.hostname | O valor é copiado diretamente se não estiver vazio e o host estiver vazio. |
| domain_name | principal.hostname | O valor é copiado diretamente se a descrição contiver o nome do host e o host/nome do host estiverem vazios |
| src_ip | principal.ip | O valor é copiado diretamente se a conversão para ipaddress for bem-sucedida ou extraído da descrição se src_ip estiver vazio. |
| src_mac | principal.mac | Valor copiado diretamente |
| src_port | principal.port | Valor convertido em número inteiro |
| process_id | principal.process.pid | Valor copiado diretamente |
| source_user | principal.user.userid | Valor copiado diretamente |
| N/A | security_result | Mesclado de sec_result |
| dst_ip | target.asset.ip | Valor copiado diretamente |
| file_path | target.file.full_path | Valor copiado diretamente |
| dst_ip | target.hostname | Valor copiado diretamente se não for um endereço IP válido |
| host | target.hostname | O valor é copiado diretamente se inner_message corresponder a padrões específicos |
| dst_ip | target.ip | Valor copiado diretamente |
| dst_port | target.port | Valor convertido em número inteiro |
| target_cmd_line | target.process.command_line | Valor copiado diretamente |
| target_user | target.user.userid | Valor copiado diretamente |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.