Raccogliere i log EVE di Suricata

Supportato in:

Questo documento spiega come importare i log EVE di Suricata in Google Security Operations utilizzando Bindplane.

Suricata è un motore di rilevamento delle minacce di rete open source ad alte prestazioni che offre funzionalità di rilevamento delle intrusioni (IDS), prevenzione delle intrusioni (IPS) e monitoraggio della sicurezza di rete. L'output del log EVE (Extensible Event Format) fornisce log completi in formato JSON che coprono dati relativi ad avvisi, flussi, DNS, HTTP, TLS e transazioni di file. Il parser estrae i campi dai log formattati in JSON di Suricata EVE. Analizza il messaggio JSON e poi mappa questi valori al modello UDM (Unified Data Model). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure host Linux con systemd
  • Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
  • Accesso con privilegi all'host Suricata (root o sudo)

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione importazione. Salva il file in modo sicuro sul sistema in cui verrà installato Bindplane.

Recuperare l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri Prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sc query observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.

Installazione di Linux

  1. Apri un terminale con privilegi di root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo il comando:

    sudo systemctl status observiq-otel-collector
    

Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).

Risorse aggiuntive per l'installazione

Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.

Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /etc/bindplane-agent/config.yaml
    
  • Windows:

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

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    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
    

Parametri di configurazione

  • Sostituisci i seguenti segnaposto:

    • Configurazione del ricevitore:

      • udplog: utilizza udplog per syslog UDP o tcplog per syslog TCP
      • 0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0 per ascoltare su tutte le interfacce)
      • 514: Numero di porta su cui ascoltare (porta syslog standard)
    • Configurazione dell'esportatore:

      • creds_file_path: percorso completo del file di autenticazione importazione:
        • Linux: /etc/bindplane-agent/ingestion-auth.json
        • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
      • YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID cliente
      • endpoint: URL endpoint regionale:
        • Stati Uniti: malachiteingestion-pa.googleapis.com
        • Europa: europe-malachiteingestion-pa.googleapis.com
        • Asia: asia-southeast1-malachiteingestion-pa.googleapis.com
        • Per l'elenco completo, vedi Endpoint regionali.
      • log_type: Tipo di log esattamente come appare in Chronicle (SURICATA_EVE)

Salvare il file di configurazione

  • Dopo la modifica, salva il file:
    • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X.
    • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica che il servizio sia in esecuzione:

        sudo systemctl status observiq-otel-collector
      
    2. Controlla i log per individuare eventuali errori:

        sudo journalctl -u observiq-otel-collector -f
      
  • Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:

    • Prompt dei comandi o PowerShell come amministratore:

      net stop observiq-otel-collector && net start observiq-otel-collector
      
    • Console dei servizi:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.

      4. Verifica che il servizio sia in esecuzione:

        sc query observiq-otel-collector
        
      5. Controlla i log per individuare eventuali errori:

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

Configura l'inoltro di syslog EVE di Suricata

  1. Apri il file di configurazione Suricata (in genere /etc/suricata/suricata.yaml).
  2. Individua la sezione outputs e configura l'output EVE log per 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 il daemon syslog non è configurato per l'inoltro a Bindplane, configura rsyslog o syslog-ng:

    • Per rsyslog (modifica /etc/rsyslog.conf o crea /etc/rsyslog.d/suricata.conf):

      local5.* @BINDPLANE_IP:514
      
      • Sostituisci BINDPLANE_IP con l'indirizzo IP dell'host dell'agente Bindplane.
      • Utilizza @ per UDP o @@ per TCP.
    • Per syslog-ng (modifica /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. Riavvia il daemon syslog:

    sudo systemctl restart rsyslog
    
  5. Riavvia Suricata:

     sudo systemctl restart suricata
    
  6. Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
timestamp metadata.event_timestamp Timestamp evento
event_type metadata.product_event_type Tipo di evento EVE (ad es. avviso, flusso, dns, http, tls)
src_ip principal.ip Indirizzo IP di origine
src_port principal.port Numero porta di origine
dest_ip target.ip Indirizzo IP di destinazione
dest_port target.port Numero di porta di destinazione
proto network.ip_protocol Protocollo di rete (ad es. TCP, UDP, ICMP)
flow_id network.session_id Identificatore univoco del flusso
alert.signature security_result.rule_name Nome della firma dell'avviso
alert.signature_id security_result.rule_id Identificatore della firma dell'avviso
alert.severity security_result.severity Livello di gravità dell'avviso
alert.category security_result.category_details Categoria di classificazione degli avvisi
alert.action security_result.action Azione intrapresa (ad es. consentita, bloccata)
alert.rev security_result.rule_version Numero di revisione della regola
http.hostname target.hostname Nome host della richiesta HTTP
http.url target.url URL della richiesta HTTP
http.http_method network.http.method Metodo di richiesta HTTP
http.status network.http.response_code Codice di stato risposta HTTP
http.http_user_agent network.http.user_agent Stringa dello user agent HTTP
http.http_refer network.http.referral_url URL referrer HTTP
http.length additional.fields Lunghezza dei contenuti HTTP
dns.type network.dns.type Query o risposta DNS
dns.rrname network.dns.questions.name Nome query DNS
dns.rrtype network.dns.questions.type Tipo di query DNS
dns.rdata network.dns.answers.data Dati di risposta DNS
tls.subject network.tls.client.subject Oggetto del certificato TLS
tls.issuerdn network.tls.client.issuer Autorità di certificazione TLS
tls.sni network.tls.client.server_name Indicazione del nome del server TLS
tls.version network.tls.version Versione TLS
tls.ja3.hash network.tls.client.ja3 Hash impronta digitale client JA3
tls.ja3s.hash network.tls.server.ja3s Hash impronta server JA3S
app_proto network.application_protocol Protocollo a livello di applicazione rilevato
flow.bytes_toserver network.sent_bytes Byte inviati dal client al server
flow.bytes_toclient network.received_bytes Byte inviati dal server al client
flow.pkts_toserver additional.fields Pacchetti inviati dal client al server
flow.pkts_toclient additional.fields Pacchetti inviati dal server al client
in_iface additional.fields Interfaccia di rete di input
community_id network.community_id Hash del flusso dell'ID community di rete

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.