Coletar registros EVE do Suricata

Compatível com:

Este documento explica como ingerir registros EVE do Suricata no Google Security Operations usando o Bindplane.

O Suricata é um mecanismo de detecção de ameaças de rede de alto desempenho e código aberto que oferece recursos de detecção de intrusões (SDI), prevenção (IPS) e monitoramento de segurança de rede. A saída de registro do EVE (Extensible Event Format) fornece registros abrangentes formatados em JSON que abrangem alertas, fluxos, DNS, HTTP, TLS e dados de transações de arquivos. O analisador extrai campos de registros formatados em JSON do Suricata EVE. Ele analisa a mensagem JSON e mapeia esses valores para o Modelo Unificado de Dados (UDM, na sigla em inglês). 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 ao host do Suricata (root ou sudo)

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 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
    
  3. Aguarde a conclusão da instalação.

  4. 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

  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
    
  3. Aguarde a conclusão da instalação.

  4. 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.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Editar o arquivo de configuração

  • Substitua todo o conteúdo de config.yaml pela 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: 'SURICATA_EVE'
            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: use udplog para syslog UDP ou tcplog para syslog TCP.
      • 0.0.0.0: endereço IP para escutar (0.0.0.0 para 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
      • 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.
      • log_type: tipo de registro exatamente como aparece no Chronicle (SURICATA_EVE)

Salve o arquivo de configuração.

  • Depois de editar, salve o arquivo:
    • Linux: pressione Ctrl+O, Enter e Ctrl+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 o seguinte comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifique se o serviço está em execução:

        sudo systemctl status observiq-otel-collector
      
    2. Verifique 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-collector
      
    • Console de serviços:

      1. Pressione Win+R, digite services.msc e pressione Enter.
      2. Localize o Coletor do OpenTelemetry da observIQ.
      3. Clique com o botão direito do mouse e selecione Reiniciar.

      4. Verifique se o serviço está em execução:

        sc query observiq-otel-collector
        
      5. Verifique se há erros nos registros:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configurar o encaminhamento de syslog do Suricata EVE

  1. Abra o arquivo de configuração do Suricata (normalmente /etc/suricata/suricata.yaml).
  2. Localize a seção outputs e configure a saída do registro do EVE para o Syslog:

    outputs:
      - eve-log:
          enabled: yes
          filetype: syslog
          identity: "suricata"
          facility: local5
          level: Info
          types:
            - alert:
                payload: yes
                payload-printable: yes
                packet: yes
                metadata: yes
            - http:
                extended: yes
            - dns:
                query: yes
                answer: yes
            - tls:
                extended: yes
            - files:
                force-magic: no
            - flow
            - netflow
            - anomaly:
                enabled: yes
            - stats:
                enabled: yes
    
  3. Se o daemon syslog não estiver configurado para encaminhar para o Bindplane, configure o rsyslog ou o syslog-ng:

    • Para rsyslog (edite /etc/rsyslog.conf ou crie /etc/rsyslog.d/suricata.conf):

      local5.* @BINDPLANE_IP:514
      
      • Substitua BINDPLANE_IP pelo endereço IP do host do agente do Bindplane.
      • Use @ para UDP ou @@ para TCP.
    • Para syslog-ng (edite /etc/syslog-ng/syslog-ng.conf):

      destination d_bindplane { udp("BINDPLANE_IP" port(514)); };
      filter f_suricata { facility(local5); };
      log { source(s_src); filter(f_suricata); destination(d_bindplane); };
      
  4. Reinicie o daemon syslog:

    sudo systemctl restart rsyslog
    
  5. Reinicie o Suricata:

     sudo systemctl restart suricata
    
  6. 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
timestamp metadata.event_timestamp Carimbo de data/hora do evento
event_type metadata.product_event_type Tipo de evento EVE (por exemplo, alerta, fluxo, dns, http, tls)
src_ip principal.ip Endereço IP de origem
src_port principal.port Número da porta de origem
dest_ip target.ip Endereço IP de destino
dest_port target.port Número da porta de destino
proto network.ip_protocol Protocolo de rede (por exemplo, TCP, UDP, ICMP)
flow_id network.session_id Identificador exclusivo do fluxo
alert.signature security_result.rule_name Nome da assinatura do alerta
alert.signature_id security_result.rule_id Identificador de assinatura de alerta
alert.severity security_result.severity Nível de gravidade do alerta
alert.category security_result.category_details Categoria de classificação do alerta
alert.action security_result.action Ação realizada (por exemplo, permitida, bloqueada)
alert.rev security_result.rule_version Número da revisão da regra
http.hostname target.hostname Nome do host da solicitação HTTP
http.url target.url URL de solicitação HTTP
http.http_method network.http.method Método de solicitação HTTP
http.status network.http.response_code Código de status da resposta HTTP
http.http_user_agent network.http.user_agent String do user agent HTTP
http.http_refer network.http.referral_url URL do referenciador HTTP
http.length additional.fields Comprimento do conteúdo HTTP
dns.type network.dns.type Consulta ou resposta de DNS
dns.rrname network.dns.questions.name Nome da consulta DNS
dns.rrtype network.dns.questions.type Tipo de consulta DNS
dns.rdata network.dns.answers.data Dados de resposta do DNS
tls.subject network.tls.client.subject Assunto do certificado TLS
tls.issuerdn network.tls.client.issuer Emissor do certificado TLS
tls.sni network.tls.client.server_name Indicação de nome do servidor TLS
tls.version network.tls.version Versão TLS
tls.ja3.hash network.tls.client.ja3 Hash da impressão digital do cliente JA3
tls.ja3s.hash network.tls.server.ja3s Hash da impressão digital do servidor JA3S
app_proto network.application_protocol Protocolo da camada de aplicativo detectado
flow.bytes_toserver network.sent_bytes Bytes enviados do cliente para o servidor
flow.bytes_toclient network.received_bytes Bytes enviados do servidor para o cliente
flow.pkts_toserver additional.fields Pacotes enviados do cliente para o servidor
flow.pkts_toclient additional.fields Pacotes enviados do servidor para o cliente
in_iface additional.fields Interface de rede de entrada
community_id network.community_id Hash do fluxo de ID da comunidade de rede.

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