Collecter les journaux VMware vCenter
Ce document explique comment ingérer des journaux VMware vCenter dans Google Security Operations à l'aide de Bindplane. L'analyseur transforme les journaux bruts en modèle de données unifié (UDM). Il tente d'abord d'analyser les données de journaux au format JSON. En cas d'échec, il traite les données comme un message syslog, en extrait les champs à l'aide de modèles Grok et les mappe au 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, assurez-vous que les ports du pare-feu sont ouverts.
- Accès privilégié à VMware vCenter
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 l'ID client Google SecOps
- Connectez-vous à la console Google SecOps.
- Accédez à Paramètres SIEM> Profil.
- Copiez et enregistrez le numéro client de la section Informations sur l'organisation.
Installer l'agent Bindplane
Installez l'agent Bindplane sur votre système d'exploitation Windows ou Linux en suivant les instructions ci-dessous.
Installation de fenêtres
- Ouvrez l'invite de commandes 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 les 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
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
- Accédez au fichier de configuration :
- Trouvez 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).
- Trouvez le fichier
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 log_type: 'VMWARE_VCENTER' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
- Remplacez le port et l'adresse IP selon les besoins de votre infrastructure.
- Remplacez
<customer_id>
par le numéro client réel. - 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 pour VMware vCenter
- Connectez-vous à l'interface utilisateur Web vCenter Server Management.
- Accédez à Syslog > Configuration du transfert > Configurer.
- Sélectionnez Create Forwarding Configuration (Créer une configuration de transfert) et saisissez l'adresse IP de l'agent Bindplane.
- Dans le menu déroulant Protocole, sélectionnez UDP ou TCP, en fonction de la configuration réelle de votre agent Bindplane.
- Dans la section Port, saisissez le numéro de port de l'agent Bindplane.
- Cliquez sur Enregistrer.
- Cliquez sur Envoyer un message test et vérifiez qu'il a bien été reçu.
Table de mappage UDM
Champ de journal | Mappage UDM | Logique |
---|---|---|
Access Mask |
principal.process.access_mask | Converti en décimal à partir de l'hexadécimal. |
Account Domain |
principal.administrative_domain | |
Account Name |
principal.user.userid | |
ApplicationProtocol |
additional.fields | |
Authentication Package |
security_result.about.resource.name | |
Client Address |
principal.ip, principal.asset.ip | Analysé en tant qu'adresse IP. |
Client Port |
principal.port | Converti en entier. |
cmd |
target.process.command_line | |
date |
timestamp | Analysé en tant que aaaa-MM-jj et fusionné avec l'heure en tant que aaaa-MM-jj HH:mm:ss pour "quand", analysé en tant que date. |
date_time |
timestamp | Analysé en tant que date avec les formats RFC 3339, TIMESTAMP_ISO8601 et SYSLOGTIMESTAMP. |
desc |
metadata.description | |
eventid |
metadata.product_event_type | Fusionné avec la tâche en tant qu'ID d'événement : tâche. |
host_name |
principal.hostname, principal.asset.hostname | |
http_method |
network.http.method | |
ip |
target.ip, target.asset.ip | |
kv_data1 |
Analysé sous forme de paires clé-valeur. | |
kv_data2 |
Analysé sous forme de paires clé-valeur. | |
kv_msg1.cipher |
network.tls.cipher | |
kv_msg1.ctladdr |
intermediary.labels | |
kv_msg1.daemon |
security_result.about.labels | |
kv_msg1.from |
network.email.from | Si mail_from ne contient pas de @, il est ajouté avec @local. |
kv_msg1.msgid |
network.email.mail_id | |
kv_msg1.proto |
security_result.about.labels | |
kv_msg1.relay |
intermediary.hostname, intermediary.ip | Analysé en tant que (HOSTNAME) ? [IP] ou HOSTNAME. Si relay_domain est présent, la valeur est définie sur intermediary.hostname. Si relay_ip est présent, la valeur est fusionnée avec intermediary.ip. |
kv_msg1.size |
network.sent_bytes | Converti en entier non signé. |
kv_msg1.stat |
security_result.summary | |
kv_msg1.verify |
security_result.description, security_result.action | Si kv_msg1.verify est défini sur FAIL, security_result.action est défini sur BLOCK. |
kv_msg1.version |
network.tls.version | |
labels.log_type |
metadata.product_event_type | |
labels.net.host.ip |
principal.ip, principal.asset.ip | |
labels.net.host.port |
principal.port | |
labels.net.peer.ip |
target.ip, target.asset.ip | |
labels.net.peer.port |
target.port | |
labels.net.transport |
network.ip_protocol | Si labels.net.transport est défini sur TCP, alors TCP. |
level |
security_result.severity | Si le niveau est INFO/Informational/DEBUG/info/Information, la gravité est INFORMATIONAL. Si le niveau est ERROR/error, la gravité est ERROR. Si le niveau est WARNING, la gravité est LOW. |
log.file.path |
target.process.file.full_path | |
logName |
security_result.category_details | |
Logon Account |
principal.user.userid | |
Logon Type |
extensions.auth.mechanism | Si logon_type est défini sur 2/Interactive, la valeur est INTERACTIVE. Si logon_type est défini sur 3/8, la valeur est NETWORK. Si logon_type est défini sur 4, la valeur est BATCH. Si logon_type est défini sur 5, la valeur est SERVICE. Si logon_type est défini sur 7, la valeur est UNLOCK. Si logon_type est défini sur 9, la valeur est NEW_CREDENTIALS. Si logon_type est défini sur 10, la valeur est REMOTE_INTERACTIVE. Si logon_type est défini sur 11, la valeur est CACHED_INTERACTIVE. Sinon, la valeur est MECHANISM_UNSPECIFIED. |
mail_from |
network.email.from | Si mail_from ne contient pas de @, il est ajouté avec @local. |
mail_to |
network.email.to | Si mail_to ne contient pas de @, il est ajouté avec @local. |
message |
Analysé avec des modèles grok. | |
namespace |
principal.namespace | |
port |
target.port | Converti en entier. |
process_id |
target.process.pid | |
providername |
principal.application | |
Relative Target Name |
target.file.full_path | |
resource.labels.project_id |
src.cloud.project.id | |
resource.type |
src.labels | |
response_status |
network.http.response_code | Converti en entier. |
sec_desc |
security_result.description | |
Security ID |
target.user.windows_sid | |
security_result_action_detail |
security_result.action_details | |
server_name |
target.hostname, target.asset.hostname | |
Share Name |
target.resource.name | |
Source Network Address |
principal.ip, principal.asset.ip | Analysé en tant qu'adresse IP. |
Source Port |
principal.port | Converti en entier. |
summary |
security_result.summary | |
target_host |
target.hostname, target.asset.hostname | |
target_url |
target.url | |
target_userid |
target.user.userid | |
time |
timestamp | Analysé au format HH:mm:ss et fusionné avec la date au format yyyy-MM-dd HH:mm:ss pour "quand", analysé en tant que date. |
upn_name |
intermediary.url | |
URL |
target.url | |
User ID |
target.user.windows_sid | |
user_id |
principal.user.userid | |
UserAgent |
network.http.user_agent | |
metadata.event_type | Définissez la valeur sur STATUS_UPDATE si msg contient API_HEALTH ou JobDispatcher, sur USER_LOGIN si msg contient logged in as et que target_userid n'est pas vide, sur SCAN_HOST si msg contient Leave Validate., sur NETWORK_UNCATEGORIZED si msg contient Getting IP Address from host, sur RESOURCE_WRITTEN si msg contient Wrote vpxd health, sur NETWORK_HTTP si has_principal et has_target sont définis sur "true" et que application_protocol n'est pas vide, sur PROCESS_LAUNCH si process_id et cmd ne sont pas vides, sur USER_UNCATEGORIZED si user_id n'est pas vide ou si eventid est défini sur 4776, sur USER_LOGIN si eventid est défini sur 4624/4768/4769, sur USER_LOGOUT si eventid est défini sur 4634/4647, sur USER_RESOURCE_ACCESS si eventid est défini sur 5145, sur STATUS_UPDATE si host_name n'est pas vide, et sur GENERIC_EVENT dans le cas contraire. | |
extensions.auth.type | Définissez sur MACHINE si eventid est 4624/4768/4769. | |
metadata.log_type | Définissez-le sur VMWARE_VCENTER. | |
metadata.vendor_name | Définissez la valeur sur VMWARE. | |
metadata.product_name | Définissez-le sur VCENTER. | |
security_result.action | Définissez sur "ALLOW" si response_status est défini sur 200 ou si l'action est définie sur "Autoriser". |
Vous avez encore besoin d'aide ? Obtenez des réponses de membres de la communauté et de professionnels Google SecOps.