Collecter les journaux FortiWeb WAF

Compatible avec :

Ce document explique comment collecter les journaux du pare-feu d'application Web (WAF, Web Application Firewall) FortiWeb à l'aide d'un transmetteur Google Security Operations.

Pour en savoir plus, consultez la présentation de l'ingestion de données dans Google Security Operations.

Une étiquette d'ingestion identifie l'analyseur qui normalise les données de journaux brutes au format UDM structuré. Les informations de ce document s'appliquent au parseur avec le libellé d'ingestion FORTINET_FORTIWEB.

Configurer les journaux FortiWeb WAF

Pour configurer le WAF FortiWeb afin d'envoyer des journaux à un transmetteur Google Security Operations, procédez comme suit :

Créer une règle syslog

  1. Connectez-vous à la console Fortinet FortiWeb.
  2. Dans la console Fortinet FortiWeb, sélectionnez Log & report > Log policy > Syslog policy.
  3. Cliquez sur Créer.
  4. Dans la fenêtre Nouvelle règle syslog qui s'affiche, procédez comme suit :

    • Dans le champ Nom de la règle, spécifiez le nom de la règle 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.
  5. Cliquez sur OK.

Activez les types syslog et le niveau de journalisation.

  1. Dans la console Fortinet FortiWeb, sélectionnez Log & report > Log config > Global log settings.
  2. 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, sélectionnez le niveau de gravité minimal des journaux à collecter.
    • Dans la liste Établissement, sélectionnez l'établissement de journaux.
  3. Cliquez sur Appliquer.

Créer un déclencheur

  1. Dans la console Fortinet FortiWeb, sélectionnez Log & report > Log policy > Trigger policy.
  2. Cliquez sur Créer.
  3. Dans la fenêtre Nouvelle règle de déclencheur qui s'affiche, procédez comme suit :

    • Dans le champ Nom de la règle, spécifiez le nom de la règle 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.
  4. Cliquez sur OK.

    Mettez à jour votre règle syslog avec le déclencheur que vous venez de créer pour vous assurer que tous les événements requis sont consignés dans le redirecteur syslog Google Security Operations.

Configurer le redirecteur Google Security Operations pour ingérer les journaux FortiWeb WAF

  1. Accédez à Paramètres SIEM > Transférateurs.
  2. Cliquez sur Ajouter un nouveau transfert.
  3. Dans le champ Nom du transitaire, saisissez un nom unique pour le transitaire.
  4. Cliquez sur Envoyer. Le redirecteur est ajouté et la fenêtre Ajouter une configuration de collecteur s'affiche.
  5. Dans le champ Nom du collecteur, saisissez un nom.
  6. Sélectionnez Pare-feu d'application Web Fortinet comme type de journal.
  7. Sélectionnez Syslog comme type de collecteur.
  8. 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.
    • Adresse : spécifiez l'adresse IP ou le nom d'hôte cible où réside le collecteur et où il écoute les données syslog.
    • Port : spécifiez le port cible sur lequel le collecteur réside et écoute les données syslog.
  9. Cliquez sur Envoyer.

Pour en savoir plus sur les répartiteurs Google Security Operations, consultez Gérer les configurations des répartiteurs dans l'interface utilisateur Google Security Operations.

Si vous rencontrez des problèmes lors de la création de redirecteurs, contactez l'assistance Google Security Operations.

Référence du mappage de champs

Ce parseur 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 extrait les champs, normalise les valeurs et les mappe aux champs UDM appropriés en fonction du format du journal.

Table de mappage UDM

Champ de journal Mappage UDM Logique
action additional.fields[].value.string_value La valeur est directement mappée.
action security_result.action_details Si action est défini sur "Autoriser" ou "Accepter", security_result.action_details est défini sur "ALLOW". Si action est défini sur "Denied", "deny", "block" ou "Block", security_result.action_details est défini sur "BLOCK".
app network.application_protocol La valeur est directement mise en correspondance 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 directement mappée.
backend_service additional.fields[].key La clé est définie sur "backend_service".
backend_service additional.fields[].value.string_value La valeur est directement mappée.
cat security_result.category_details La valeur est directement mappée.
client_level security_result.category Si client_level est défini sur "Malicious", security_result.category est défini sur "NETWORK_MALICIOUS".
cn1 additional.fields[].value.string_value Mappé au champ "threatWeight".
cn1Label additional.fields[].key La clé est définie sur la valeur cn1Label.
cn2 additional.fields[].value.string_value Mappé au champ de longueur.
cn2Label additional.fields[].key La clé est définie sur la valeur cn2Label.
cn3 additional.fields[].value.string_value Mappé au champ signatureID.
cn3Label additional.fields[].key La clé est définie sur la valeur cn3Label.
cs1 additional.fields[].value.string_value La valeur est directement mappée.
cs1Label additional.fields[].key La clé est définie sur la valeur cs1Label.
cs1 principal.user.product_object_id La valeur est directement mappée lorsque cs1Label correspond à "userID" (sans tenir compte de la casse).
cs2 additional.fields[].value.string_value La valeur est directement mappée.
cs2Label additional.fields[].key La clé est définie sur la valeur cs2Label.
cs2 principal.user.userid La valeur est directement mappée lorsque cs2Label correspond à "userName" (sans tenir compte de la casse) et que suid est vide.
cs3 additional.fields[].value.string_value La valeur est directement mappée.
cs3Label additional.fields[].key La clé est définie sur la valeur cs3Label.
cs3 metadata.severity La valeur est directement mappée lorsque cs3Label est défini sur "level" et que cs3 n'est pas vide.
cs4 additional.fields[].value.string_value Mappé au champ "subType".
cs4Label additional.fields[].key La clé est définie sur la valeur cs4Label.
cs5 additional.fields[].value.string_value Mappé au champ "threatLevel".
cs5Label additional.fields[].key La clé est définie sur la valeur cs5Label.
cs6 additional.fields[].value.string_value Mappé au champ "owaspTop10".
cs6Label additional.fields[].key La clé est définie sur la valeur cs6Label.
date metadata.event_timestamp.seconds Combiné à time et analysé pour générer des secondes epoch.
dev_id principal.resource.id La valeur est directement mappée.
devname principal.resource.name La valeur est directement mappée.
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 directement mappée.
dpt target.port La valeur est directement mappée et convertie en entier.
dst target.ip La valeur est directement mappée.
dst_port target.port La valeur est directement mappée et convertie en entier.
dstepid target.process.pid La valeur est directement mappée.
dsteuid target.user.userid La valeur est directement mappée.
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 directement mappée.
http_refer network.http.referral_url La valeur est directement mappée.
http_session_id network.session_id La valeur est directement mappée.
http_url target.url La valeur est directement mappée.
http_version metadata.product_version La valeur est directement mappée.
length additional.fields[].key La clé est définie sur "length".
length additional.fields[].value.string_value La valeur est directement mappée.
log_type metadata.log_type 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 directement mappée.
message Différents 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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
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 directement mappée.
monitor_status additional.fields[].key La clé est définie sur "monitor_status".
monitor_status additional.fields[].value.string_value La valeur est directement mappée.
msg metadata.description La valeur est directement mappée.
owasp_top10 additional.fields[].key La clé est définie sur "owaspTop10".
owasp_top10 additional.fields[].value.string_value La valeur est directement mappée.
principal_app principal.application La valeur est directement mappée.
principal_host principal.hostname La valeur est directement mappée.
proto network.ip_protocol La valeur est directement mise en correspondance après avoir été mise en majuscules.
request target.url La valeur est directement mappée.
requestMethod network.http.method La valeur est directement mappée.
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é à différentes valeurs de gravité UDM en fonction de la valeur du journal brut. 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 directement mappée.
service network.application_protocol La valeur est directement mise en correspondance après avoir été mise en majuscules.
service target.application La valeur est directement mappée après avoir été mise en majuscules si elle ne correspond pas à HTTPS, HTTP, DNS, DHCP ou SMB.
severity security_result.severity Si severity est vide et que cs3Label est défini sur "level", la valeur de cs3 est utilisée. Elles sont ensuite mappées à une valeur de gravité UDM (FAIBLE, ÉLEVÉE, etc.).
signature_id security_result.rule_id La valeur est directement mappée.
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 directement mappée.
src principal.ip La valeur est directement mappée.
src_country principal.location.country_or_region La valeur est directement mappée.
src_ip principal.ip La valeur est directement mappée.
src_port principal.port La valeur est directement mappée et convertie en entier.
srccountry principal.location.country_or_region La valeur est directement mappée.
sub_type additional.fields[].key La clé est définie sur "subType".
sub_type additional.fields[].value.string_value La valeur est directement mappée.
subtype target.resource.resource_subtype La valeur est directement mappée.
suid principal.user.userid La valeur est directement mappée.
threat_level additional.fields[].key La clé est définie sur "threatLevel".
threat_level additional.fields[].value.string_value La valeur est directement mappée.
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 directement mappée.
time metadata.event_timestamp.seconds Combiné à date et analysé pour générer des secondes epoch.
user_id principal.user.product_object_id La valeur est directement mappée.
user_name additional.fields[].key La clé est définie sur "userName".
user_name additional.fields[].value.string_value La valeur est directement mappée.
user_name principal.user.userid La valeur est directement mappée.
N/A metadata.event_type Définissez sur "NETWORK_CONNECTION" si principal.ip et target.ip sont tous les deux présents. Définissez sur "USER_UNCATEGORIZED" si principal.ip et principal.user sont présents. Définissez-le sur "STATUS_UPDATE" si seul principal.ip est présent. Sinon, définissez-le sur "GENERIC_EVENT".
N/A metadata.log_type Codé en dur sur "FORTINET_FORTIWEB".
N/A metadata.product_name Codé en dur sur "FORTINET FORTIWEB" ou "FortiWEB Cloud" en fonction du format du journal.
N/A metadata.vendor_name Codé en dur sur "FORTINET" ou "Fortinet" en fonction du format du journal.
N/A principal.resource.resource_type Codé en dur sur "DEVICE" si dev_id est présent.

Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.