Collecter les journaux du gestionnaire VMware NSX (Network and Security Virtualization)

Compatible avec:

Ce document explique comment collecter les journaux du gestionnaire VMware NSX (Networking and Security Virtualization). L'analyseur extrait les champs à l'aide de différents modèles Grok en fonction du format du message. Il effectue ensuite une analyse par clé-valeur, une analyse JSON et une logique conditionnelle pour mapper les champs extraits sur l'UDM, gérer différents formats de journaux et enrichir les données avec un contexte supplémentaire.

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 l'application derrière un proxy, assurez-vous que les ports du pare-feu sont ouverts.
  • Assurez-vous de disposer d'un accès administrateur à VMWare NSX.

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 le numéro client Google SecOps

  1. Connectez-vous à la console Google SecOps.
  2. Accédez à Paramètres du SIEM > Profil.
  3. Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.

Installer l'agent BindPlane

Installation de Windows

  1. Ouvrez l'invite de commande 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 des 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
    

Autres ressources 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 (nano, vi ou Bloc-notes, par exemple).
  2. Modifiez le fichier config.yaml comme suit :

    receivers:
        udplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: vmware_nsx
            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 dans votre infrastructure si nécessaire.

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

  5. Remplacez /path/to/ingestion-authentication-file.json par le chemin d'accès où le fichier d'authentification a été enregistré dans la section Obtenir le fichier d'authentification d'ingestion Google SecOps.

Redémarrez l'agent BindPlane pour appliquer les modifications

  • Sous Linux, pour redémarrer l'agent BindPlane, exécutez la commande suivante:

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

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configuration syslog pour NSX Edge

  1. Connectez-vous au client Web vSphere.
  2. Accédez à Networking & Security > NSX Edges (Mise en réseau et sécurité > NSX Edges).
  3. Sélectionnez l'instance NSX Edge spécifique que vous souhaitez configurer.
  4. Accédez à Syslog Settings (Paramètres Syslog) :
    1. Pour NSX 6.4.4 et versions ultérieures :
      • Accédez à Gérer > Paramètres > Paramètres de l'appareil.
      • Cliquez sur Settings > Change Syslog Configuration (Paramètres > Modifier la configuration Syslog).
    2. Pour NSX 6.4.3 et versions antérieures :
      • Accédez à Gérer > Paramètres > Configuration.
      • Dans la boîte de dialogue Détails, cliquez sur Modifier.
  5. Configurez les détails du serveur Syslog :
    • Serveur: saisissez l'adresse IP ou le nom d'hôte du serveur Syslog (Bindplane).
    • Protocole: sélectionnez UDP ou TCP (selon la configuration de votre serveur syslog/Bindplane).
    • Port: saisissez le numéro de port (selon la configuration de votre serveur syslog/Bindplane).
  6. Cliquez sur OK pour enregistrer les paramètres.

Configuration Syslog pour NSX Manager

  1. Connectez-vous à l'interface Web NSX Manager avec des identifiants d'administrateur comme suit :
    • https://<NSX-Manager-IP> ou https://<NSX-Manager-Hostname>.
  2. Accédez à Gérer les paramètres de l'appareil > Général.
  3. Cliquez sur Modifier pour configurer les paramètres du serveur Syslog.
  4. Saisissez les informations du serveur Syslog :
    • Serveur: saisissez l'adresse IP ou le nom d'hôte du serveur Syslog (Bindplane).
    • Protocole: sélectionnez UDP ou TCP (selon la configuration de votre serveur syslog/Bindplane).
    • Port: saisissez le numéro de port (selon la configuration de votre serveur syslog/Bindplane).
  5. Cliquez sur OK pour enregistrer les paramètres.

Configuration Syslog pour NSX Controller

  1. Connectez-vous au client Web vSphere.
  2. Accédez à Networking & Security > Installation and Upgrade > Management > NSX Controller Nodes (Mise en réseau et sécurité > Installation et mise à niveau > Gestion > Nœuds de contrôleur NSX).
  3. Sélectionnez le NSX Manager qui gère les nœuds de contrôleur.
  4. Cliquez sur Modifier les attributs de contrôleur courants.
  5. Dans la boîte de dialogue Syslog Servers (Serveurs Syslog), cliquez sur Add (Ajouter) :
    1. Saisissez le nom ou l'adresse IP du serveur Syslog.
    2. Sélectionnez le protocole UDP (en fonction de la configuration de votre serveur syslog/Bindplane).
    3. Définissez le niveau de journalisation (par exemple, INFO).
  6. Cliquez sur OK pour enregistrer les paramètres.

Tableau de mappage UDM

Champ de journal Mappage UDM Logique
DST event.idm.read_only_udm.target.ip L'adresse IP de destination est extraite du champ DST dans le journal brut.
ID event.idm.read_only_udm.metadata.product_log_id L'ID de journal du produit est extrait du champ ID du journal brut.
MAC event.idm.read_only_udm.principal.mac L'adresse MAC est extraite du champ MAC dans le journal brut.
ModuleName event.idm.read_only_udm.metadata.product_event_type Le type d'événement produit est extrait du champ ModuleName dans le journal brut.
Operation event.idm.read_only_udm.principal.resource.attribute.labels.value L'opération est extraite du champ Operation dans le journal brut et ajoutée en tant que libellé avec la clé "Operation" (Opération).
PROTO event.idm.read_only_udm.network.ip_protocol Le protocole IP est extrait du champ PROTO dans le journal brut.
RES event.idm.read_only_udm.target.resource.name Le nom de la ressource cible est extrait du champ RES dans le journal brut.
SRC event.idm.read_only_udm.principal.ip L'adresse IP source est extraite du champ SRC dans le journal brut.
SPT event.idm.read_only_udm.principal.port Le port source est extrait du champ SPT dans le journal brut.
UserName event.idm.read_only_udm.principal.user.userid L'ID utilisateur est extrait du champ UserName dans le journal brut.
app_type event.idm.read_only_udm.principal.application L'application principale est extraite du champ app_type dans le journal brut.
application event.idm.read_only_udm.target.application L'application cible est extraite du champ application dans le journal brut.
audit event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur d'audit est extraite du champ audit du journal brut et ajoutée en tant que libellé avec la clé "audit".
cancelTimeUTC event.idm.read_only_udm.principal.resource.attribute.last_update_time L'heure de la dernière mise à jour est dérivée du champ cancelTimeUTC dans le journal brut.
client event.idm.read_only_udm.principal.ip ou event.idm.read_only_udm.principal.administrative_domain Si le champ client est une adresse IP, il est mappé sur l'adresse IP principale. Sinon, il est mappé sur le domaine administratif principal.
comp event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur du composant est extraite du champ comp du journal brut et ajoutée en tant que libellé avec la clé "Comp".
datetime event.idm.read_only_udm.metadata.event_timestamp Le code temporel de l'événement est extrait du champ datetime dans le journal brut.
description event.idm.read_only_udm.metadata.description La description est extraite du champ description dans le journal brut.
details event.idm.read_only_udm.principal.resource.attribute.labels Les détails sont extraits du champ details du journal brut et ajoutés en tant que libellés.
direction event.idm.read_only_udm.network.direction Si le champ direction est "OUT", il est mappé sur "OUTBOUND".
dst_ip event.idm.read_only_udm.target.ip L'adresse IP de destination est extraite du champ dst_ip dans le journal brut.
DPT event.idm.read_only_udm.target.port Le port de destination est extrait du champ DPT dans le journal brut.
errorCode event.idm.read_only_udm.security_result.detection_fields Le code d'erreur est extrait du champ errorCode dans le journal brut et ajouté en tant que champ de détection.
eventType event.idm.read_only_udm.metadata.product_event_type Le type d'événement produit est extrait du champ eventType dans le journal brut.
filepath event.idm.read_only_udm.principal.process.file.full_path Le chemin d'accès au fichier est extrait du champ filepath du journal brut.
hostname event.idm.read_only_udm.principal.ip Le nom d'hôte est extrait du champ hostname dans le journal brut et, s'il s'agit d'une adresse IP, il est mappé sur l'adresse IP principale.
kv_data Divers champs UDM Les paires clé-valeur de kv_data sont mappées sur différents champs UDM en fonction de leurs clés.
kv_data1 Divers champs UDM Les paires clé-valeur de kv_data1 sont mappées sur différents champs UDM en fonction de leurs clés.
kv_data2 Divers champs UDM Les paires clé-valeur de kv_data2 sont mappées sur différents champs UDM en fonction de leurs clés.
kv_data3 Divers champs UDM Les paires clé-valeur de kv_data3 sont mappées sur différents champs UDM en fonction de leurs clés.
kv_data4 Divers champs UDM Les paires clé-valeur de kv_data4 sont mappées sur différents champs UDM en fonction de leurs clés.
level event.idm.read_only_udm.security_result.severity Si le champ level est "INFO", il est mappé sur "INFORMATIONAL". Si la valeur est "ERROR", elle est mappée sur "ERROR".
managedExternally event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur managedExternally est extraite du champ managedExternally du journal brut et ajoutée en tant que libellé avec la clé "managedExternally".
message Divers champs UDM Le champ de message est analysé pour extraire divers champs UDM.
message_data event.idm.read_only_udm.principal.resource.attribute.labels.value Les données du message sont extraites du champ message_data dans le journal brut et ajoutées en tant que libellé avec la clé "message".
network_status event.idm.read_only_udm.additional.fields L'état du réseau est extrait du champ network_status du journal brut et ajouté en tant que champ supplémentaire avec la clé "Network_Connection_Status".
new_value Divers champs event.idm.read_only_udm.target La nouvelle valeur est extraite du champ new_value dans le journal brut et utilisée pour renseigner divers champs cibles.
node event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur du nœud est extraite du champ node dans le journal brut et ajoutée en tant que libellé avec la clé "node".
old_value Divers champs UDM L'ancienne valeur est extraite du champ old_value du journal brut et utilisée pour renseigner divers champs UDM.
payload Divers champs UDM La charge utile est extraite du champ payload dans le journal brut et utilisée pour renseigner différents champs UDM.
pid event.idm.read_only_udm.target.process.pid L'ID du processus est extrait du champ pid dans le journal brut.
reqId event.idm.read_only_udm.metadata.product_log_id L'ID de journal du produit est extrait du champ reqId du journal brut.
resourceId event.idm.read_only_udm.principal.resource.product_object_id L'ID de l'objet produit est extrait du champ resourceId dans le journal brut.
s2comp event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur s2comp est extraite du champ s2comp du journal brut et ajoutée en tant que libellé avec la clé "s2comp".
ses event.idm.read_only_udm.network.session_id L'ID de session est extrait du champ ses dans le journal brut.
src_host event.idm.read_only_udm.principal.hostname Le nom d'hôte principal est extrait du champ src_host dans le journal brut.
src_ip event.idm.read_only_udm.principal.ip L'adresse IP source est extraite du champ src_ip dans le journal brut.
src_ip1 event.idm.read_only_udm.principal.ip L'adresse IP source est extraite du champ src_ip1 dans le journal brut.
src_port event.idm.read_only_udm.principal.port Le port source est extrait du champ src_port dans le journal brut.
startTimeUTC event.idm.read_only_udm.principal.resource.attribute.creation_time L'heure de création est dérivée du champ startTimeUTC du journal brut.
subcomp event.idm.read_only_udm.network.application_protocol ou event.idm.read_only_udm.principal.resource.attribute.labels.value Si le champ subcomp est "http", il est mappé sur "HTTP". Sinon, il est ajouté en tant que libellé avec la clé "Sub Comp".
tname event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur tname est extraite du champ tname du journal brut et ajoutée en tant qu'étiquette avec la clé "tname".
type event.idm.read_only_udm.metadata.product_event_type Le type d'événement produit est extrait du champ type dans le journal brut.
uid event.idm.read_only_udm.principal.user.userid L'ID utilisateur est extrait du champ uid dans le journal brut.
update event.idm.read_only_udm.principal.resource.attribute.labels.value La valeur de mise à jour est extraite du champ update du journal brut et ajoutée en tant que libellé avec la clé "update".
user event.idm.read_only_udm.principal.user.user_display_name Le nom à afficher de l'utilisateur est extrait du champ user dans le journal brut.
vmw_cluster event.idm.read_only_udm.target.resource.name Le nom de la ressource cible est extrait du champ vmw_cluster dans le journal brut.
vmw_datacenter event.idm.read_only_udm.target.resource.attribute.labels.value La valeur vmw_datacenter est extraite du champ vmw_datacenter dans le journal brut et ajoutée en tant que libellé avec la clé "vmw_datacenter".
vmw_host event.idm.read_only_udm.target.hostname ou event.idm.read_only_udm.target.ip Si le champ vmw_host est un nom d'hôte, il est mappé sur le nom d'hôte cible. Sinon, s'il s'agit d'une adresse IP, elle est mappée à l'adresse IP cible.
vmw_object_id event.idm.read_only_udm.target.resource.product_object_id L'ID de l'objet produit est extrait du champ vmw_object_id dans le journal brut.
vmw_product event.idm.read_only_udm.target.application L'application cible est extraite du champ vmw_product dans le journal brut.
vmw_vcenter event.idm.read_only_udm.target.cloud.availability_zone La zone de disponibilité est extraite du champ vmw_vcenter dans le journal brut.
vmw_vcenter_id event.idm.read_only_udm.target.resource.attribute.labels.value La valeur vmw_vcenter_id est extraite du champ vmw_vcenter_id dans le journal brut et ajoutée en tant que libellé avec la clé vmw_vcenter_id.
vmw_vr_ops_appname event.idm.read_only_udm.intermediary.application L'application intermédiaire est extraite du champ vmw_vr_ops_appname dans le journal brut.
vmw_vr_ops_clustername event.idm.read_only_udm.intermediary.resource.name Le nom de la ressource intermédiaire est extrait du champ vmw_vr_ops_clustername dans le journal brut.
vmw_vr_ops_clusterrole event.idm.read_only_udm.intermediary.resource.attribute.roles.name Le nom du rôle de la ressource intermédiaire est extrait du champ vmw_vr_ops_clusterrole dans le journal brut.
vmw_vr_ops_hostname event.idm.read_only_udm.intermediary.hostname Le nom d'hôte intermédiaire est extrait du champ vmw_vr_ops_hostname dans le journal brut.
vmw_vr_ops_id event.idm.read_only_udm.intermediary.resource.product_object_id L'ID de l'objet produit intermédiaire est extrait du champ vmw_vr_ops_id dans le journal brut.
vmw_vr_ops_logtype event.idm.read_only_udm.intermediary.resource.attribute.labels.value La valeur vmw_vr_ops_logtype est extraite du champ vmw_vr_ops_logtype du journal brut et ajoutée en tant que libellé avec la clé vmw_vr_ops_logtype.
vmw_vr_ops_nodename event.idm.read_only_udm.intermediary.resource.attribute.labels.value La valeur vmw_vr_ops_nodename est extraite du champ vmw_vr_ops_nodename dans le journal brut et ajoutée en tant qu'étiquette avec la clé vmw_vr_ops_nodename. Déterminé par une série d'instructions conditionnelles en fonction des valeurs d'autres champs. Les valeurs possibles sont USER_LOGIN, NETWORK_CONNECTION, STATUS_UPDATE et GENERIC_EVENT. Code codé en dur sur "VMWARE_NSX". Code codé en dur sur "VMWARE_NSX". Code codé en dur sur "VMWARE_NSX". Définissez la valeur sur "AUTHTYPE_UNSPECIFIED" si Operation est "LOGIN" et que target_details n'est pas vide, ou si message contient "échec de l'authentification" et que application n'est pas vide. Définissez-le sur "SSH" si PROTO est "ssh2" ou sur "HTTP" si subcomp est "http". Déterminé par une série d'instructions conditionnelles en fonction des valeurs d'autres champs. Les valeurs possibles sont ALLOW et BLOCK. Défini sur "VIRTUAL_MACHINE" si vmw_cluster n'est pas vide.

Modifications

2023-11-15

  • Amélioration: dans le champ "Ancienne valeur" :
  • Mappage de "unique_id" sur "principal.resource.product_object_id".
  • Mappage de "resource_type" sur "principal.resource.sub_type".
  • Mappage de "_create_user" et "_last_modified_user" sur "principal.user.email_addresses".
  • Mappage de "action" sur "security_result.action".
  • Mappage de "rule_id" sur "security_result.rule_id".
  • "display_name" a été mappé sur "principal.resource.name".
  • Mappage de "_last_modified_time" sur "principal.resource.attribute.last_update_time".
  • Mappage de "_create_time" sur "principal.resource.attribute.creation_time".
  • Mappage de "parent_path" sur "principal.resource.parent".
  • "path" a été mappé sur "principal.process.file.full_path".
  • Mappage de "id" sur "principal.resource.id".
  • Dans le champ "Nouvelle valeur" :
  • "resource_type" a été mappé sur "target.resource.sub_type".
  • "unique_id" a été mappé sur "target.resource.product_object_id".
  • Mappage de "path" sur "target.process.file.full_path".
  • "display_name" a été mappé sur "target.resource.name".
  • "id" a été mappé sur "target.resource.id".
  • Mappage de "vmw_host" sur "target_details.hostname ou target_details.ip" en fonction de la valeur dans vmw_host.
  • Mappage de "vmw_product" sur "target.application".
  • Mappage de "vmw_vcenter" sur "target.cloud.availability_zone".
  • Mappage de "vmw_cluster" sur "target.resource.name".
  • Mappage de "vmw_object_id" sur "target.resource.product_object_id".
  • "vmw_datacenter" a été mappé sur "target.resource.attribute.labels".
  • "vmw_vcenter_id" a été mappé sur "target.resource.attribute.labels".
  • Mappage de "vmw_vr_ops_logtype" sur "intermediary.resource.attribute.labels".
  • Mappage de "vmw_vr_ops_appname" sur "intermediary.application".
  • Mappage de "vmw_vr_ops_hostname" sur "intermediary.hostname".
  • Mappage de "vmw_vr_ops_nodename" sur "intermediary.resource.attribute.labels".
  • Mappage de "vmw_vr_ops_clustername" sur "intermediary.resource.name".
  • "vmw_vr_ops_clusterrole" a été mappé sur "intermediary.resource.attribute.labels.roles.name".
  • Mappage de "vmw_vr_ops_id" sur "intermediary.resource.product_object_id".

2023-10-13

  • Amélioration: modification d'un format Grok pour analyser "sourceIp" avec des ports.
  • "vmw_host","vmw_product","vmw_vcenter","vmw_cluster","vmw_vr_ops_id","vmw_object_id","vmw_datacenter","vmw_vcenter_id","vmw_vr_ops_logtype","vmw_vr_ops_appname","vmw_vr_ops_hostname","vmw_vr_ops_nodename","vmw_vr_ops_clustername","vmw_vr_ops_clusterrole","managedExternally","update","filepath","eventType" et "resourceId" ont été mappés sur "principal.resource.attribute.labels".
  • Les champs de la "charge utile" ont été mappés sur "principal.resource.attribute.labels".
  • "client" mappé sur "principal.ip"
  • Champs mappés dans "new_value" vers "target.resource.attribute.labels".

2023-10-03

  • Amélioration: ajout d'un format Grok pour vérifier si "sourceIp" est une adresse IP valide avant de la mapper sur le champ UDM.

2023-09-12

  • Amélioration: prise en charge des journaux syslog contenant les champs "Nouvelle valeur" et "Ancienne valeur".

2023-06-26

  • Valeurs mappées dans "PASS", "DROP", "REJECT", "NAT", "NONAT", "RDR", "NORDR", "PUNT", "REDIRECT" et "COPY" vers la clé "additional.fields" sous la forme "Network_Status".

2023-03-07

  • Mappage de "errorCode" sur "security_result.detection_fields".
  • "app_type" a été mappé sur "principal.application".
  • Mappage de "tname", "s2comp" et "node" sur "principal.resource.attribute.labels".
  • Mappage de "exe" sur "target.process.file.full_path".
  • Mappage de "dst_ip" sur "target.ip".
  • Mappage de "ses" sur "network.session_id".
  • "hostname" a été mappé sur "principal.ip".
  • Mappage de "direction" sur "network.direction".
  • Mappage de "reqId" sur "metadata.product_log_id".

2022-06-10

  • Analyseur nouvellement créé