Raccogliere i log WAF di FortiWeb
Questo documento descrive come raccogliere i log del web application firewall (WAF) FortiWeb utilizzando un forwarder Google Security Operations.
Per saperne di più, consulta la Panoramica sull'importazione dei dati in Google Security Operations.
Un'etichetta di importazione identifica il parser che normalizza i dati di log non elaborati in formato UDM strutturato. Le informazioni contenute in questo documento si applicano al parser con l'etichetta di importazione
FORTINET_FORTIWEB
.
Configura i log WAF FortiWeb
Per configurare FortiWeb WAF in modo che invii i log a un forwarder Google Security Operations:
Crea una policy syslog
- Accedi alla console Fortinet FortiWeb.
- Nella console Fortinet FortiWeb, seleziona Log & report > Log policy (Criteri di log) > Syslog policy (Criteri Syslog).
- Fai clic su Crea nuova.
Nella finestra Nuova policy syslog visualizzata, procedi nel seguente modo:
- Nel campo Nome criterio, specifica un nome per il criterio che vuoi utilizzare nella configurazione.
- Nel campo Indirizzo IP, specifica l'indirizzo IP o il nome host del server syslog remoto.
- Nel campo Porta, specifica la porta per il server syslog.
- Deseleziona la casella di controllo Abilita formato CSV, se è selezionata.
Fai clic su OK.
Attiva i tipi di syslog e il livello di log
- Nella console Fortinet FortiWeb, seleziona Log & report > Log config > Global log settings.
Nella finestra Impostazioni log globali visualizzata, seleziona la casella di controllo Syslog e procedi nel seguente modo:
- Nell'elenco Policy Syslog, seleziona la policy Syslog creata in precedenza.
- Nell'elenco Livello log, scegli il livello di gravità minimo per i log da raccogliere.
- Nell'elenco Struttura, seleziona la struttura di log.
Fai clic su Applica.
Crea un trigger
- Nella console Fortinet FortiWeb, seleziona Log & report > Log policy > Trigger policy.
- Fai clic su Crea nuova.
Nella finestra Nuova policy di attivazione visualizzata, procedi nel seguente modo:
- Nel campo Nome criterio, specifica un nome per il criterio che vuoi utilizzare nella configurazione.
- Nell'elenco Policy Syslog, seleziona la policy Syslog creata in precedenza.
Fai clic su OK.
Aggiorna le norme syslog con il trigger appena creato per assicurarti che tutti gli eventi richiesti vengano registrati nel programma di inoltro syslog di Google Security Operations.
Configura il programma di inoltro di Google Security Operations per importare i log WAF di FortiWeb
- Vai a Impostazioni SIEM > Forwarder.
- Fai clic su Aggiungi nuovo inoltro.
- Nel campo Nome forwarder, inserisci un nome univoco per il forwarder.
- Fai clic su Invia. Il forwarder viene aggiunto e viene visualizzata la finestra Aggiungi configurazione del raccoglitore.
- Nel campo Nome del raccoglitore, digita un nome.
- Seleziona Fortinet Web Application Firewall come Tipo di log.
- Seleziona Syslog come Tipo di raccoglitore.
- Configura i seguenti parametri di input obbligatori:
- Protocollo: specifica il protocollo di connessione utilizzato dal raccoglitore per ascoltare i dati syslog.
- Indirizzo: specifica l'indirizzo IP o il nome host di destinazione in cui risiede il raccoglitore e ascolta i dati syslog.
- Porta: specifica la porta di destinazione in cui risiede e ascolta il raccoglitore i dati syslog.
- Fai clic su Invia.
Per ulteriori informazioni sui forwarder di Google Security Operations, consulta Gestire le configurazioni dei forwarder tramite la UI di Google Security Operations.
Se riscontri problemi durante la creazione degli inoltri, contatta l'assistenza Google Security Operations.
Riferimento alla mappatura dei campi
Questo parser gestisce i log di FORTINET FORTIWEB in formato chiave-valore (KV), trasformandoli in UDM. Elabora i log in formato CEF e non CEF, estraendo i campi, normalizzando i valori e mappandoli ai campi UDM appropriati in base al formato del log.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
action |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
action |
security_result.action_details |
Se action è "Consenti" o "Accetta", security_result.action_details è impostato su "ALLOW". Se action è "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. |
app_name |
additional.fields[].key |
La chiave è impostata su "appName". |
app_name |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
backend_service |
additional.fields[].key |
La chiave è impostata su "backend_service". |
backend_service |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
cat |
security_result.category_details |
Il valore viene 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 viene 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 viene 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 viene 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. |
date |
metadata.event_timestamp.seconds |
Combinato con time e analizzato per generare i secondi trascorsi da epoca. |
dev_id |
principal.resource.id |
Il valore viene mappato direttamente. |
devname |
principal.resource.name |
Il valore viene 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 viene mappato direttamente. |
dpt |
target.port |
Il valore viene mappato e convertito direttamente in un numero intero. |
dst |
target.ip |
Il valore viene mappato direttamente. |
dst_port |
target.port |
Il valore viene mappato e convertito direttamente in un numero intero. |
dstepid |
target.process.pid |
Il valore viene mappato direttamente. |
dsteuid |
target.user.userid |
Il valore viene 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 viene mappato direttamente. |
http_refer |
network.http.referral_url |
Il valore viene mappato direttamente. |
http_session_id |
network.session_id |
Il valore viene mappato direttamente. |
http_url |
target.url |
Il valore viene mappato direttamente. |
http_version |
metadata.product_version |
Il valore viene mappato direttamente. |
length |
additional.fields[].key |
La chiave è impostata su "length". |
length |
additional.fields[].value.string_value |
Il valore viene 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 viene mappato direttamente. |
message |
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 viene 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 viene 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 viene 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 viene 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 viene 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 viene 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 viene 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 viene 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 viene 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 viene 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 viene mappato direttamente. |
monitor_status |
additional.fields[].key |
La chiave è impostata su "monitor_status". |
monitor_status |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
msg |
metadata.description |
Il valore viene mappato direttamente. |
owasp_top10 |
additional.fields[].key |
La chiave è impostata su "owaspTop10". |
owasp_top10 |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
principal_app |
principal.application |
Il valore viene mappato direttamente. |
principal_host |
principal.hostname |
Il valore viene mappato direttamente. |
proto |
network.ip_protocol |
Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo. |
request |
target.url |
Il valore viene mappato direttamente. |
requestMethod |
network.http.method |
Il valore viene 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 diversi valori di gravità UDM 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 viene mappato direttamente. |
service |
network.application_protocol |
Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo. |
service |
target.application |
Il valore viene mappato direttamente dopo essere stato convertito in maiuscolo se non è HTTPS, HTTP, DNS, DHCP o SMB. |
severity |
security_result.severity |
Se severity è vuoto e cs3Label è "livello", viene utilizzato il valore di cs3 . Quindi, viene mappato a un valore di gravità UDM (LOW, HIGH e così via). |
signature_id |
security_result.rule_id |
Il valore viene mappato direttamente. |
signature_subclass |
security_result.detection_fields[].key |
La chiave è impostata su "signature_subclass". |
signature_subclass |
security_result.detection_fields[].value |
Il valore viene mappato direttamente. |
src |
principal.ip |
Il valore viene mappato direttamente. |
src_country |
principal.location.country_or_region |
Il valore viene mappato direttamente. |
src_ip |
principal.ip |
Il valore viene 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 viene mappato direttamente. |
sub_type |
additional.fields[].key |
La chiave è impostata su "subType". |
sub_type |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
subtype |
target.resource.resource_subtype |
Il valore viene mappato direttamente. |
suid |
principal.user.userid |
Il valore viene mappato direttamente. |
threat_level |
additional.fields[].key |
La chiave è impostata su "threatLevel". |
threat_level |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
threat_weight |
security_result.detection_fields[].key |
La chiave è impostata su "threat_weight". |
threat_weight |
security_result.detection_fields[].value |
Il valore viene mappato direttamente. |
time |
metadata.event_timestamp.seconds |
Combinato con date e analizzato per generare i secondi trascorsi da epoca. |
user_id |
principal.user.product_object_id |
Il valore viene mappato direttamente. |
user_name |
additional.fields[].key |
La chiave è impostata su "userName". |
user_name |
additional.fields[].value.string_value |
Il valore viene mappato direttamente. |
user_name |
principal.user.userid |
Il valore viene mappato direttamente. |
N/D | metadata.event_type |
Imposta "NETWORK_CONNECTION" se sono presenti sia principal.ip che target.ip . Imposta su "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.