Recoger registros de VMware vRealize

Disponible en:

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

Antes de empezar

Asegúrate de que cumples los siguientes requisitos previos:

  • Instancia de Google SecOps
  • Windows 2016 o versiones posteriores, o un host Linux con systemd
  • Si se ejecuta a través de un proxy, asegúrate de que los puertos del cortafuegos estén abiertos.
  • Acceso privilegiado al software de VMware Aria Suite

Obtener el archivo de autenticación de ingestión de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Agentes de recogida.
  3. Descarga el archivo de autenticación de ingestión. Guarda el archivo de forma segura en el sistema en el que se instalará Bindplane.

Obtener el ID de cliente de Google SecOps

  1. Inicia sesión en la consola de Google SecOps.
  2. Ve a Configuración de SIEM > Perfil.
  3. Copia y guarda el ID de cliente de la sección Detalles de la organización.

Instalar el agente de Bindplane

Instala el agente de Bindplane en tu sistema operativo Windows o Linux siguiendo las instrucciones que se indican a continuación.

Instalación de ventanas

  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 de Linux

  1. Abre un terminal con privilegios de superusuario 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 ver más opciones de instalación, consulta la guía de instalación.

Configurar el agente de BindPlane para ingerir Syslog y enviarlo a Google SecOps

  1. Accede al archivo de configuración:
    • Busca el archivo config.yaml. Normalmente, 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 Servicios o introducir el siguiente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar Syslog para VMware Aria Suite

  1. Inicia sesión en la interfaz de usuario web de VMware Aria Suite.
  2. Vaya a Administración > Reenvío de eventos.
  3. Haga clic en Nuevo destino.
  4. Proporcione los siguientes detalles de configuración:
    • Nombre: introduce un nombre único para identificar el servidor.
    • Host: introduce la dirección IP del agente de Bindplane.
    • Protocolo: selecciona Syslog.
    • Transporte: selecciona UDP o TCP, según la configuración del agente de Bindplane.
    • Puerto: introduce el número de puerto del agente de Bindplane.
  5. Haz clic en Test (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 entre mayúsculas y minúsculas), el valor es "WINDOWS". Si contiene "Mac" (sin distinguir entre mayúsculas y minúsculas), el valor es "MAC". Si contiene "lin" o "linux" (sin distinguir entre mayúsculas y minúsculas), el valor es "LINUX".
all_request_headers.X-Requested-With network.application_protocol Si el valor contiene "http" (sin distinguir entre mayúsculas y minúsculas), se le asigna el valor "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 mediante 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 para buscar claves como comp, subcomp y s2comp, que 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 buscar pares clave-valor, existe el 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 de 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 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 de UDM en función de sus nombres y de la lógica del analizador. Esto incluye campos como uuid, tenantId, actorId, actorUserName, actorDomain, sourceIp, objectName, objectType, objectId, values.resourceType y values.success, entre 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 de UDM en función de sus nombres y de la lógica del analizador.
level security_result.severity Si el valor es "info" (sin distinguir entre mayúsculas y 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 fuente principal de datos y se analiza exhaustivamente mediante patrones grok para extraer varios campos, como ts, hostname, msg_type, sub_msg y otros. Estos campos extraídos se usan para rellenar diferentes campos de UDM en función de 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 analizar cualquier grok pertinente, si existe el campo msg, su valor se asigna a security_result.description. Hay casos especiales dentro de esta lógica para contenido de mensajes específico, como "mantener conexión activa".
msg_type metadata.product_event_type Si msg_type es "FIREWALL_PKTLOG" o "FIREWALL-PKTLOG", su valor se asigna al campo 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 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 valor de event_type es "GENERIC_EVENT". Si están presentes src_ip y dst_ip, el valor de event_type es "NETWORK_CONNECTION". Si se incluye src_ip, dst_ip o hostname, el valor de event_type es "STATUS_UPDATE". Si has_principal_ip es true y has_target_ip es true, event_type es "SCAN_UNCATEGORIZED". Si has_principal_ip es true o has_principal_host es true, event_type es "STATUS_UPDATE". Si no se cumple ninguna de las condiciones anteriores, el valor de 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 "application launch attempt was successful" (El intento de iniciar la aplicación se ha realizado correctamente). Si objectType es "LAUNCH_ERROR" y success no es "true", la descripción es "User launched an application with an invalid request" (El usuario ha iniciado 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 de UDM. Si el valor es "PROTO", no se asigna.
protocol additional.fields.key Si el valor de protocol es "PROTO", se asigna la cadena "ip_protocol" 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.
query_data network.dns.questions.name El campo query_data se analiza para extraer el question_name, que se asigna al campo de UDM.
query_data network.dns.questions.type El campo query_data se analiza para extraer el query_type, que se asigna al campo de UDM mediante 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 se asigna al campo de UDM mediante 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 de principal, target, network, security_result y about El campo sub_msg se analiza de forma diferente en función de msg_type. Se puede analizar como JSON, usando patrones grok o pares clave-valor. Los campos extraídos se asignan a varios campos de UDM en función de sus nombres y de 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 de UDM.
ts timestamp El valor de ts del registro sin procesar se analiza como una marca de tiempo y se asigna al campo de 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 user-agent y se asigna al campo 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. El valor de principal.resource.type es "VIRTUAL_MACHINE".
values.success security_result.action Si el valor es "true" (sin distinguir entre mayúsculas y minúsculas), se asigna a "ALLOW". Si es "false" (sin distinguir entre mayúsculas y 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? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.