Collecter les journaux F5 BIG-IP ASM

Compatible avec :

Ce document explique comment ingérer les journaux F5 BIG-IP Application Security Manager (ASM) dans Google Security Operations à l'aide de Bindplane. L'analyseur gère différents formats de journaux (syslog, CSV, CEF, etc.) et les normalise au format 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 disposer d'une instance Google Security Operations.
  • Assurez-vous d'utiliser Windows 2016 ou une version ultérieure, ou un hôte Linux avec systemd.
  • Si vous exécutez le programme derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès privilégié à F5 BIG-IP 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

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

  1. Accédez au fichier de configuration :

    1. 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.
    2. 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: '/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 la journalisation à distance sur F5 BIG-IP ASM

  1. Connectez-vous à l'UI Web de la console ASM.
  2. Accédez à Sécurité > Journaux d'événements > Profils de journalisation.
  3. Cliquez sur Créer.
  4. Fournissez les informations de configuration suivantes :

    • Nom du profil : saisissez un nom unique pour le profil.
    • Sélectionnez Sécurité des applications.
    • Dans l'onglet "Sécurité des applications", sélectionnez Avancé (si des configurations supplémentaires sont requises).
    • Destination de stockage : sélectionnez Stockage à distance.
    • Format de journalisation : sélectionnez Common Event Format (CEF).
    • Videz le stockage local.
    • Protocole : sélectionnez UDP ou TCP (selon la configuration de votre agent Bindplane).
    • Adresses du serveur : saisissez l'adresse IP de l'agent Bindplane.
    • Port : sélectionné par défaut 514. Mettez à jour le paramètre de port en fonction de la configuration de votre agent Bindplane.
    • Cliquez sur Ajouter.
    • Sélectionnez Journalisation des garanties.
    • Sélectionnez Signaler les anomalies détectées.
    • Facility : sélectionnez LOG_LOCAL6 (vous pouvez éventuellement sélectionner la catégorie de l'établissement du trafic enregistré. Les valeurs possibles sont comprises entre LOG_LOCAL0 et LOG_LOCAL7).
  5. Cliquez sur Terminé.

Associer un profil de journalisation à une stratégie de sécurité

  1. Cliquez sur Trafic local > Serveurs virtuels.
  2. Cliquez sur le nom du serveur virtuel utilisé par la stratégie de sécurité.
  3. Dans le menu Sécurité, sélectionnez Règles.
  4. Assurez-vous que le paramètre Règle de sécurité des applications est activé et que Règle est défini sur la règle de sécurité de votre choix.
  5. Assurez-vous que le paramètre Profil de journal est défini sur Activé.
  6. Dans la liste Disponible, sélectionnez le profil à utiliser pour la stratégie de sécurité, puis déplacez-le dans la liste Sélectionné.
  7. Cliquez sur Mettre à jour.

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.