Raccogliere i log di Fortinet FortiWeb

Supportato in:

Questo documento spiega come importare i log di Fortinet FortiWeb in Google Security Operations utilizzando Bindplane.

Il parser estrae i campi dai log formattati KV di Fortinet FortiWeb. Utilizza grok e/o kv per analizzare il messaggio di log e quindi 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 privilegiato all'interfaccia web di Fortinet FortiWeb

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: 'FORTINET_FORTIWEB'
            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 (FORTINET_FORTIWEB)

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"
        

Configurare l'inoltro di syslog di Fortinet FortiWeb

  1. Accedi all'interfaccia web di FortiWeb.
  2. Vai a Log e report > Configurazione log > Altre impostazioni log.
  3. In Syslog Policy, fai clic su Create New (Crea nuovo) per aggiungere una nuova norma syslog.
  4. Fornisci i seguenti dettagli di configurazione:
    • Nome della policy: inserisci un nome descrittivo (ad esempio Google-SecOps-Bindplane).
    • Indirizzo IP: inserisci l'indirizzo IP dell'host dell'agente Bindplane.
    • Porta: inserisci 514.
    • Attiva: seleziona Attiva.
    • Struttura: seleziona local0 (o la struttura che preferisci).
    • Livello log: seleziona Informazioni (o il livello che preferisci).
  5. Nella sezione Tipo di log, attiva le seguenti opzioni:
    • Log degli attacchi
    • Log eventi
    • Log del traffico
  6. Fai clic su Ok per salvare.
  7. Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
azione additional.fields[].value.string_value Il valore è mappato direttamente.
azione security_result.action_details Se l'azione è "Consenti" o "Accetta", security_result.action_details è impostato su "ALLOW". Se l'azione è "Denied", "deny", "block" o "Block", security_result.action_details è impostato su "BLOCK".
app network.application_protocol Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo. Solo se il valore è HTTPS, HTTP, DNS, DHCP o SMB.
nome_app additional.fields[].key La chiave è impostata su "appName".
nome_app additional.fields[].value.string_value Il valore è mappato direttamente.
backend_service additional.fields[].key La chiave è impostata su "backend_service".
backend_service additional.fields[].value.string_value Il valore è mappato direttamente.
gatto security_result.category_details Il valore è mappato direttamente.
client_level security_result.category Se client_level è "Malicious", security_result.category è impostato su "NETWORK_MALICIOUS".
cn1 additional.fields[].value.string_value Mappato al campo threatWeight.
cn1Label additional.fields[].key La chiave è impostata sul valore cn1Label.
cn2 additional.fields[].value.string_value Mappato al campo Lunghezza.
cn2Label additional.fields[].key La chiave è impostata sul valore cn2Label.
cn3 additional.fields[].value.string_value Mappato al campo signatureID.
cn3Label additional.fields[].key La chiave è impostata sul valore cn3Label.
cs1 additional.fields[].value.string_value Il valore è mappato direttamente.
cs1Label additional.fields[].key La chiave è impostata sul valore cs1Label.
cs1 principal.user.product_object_id Il valore viene mappato direttamente quando cs1Label corrisponde a "userID" (senza distinzione tra maiuscole e minuscole).
cs2 additional.fields[].value.string_value Il valore è mappato direttamente.
cs2Label additional.fields[].key La chiave è impostata sul valore cs2Label.
cs2 principal.user.userid Il valore viene mappato direttamente quando cs2Label corrisponde a "userName" (senza distinzione tra maiuscole e minuscole) e suid è vuoto.
cs3 additional.fields[].value.string_value Il valore è mappato direttamente.
cs3Label additional.fields[].key La chiave è impostata sul valore cs3Label.
cs3 metadata.severity Il valore viene mappato direttamente quando cs3Label è "level" e cs3 non è vuoto.
cs4 additional.fields[].value.string_value Mappato al campo subType.
cs4Label additional.fields[].key La chiave è impostata sul valore cs4Label.
cs5 additional.fields[].value.string_value Mappato al campo threatLevel.
cs5Label additional.fields[].key La chiave è impostata sul valore cs5Label.
cs6 additional.fields[].value.string_value Mappato al campo owaspTop10.
cs6Label additional.fields[].key La chiave è impostata sul valore cs6Label.
data metadata.event_timestamp.seconds Combinato con l'ora e analizzato per generare i secondi trascorsi dall'epoca.
dev_id principal.resource.id Il valore è mappato direttamente.
devname principal.resource.name Il valore è mappato direttamente.
device_event_class_id metadata.product_event_type Utilizzato nell'analisi CEF.
device_product metadata.product_name Utilizzato nell'analisi CEF.
device_vendor metadata.vendor_name Utilizzato nell'analisi CEF.
device_version metadata.product_version Utilizzato nell'analisi CEF.
dhost target.hostname Il valore è mappato direttamente.
dpt target.port Il valore viene mappato e convertito direttamente in un numero intero.
dst target.ip Il valore è mappato direttamente.
dst_port target.port Il valore viene mappato e convertito direttamente in un numero intero.
dstepid target.process.pid Il valore è mappato direttamente.
dsteuid target.user.userid Il valore è mappato direttamente.
event_name metadata.product_event_type Utilizzato nell'analisi CEF.
http_agent network.http.parsed_user_agent Il valore viene analizzato come una stringa user agent.
http_method network.http.method Il valore è mappato direttamente.
http_refer network.http.referral_url Il valore è mappato direttamente.
http_session_id network.session_id Il valore è mappato direttamente.
http_url target.url Il valore è mappato direttamente.
http_version metadata.product_version Il valore è mappato direttamente.
lunghezza additional.fields[].key La chiave è impostata su "length".
lunghezza additional.fields[].value.string_value Il valore è mappato direttamente.
log_type metadata.log_type Codificato come "FORTINET_FORTIWEB".
main_type additional.fields[].key La chiave è impostata su "mainType".
main_type additional.fields[].value.string_value Il valore è mappato direttamente.
messaggio Vari campi Analizzato utilizzando i filtri grok e kv per estrarre campi diversi.
ml_allow_method additional.fields[].key La chiave è impostata su "ml_allow_method".
ml_allow_method additional.fields[].value.string_value Il valore è mappato direttamente.
ml_arg_dbid additional.fields[].key La chiave è impostata su "ml_arg_dbid".
ml_arg_dbid additional.fields[].value.string_value Il valore è mappato direttamente.
ml_domain_index additional.fields[].key La chiave è impostata su "ml_domain_index".
ml_domain_index additional.fields[].value.string_value Il valore è mappato direttamente.
ml_log_arglen additional.fields[].key La chiave è impostata su "ml_log_arglen".
ml_log_arglen additional.fields[].value.string_value Il valore è mappato direttamente.
ml_log_hmm_probability additional.fields[].key La chiave è impostata su "ml_log_hmm_probability".
ml_log_hmm_probability additional.fields[].value.string_value Il valore è mappato direttamente.
ml_log_sample_arglen_mean additional.fields[].key La chiave è impostata su "ml_log_sample_arglen_mean".
ml_log_sample_arglen_mean additional.fields[].value.string_value Il valore è mappato direttamente.
ml_log_sample_prob_mean additional.fields[].key La chiave è impostata su "ml_log_sample_prob_mean".
ml_log_sample_prob_mean additional.fields[].value.string_value Il valore è mappato direttamente.
ml_svm_accuracy additional.fields[].key La chiave è impostata su "ml_svm_accuracy".
ml_svm_accuracy additional.fields[].value.string_value Il valore è mappato direttamente.
ml_svm_log_main_types additional.fields[].key La chiave è impostata su "ml_svm_log_main_types".
ml_svm_log_main_types additional.fields[].value.string_value Il valore è mappato direttamente.
ml_svm_log_match_types additional.fields[].key La chiave è impostata su "ml_svm_log_match_types".
ml_svm_log_match_types additional.fields[].value.string_value Il valore è mappato direttamente.
ml_url_dbid additional.fields[].key La chiave è impostata su "ml_url_dbid".
ml_url_dbid additional.fields[].value.string_value Il valore è mappato direttamente.
monitor_status additional.fields[].key La chiave è impostata su "monitor_status".
monitor_status additional.fields[].value.string_value Il valore è mappato direttamente.
msg metadata.description Il valore è mappato direttamente.
owasp_top10 additional.fields[].key La chiave è impostata su "owaspTop10".
owasp_top10 additional.fields[].value.string_value Il valore è mappato direttamente.
principal_app principal.application Il valore è mappato direttamente.
principal_host principal.hostname Il valore è mappato direttamente.
proto network.ip_protocol Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo.
richiesta target.url Il valore è mappato direttamente.
requestMethod network.http.method Il valore è mappato direttamente.
rt metadata.event_timestamp.seconds Analizzato come millisecondi trascorsi da epoca e convertito in secondi.
security_result.severity security_result.severity Derivato da severity_level. Mappato su valori di gravità UDM diversi in base al valore del log non elaborato. Se non viene trovata alcuna corrispondenza, il valore predefinito è UNKNOWN_SEVERITY.
server_pool_name additional.fields[].key La chiave è impostata su "server_pool_name".
server_pool_name additional.fields[].value.string_value Il valore è mappato direttamente.
servizio network.application_protocol Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo.
servizio target.application Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo se non è HTTPS, HTTP, DNS, DHCP o SMB.
gravità security_result.severity Se la gravità è vuota e cs3Label è "level", viene utilizzato il valore di cs3. Poi mappato a un valore di gravità UDM (LOW, HIGH e così via).
signature_id security_result.rule_id Il valore è mappato direttamente.
signature_subclass security_result.detection_fields[].key La chiave è impostata su "signature_subclass".
signature_subclass security_result.detection_fields[].value Il valore è mappato direttamente.
src principal.ip Il valore è mappato direttamente.
src_country principal.location.country_or_region Il valore è mappato direttamente.
src_ip principal.ip Il valore è mappato direttamente.
src_port principal.port Il valore viene mappato e convertito direttamente in un numero intero.
srccountry principal.location.country_or_region Il valore è mappato direttamente.
sub_type additional.fields[].key La chiave è impostata su "subType".
sub_type additional.fields[].value.string_value Il valore è mappato direttamente.
sottotipo target.resource.resource_subtype Il valore è mappato direttamente.
suid principal.user.userid Il valore è mappato direttamente.
threat_level additional.fields[].key La chiave è impostata su "threatLevel".
threat_level additional.fields[].value.string_value Il valore è mappato direttamente.
threat_weight security_result.detection_fields[].key La chiave è impostata su "threat_weight".
threat_weight security_result.detection_fields[].value Il valore è mappato direttamente.
tempo metadata.event_timestamp.seconds Combinato con la data e analizzato per generare i secondi trascorsi da epoca.
user_id principal.user.product_object_id Il valore è mappato direttamente.
user_name additional.fields[].key La chiave è impostata su "userName".
user_name additional.fields[].value.string_value Il valore è mappato direttamente.
user_name principal.user.userid Il valore è mappato direttamente.
N/D metadata.event_type Imposta su "NETWORK_CONNECTION" se sono presenti sia principal.ip sia target.ip. Imposta "USER_UNCATEGORIZED" se sono presenti principal.ip e principal.user. Impostato su "STATUS_UPDATE" se è presente solo principal.ip. In caso contrario, imposta "GENERIC_EVENT".
N/D metadata.log_type Codificato come "FORTINET_FORTIWEB".
N/D metadata.product_name Codificato in modo permanente su "FORTINET FORTIWEB" o "FortiWEB Cloud" in base al formato del log.
N/D metadata.vendor_name Codificato in modo permanente su "FORTINET" o "Fortinet" in base al formato del log.
N/D principal.resource.resource_type Codificato come "DEVICE" se è presente dev_id.

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