Collecter les journaux du gestionnaire VMware NSX (Network and Security Virtualization)
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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Agents de collecte.
- 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
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres du SIEM > Profil.
- Copiez et sauvegardez l'ID client dans la section Détails de l'organisation.
Installer l'agent BindPlane
Installation de Windows
- Ouvrez l'invite de commande ou PowerShell en tant qu'administrateur.
Exécutez la commande suivante :
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installation de Linux
- Ouvrez un terminal avec des droits root ou sudo.
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
- Pour plus d'options d'installation, consultez ce guide d'installation.
Configurer l'agent BindPlane pour ingérer Syslog et l'envoyer à Google SecOps
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).
- Recherchez le fichier
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
Remplacez le port et l'adresse IP dans votre infrastructure si nécessaire.
Remplacez
<customer_id>
par le numéro client réel.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
- Connectez-vous au client Web vSphere.
- Accédez à Networking & Security > NSX Edges (Mise en réseau et sécurité > NSX Edges).
- Sélectionnez l'instance NSX Edge spécifique que vous souhaitez configurer.
- Accédez à Syslog Settings (Paramètres Syslog) :
- 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).
- 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.
- Pour NSX 6.4.4 et versions ultérieures :
- 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).
- Cliquez sur OK pour enregistrer les paramètres.
Configuration Syslog pour NSX Manager
- Connectez-vous à l'interface Web NSX Manager avec des identifiants d'administrateur comme suit :
https://<NSX-Manager-IP>
ouhttps://<NSX-Manager-Hostname>
.
- Accédez à Gérer les paramètres de l'appareil > Général.
- Cliquez sur Modifier pour configurer les paramètres du serveur Syslog.
- 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).
- Cliquez sur OK pour enregistrer les paramètres.
Configuration Syslog pour NSX Controller
- Connectez-vous au client Web vSphere.
- 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).
- Sélectionnez le NSX Manager qui gère les nœuds de contrôleur.
- Cliquez sur Modifier les attributs de contrôleur courants.
- Dans la boîte de dialogue Syslog Servers (Serveurs Syslog), cliquez sur Add (Ajouter) :
- Saisissez le nom ou l'adresse IP du serveur Syslog.
- Sélectionnez le protocole UDP (en fonction de la configuration de votre serveur syslog/Bindplane).
- Définissez le niveau de journalisation (par exemple,
INFO
).
- 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éé