Collecter les journaux du WAF FortiWeb
Ce document explique comment collecter les journaux du pare-feu d'application Web (WAF) FortiWeb à l'aide d'un transfert Google Security Operations.
Pour en savoir plus, consultez la section Présentation de l'ingestion de données dans Google Security Operations.
Un libellé d'ingestion identifie l'analyseur qui normalise les données de journal brutes au format UDM structuré. Les informations présentées dans ce document s'appliquent à l'analyseur avec le libellé d'ingestion FORTINET_FORTIWEB
.
Configurer les journaux du WAF FortiWeb
Pour configurer le WAF FortiWeb afin qu'il envoie des journaux à un transfert Google Security Operations, procédez comme suit:
- Créez une règle syslog.
- Activez les types de journaux syslog et le niveau de journalisation.
- Créez un déclencheur.
Créer une règle syslog
- Connectez-vous à la console Fortinet FortiWeb.
- Dans la console Fortinet FortiWeb, sélectionnez Journal et rapports > Règle de journalisation > Règle Syslog.
- Cliquez sur Créer.
Dans la fenêtre Nouvelle règle syslog qui s'affiche, procédez comme suit:
- Dans le champ Nom de la stratégie, spécifiez un nom pour la stratégie que vous souhaitez utiliser dans la configuration.
- Dans le champ Adresse IP, spécifiez l'adresse IP ou le nom d'hôte du serveur syslog distant.
- Dans le champ Port, spécifiez le port du serveur syslog.
- Décochez la case Activer le format CSV, si elle est cochée.
Cliquez sur OK.
Activer les types et le niveau de journalisation syslog
- Dans la console Fortinet FortiWeb, sélectionnez Log & report (Journal et rapports) > Log config (Configuration des journaux) > Global log settings (Paramètres des journaux globaux).
Dans la fenêtre Paramètres de journalisation globaux qui s'affiche, cochez la case Syslog, puis procédez comme suit:
- Dans la liste Règle Syslog, sélectionnez la règle Syslog que vous avez créée précédemment.
- Dans la liste Niveau de journalisation, choisissez le niveau de gravité minimal pour les journaux à collecter.
- Dans la liste Facility (Installation), sélectionnez l'installation de journalisation.
Cliquez sur Appliquer.
Créer un déclencheur
- Dans la console Fortinet FortiWeb, sélectionnez Journal et rapports > Règle de journalisation > Règle de déclenchement.
- Cliquez sur Créer.
Dans la fenêtre Nouvelle règle de déclencheur qui s'affiche, procédez comme suit:
- Dans le champ Nom de la stratégie, spécifiez un nom pour la stratégie que vous souhaitez utiliser dans la configuration.
- Dans la liste Règle Syslog, sélectionnez la règle Syslog que vous avez créée précédemment.
Cliquez sur OK.
Mettez à jour votre stratégie syslog avec le déclencheur nouvellement créé pour vous assurer que tous les événements requis sont consignés dans le transfert syslog de Google Security Operations.
Configurer le transfert Google Security Operations pour ingérer les journaux du WAF FortiWeb
- Accédez à Paramètres du SIEM > Transferts.
- Cliquez sur Ajouter un forwarder.
- Dans le champ Nom du transmettant, saisissez un nom unique pour le transmettant.
- Cliquez sur Envoyer. Le forwarder est ajouté, et la fenêtre Ajouter une configuration de collecteur s'affiche.
- Dans le champ Nom du collecteur, saisissez un nom.
- Sélectionnez Fortinet Web Application Firewall (Barrière de protection Web Fortinet) comme type de journal.
- Sélectionnez Syslog comme type de collecteur.
- Configurez les paramètres d'entrée obligatoires suivants :
- Protocole: spécifiez le protocole de connexion utilisé par le collecteur pour écouter les données syslog.
- Address (Adresse) : spécifiez l'adresse IP ou le nom d'hôte cible où le collecteur réside et écoute les données syslog.
- Port: spécifiez le port cible sur lequel se trouve le collecteur et qui écoute les données syslog.
- Cliquez sur Envoyer.
Pour en savoir plus sur les transferts Google Security Operations, consultez Gérer les configurations de transfert via l'interface utilisateur de Google Security Operations.
Si vous rencontrez des problèmes lors de la création de transmetteurs, contactez l'assistance Google Security Operations.
Référence de mappage de champ
Cet analyseur gère les journaux de FORTINET FORTIWEB au format clé-valeur (KV), en les transformant en UDM. Il traite les journaux au format CEF et non CEF, en extrayant les champs, en normalisant les valeurs et en les mappant sur les champs UDM appropriés en fonction du format de journal.
Tableau de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
action |
additional.fields[].value.string_value |
La valeur est mappée directement. |
action |
security_result.action_details |
Si action est défini sur "Allow" (Autoriser) ou "accept" (Accepter), security_result.action_details est défini sur "ALLOW". Si action est défini sur "Denied" (Refusé), "deny" (Refuser), "block" (Bloquer) ou "Block" (Bloquer), security_result.action_details est défini sur "BLOCK". |
app |
network.application_protocol |
La valeur est mappée directement après avoir été mise en majuscules. Uniquement si la valeur est HTTPS, HTTP, DNS, DHCP ou SMB. |
app_name |
additional.fields[].key |
La clé est définie sur "appName". |
app_name |
additional.fields[].value.string_value |
La valeur est mappée directement. |
backend_service |
additional.fields[].key |
La clé est définie sur "backend_service". |
backend_service |
additional.fields[].value.string_value |
La valeur est mappée directement. |
cat |
security_result.category_details |
La valeur est mappée directement. |
client_level |
security_result.category |
Si client_level est défini sur "Malicious" (Malveillant), security_result.category est défini sur "NETWORK_MALICIOUS". |
cn1 |
additional.fields[].value.string_value |
Mappé sur le champ threatWeight. |
cn1Label |
additional.fields[].key |
La clé est définie sur la valeur cn1Label. |
cn2 |
additional.fields[].value.string_value |
Mappé sur le champ "length". |
cn2Label |
additional.fields[].key |
La clé est définie sur la valeur cn2Label. |
cn3 |
additional.fields[].value.string_value |
Mappé sur le champ "signatureID". |
cn3Label |
additional.fields[].key |
La clé est définie sur la valeur cn3Label. |
cs1 |
additional.fields[].value.string_value |
La valeur est mappée directement. |
cs1Label |
additional.fields[].key |
La clé est définie sur la valeur cs1Label. |
cs1 |
principal.user.product_object_id |
La valeur est mappée directement lorsque cs1Label correspond à "userID" (sans distinction entre majuscules et minuscules). |
cs2 |
additional.fields[].value.string_value |
La valeur est mappée directement. |
cs2Label |
additional.fields[].key |
La clé est définie sur la valeur cs2Label. |
cs2 |
principal.user.userid |
La valeur est mappée directement lorsque cs2Label correspond à "userName" (sans distinction entre majuscules et minuscules) et que suid est vide. |
cs3 |
additional.fields[].value.string_value |
La valeur est mappée directement. |
cs3Label |
additional.fields[].key |
La clé est définie sur la valeur cs3Label. |
cs3 |
metadata.severity |
La valeur est mappée directement lorsque cs3Label est "niveau" et que cs3 n'est pas vide. |
cs4 |
additional.fields[].value.string_value |
Mappé sur le champ "subType". |
cs4Label |
additional.fields[].key |
La clé est définie sur la valeur cs4Label. |
cs5 |
additional.fields[].value.string_value |
Mappé sur le champ threatLevel. |
cs5Label |
additional.fields[].key |
La clé est définie sur la valeur cs5Label. |
cs6 |
additional.fields[].value.string_value |
Mappé sur le champ owaspTop10. |
cs6Label |
additional.fields[].key |
La clé est définie sur la valeur cs6Label. |
date |
metadata.event_timestamp.seconds |
Combiné avec time et analysé pour générer des secondes d'époque. |
dev_id |
principal.resource.id |
La valeur est mappée directement. |
devname |
principal.resource.name |
La valeur est mappée directement. |
device_event_class_id |
metadata.product_event_type |
Utilisé dans l'analyse CEF. |
device_product |
metadata.product_name |
Utilisé dans l'analyse CEF. |
device_vendor |
metadata.vendor_name |
Utilisé dans l'analyse CEF. |
device_version |
metadata.product_version |
Utilisé dans l'analyse CEF. |
dhost |
target.hostname |
La valeur est mappée directement. |
dpt |
target.port |
La valeur est mappée directement et convertie en entier. |
dst |
target.ip |
La valeur est mappée directement. |
dst_port |
target.port |
La valeur est mappée directement et convertie en entier. |
dstepid |
target.process.pid |
La valeur est mappée directement. |
dsteuid |
target.user.userid |
La valeur est mappée directement. |
event_name |
metadata.product_event_type |
Utilisé dans l'analyse CEF. |
http_agent |
network.http.parsed_user_agent |
La valeur est analysée en tant que chaîne user-agent. |
http_method |
network.http.method |
La valeur est mappée directement. |
http_refer |
network.http.referral_url |
La valeur est mappée directement. |
http_session_id |
network.session_id |
La valeur est mappée directement. |
http_url |
target.url |
La valeur est mappée directement. |
http_version |
metadata.product_version |
La valeur est mappée directement. |
length |
additional.fields[].key |
La clé est définie sur "length". |
length |
additional.fields[].value.string_value |
La valeur est mappée directement. |
log_type |
metadata.log_type |
Code codé en dur sur "FORTINET_FORTIWEB". |
main_type |
additional.fields[].key |
La clé est définie sur "mainType". |
main_type |
additional.fields[].value.string_value |
La valeur est mappée directement. |
message |
Divers champs | Analysé à l'aide des filtres grok et kv pour extraire différents champs. |
ml_allow_method |
additional.fields[].key |
La clé est définie sur "ml_allow_method". |
ml_allow_method |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_arg_dbid |
additional.fields[].key |
La clé est définie sur "ml_arg_dbid". |
ml_arg_dbid |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_domain_index |
additional.fields[].key |
La clé est définie sur "ml_domain_index". |
ml_domain_index |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_log_arglen |
additional.fields[].key |
La clé est définie sur "ml_log_arglen". |
ml_log_arglen |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_log_hmm_probability |
additional.fields[].key |
La clé est définie sur "ml_log_hmm_probability". |
ml_log_hmm_probability |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_log_sample_arglen_mean |
additional.fields[].key |
La clé est définie sur "ml_log_sample_arglen_mean". |
ml_log_sample_arglen_mean |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_log_sample_prob_mean |
additional.fields[].key |
La clé est définie sur "ml_log_sample_prob_mean". |
ml_log_sample_prob_mean |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_svm_accuracy |
additional.fields[].key |
La clé est définie sur "ml_svm_accuracy". |
ml_svm_accuracy |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_svm_log_main_types |
additional.fields[].key |
La clé est définie sur "ml_svm_log_main_types". |
ml_svm_log_main_types |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_svm_log_match_types |
additional.fields[].key |
La clé est définie sur "ml_svm_log_match_types". |
ml_svm_log_match_types |
additional.fields[].value.string_value |
La valeur est mappée directement. |
ml_url_dbid |
additional.fields[].key |
La clé est définie sur "ml_url_dbid". |
ml_url_dbid |
additional.fields[].value.string_value |
La valeur est mappée directement. |
monitor_status |
additional.fields[].key |
La clé est définie sur "monitor_status". |
monitor_status |
additional.fields[].value.string_value |
La valeur est mappée directement. |
msg |
metadata.description |
La valeur est mappée directement. |
owasp_top10 |
additional.fields[].key |
La clé est définie sur "owaspTop10". |
owasp_top10 |
additional.fields[].value.string_value |
La valeur est mappée directement. |
principal_app |
principal.application |
La valeur est mappée directement. |
principal_host |
principal.hostname |
La valeur est mappée directement. |
proto |
network.ip_protocol |
La valeur est mappée directement après avoir été mise en majuscules. |
request |
target.url |
La valeur est mappée directement. |
requestMethod |
network.http.method |
La valeur est mappée directement. |
rt |
metadata.event_timestamp.seconds |
Analysé en millisecondes depuis l'epoch et converti en secondes. |
security_result.severity |
security_result.severity |
Dérivé de severity_level . Mappé sur différentes valeurs de gravité UDM en fonction de la valeur brute du journal. La valeur par défaut est UNKNOWN_SEVERITY si aucune correspondance n'est trouvée. |
server_pool_name |
additional.fields[].key |
La clé est définie sur "server_pool_name". |
server_pool_name |
additional.fields[].value.string_value |
La valeur est mappée directement. |
service |
network.application_protocol |
La valeur est mappée directement après avoir été mise en majuscules. |
service |
target.application |
La valeur est mappée directement après avoir été mise en majuscule si elle ne correspond pas à HTTPS, HTTP, DNS, DHCP ou SMB. |
severity |
security_result.severity |
Si severity est vide et que cs3Label est "niveau", la valeur de cs3 est utilisée. Elles sont ensuite mappées à une valeur de gravité UDM (LOW, HIGH, etc.). |
signature_id |
security_result.rule_id |
La valeur est mappée directement. |
signature_subclass |
security_result.detection_fields[].key |
La clé est définie sur "signature_subclass". |
signature_subclass |
security_result.detection_fields[].value |
La valeur est mappée directement. |
src |
principal.ip |
La valeur est mappée directement. |
src_country |
principal.location.country_or_region |
La valeur est mappée directement. |
src_ip |
principal.ip |
La valeur est mappée directement. |
src_port |
principal.port |
La valeur est mappée directement et convertie en entier. |
srccountry |
principal.location.country_or_region |
La valeur est mappée directement. |
sub_type |
additional.fields[].key |
La clé est définie sur "subType". |
sub_type |
additional.fields[].value.string_value |
La valeur est mappée directement. |
subtype |
target.resource.resource_subtype |
La valeur est mappée directement. |
suid |
principal.user.userid |
La valeur est mappée directement. |
threat_level |
additional.fields[].key |
La clé est définie sur "threatLevel". |
threat_level |
additional.fields[].value.string_value |
La valeur est mappée directement. |
threat_weight |
security_result.detection_fields[].key |
La clé est définie sur "threat_weight". |
threat_weight |
security_result.detection_fields[].value |
La valeur est mappée directement. |
time |
metadata.event_timestamp.seconds |
Combiné avec date et analysé pour générer des secondes d'époque. |
user_id |
principal.user.product_object_id |
La valeur est mappée directement. |
user_name |
additional.fields[].key |
La clé est définie sur "userName". |
user_name |
additional.fields[].value.string_value |
La valeur est mappée directement. |
user_name |
principal.user.userid |
La valeur est mappée directement. |
N/A | metadata.event_type |
Définissez sur "NETWORK_CONNECTION" si principal.ip et target.ip sont tous deux présents. Définissez-le sur "USER_UNCATEGORIZED" si principal.ip et principal.user sont présents. Défini sur "STATUS_UPDATE" si seul principal.ip est présent. Sinon, définissez-le sur "GENERIC_EVENT". |
N/A | metadata.log_type |
Code codé en dur sur "FORTINET_FORTIWEB". |
N/A | metadata.product_name |
Code codé en dur sur "FORTINET FORTIWEB" ou "FortiWEB Cloud" en fonction du format de journal. |
N/A | metadata.vendor_name |
Code codé en dur sur "FORTINET" ou "Fortinet" en fonction du format de journal. |
N/A | principal.resource.resource_type |
Codé en dur sur "DEVICE" si dev_id est présent. |
Modifications
2024-01-09
- Ajout de la prise en charge des journaux au format CEF.
- Ajout d'un format Grok correspondant au nouveau format des journaux CEF.
- Mappage de "principal_hostnamne" sur "principal.hostname".
- Mappage de "principal.app" sur "principal.application".
2023-05-18
- Analyseur nouvellement créé.
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.