Recopila registros del administrador de VMware Networking and Security Virtualization (NSX)
En este documento, se describe cómo puedes recopilar los registros del Administrador de virtualización de redes y seguridad (NSX) de VMware. El analizador extrae campos con varios patrones de grok según el formato del mensaje. Luego, realiza el análisis de par clave-valor, el análisis JSON y la lógica condicional para asignar los campos extraídos a la UDM, controlar diferentes formatos de registro y enriquecer los datos con contexto adicional.
Antes de comenzar
- Asegúrate de tener una instancia de Google Security Operations.
- Asegúrate de usar Windows 2016 o una versión posterior, o un host de Linux con
systemd
. - Si se ejecuta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
- Asegúrate de tener acceso de administrador a VMWare NSX.
Obtén el archivo de autenticación de transferencia de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Agentes de recopilación.
- Descarga el archivo de autenticación de transferencia. Guarda el archivo de forma segura en el sistema en el que se instalará BindPlane.
Obtén el ID de cliente de Google SecOps
- Accede a la consola de Google SecOps.
- Ve a Configuración de SIEM > Perfil.
- Copia y guarda el ID de cliente de la sección Detalles de la organización.
Instala el agente de BindPlane
Instalación de Windows
- Abre el símbolo del sistema o PowerShell como administrador.
Ejecuta el siguiente comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalación de Linux
- Abre una terminal con privilegios de raíz o sudo.
Ejecuta el siguiente comando:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
Recursos de instalación adicionales
- Para obtener más opciones de instalación, consulta esta guía de instalación.
Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps
Accede al archivo de configuración:
- Ubica el archivo
config.yaml
. Por lo general, se encuentra en el directorio/etc/bindplane-agent/
en Linux o en el directorio de instalación en Windows. - Abre el archivo con un editor de texto (por ejemplo,
nano
,vi
o Bloc de notas).
- Ubica el archivo
Edita el archivo
config.yaml
de la siguiente manera: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
Reemplaza el puerto y la dirección IP según sea necesario en tu infraestructura.
Reemplaza
<customer_id>
por el ID de cliente real.Actualiza
/path/to/ingestion-authentication-file.json
a la ruta de acceso en la que se guardó el archivo de autenticación en la sección Obtén el archivo de autenticación de transferencia de Google SecOps.
Reinicia el agente de BindPlane para aplicar los cambios.
En Linux, para reiniciar el agente de BindPlane, ejecuta el siguiente comando:
sudo systemctl restart bindplane-agent
En Windows, para reiniciar el agente de BindPlane, puedes usar la consola Services o ingresar el siguiente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configuración de Syslog para NSX Edge
- Accede al cliente web de vSphere.
- Ve a Herramientas de redes y seguridad > NSX Edges.
- Selecciona la instancia específica de NSX Edge que deseas configurar.
- Ve a Configuración de Syslog:
- Para NSX 6.4.4 y versiones posteriores:
- Ve a Administrar > Configuración > Configuración del dispositivo.
- Haz clic en Configuración > Cambiar configuración de Syslog.
- Para NSX 6.4.3 y versiones anteriores:
- Ve a Administrar > Configuración > Configuración.
- En el diálogo Detalles, haz clic en Cambiar.
- Para NSX 6.4.4 y versiones posteriores:
- Configura los detalles del servidor Syslog:
- Servidor: Ingresa la dirección IP o el nombre de host del servidor Syslog (Bindplane).
- Protocolo: Selecciona UDP o TCP (según la configuración de tu servidor de syslog o Bindplane).
- Puerto: Ingresa el número de puerto (según la configuración de tu servidor de syslog o Bindplane).
- Haz clic en Aceptar para guardar la configuración.
Configuración de Syslog para NSX Manager
- Accede a la interfaz web de NSX Manager con las credenciales de administrador de la siguiente manera:
https://<NSX-Manager-IP>
ohttps://<NSX-Manager-Hostname>
.
- Ve a Administrar configuración del dispositivo > General.
- Haz clic en Editar para configurar el servidor Syslog.
- Ingresa los detalles del servidor de Syslog:
- Servidor: Ingresa la dirección IP o el nombre de host del servidor Syslog (Bindplane).
- Protocolo: Selecciona UDP o TCP (según la configuración de tu servidor de syslog o Bindplane).
- Puerto: Ingresa el número de puerto (según la configuración de tu servidor de syslog o Bindplane).
- Haz clic en Aceptar para guardar la configuración.
Configuración de Syslog para NSX Controller
- Accede al cliente web de vSphere.
- Ve a Herramientas de redes y seguridad > Instalación y actualización > Administración > Nodos de controlador de NSX.
- Selecciona el NSX Manager que administra los nodos del controlador.
- Haz clic en Editar atributos comunes del controlador.
- En el diálogo Syslog Servers, haz clic en Add:
- Ingresa el nombre o la dirección IP del servidor de Syslog.
- Selecciona el protocolo UDP (según la configuración de tu servidor de syslog o Bindplane).
- Establece el Nivel de registro (por ejemplo,
INFO
).
- Haz clic en Aceptar para guardar la configuración.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
DST |
event.idm.read_only_udm.target.ip |
La dirección IP de destino se extrae del campo DST en el registro sin procesar. |
ID |
event.idm.read_only_udm.metadata.product_log_id |
El ID del registro del producto se extrae del campo ID en el registro sin procesar. |
MAC |
event.idm.read_only_udm.principal.mac |
La dirección MAC se extrae del campo MAC en el registro sin procesar. |
ModuleName |
event.idm.read_only_udm.metadata.product_event_type |
El tipo de evento del producto se extrae del campo ModuleName en el registro sin procesar. |
Operation |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
La operación se extrae del campo Operation en el registro sin procesar y se agrega como una etiqueta con la clave "Operation". |
PROTO |
event.idm.read_only_udm.network.ip_protocol |
El protocolo IP se extrae del campo PROTO en el registro sin procesar. |
RES |
event.idm.read_only_udm.target.resource.name |
El nombre del recurso de destino se extrae del campo RES en el registro sin procesar. |
SRC |
event.idm.read_only_udm.principal.ip |
La dirección IP de origen se extrae del campo SRC en el registro sin procesar. |
SPT |
event.idm.read_only_udm.principal.port |
El puerto de origen se extrae del campo SPT en el registro sin procesar. |
UserName |
event.idm.read_only_udm.principal.user.userid |
El ID del usuario se extrae del campo UserName en el registro sin procesar. |
app_type |
event.idm.read_only_udm.principal.application |
La aplicación principal se extrae del campo app_type en el registro sin procesar. |
application |
event.idm.read_only_udm.target.application |
La aplicación de destino se extrae del campo application en el registro sin procesar. |
audit |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor de auditoría se extrae del campo audit en el registro sin procesar y se agrega como una etiqueta con la clave "audit". |
cancelTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.last_update_time |
La hora de la última actualización se obtiene del campo cancelTimeUTC en el registro sin procesar. |
client |
event.idm.read_only_udm.principal.ip o event.idm.read_only_udm.principal.administrative_domain |
Si el campo client es una dirección IP, se asigna a la IP principal. De lo contrario, se asigna al dominio administrativo principal. |
comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor del componente se extrae del campo comp en el registro sin procesar y se agrega como una etiqueta con la clave "Comp". |
datetime |
event.idm.read_only_udm.metadata.event_timestamp |
La marca de tiempo del evento se extrae del campo datetime en el registro sin procesar. |
description |
event.idm.read_only_udm.metadata.description |
La descripción se extrae del campo description en el registro sin procesar. |
details |
event.idm.read_only_udm.principal.resource.attribute.labels |
Los detalles se extraen del campo details en el registro sin procesar y se agregan como etiquetas. |
direction |
event.idm.read_only_udm.network.direction |
Si el campo direction es "OUT", se asigna a "OUTBOUND". |
dst_ip |
event.idm.read_only_udm.target.ip |
La dirección IP de destino se extrae del campo dst_ip en el registro sin procesar. |
DPT |
event.idm.read_only_udm.target.port |
El puerto de destino se extrae del campo DPT en el registro sin procesar. |
errorCode |
event.idm.read_only_udm.security_result.detection_fields |
El código de error se extrae del campo errorCode en el registro sin procesar y se agrega como un campo de detección. |
eventType |
event.idm.read_only_udm.metadata.product_event_type |
El tipo de evento del producto se extrae del campo eventType en el registro sin procesar. |
filepath |
event.idm.read_only_udm.principal.process.file.full_path |
La ruta de acceso del archivo se extrae del campo filepath en el registro sin procesar. |
hostname |
event.idm.read_only_udm.principal.ip |
El nombre de host se extrae del campo hostname en el registro sin procesar y, si es una dirección IP, se asigna a la IP principal. |
kv_data |
Varios campos de UDM | Los pares clave-valor de kv_data se asignan a varios campos de la AUA según sus claves. |
kv_data1 |
Varios campos de UDM | Los pares clave-valor de kv_data1 se asignan a varios campos de la AUA según sus claves. |
kv_data2 |
Varios campos de UDM | Los pares clave-valor de kv_data2 se asignan a varios campos de la AUA según sus claves. |
kv_data3 |
Varios campos de UDM | Los pares clave-valor de kv_data3 se asignan a varios campos de la AUA según sus claves. |
kv_data4 |
Varios campos de UDM | Los pares clave-valor de kv_data4 se asignan a varios campos de la AUA según sus claves. |
level |
event.idm.read_only_udm.security_result.severity |
Si el campo level es "INFO", se asigna a "INFORMATIONAL". Si es "ERROR", se asigna a "ERROR". |
managedExternally |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor de managedExternally se extrae del campo managedExternally en el registro sin procesar y se agrega como una etiqueta con la clave "managedExternally". |
message |
Varios campos de UDM | El campo de mensaje se analiza para extraer varios campos de la UDM. |
message_data |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
Los datos del mensaje se extraen del campo message_data en el registro sin procesar y se agregan como una etiqueta con la clave "message". |
network_status |
event.idm.read_only_udm.additional.fields |
El estado de la red se extrae del campo network_status en el registro sin procesar y se agrega como un campo adicional con la clave "Network_Connection_Status". |
new_value |
Varios campos event.idm.read_only_udm.target |
El valor nuevo se extrae del campo new_value en el registro sin procesar y se usa para propagar varios campos de destino. |
node |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor del nodo se extrae del campo node en el registro sin procesar y se agrega como una etiqueta con la clave "nodo". |
old_value |
Varios campos de UDM | El valor anterior se extrae del campo old_value en el registro sin procesar y se usa para propagar varios campos de la AUA. |
payload |
Varios campos de UDM | La carga útil se extrae del campo payload en el registro sin procesar y se usa para propagar varios campos de la AUA. |
pid |
event.idm.read_only_udm.target.process.pid |
El ID de proceso se extrae del campo pid en el registro sin procesar. |
reqId |
event.idm.read_only_udm.metadata.product_log_id |
El ID del registro del producto se extrae del campo reqId en el registro sin procesar. |
resourceId |
event.idm.read_only_udm.principal.resource.product_object_id |
El ID del objeto del producto se extrae del campo resourceId en el registro sin procesar. |
s2comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor de s2comp se extrae del campo s2comp en el registro sin procesar y se agrega como etiqueta con la clave "s2comp". |
ses |
event.idm.read_only_udm.network.session_id |
El ID de sesión se extrae del campo ses en el registro sin procesar. |
src_host |
event.idm.read_only_udm.principal.hostname |
El nombre de host principal se extrae del campo src_host en el registro sin procesar. |
src_ip |
event.idm.read_only_udm.principal.ip |
La dirección IP de origen se extrae del campo src_ip en el registro sin procesar. |
src_ip1 |
event.idm.read_only_udm.principal.ip |
La dirección IP de origen se extrae del campo src_ip1 en el registro sin procesar. |
src_port |
event.idm.read_only_udm.principal.port |
El puerto de origen se extrae del campo src_port en el registro sin procesar. |
startTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.creation_time |
La hora de creación se obtiene del campo startTimeUTC en el registro sin procesar. |
subcomp |
event.idm.read_only_udm.network.application_protocol o event.idm.read_only_udm.principal.resource.attribute.labels.value |
Si el campo subcomp es "http", se asigna a "HTTP". De lo contrario, se agrega como una etiqueta con la clave "Sub Comp". |
tname |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor de tname se extrae del campo tname en el registro sin procesar y se agrega como etiqueta con la clave "tname". |
type |
event.idm.read_only_udm.metadata.product_event_type |
El tipo de evento del producto se extrae del campo type en el registro sin procesar. |
uid |
event.idm.read_only_udm.principal.user.userid |
El ID de usuario se extrae del campo uid en el registro sin procesar. |
update |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
El valor de actualización se extrae del campo update en el registro sin procesar y se agrega como una etiqueta con la clave "update". |
user |
event.idm.read_only_udm.principal.user.user_display_name |
El nombre visible del usuario se extrae del campo user en el registro sin procesar. |
vmw_cluster |
event.idm.read_only_udm.target.resource.name |
El nombre del recurso de destino se extrae del campo vmw_cluster en el registro sin procesar. |
vmw_datacenter |
event.idm.read_only_udm.target.resource.attribute.labels.value |
El valor de vmw_datacenter se extrae del campo vmw_datacenter en el registro sin procesar y se agrega como una etiqueta con la clave "vmw_datacenter". |
vmw_host |
event.idm.read_only_udm.target.hostname o event.idm.read_only_udm.target.ip |
Si el campo vmw_host es un nombre de host, se asigna al nombre de host de destino. De lo contrario, si es una dirección IP, se asigna a la IP de destino. |
vmw_object_id |
event.idm.read_only_udm.target.resource.product_object_id |
El ID del objeto del producto se extrae del campo vmw_object_id en el registro sin procesar. |
vmw_product |
event.idm.read_only_udm.target.application |
La aplicación de destino se extrae del campo vmw_product en el registro sin procesar. |
vmw_vcenter |
event.idm.read_only_udm.target.cloud.availability_zone |
La zona de disponibilidad se extrae del campo vmw_vcenter en el registro sin procesar. |
vmw_vcenter_id |
event.idm.read_only_udm.target.resource.attribute.labels.value |
El valor vmw_vcenter_id se extrae del campo vmw_vcenter_id en el registro sin procesar y se agrega como una etiqueta con la clave "vmw_vcenter_id". |
vmw_vr_ops_appname |
event.idm.read_only_udm.intermediary.application |
La aplicación intermedia se extrae del campo vmw_vr_ops_appname en el registro sin procesar. |
vmw_vr_ops_clustername |
event.idm.read_only_udm.intermediary.resource.name |
El nombre del recurso intermedio se extrae del campo vmw_vr_ops_clustername en el registro sin procesar. |
vmw_vr_ops_clusterrole |
event.idm.read_only_udm.intermediary.resource.attribute.roles.name |
El nombre del rol de recurso intermedio se extrae del campo vmw_vr_ops_clusterrole en el registro sin procesar. |
vmw_vr_ops_hostname |
event.idm.read_only_udm.intermediary.hostname |
El nombre de host intermedio se extrae del campo vmw_vr_ops_hostname en el registro sin procesar. |
vmw_vr_ops_id |
event.idm.read_only_udm.intermediary.resource.product_object_id |
El ID del objeto del producto intermedio se extrae del campo vmw_vr_ops_id en el registro sin procesar. |
vmw_vr_ops_logtype |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
El valor vmw_vr_ops_logtype se extrae del campo vmw_vr_ops_logtype en el registro sin procesar y se agrega como etiqueta con la clave "vmw_vr_ops_logtype". |
vmw_vr_ops_nodename |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
El valor vmw_vr_ops_nodename se extrae del campo vmw_vr_ops_nodename en el registro sin procesar y se agrega como etiqueta con la clave "vmw_vr_ops_nodename". Se determina mediante una serie de sentencias condicionales basadas en los valores de otros campos. Los valores posibles son USER_LOGIN, NETWORK_CONNECTION, STATUS_UPDATE y GENERIC_EVENT. Está codificado de forma fija en "VMWARE_NSX". Está codificado de forma fija en "VMWARE_NSX". Está codificado de forma fija en "VMWARE_NSX". Establece en "AUTHTYPE_UNSPECIFIED" si Operation es "LOGIN" y target_details no está vacío, o si message contiene "authentication failure" y application no está vacío. Se establece en "SSH" si PROTO es "ssh2" o en "HTTP" si subcomp es "http". Se determina mediante una serie de sentencias condicionales basadas en los valores de otros campos. Los valores posibles son ALLOW y BLOCK. Se establece en "VIRTUAL_MACHINE" si vmw_cluster no está vacío. |
Cambios
2023-11-15
- Mejora: En el campo "Valor anterior":
- Se asignó "unique_id" a "principal.resource.product_object_id".
- Se asignó "resource_type" a "principal.resource.sub_type".
- Se asignaron "_create_user" y "_last_modified_user" a "principal.user.email_addresses".
- Se asignó "action" a "security_result.action".
- Se asignó "rule_id" a "security_result.rule_id".
- Se asignó "display_name" a "principal.resource.name".
- Se asignó "_last_modified_time" a "principal.resource.attribute.last_update_time".
- Se asignó "_create_time" a "principal.resource.attribute.creation_time".
- Se asignó "parent_path" a "principal.resource.parent".
- Se asignó "path" a "principal.process.file.full_path".
- Se asignó "id" a "principal.resource.id".
- En el campo Valor nuevo, haz lo siguiente:
- Se asignó "resource_type" a "target.resource.sub_type".
- Se asignó "unique_id" a "target.resource.product_object_id".
- Se asignó "path" a "target.process.file.full_path".
- Se asignó "display_name" a "target.resource.name".
- Se asignó "id" a "target.resource.id".
- Se asignó "vmw_host" a "target_details.hostname o target_details.ip" según el valor en vmw_host.
- Se asignó "vmw_product" a "target.application".
- Se asignó "vmw_vcenter" a "target.cloud.availability_zone".
- Se asignó "vmw_cluster" a "target.resource.name".
- Se asignó "vmw_object_id" a "target.resource.product_object_id".
- Se asignó "vmw_datacenter" a "target.resource.attribute.labels".
- Se asignó "vmw_vcenter_id" a "target.resource.attribute.labels".
- Se asignó "vmw_vr_ops_logtype" a "intermediary.resource.attribute.labels".
- Se asignó "vmw_vr_ops_appname" a "intermediary.application".
- Se asignó "vmw_vr_ops_hostname" a "intermediary.hostname".
- Se asignó “vmw_vr_ops_nodename” a “intermediary.resource.attribute.labels”.
- Se asignó "vmw_vr_ops_clustername" a "intermediary.resource.name".
- Se asignó "vmw_vr_ops_clusterrole" a "intermediary.resource.attribute.labels.roles.name".
- Se asignó "vmw_vr_ops_id" a "intermediary.resource.product_object_id".
2023-10-13
- Mejora: Se modificó un patrón de Grok para analizar "sourceIp" con puertos.
- Se asignaron "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","resourceId" a "principal.resource.attribute.labels".
- Se asignaron campos en "payload" a "principal.resource.attribute.labels".
- Se asignó “cliente” a “principal.ip”
- Se asignaron campos en "new_value" a "target.resource.attribute.labels".
2023-10-03
- Mejora: Se agregó un patrón Grok para verificar si "sourceIp" es una dirección IP válida antes de asignarla al campo de la AUA.
2023-09-12
- Mejora: Se agregó compatibilidad con registros de syslog que tienen campos "Valor nuevo" y "Valor anterior".
2023-06-26
- Se asignaron los valores "PASS", "DROP", "REJECT", "NAT", "NONAT", "RDR", "NORDR", "PUNT", "REDIRECT" y "COPY" a la clave "additional.fields" como "Network_Status".
2023-03-07
- Se asignó "errorCode" a "security_result.detection_fields".
- Se asignó "app_type" a "principal.application".
- Se asignaron "tname", "s2comp" y "node" a "principal.resource.attribute.labels".
- Se asignó "exe" a "target.process.file.full_path".
- Se asignó "dst_ip" a "target.ip".
- Se asignó "ses" a "network.session_id".
- Se asignó "hostname" a "principal.ip".
- Se asignó "direction" a "network.direction".
- Se asignó "reqId" a "metadata.product_log_id".
2022-06-10
- Analizador creado recientemente