Collecter les journaux F5 ASM

Compatible avec :

Ce document explique comment ingérer les journaux F5 Application Security Manager (ASM) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère différents formats de journaux F5 ASM (tels que syslog, CSV, CEF et Splunk) et les normalise dans l'Unified Data Model (UDM). Il utilise des modèles grok et des extractions de paires clé/valeur pour analyser les champs, le filtrage XML pour les détails sur les cas de non-respect, la logique conditionnelle pour la catégorisation des événements et le mappage de la gravité, et fusionne les champs extraits dans le schéma UDM.

Avant de commencer

Assurez-vous de remplir les conditions suivantes :

  • Instance Google SecOps
  • Windows 2016 ou version ultérieure, ou un hôte Linux avec systemd
  • Si vous exécutez le programme derrière un proxy, les ports du pare-feu sont ouverts.
  • Accès privilégié à F5 ASM

Obtenir le fichier d'authentification d'ingestion Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Agents de collecte.
  3. Téléchargez le fichier d'authentification d'ingestion. Enregistrez le fichier de manière sécurisée sur le système sur lequel Bindplane sera installé.

Obtenir l'ID client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres SIEM> Profil.
  3. Copiez et enregistrez le numéro client de la section Informations sur l'organisation.

Installer l'agent Bindplane

Installation de fenêtres

  1. Ouvrez l'invite de commandes ou PowerShell en tant qu'administrateur.
  2. Exécutez la commande suivante :

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Installation de Linux

  1. Ouvrez un terminal avec les droits root ou sudo.
  2. Exécutez la commande suivante :

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Ressources d'installation supplémentaires

Pour plus d'options d'installation, consultez le guide d'installation.

Configurer l'agent Bindplane pour ingérer Syslog et l'envoyer à Google SecOps

  1. Accédez au fichier de configuration :
    • Recherchez le fichier config.yaml. En règle générale, il se trouve dans le répertoire /etc/bindplane-agent/ sous Linux ou dans le répertoire d'installation sous Windows.
    • Ouvrez le fichier à l'aide d'un éditeur de texte (par exemple, nano, vi ou le Bloc-notes).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        udplog:
            # Replace the port and IP address as required
            listen_address: `0.0.0.0:514`
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the path to the credentials file you downloaded in Step 1
            creds_file_path: '/path/to/ingestion-authentication-file.json'
            # Replace with your actual customer ID from Step 2
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # Add optional ingestion labels for better organization
            ingestion_labels:
                log_type: 'F5_ASM'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.

  4. Remplacez <customer_id> par le numéro client réel.

  5. Mettez à jour /path/to/ingestion-authentication-file.json en indiquant le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification pour l'ingestion Google SecOps.

Redémarrez l'agent Bindplane pour appliquer les modifications.

  • Pour redémarrer l'agent Bindplane sous Linux, exécutez la commande suivante :

    sudo systemctl restart bindplane-agent
    
  • Pour redémarrer l'agent Bindplane sous Windows, vous pouvez utiliser la console Services ou saisir la commande suivante :

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurer Syslog dans F5 ASM

  1. Connectez-vous à l'instance tmsh en saisissant la commande suivante :

    tmsh
    
  2. Modifiez la configuration syslog à l'aide de la commande suivante :

    edit /sys syslog all-properties
    
  3. La configuration Syslog s'ouvre dans l'éditeur de texte vi et ressemble à l'exemple suivant :

    modify syslog {
              auth-priv-from notice
              auth-priv-to emerg
              cron-from warning
              cron-to emerg
              daemon-from notice
              daemon-to emerg
              description none
              include none
              iso-date disabled
              kern-from notice
              kern-to emerg
              mail-from notice
              mail-to emerg
              messages-from notice
              messages-to warning
              remote-servers none
              user-log-from notice
              user-log-to emerg
          }
    
  4. Remplacez la ligne include none par le filtre syslog suivant :

        include `
              filter f_audit{
                  match(AUDIT);
              };
              destination d_syslog_server {
                      udp(\`<bindplane-ip>\` port (<bindplane-port>));
              };
              log {
                      source(s_syslog_pipe);
                          filter(f_audit);
                          destination(d_syslog_server);
              };
              `
    
  5. Remplacez <bindplane-ip> et <bindplane-port> par l'adresse IP et le numéro de port réels configurés pour votre agent Bindplane.

  6. Quittez vi en saisissant la séquence de touches suivante :

    :wq!
    
  7. À l'invite suivante, saisissez y pour enregistrer les modifications apportées au fichier :

    Save changes? (y/n/e)
    
  8. Enregistrez la configuration en saisissant la commande suivante :

    save /sys config
    

Table de mappage UDM

Champ de journal Mappage UDM Logique
act security_result.action Si act est blocked, correspond à BLOCK. Si act est passed ou legal, la valeur est définie sur ALLOW. Si act contient alerted, il est mappé sur QUARANTAINE. Sinon, la valeur par défaut est ALLOW pour le format Splunk.
app network.application_protocol Correspond directement à HTTPS s'il est présent dans le journal brut.
attack_type security_result.category_details, metadata.description Utilisé conjointement avec d'autres champs pour déterminer security_result.category. Si aucune autre description n'est disponible, elle devient la description de l'événement. Pour les journaux au format Splunk, il est utilisé pour déterminer la catégorie et le récapitulatif si violations est vide.
client_ip principal.ip, principal.asset.ip Mappé directement à l'adresse IP principale.
cn1 network.http.response_code Correspond directement au code de réponse HTTP.
cn2 security_result.severity_details Mappe directement les détails de gravité des résultats de sécurité. Utilisé avec response_code pour déterminer si un événement est une alerte.
column1 principal.ip, principal.asset.ip Correspond à l'adresse IP principale pour certains journaux au format CSV.
column2 target.port Mappe le port cible pour certains journaux au format CSV.
column3 target.ip, target.asset.ip Mappe l'adresse IP cible pour certains journaux au format CSV.
column4 security_result.severity Correspond à la gravité des résultats de sécurité pour certains journaux au format CSV. Les valeurs Information, Informational, 0 et 4 correspondent à INFORMATIONAL. Warning, 1 et 3 correspondent à "MOYEN". Error et 2 correspondent à "ERROR". Critical, CRITICAL et critical correspondent à CRITIQUE.
column7 security_result.detection_fields, network.http.response_code Contient des données XML. viol_name dans request-violations est extrait et ajouté en tant que champs de détection avec la clé Request Violation Name_index. viol_name dans response_violations est extrait et ajouté en tant que champs de détection avec la clé Response Violation Name_index. response_code dans response_violations correspond à network.http.response_code.
column8 security_result.rule_name Correspond au nom de la règle de résultat de sécurité pour certains journaux au format CSV.
cs1 security_result.rule_name Correspond directement au nom de la règle du résultat de sécurité.
cs2 security_result.summary Mappé directement au récapitulatif des résultats de sécurité.
cs5 principal.ip, principal.asset.ip, additional.fields Si cs5 contient une URL LDAP JNDI, elle est ajoutée en tant que champ supplémentaire avec la clé JNDI_LDAP_URL. Sinon, s'il contient des adresses IP séparées par des virgules, toute adresse IP différente de principal_ip est ajoutée en tant qu'adresse IP principale supplémentaire.
cs6 principal.location.country_or_region Correspond directement au pays ou à la région de l'adresse principale.
data network.session_id, network.sent_bytes, network.tls.version Si elle est présente, elle est analysée au format JSON pour extraire sessionid, bits (mappé à sent_bytes) et version.
date_time metadata.event_timestamp Correspond directement au code temporel de l'événement après l'analyse et la conversion au format approprié.
dest_ip target.ip, target.asset.ip Mappé directement à l'adresse IP cible.
dest_port target.port Mappé directement au port cible.
dhost target.hostname Mappé directement au nom d'hôte cible.
dpt target.port Mappé directement au port cible.
dst target.ip Mappé directement à l'adresse IP cible.
dvc intermediary.ip Mappé directement à l'adresse IP intermédiaire.
dvchost target.hostname, intermediary.hostname Mappe directement le nom d'hôte cible et le nom d'hôte intermédiaire.
errdefs_msgno additional.fields Ajouté en tant que champ supplémentaire avec la clé errdefs_msgno.
externalId additional.fields Ajouté en tant que champ supplémentaire avec la clé Support_Id.
f5_host target.hostname, intermediary.hostname Mappe directement le nom d'hôte cible et le nom d'hôte intermédiaire.
geo_info principal.location.country_or_region, security_result.detection_fields Correspond au pays ou à la région de l'établissement principal. Également ajouté en tant que champ de détection avec la clé geo_info.
host target.hostname Mappé directement au nom d'hôte cible.
ids additional.fields Analysé comme une liste d'ID d'assistance séparés par une virgule. Chaque ID est ajouté à un champ supplémentaire à valeur de liste avec la clé supportid.
ip_addr_intelli security_result.detection_fields Ajouté en tant que champ de détection avec la clé ip_addr_intelli.
ip_client principal.ip Mappé directement à l'adresse IP principale.
ip_route_domain principal.ip, principal.asset.ip La partie IP est extraite et mappée à l'adresse IP principale.
irule security_result.rule_name Correspond directement au nom de la règle du résultat de sécurité.
irule-version security_result.rule_version Correspond directement à la version de la règle de résultat de sécurité.
level security_result.severity, security_result.severity_details Permet de déterminer la gravité du résultat de sécurité. error ou warning correspondent à "HIGH". notice correspond à "MOYENNE". information ou info correspond à "BASSE". La valeur brute est également mappée sur severity_details.
logtime metadata.event_timestamp Mappe directement le code temporel de l'événement après l'analyse.
management_ip_address, management_ip_address_2 intermediary.ip Mappé directement à l'adresse IP intermédiaire.
method network.http.method Mappé directement à la méthode HTTP.
msg security_result.summary, metadata.description Correspond directement au récapitulatif des résultats de sécurité pour certains formats de journaux. Si aucune autre description n'est disponible, elle devient la description de l'événement.
policy_name security_result.about.resource.name, security_result.rule_name Correspond directement au nom de ressource ou au nom de règle du résultat de sécurité.
process target.application Mappé directement à l'application cible.
process_id principal.process.pid Mappe directement l'ID de processus principal.
protocol network.application_protocol, network.ip_protocol, app_protocol Mappé directement au protocole d'application ou au protocole IP, selon le format du journal.
proxy_id security_result.rule_id Correspond directement à l'ID de règle du résultat de sécurité.
query_string additional.fields Ajouté en tant que champ supplémentaire avec la clé query_string.
referrer network.http.referral_url Correspond directement à l'URL de provenance HTTP.
req_method network.http.method Mappé directement à la méthode HTTP.
req_status security_result.action, security_result.action_details, security_result.detection_fields Si la valeur est blocked, mappe security_result.action sur BLOCK. Si passed ou legal, la valeur est définie sur ALLOW. Si la valeur contient alerted, elle est mappée sur QUARANTAINE. La valeur brute est également mappée sur action_details et ajoutée en tant que champ de détection avec la clé req_status.
request target.url Mappé directement à l'URL cible.
requestMethod network.http.method Mappé directement à la méthode HTTP.
resp security_result.detection_fields Ajouté en tant que champ de détection avec la clé resp.
resp_code network.http.response_code Correspond directement au code de réponse HTTP.
response security_result.summary Mappé directement au récapitulatif des résultats de sécurité.
response_code network.http.response_code Correspond directement au code de réponse HTTP.
route_domain additional.fields Ajouté en tant que champ supplémentaire avec la clé route_domain.
rt metadata.event_timestamp Mappe directement le code temporel de l'événement après l'analyse.
sev security_result.severity, security_result.severity_details Permet de déterminer la gravité du résultat de sécurité. ERROR correspond à ERROR. La valeur brute est également mappée sur severity_details.
severity security_result.severity, security_result.severity_details Permet de déterminer la gravité du résultat de sécurité. Informational correspond à "FAIBLE", Error ou warning correspondent à "ÉLEVÉE", critical correspond à "CRITIQUE", notice correspond à "MOYENNE", information ou info correspondent à "FAIBLE". La valeur brute est également mappée sur severity_details.
sig_ids security_result.rule_id Correspond directement à l'ID de règle du résultat de sécurité.
sig_names security_result.rule_name Correspond directement au nom de la règle du résultat de sécurité.
snat_ip principal.nat_ip Mappé directement à l'adresse IP NAT principale.
snat_port principal.nat_port Mappe directement le port NAT principal.
src principal.ip, principal.asset.ip Mappé directement à l'adresse IP principale.
spt principal.port Mappé directement au port principal.
sub_violates security_result.about.resource.attribute.labels Ajouté en tant que libellé avec la clé Sub Violations aux attributs de ressources de résultats de sécurité.
sub_violations security_result.about.resource.attribute.labels Ajouté en tant que libellé avec la clé Sub Violations aux attributs de ressources de résultats de sécurité.
summary security_result.summary Mappé directement au récapitulatif des résultats de sécurité.
support_id metadata.product_log_id Préfixé par support_id - et associé à l'ID du journal des produits.
suid network.session_id Mappé directement à l'ID de session réseau.
suser principal.user.userid Mappé directement sur l'ID utilisateur principal.
timestamp metadata.event_timestamp Correspond directement au code temporel de l'événement après l'analyse et la conversion au format approprié.
unit_host principal.hostname, principal.asset.hostname Mappé directement au nom d'hôte principal.
uri principal.url Mappé directement à l'URL principale.
user_id principal.user.userid Mappé directement sur l'ID utilisateur principal.
user_name principal.user.user_display_name Correspond directement au nom à afficher de l'utilisateur principal.
username principal.user.userid Mappé directement sur l'ID utilisateur principal.
useragent network.http.user_agent, network.http.parsed_user_agent Correspond directement à l'user-agent HTTP. Également analysé et mappé à l'user-agent analysé.
virtualserver network.tls.client.server_name Correspond directement au nom du serveur client TLS.
violate_details security_result.detection_fields, network.http.response_code Contient des données XML. viol_name dans request-violations est extrait et ajouté en tant que champs de détection avec la clé Request Violation Name_index. viol_name dans response_violations est extrait et ajouté en tant que champs de détection avec la clé Response Violation Name_index. response_code dans response_violations correspond à network.http.response_code.
violate_rate security_result.detection_fields Ajouté en tant que champ de détection avec la clé violate_rate.
violation_rating security_result.about.resource.attribute.labels Ajouté en tant que libellé avec la clé Violations Rating aux attributs de ressources de résultats de sécurité.
violations security_result.description Correspond directement à la description du résultat de sécurité. Pour les journaux au format Splunk, il est utilisé pour déterminer le récapitulatif, le cas échéant.
virus_name security_result.threat_name Mappe directement le nom de la menace du résultat de sécurité.
vs_name network.tls.client.server_name Correspond directement au nom du serveur client TLS.
websocket_direction network.direction Si la valeur est clientToServer, elle est mappée sur INBOUND. Si la valeur est ServerToclient, elle correspond à OUTBOUND.
websocket_message_type security_result.detection_fields Ajouté en tant que champ de détection avec la clé WebsocketMessageType.
x_fwd_hdr_val principal.ip, principal.asset.ip Mappé directement à l'adresse IP principale.

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