Coletar registros do switch Ubiquiti Unifi

Compatível com:

Este documento explica como ingerir registros de switches Ubiquiti Unifi no Google Security Operations usando o Bindplane. O analisador extrai campos das mensagens do syslog usando padrões grok, convertendo os dados de registro brutos em um formato estruturado de acordo com o modelo de dados unificado (UDM). Ele processa vários formatos de registros, extrai informações importantes, como carimbos de data/hora, nomes de host, descrições e detalhes da rede, e enriquece os dados com contexto adicional antes de mesclá-los ao evento final da UDM.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Uma instância do Google SecOps
  • Um host Windows 2016 ou mais recente ou Linux com systemd
  • Se 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 do controlador Ubiquiti

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. 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

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. 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

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    1. 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.
    2. Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. 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
        log_type: 'UBIQUITI_SWITCH'
        raw_log_field: body
        ingestion_labels:
    
    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 switch Ubiquiti para enviar o Syslog do plano de controle

  1. Faça login na interface do Unifi Controller.
  2. Abra Unifi Network.
  3. Acesse Configurações > Plano de controle > guia "Integrações".
  4. Encontre a seção Registro de atividades (Syslog).
  5. Ative a opção Servidor SIEM.
  6. Informe os seguintes detalhes de configuração:
    • Clique em Editar categorias e adicione as categorias de registro necessárias.
    • Endereço do servidor: insira o endereço IP do agente do Bindplane.
    • Porta: insira o número da porta do agente Bindplane (UDP é obrigatório).
  7. Clique em Aplicar alterações.

Configurar o switch Ubiquiti para enviar o Syslog do CyberSecure

  1. Faça login na interface do Unifi Controller.
  2. Abra Unifi Network.
  3. Acesse Configurações > CyberSecure > guia "Registro de tráfego".
  4. Encontre a seção Registro de atividades (Syslog).
  5. Ative a opção Servidor SIEM.
  6. Informe os seguintes detalhes de configuração:
    • Clique em Editar categorias e adicione as categorias de registro necessárias.
    • Endereço do servidor: insira o endereço IP do agente do Bindplane.
    • Porta: insira o número da porta do agente Bindplane (UDP é obrigatório).
    • Desative os Registros de depuração.
  7. Clique em Aplicar alterações.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
anomalies security_result.detection_fields[].key: "anomalies"
security_result.detection_fields[].value: valor anomalies do registro
Mapeado diretamente do campo anomalies no registro bruto.
application observer.application Mapeado diretamente do campo application no registro bruto.
assoc_status security_result.detection_fields[].key: "assoc_status"
security_result.detection_fields[].value: valor assoc_status do registro
Mapeado diretamente do campo assoc_status no registro bruto.
asset_details observer.asset.product_object_id: extraído usando o padrão grok %{GREEDYDATA:asset_id},%{GREEDYDATA:asset_version}
asset_software.version: extraído usando o padrão grok %{GREEDYDATA:asset_id},%{GREEDYDATA:asset_version}
O campo asset_details é analisado usando um padrão grok para extrair asset_id e asset_version.
asset_id observer.asset.product_object_id Mapeado diretamente do campo asset_id extraído de asset_details.
asset_version observer.asset.software.version Mapeado diretamente do campo asset_version extraído de asset_details.
bssid principal.mac Mapeado diretamente do campo bssid no registro bruto.
description metadata.description Mapeado diretamente do campo description no registro bruto.
device metadata.product_name Mapeado diretamente do campo device no registro bruto. Se device não estiver presente, o valor "UBIQUITI_SWITCH" será usado.
dns_resp_seen security_result.detection_fields[].key: "dns_resp_seen"
security_result.detection_fields[].value: valor dns_resp_seen do registro
Mapeado diretamente do campo dns_resp_seen no registro bruto.
DST target.ip Mapeado diretamente do campo DST no registro bruto.
DPT principal.port Mapeado diretamente do campo DPT no registro bruto após a conversão para um número inteiro.
event_type security_result.detection_fields[].key: "event_type"
security_result.detection_fields[].value: valor event_type do registro
Mapeado diretamente do campo event_type no registro bruto.
host principal.hostname Mapeado diretamente do campo host no registro bruto.
ID additional.fields[].key: "ID"
additional.fields[].value.string_value: valor ID do registro
Mapeado diretamente do campo ID no registro bruto.
IN additional.fields[].key: "IN"
additional.fields[].value.string_value: valor IN do registro
Mapeado diretamente do campo IN no registro bruto.
interface additional.fields[].key: "interface"
additional.fields[].value.string_value: valor interface do registro
Mapeado diretamente do campo interface no registro bruto.
LEN additional.fields[].key: "LEN"
additional.fields[].value.string_value: valor LEN do registro
Mapeado diretamente do campo LEN no registro bruto.
mac principal.mac Mapeado diretamente do campo mac no registro bruto.
metadata.event_type metadata.event_type Derivado da lógica do analisador. Definido como "STATUS_SHUTDOWN" se state for "Down", "STATUS_STARTUP" se state for "Up", "STATUS_UPDATE" se kv_msg e DST estiverem presentes ou se principal_present for verdadeiro e "GENERIC_EVENT" caso contrário.
metadata.log_type metadata.log_type: "UBIQUITI_SWITCH" Valor constante definido pelo analisador.
metadata.vendor_name metadata.vendor_name: "UBIQUITI" Valor constante definido pelo analisador.
principal_ip principal.ip Mapeado diretamente do campo principal_ip no registro bruto.
process_id observer.process.pid Mapeado diretamente do campo process_id no registro bruto.
product_event_type metadata.product_event_type Mapeado diretamente do campo product_event_type no registro bruto.
PROTO network.ip_protocol Mapeado diretamente do campo PROTO no registro bruto. Se PROTO for "ICMPv6", o valor será alterado para "ICMP".
query_1 target.administrative_domain Mapeado diretamente do campo query_1 no registro bruto.
query_server_1 target.ip Mapeado diretamente do campo query_server_1 no registro bruto.
radio security_result.detection_fields[].key: "radio"
security_result.detection_fields[].value: valor radio do registro
Mapeado diretamente do campo radio no registro bruto.
satisfaction_now security_result.detection_fields[].key: "satisfaction_now"
security_result.detection_fields[].value: valor satisfaction_now do registro
Mapeado diretamente do campo satisfaction_now no registro bruto.
source_port principal.port Mapeado diretamente do campo source_port no registro bruto após a conversão para um número inteiro.
SPT target.port Mapeado diretamente do campo SPT no registro bruto após a conversão para um número inteiro.
SRC principal.ip, principal.hostname Mapeado diretamente do campo SRC no registro bruto.
sta principal.mac Mapeado diretamente do campo sta no registro bruto.
state additional.fields[].key: "state"
additional.fields[].value.string_value: valor state do registro
Mapeado diretamente do campo state no registro bruto.
timestamp metadata.event_timestamp Mapeado diretamente do campo timestamp no registro bruto após ser analisado pelo filtro de data.
TTL additional.fields[].key: "TTL"
additional.fields[].value.string_value: valor TTL do registro
Mapeado diretamente do campo TTL no registro bruto.
vap metadata.ingestion_labels[].key: "Vap"
metadata.ingestion_labels[].value: valor vap do registro
Mapeado diretamente do campo vap no registro bruto.
version metadata.product_version Mapeado diretamente do campo version no registro bruto.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.