Recopila registros de VMware vRealize

Compatible con:

En este documento, se explica cómo transferir registros de VMware Aria Suite (antes conocido como VMware vRealize) a Google Security Operations con Bindplane. El analizador extrae campos de los mensajes de syslog con patrones de Grok basados en el campo msg_type. Luego, asigna estos campos extraídos al UDM, controla varios formatos de registro y enriquece los datos con contexto adicional, como información de la red, detalles del usuario y atributos de recursos.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Windows 2016 o versiones posteriores, o un host de Linux con systemd
  • Si ejecutas la herramienta detrás de un proxy, asegúrate de que los puertos del firewall estén abiertos.
  • Acceso con privilegios al software de VMware Aria Suite

Obtén el archivo de autenticación de transferencia de Google SecOps

  1. Accede a la consola de Google SecOps.
  2. Ve a SIEM Settings > Collection Agents.
  3. 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

  1. Accede a la consola de Google SecOps.
  2. Ve a SIEM Settings > Profile.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instala el agente de BindPlane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux según las siguientes instrucciones.

Instalación en Windows

  1. Abre el símbolo del sistema o PowerShell como administrador.
  2. Ejecuta el siguiente comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalación en Linux

  1. Abre una terminal con privilegios de raíz o sudo.
  2. 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 la guía de instalación.

Configura el agente de BindPlane para transferir Syslog y enviarlo a Google SecOps

  1. 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).
  2. Edita el archivo config.yaml de la siguiente manera:

    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_VREALIZE'
            raw_log_field: body
            ingestion_labels:
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    

Reinicia el agente de Bindplane para aplicar los cambios

  • Para reiniciar el agente de Bindplane en Linux, ejecuta el siguiente comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar el agente de Bindplane en Windows, puedes usar la consola de Servicios o ingresar el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura Syslog para VMware Aria Suite

  1. Accede a la IU web de VMware Aria Suite.
  2. Ve a Administración > Reenvío de eventos.
  3. Haz clic en Nuevo destino.
  4. Proporciona los siguientes detalles de configuración:
    • Nombre: Ingresa un nombre único para identificar el servidor.
    • Host: Ingresa la dirección IP del agente de Bindplane.
    • Protocolo: Selecciona Syslog.
    • Transporte: Selecciona UDP o TCP, según la configuración real del agente de Bindplane.
    • Puerto: Ingresa el número de puerto del agente de Bindplane.
  5. Haga clic en Probar.
  6. Haz clic en Guardar.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
actorDomain principal.hostname El valor de actorDomain del registro sin procesar se asigna al campo de UDM.
actorId principal.resource.attribute.labels.key La cadena "actorId" se asigna a la clave.
actorId principal.resource.attribute.labels.value El valor de actorId del registro sin procesar se asigna al valor.
actorId additional.fields.key La cadena "actorId" se asigna a la clave.
actorId additional.fields.value.string_value El valor de actorId del registro sin procesar se asigna al valor.
actorUserName principal.user.userid El valor de actorUserName del registro sin procesar se asigna al campo de UDM.
actorUuid principal.resource.attribute.labels.key La cadena "actorUuid" se asigna a la clave.
actorUuid principal.resource.attribute.labels.value El valor de actorUuid del registro sin procesar se asigna al valor.
actorUuid additional.fields.key La cadena "actorUuid" se asigna a la clave.
actorUuid additional.fields.value.string_value El valor de actorUuid del registro sin procesar se asigna al valor.
all_request_headers.sec-ch-ua-platform principal.platform El valor se deriva de all_request_headers.sec-ch-ua-platform. Si contiene "win" o "windows" (sin distinguir mayúsculas de minúsculas), el valor es "WINDOWS". Si contiene "Mac" (sin distinción entre mayúsculas y minúsculas), el valor es "MAC". Si contiene "lin" o "linux" (sin distinguir mayúsculas de minúsculas), el valor es "LINUX".
all_request_headers.X-Requested-With network.application_protocol Si el valor contiene "http" (sin distinción entre mayúsculas y minúsculas), se establece en "HTTP".
automation_tag metadata.product_event_type El valor de automation_tag del registro sin procesar se asigna al campo de UDM.
client_ip principal.ip El valor de client_ip del registro sin procesar se asigna al campo de UDM.
client_src_port principal.port El valor de client_src_port del registro sin procesar se asigna al campo de UDM.
comp about.resource.attribute.labels.key La cadena "Component" se asigna a la clave.
comp about.resource.attribute.labels.value El valor de comp del registro sin procesar se asigna al valor.
compression additional.fields.key La cadena "compression" se asigna a la clave.
compression additional.fields.value.string_value El valor de compression del registro sin procesar se asigna al valor.
data about.resource.attribute.labels.key La lógica depende de msg_type. Si msg_type es "Vpxa", "Hostd" o "VSANMGMTSVC", el campo data se analiza con pares clave-valor, y las claves específicas (como opID y sub) se asignan a about.resource.attribute.labels. Si msg_type es "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "ROUTING", "LOAD", "nsx", "nestdb", "cfgAgent", "NSX" o "NSXV", el campo data se analiza en busca de claves como comp, subcomp y s2comp, que luego se asignan a about.resource.attribute.labels.
data about.resource.attribute.labels.value Consulta la lógica de about.resource.attribute.labels.key.
data security_result.description Si msg_type es "Vpxa", "Hostd" o "VSANMGMTSVC", y, después de analizar data para obtener pares clave-valor, si existe un campo msg, su valor se asigna a security_result.description.
description security_result.description Si el campo description existe en el registro sin procesar, su valor se asigna al campo del UDM.
deviceId principal.resource.attribute.labels.key La cadena "deviceType" se asigna a la clave.
deviceId principal.resource.attribute.labels.value El valor de values.deviceType del registro sin procesar se asigna al valor.
deviceId additional.fields.key La cadena "deviceType" se asigna a la clave.
deviceId additional.fields.value.string_value El valor de values.deviceType del registro sin procesar se asigna al valor.
direction network.direction Si el valor es "OUT", se asigna a "OUTBOUND". Si es "IN", se asigna a "INBOUND".
dst_ip target.ip El valor de dst_ip del registro sin procesar se asigna al campo de UDM.
dst_port target.port El valor de dst_port del registro sin procesar se asigna al campo de UDM.
event_source principal.url El valor de event_source del registro sin procesar se asigna al campo de UDM.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.key La cadena "headers_received_from_server.Access-Control-Allow-Origin" se asigna a la clave.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.value El valor de headers_received_from_server.Access-Control-Allow-Origin del registro sin procesar se asigna al valor.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.key La cadena "headers_received_from_server.Content-Security-Policy" se asigna a la clave.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.value El valor de headers_received_from_server.Content-Security-Policy del registro sin procesar se asigna al valor.
headers_received_from_server.Cookie target.resource.attribute.labels.key La cadena "headers_received_from_server.Cookie" se asigna a la clave.
headers_received_from_server.Cookie target.resource.attribute.labels.value El valor de headers_sent_to_server.Cookie del registro sin procesar se asigna al valor.
headers_received_from_server.set-cookie target.resource.attribute.labels.key La cadena "headers_received_from_server.set-cookie" se asigna a la clave.
headers_received_from_server.set-cookie target.resource.attribute.labels.value El valor de headers_received_from_server.set-cookie del registro sin procesar se asigna al valor.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.key La cadena "headers_sent_to_server.sec-ch-ua" se asigna a la clave.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.value El valor de headers_sent_to_server.sec-ch-ua del registro sin procesar se asigna al valor.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.key La cadena "headers_sent_to_server.X-CSRF-TOKEN" se asigna a la clave.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.value El valor de headers_sent_to_server.X-CSRF-TOKEN del registro sin procesar se asigna al valor.
hostname principal.hostname El valor de hostname del registro sin procesar se asigna al campo de UDM.
hostname intermediary.hostname El valor de hostname del registro sin procesar se asigna al campo de UDM.
host principal.hostname El valor de host del registro sin procesar se asigna al campo de UDM.
isLocal additional.fields.key La cadena "isLocal" se asigna a la clave.
isLocal additional.fields.value.string_value El valor de isLocal del registro sin procesar se asigna al valor.
json_data Varios campos dentro de principal, target, additional y security_result El campo json_data del registro sin procesar se analiza como JSON, y los campos extraídos se asignan a varios campos del UDM según sus nombres y la lógica del analizador. Esto incluye campos como uuid, tenantId, actorId, actorUserName, actorDomain, sourceIp, objectName, objectType, objectId, values.resourceType, values.success y otros.
kv_data Varios campos El campo kv_data se analiza como pares clave-valor, y los campos extraídos se asignan a varios campos del UDM según sus nombres y la lógica del analizador.
level security_result.severity Si el valor es "info" (sin distinguir mayúsculas de minúsculas), se asigna a "INFORMATIONAL".
log_id metadata.product_log_id El valor de log_id del registro sin procesar se asigna al campo de UDM.
message Varios campos El campo message es la principal fuente de datos y se analiza de forma exhaustiva con patrones de grok para extraer varios campos, como ts, hostname, msg_type, sub_msg y otros. Luego, estos campos extraídos se usan para completar diferentes campos de UDM según la lógica del analizador.
method network.http.method El valor de method del registro sin procesar se asigna al campo de UDM.
msg security_result.description Si msg_type es "Vpxa", "Hostd", "VSANMGMTSVC", "SWITCHING", "FABRIC", "ROUTING", "LOAD-BALANCER", "nsx", "nestdb", "cfgAgent", "NSX", "NSXV" o "Rhttpproxy", y después de cualquier análisis de grok pertinente, si existe el campo msg, su valor se asigna a security_result.description. Existen casos especiales dentro de esta lógica para el contenido de mensajes específicos, como "conexión keepalive".
msg_type metadata.product_event_type Si msg_type es "FIREWALL_PKTLOG" o "FIREWALL-PKTLOG", su valor se asigna al campo de UDM.
msg_type event_type El valor de event_type se determina en función de msg_type. Si msg_type es "FIREWALL_PKTLOG" o "FIREWALL-PKTLOG", event_type es "NETWORK_CONNECTION". Si msg_type es "Vpxa", "Hostd", "VSANMGMTSVC", "nsx", "LOAD", "ROUTING", "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "nestdb", "cfgAgent", "NSX", "NSXV", "Rhttpproxy", "audispd" o "vsantraceUrgent", event_type es "GENERIC_EVENT". Si msg_type es "queries" o "responses", event_type es "NETWORK_DNS". Si msg_type es "sudo", event_type es "STATUS_UPDATE". Si el campo description contiene "cmmdsTimeMachineDump", el valor de event_type es "GENERIC_EVENT". Si el campo description contiene "prodjbossapp", el event_type es "GENERIC_EVENT". Si el campo description contiene "liagent@6876", el event_type es "GENERIC_EVENT". Si no se cumple ninguna de las condiciones anteriores y el campo description no está vacío, el event_type es "GENERIC_EVENT". Si src_ip y dst_ip están presentes, event_type es "NETWORK_CONNECTION". Si se incluye src_ip, dst_ip o hostname, event_type es "STATUS_UPDATE". Si has_principal_ip es verdadero y has_target_ip es verdadero, event_type es "SCAN_UNCATEGORIZED". Si has_principal_ip es verdadero o has_principal_host es verdadero, event_type es "STATUS_UPDATE". Si no se cumple ninguna de las condiciones anteriores, el event_type es "GENERIC_EVENT".
objectName target.resource.attribute.labels.key La cadena "objectName" se asigna a la clave.
objectName target.resource.attribute.labels.value El valor de objectName del registro sin procesar se asigna al valor.
objectName additional.fields.key La cadena "objectName" se asigna a la clave.
objectName additional.fields.value.string_value El valor de objectName del registro sin procesar se asigna al valor.
objectId target.resource.attribute.labels.key La cadena "objectId" se asigna a la clave.
objectId target.resource.attribute.labels.value El valor de objectId del registro sin procesar se asigna al valor.
objectId additional.fields.key La cadena "objectId" se asigna a la clave.
objectId additional.fields.value.string_value El valor de objectId del registro sin procesar se asigna al valor.
objectType target.resource.attribute.labels.key La cadena "objectType" se asigna a la clave.
objectType target.resource.attribute.labels.value El valor de objectType del registro sin procesar se asigna al valor.
objectType additional.fields.key La cadena "objectType" se asigna a la clave.
objectType additional.fields.value.string_value El valor de objectType del registro sin procesar se asigna al valor.
objectType security_result.description Si objectType es "LAUNCH" y success no es "true", la descripción es "Se intentó iniciar la aplicación correctamente". Si objectType es "LAUNCH_ERROR" y success no es "true", la descripción es "El usuario inició una aplicación con una solicitud no válida".
opID about.resource.attribute.labels.key La cadena "opId" se asigna a la clave.
opID about.resource.attribute.labels.value El valor de opID del registro sin procesar se asigna al valor.
pool additional.fields.key La cadena "pool" se asigna a la clave.
pool additional.fields.value.string_value El valor de pool del registro sin procesar se asigna al valor.
pool_name additional.fields.key La cadena "pool_name" se asigna a la clave.
pool_name additional.fields.value.string_value El valor de pool_name del registro sin procesar se asigna al valor.
protocol network.ip_protocol El valor de protocol del registro sin procesar se convierte a mayúsculas y se asigna al campo del UDM. Si el valor es "PROTO", no se asigna.
protocol additional.fields.key Si el valor de protocol es "PROTO", la cadena "ip_protocol" se asigna a la clave.
protocol additional.fields.value.string_value Si el valor de protocol es "PROTO", se asigna el valor de protocol del registro sin procesar al valor.
query_data network.dns.questions.name El campo query_data se analiza para extraer el question_name, que luego se asigna al campo del UDM.
query_data network.dns.questions.type El campo query_data se analiza para extraer el query_type, que luego se asigna al campo de UDM con una búsqueda incluida en "dns_record_type.include".
query_data network.dns.questions.class El campo query_data se analiza para extraer el dns_class, que luego se asigna al campo de UDM con una búsqueda incluida en "dns_query_class_mapping.include".
referer principal.url El valor de referer del registro sin procesar se asigna al campo de UDM.
request_content_type additional.fields.key La cadena "request_content_type" se asigna a la clave.
request_content_type additional.fields.value.string_value El valor de request_content_type del registro sin procesar se asigna al valor.
request_state additional.fields.key La cadena "request_state" se asigna a la clave.
request_state additional.fields.value.string_value El valor de request_state del registro sin procesar se asigna al valor.
response_code network.http.response_code El valor de response_code o server_response_code del registro sin procesar se asigna al campo de UDM.
response_content_type additional.fields.key La cadena "response_content_type" se asigna a la clave.
response_content_type additional.fields.value.string_value El valor de response_content_type del registro sin procesar se asigna al valor.
rule_id security_result.rule_id El valor de rule_id del registro sin procesar se asigna al campo de UDM.
s2comp about.resource.attribute.labels.key La cadena "S2-Component" se asigna a la clave.
s2comp about.resource.attribute.labels.value El valor de s2comp del registro sin procesar se asigna al valor.
server_ip target.ip El valor de server_ip del registro sin procesar se asigna al campo de UDM.
server_name target.hostname El valor de server_name del registro sin procesar se asigna al campo de UDM.
server_response_code network.http.response_code Consulta la lógica de response_code.
server_src_port target.port El valor de server_src_port del registro sin procesar se asigna al campo de UDM.
service_engine additional.fields.key La cadena "service_engine" se asigna a la clave.
service_engine additional.fields.value.string_value El valor de service_engine del registro sin procesar se asigna al valor.
sourceIp principal.ip El valor de sourceIp del registro sin procesar se asigna al campo de UDM.
ssl_cipher network.tls.cipher El valor de ssl_cipher del registro sin procesar se asigna al campo de UDM.
ssl_session_id network.session_id El valor de ssl_session_id del registro sin procesar se asigna al campo de UDM.
ssl_version network.tls.version_protocol El valor de ssl_version del registro sin procesar se asigna al campo de UDM.
sub about.resource.attribute.labels.key La cadena "Sub Component" se asigna a la clave.
sub about.resource.attribute.labels.value El valor de sub del registro sin procesar se asigna al valor.
subClusterUuid additional.fields.key La cadena "subClusterUuid" se asigna a la clave.
subClusterUuid additional.fields.value.string_value El valor de subClusterUuid del registro sin procesar se asigna al valor.
sub_msg Varios campos dentro de principal, target, network, security_result y about El campo sub_msg se analiza de manera diferente según el valor de msg_type. Se puede analizar como JSON, con patrones grok o con pares clave-valor. Luego, los campos extraídos se asignan a varios campos del UDM según sus nombres y la lógica del analizador. Esto incluye campos como ip_type, action, rule_id, direction, protocol, tcp_flag, src_ip, src_port, dst_ip, dst_port, data, msg y otros.
subcomp about.resource.attribute.labels.key La cadena "Sub Component" se asigna a la clave.
subcomp about.resource.attribute.labels.value El valor de subcomp del registro sin procesar se asigna al valor.
tenantId principal.resource.attribute.labels.key La cadena "tenantId" se asigna a la clave.
tenantId principal.resource.attribute.labels.value El valor de tenantId del registro sin procesar se asigna al valor.
tenantId additional.fields.key La cadena "tenantId" se asigna a la clave.
tenantId additional.fields.value.string_value El valor de tenantId del registro sin procesar se asigna al valor.
ts metadata.event_timestamp El valor de ts del registro sin procesar se analiza como una marca de tiempo y se asigna al campo del UDM.
ts timestamp El valor de ts del registro sin procesar se analiza como una marca de tiempo y se asigna al campo del UDM.
updateType additional.fields.key La cadena "updateType" se asigna a la clave.
updateType additional.fields.value.string_value El valor de updateType del registro sin procesar se asigna al valor.
uri_path network.http.referral_url El valor de uri_path del registro sin procesar se asigna al campo de UDM.
user_agent network.http.user_agent El valor de user_agent del registro sin procesar se asigna al campo de UDM.
user_agent network.http.parsed_user_agent El valor de user_agent del registro sin procesar se analiza como una cadena de agente de usuario y se asigna al campo del UDM.
USER principal.user.user_display_name El valor de USER del registro sin procesar se asigna al campo de UDM.
values.actorExternalId principal.resource.attribute.labels.key La cadena "actorExternalId" se asigna a la clave.
values.actorExternalId principal.resource.attribute.labels.value El valor de values.actorExternalId del registro sin procesar se asigna al valor.
values.actorExternalId additional.fields.key La cadena "actorExternalId" se asigna a la clave.
values.actorExternalId additional.fields.value.string_value El valor de values.actorExternalId del registro sin procesar se asigna al valor.
values.deviceType principal.resource.attribute.labels.key La cadena "deviceType" se asigna a la clave.
values.deviceType principal.resource.attribute.labels.value El valor de values.deviceType del registro sin procesar se asigna al valor.
values.deviceType additional.fields.key La cadena "deviceType" se asigna a la clave.
values.deviceType additional.fields.value.string_value El valor de values.deviceType del registro sin procesar se asigna al valor.
values.resourceType principal.resource.resource_subtype El valor de values.resourceType del registro sin procesar se asigna al campo de UDM. principal.resource.type se establece en "VIRTUAL_MACHINE".
values.success security_result.action Si el valor es "true" (sin distinción entre mayúsculas y minúsculas), se asigna a "ALLOW". Si es "false" (no distingue mayúsculas de minúsculas), se asigna a "BLOCK".
virtualservice additional.fields.key La cadena "virtualservice" se asigna a la clave.
virtualservice additional.fields.value.string_value El valor de virtualservice del registro sin procesar se asigna al valor.
vmw_vr_ops_appname about.resource.attribute.labels.key La cadena "Ops AppName" se asigna a la clave.
vmw_vr_ops_appname about.resource.attribute.labels.value El valor de vmw_vr_ops_appname del registro sin procesar se asigna al valor.
vmw_vr_ops_clustername about.resource.attribute.labels.key La cadena "Ops ClusterName" se asigna a la clave.
vmw_vr_ops_clustername about.resource.attribute.labels.value El valor de vmw_vr_ops_clustername del registro sin procesar se asigna al valor.
vmw_vr_ops_logtype about.resource.attribute.labels.key La cadena "Ops Logtype" se asigna a la clave.
vmw_vr_ops_logtype about.resource.attribute.labels.value El valor de vmw_vr_ops_logtype del registro sin procesar se asigna al valor.
vmw_vr_ops_nodename about.resource.attribute.labels.key La cadena "Ops NodeName" se asigna a la clave.
vmw_vr_ops_nodename about.resource.attribute.labels.value El valor de vmw_vr_ops_nodename del registro sin procesar se asigna al valor.
vs_name additional.fields.key La cadena "vs_name" se asigna a la clave.
vs_name additional.fields.value.string_value El valor de vs_name del registro sin procesar se asigna al valor. Se asigna la cadena "VMWARE". Se asigna la cadena "VMWARE_VREALIZE". Se asigna la cadena "VMWARE_VREALIZE".

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.