Coletar registros do VMware vRealize

Compatível com:

Este documento explica como ingerir registros do VMware Aria Suite (antes conhecido como VMware vRealize) no Google Security Operations usando o Bindplane. O analisador extrai campos das mensagens do syslog usando padrões grok com base no campo msg_type. Em seguida, ele mapeia esses campos extraídos para a UDM, processando vários formatos de registro e enriquecendo os dados com contexto adicional, como informações de rede, detalhes do usuário e atributos de recursos.

Antes de começar

Verifique se você tem os pré-requisitos a seguir:

  • Instância do Google SecOps
  • Windows 2016 ou mais recente ou um host Linux com systemd
  • Se você estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Acesso privilegiado ao software do VMware Aria Suite

Receber o arquivo de autenticação de ingestão do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. Baixe o arquivo de autenticação de ingestão. Salve o arquivo de forma segura no sistema em que o Bindplane será instalado.

Receber o ID do cliente do Google SecOps

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do Bindplane

Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

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

Instalação do Linux

  1. Abra um terminal com privilégios de root ou sudo.
  2. Execute este comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Outros recursos de instalação

Para mais opções de instalação, consulte o guia de instalação.

Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:
    • Localize o arquivo config.yaml. Normalmente, ele fica no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    • Abra o arquivo usando um editor de texto (por exemplo, nano, vi ou Bloco de Notas).
  2. Edite o arquivo config.yaml da seguinte forma:

    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
    
    • Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
    • Substitua <customer_id> pelo ID do cliente real.
    • Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente do Bindplane para aplicar as mudanças

  • Para reiniciar o agente do Bindplane em Linux, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente do Bindplane no Windows, use o console Serviços ou insira o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configurar o Syslog para o VMware Aria Suite

  1. Faça login na UI da Web do VMware Aria Suite.
  2. Acesse Gerenciamento > Encaminhamento de eventos.
  3. Clique em Novo destino.
  4. Informe os seguintes detalhes de configuração:
    • Nome: insira um nome exclusivo para identificar o servidor.
    • Host: insira o endereço IP do agente do Bindplane.
    • Protocolo: selecione Syslog.
    • Transporte: selecione UDP ou TCP, dependendo da configuração real do agente do Bindplane.
    • Porta: digite o número da porta do agente do Bindplane.
  5. Clique em Testar.
  6. Clique em Salvar.

Tabela de mapeamento da UDM

Campo de registro Mapeamento do UDM Lógica
actorDomain principal.hostname O valor de actorDomain do registro bruto é mapeado para o campo da UDM.
actorId principal.resource.attribute.labels.key A string "actorId" é atribuída à chave.
actorId principal.resource.attribute.labels.value O valor de actorId do registro bruto é atribuído ao valor.
actorId additional.fields.key A string "actorId" é atribuída à chave.
actorId additional.fields.value.string_value O valor de actorId do registro bruto é atribuído ao valor.
actorUserName principal.user.userid O valor de actorUserName do registro bruto é mapeado para o campo da UDM.
actorUuid principal.resource.attribute.labels.key A string "actorUuid" é atribuída à chave.
actorUuid principal.resource.attribute.labels.value O valor de actorUuid do registro bruto é atribuído ao valor.
actorUuid additional.fields.key A string "actorUuid" é atribuída à chave.
actorUuid additional.fields.value.string_value O valor de actorUuid do registro bruto é atribuído ao valor.
all_request_headers.sec-ch-ua-platform principal.platform O valor é derivado de all_request_headers.sec-ch-ua-platform. Se ele contiver "win" ou "windows" (sem diferenciar maiúsculas e minúsculas), o valor será "WINDOWS". Se ele contiver "Mac" (sem diferenciar maiúsculas e minúsculas), o valor será "MAC". Se ele contiver "lin" ou "linux" (sem diferenciar maiúsculas e minúsculas), o valor será "LINUX".
all_request_headers.X-Requested-With network.application_protocol Se o valor contiver "http" (sem diferenciar maiúsculas de minúsculas), ele será definido como "HTTP".
automation_tag metadata.product_event_type O valor de automation_tag do registro bruto é mapeado para o campo da UDM.
client_ip principal.ip O valor de client_ip do registro bruto é mapeado para o campo da UDM.
client_src_port principal.port O valor de client_src_port do registro bruto é mapeado para o campo da UDM.
comp about.resource.attribute.labels.key A string "Component" é atribuída à chave.
comp about.resource.attribute.labels.value O valor de comp do registro bruto é atribuído ao valor.
compression additional.fields.key A string "compression" é atribuída à chave.
compression additional.fields.value.string_value O valor de compression do registro bruto é atribuído ao valor.
data about.resource.attribute.labels.key A lógica depende de msg_type. Se msg_type for "Vpxa", "Hostd" ou "VSANMGMTSVC", o campo data será analisado usando pares de chave-valor, e chaves específicas (como opID, sub) serão mapeadas para about.resource.attribute.labels. Se msg_type for "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "ROUTING", "LOAD", "nsx", "nestdb", "cfgAgent", "NSX" ou "NSXV", o campo data será analisado em busca de chaves como comp, subcomp e s2comp, que serão mapeadas para about.resource.attribute.labels.
data about.resource.attribute.labels.value Consulte a lógica de about.resource.attribute.labels.key.
data security_result.description Se msg_type for "Vpxa", "Hostd" ou "VSANMGMTSVC", e depois de analisar data para pares de chave-valor, se um campo msg existir, o valor dele será atribuído a security_result.description.
description security_result.description Se o campo description existir no registro bruto, o valor dele será mapeado para o campo da UDM.
deviceId principal.resource.attribute.labels.key A string "deviceType" é atribuída à chave.
deviceId principal.resource.attribute.labels.value O valor de values.deviceType do registro bruto é atribuído ao valor.
deviceId additional.fields.key A string "deviceType" é atribuída à chave.
deviceId additional.fields.value.string_value O valor de values.deviceType do registro bruto é atribuído ao valor.
direction network.direction Se o valor for "OUT", ele será mapeado como "OUTBOUND". Se for "IN", será mapeado como "INBOUND".
dst_ip target.ip O valor de dst_ip do registro bruto é mapeado para o campo da UDM.
dst_port target.port O valor de dst_port do registro bruto é mapeado para o campo da UDM.
event_source principal.url O valor de event_source do registro bruto é mapeado para o campo da UDM.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.key A string "headers_received_from_server.Access-Control-Allow-Origin" é atribuída à chave.
headers_received_from_server.Access-Control-Allow-Origin target.resource.attribute.labels.value O valor de headers_received_from_server.Access-Control-Allow-Origin do registro bruto é atribuído ao valor.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.key A string "headers_received_from_server.Content-Security-Policy" é atribuída à chave.
headers_received_from_server.Content-Security-Policy principal.resource.attribute.labels.value O valor de headers_received_from_server.Content-Security-Policy do registro bruto é atribuído ao valor.
headers_received_from_server.Cookie target.resource.attribute.labels.key A string "headers_received_from_server.Cookie" é atribuída à chave.
headers_received_from_server.Cookie target.resource.attribute.labels.value O valor de headers_sent_to_server.Cookie do registro bruto é atribuído ao valor.
headers_received_from_server.set-cookie target.resource.attribute.labels.key A string "headers_received_from_server.set-cookie" é atribuída à chave.
headers_received_from_server.set-cookie target.resource.attribute.labels.value O valor de headers_received_from_server.set-cookie do registro bruto é atribuído ao valor.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.key A string "headers_sent_to_server.sec-ch-ua" é atribuída à chave.
headers_sent_to_server.sec-ch-ua principal.resource.attribute.labels.value O valor de headers_sent_to_server.sec-ch-ua do registro bruto é atribuído ao valor.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.key A string "headers_sent_to_server.X-CSRF-TOKEN" é atribuída à chave.
headers_sent_to_server.X-CSRF-TOKEN principal.resource.attribute.labels.value O valor de headers_sent_to_server.X-CSRF-TOKEN do registro bruto é atribuído ao valor.
hostname principal.hostname O valor de hostname do registro bruto é mapeado para o campo da UDM.
hostname intermediary.hostname O valor de hostname do registro bruto é mapeado para o campo da UDM.
host principal.hostname O valor de host do registro bruto é mapeado para o campo da UDM.
isLocal additional.fields.key A string "isLocal" é atribuída à chave.
isLocal additional.fields.value.string_value O valor de isLocal do registro bruto é atribuído ao valor.
json_data Vários campos em principal, target, additional e security_result O campo json_data do registro bruto é analisado como JSON, e os campos extraídos são mapeados para vários campos do UDM com base nos nomes e na lógica do analisador. Isso inclui campos como uuid, tenantId, actorId, actorUserName, actorDomain, sourceIp, objectName, objectType, objectId, values.resourceType, values.success e outros.
kv_data Vários campos O campo kv_data é analisado como pares de chave-valor, e os campos extraídos são mapeados para vários campos da UDM com base nos nomes e na lógica do analisador.
level security_result.severity Se o valor for "info" (sem diferenciar maiúsculas de minúsculas), ele será mapeado para "INFORMATIONAL".
log_id metadata.product_log_id O valor de log_id do registro bruto é mapeado para o campo da UDM.
message Vários campos O campo message é a principal fonte de dados e é analisado extensivamente usando padrões grok para extrair vários campos, como ts, hostname, msg_type, sub_msg e outros. Esses campos extraídos são usados para preencher diferentes campos da UDM com base na lógica do analisador.
method network.http.method O valor de method do registro bruto é mapeado para o campo da UDM.
msg security_result.description Se msg_type for "Vpxa", "Hostd", "VSANMGMTSVC", "SWITCHING", "FABRIC", "ROUTING", "LOAD-BALANCER", "nsx", "nestdb", "cfgAgent", "NSX", "NSXV" ou "Rhttpproxy", e depois de qualquer análise relevante de grok, se o campo msg existir, o valor dele será atribuído a security_result.description. Há casos especiais nessa lógica para conteúdo de mensagens específicas, como "conexão keepalive".
msg_type metadata.product_event_type Se msg_type for "FIREWALL_PKTLOG" ou "FIREWALL-PKTLOG", o valor será mapeado para o campo da UDM.
msg_type event_type O valor de event_type é determinado com base no msg_type. Se msg_type for "FIREWALL_PKTLOG" ou "FIREWALL-PKTLOG", o event_type será "NETWORK_CONNECTION". Se msg_type for "Vpxa", "Hostd", "VSANMGMTSVC", "nsx", "LOAD", "ROUTING", "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "nestdb", "cfgAgent", "NSX", "NSXV", "Rhttpproxy", "audispd" ou "vsantraceUrgent", o event_type será "GENERIC_EVENT". Se msg_type for "queries" ou "responses", event_type será "NETWORK_DNS". Se msg_type for "sudo", event_type será "STATUS_UPDATE". Se o campo description contiver "cmmdsTimeMachineDump", o event_type será "GENERIC_EVENT". Se o campo description contiver "prodjbossapp", o event_type será "GENERIC_EVENT". Se o campo description contiver "liagent@6876", o event_type será "GENERIC_EVENT". Se nenhuma das condições acima for atendida e o campo description não estiver vazio, o event_type será "GENERIC_EVENT". Se src_ip e dst_ip estiverem presentes, o event_type será "NETWORK_CONNECTION". Se src_ip, dst_ip ou hostname estiver presente, o event_type será "STATUS_UPDATE". Se has_principal_ip for verdadeiro e has_target_ip for verdadeiro, event_type será "SCAN_UNCATEGORIZED". Se has_principal_ip ou has_principal_host for verdadeiro, event_type será "STATUS_UPDATE". Se nenhuma das condições acima for atendida, o event_type será "GENERIC_EVENT".
objectName target.resource.attribute.labels.key A string "objectName" é atribuída à chave.
objectName target.resource.attribute.labels.value O valor de objectName do registro bruto é atribuído ao valor.
objectName additional.fields.key A string "objectName" é atribuída à chave.
objectName additional.fields.value.string_value O valor de objectName do registro bruto é atribuído ao valor.
objectId target.resource.attribute.labels.key A string "objectId" é atribuída à chave.
objectId target.resource.attribute.labels.value O valor de objectId do registro bruto é atribuído ao valor.
objectId additional.fields.key A string "objectId" é atribuída à chave.
objectId additional.fields.value.string_value O valor de objectId do registro bruto é atribuído ao valor.
objectType target.resource.attribute.labels.key A string "objectType" é atribuída à chave.
objectType target.resource.attribute.labels.value O valor de objectType do registro bruto é atribuído ao valor.
objectType additional.fields.key A string "objectType" é atribuída à chave.
objectType additional.fields.value.string_value O valor de objectType do registro bruto é atribuído ao valor.
objectType security_result.description Se objectType for "LAUNCH" e success não for "true", a descrição será "a tentativa de inicialização do aplicativo foi bem-sucedida". Se objectType for "LAUNCH_ERROR" e success não for "true", a descrição será "O usuário iniciou um aplicativo com uma solicitação inválida".
opID about.resource.attribute.labels.key A string "opId" é atribuída à chave.
opID about.resource.attribute.labels.value O valor de opID do registro bruto é atribuído ao valor.
pool additional.fields.key A string "pool" é atribuída à chave.
pool additional.fields.value.string_value O valor de pool do registro bruto é atribuído ao valor.
pool_name additional.fields.key A string "pool_name" é atribuída à chave.
pool_name additional.fields.value.string_value O valor de pool_name do registro bruto é atribuído ao valor.
protocol network.ip_protocol O valor de protocol do registro bruto é convertido para maiúsculas e mapeado para o campo da UDM. Se o valor for "PROTO", ele não será mapeado.
protocol additional.fields.key Se o valor de protocol for "PROTO", a string "ip_protocol" será atribuída à chave.
protocol additional.fields.value.string_value Se o valor de protocol for "PROTO", o valor de protocol do registro bruto será atribuído ao valor.
query_data network.dns.questions.name O campo query_data é analisado para extrair o question_name, que é mapeado para o campo do UDM.
query_data network.dns.questions.type O campo query_data é analisado para extrair o query_type, que é mapeado para o campo UDM usando uma pesquisa incluída em "dns_record_type.include".
query_data network.dns.questions.class O campo query_data é analisado para extrair o dns_class, que é mapeado para o campo da UDM usando uma pesquisa incluída em "dns_query_class_mapping.include".
referer principal.url O valor de referer do registro bruto é mapeado para o campo da UDM.
request_content_type additional.fields.key A string "request_content_type" é atribuída à chave.
request_content_type additional.fields.value.string_value O valor de request_content_type do registro bruto é atribuído ao valor.
request_state additional.fields.key A string "request_state" é atribuída à chave.
request_state additional.fields.value.string_value O valor de request_state do registro bruto é atribuído ao valor.
response_code network.http.response_code O valor de response_code ou server_response_code do registro bruto é mapeado para o campo do UDM.
response_content_type additional.fields.key A string "response_content_type" é atribuída à chave.
response_content_type additional.fields.value.string_value O valor de response_content_type do registro bruto é atribuído ao valor.
rule_id security_result.rule_id O valor de rule_id do registro bruto é mapeado para o campo da UDM.
s2comp about.resource.attribute.labels.key A string "S2-Component" é atribuída à chave.
s2comp about.resource.attribute.labels.value O valor de s2comp do registro bruto é atribuído ao valor.
server_ip target.ip O valor de server_ip do registro bruto é mapeado para o campo da UDM.
server_name target.hostname O valor de server_name do registro bruto é mapeado para o campo da UDM.
server_response_code network.http.response_code Consulte a lógica de response_code.
server_src_port target.port O valor de server_src_port do registro bruto é mapeado para o campo da UDM.
service_engine additional.fields.key A string "service_engine" é atribuída à chave.
service_engine additional.fields.value.string_value O valor de service_engine do registro bruto é atribuído ao valor.
sourceIp principal.ip O valor de sourceIp do registro bruto é mapeado para o campo da UDM.
ssl_cipher network.tls.cipher O valor de ssl_cipher do registro bruto é mapeado para o campo da UDM.
ssl_session_id network.session_id O valor de ssl_session_id do registro bruto é mapeado para o campo da UDM.
ssl_version network.tls.version_protocol O valor de ssl_version do registro bruto é mapeado para o campo da UDM.
sub about.resource.attribute.labels.key A string "Sub Component" é atribuída à chave.
sub about.resource.attribute.labels.value O valor de sub do registro bruto é atribuído ao valor.
subClusterUuid additional.fields.key A string "subClusterUuid" é atribuída à chave.
subClusterUuid additional.fields.value.string_value O valor de subClusterUuid do registro bruto é atribuído ao valor.
sub_msg Vários campos em principal, target, network, security_result e about O campo sub_msg é analisado de maneira diferente com base no msg_type. Ele pode ser analisado como JSON, usando padrões grok ou pares de chave-valor. Os campos extraídos são mapeados para vários campos da UDM com base nos nomes e na lógica do analisador. Isso inclui campos como ip_type, action, rule_id, direction, protocol, tcp_flag, src_ip, src_port, dst_ip, dst_port, data, msg e outros.
subcomp about.resource.attribute.labels.key A string "Sub Component" é atribuída à chave.
subcomp about.resource.attribute.labels.value O valor de subcomp do registro bruto é atribuído ao valor.
tenantId principal.resource.attribute.labels.key A string "tenantId" é atribuída à chave.
tenantId principal.resource.attribute.labels.value O valor de tenantId do registro bruto é atribuído ao valor.
tenantId additional.fields.key A string "tenantId" é atribuída à chave.
tenantId additional.fields.value.string_value O valor de tenantId do registro bruto é atribuído ao valor.
ts metadata.event_timestamp O valor de ts do registro bruto é analisado como um carimbo de data/hora e mapeado para o campo da UDM.
ts timestamp O valor de ts do registro bruto é analisado como um carimbo de data/hora e mapeado para o campo da UDM.
updateType additional.fields.key A string "updateType" é atribuída à chave.
updateType additional.fields.value.string_value O valor de updateType do registro bruto é atribuído ao valor.
uri_path network.http.referral_url O valor de uri_path do registro bruto é mapeado para o campo da UDM.
user_agent network.http.user_agent O valor de user_agent do registro bruto é mapeado para o campo da UDM.
user_agent network.http.parsed_user_agent O valor de user_agent do registro bruto é analisado como uma string de user agent e mapeado para o campo da UDM.
USER principal.user.user_display_name O valor de USER do registro bruto é mapeado para o campo da UDM.
values.actorExternalId principal.resource.attribute.labels.key A string "actorExternalId" é atribuída à chave.
values.actorExternalId principal.resource.attribute.labels.value O valor de values.actorExternalId do registro bruto é atribuído ao valor.
values.actorExternalId additional.fields.key A string "actorExternalId" é atribuída à chave.
values.actorExternalId additional.fields.value.string_value O valor de values.actorExternalId do registro bruto é atribuído ao valor.
values.deviceType principal.resource.attribute.labels.key A string "deviceType" é atribuída à chave.
values.deviceType principal.resource.attribute.labels.value O valor de values.deviceType do registro bruto é atribuído ao valor.
values.deviceType additional.fields.key A string "deviceType" é atribuída à chave.
values.deviceType additional.fields.value.string_value O valor de values.deviceType do registro bruto é atribuído ao valor.
values.resourceType principal.resource.resource_subtype O valor de values.resourceType do registro bruto é mapeado para o campo da UDM. O principal.resource.type é definido como "VIRTUAL_MACHINE".
values.success security_result.action Se o valor for "true" (sem diferenciar maiúsculas e minúsculas), ele será mapeado como "ALLOW". Se for "false" (sem diferenciar maiúsculas e minúsculas), será mapeado como "BLOCK".
virtualservice additional.fields.key A string "virtualservice" é atribuída à chave.
virtualservice additional.fields.value.string_value O valor de virtualservice do registro bruto é atribuído ao valor.
vmw_vr_ops_appname about.resource.attribute.labels.key A string "Ops AppName" é atribuída à chave.
vmw_vr_ops_appname about.resource.attribute.labels.value O valor de vmw_vr_ops_appname do registro bruto é atribuído ao valor.
vmw_vr_ops_clustername about.resource.attribute.labels.key A string "Ops ClusterName" é atribuída à chave.
vmw_vr_ops_clustername about.resource.attribute.labels.value O valor de vmw_vr_ops_clustername do registro bruto é atribuído ao valor.
vmw_vr_ops_logtype about.resource.attribute.labels.key A string "Ops Logtype" é atribuída à chave.
vmw_vr_ops_logtype about.resource.attribute.labels.value O valor de vmw_vr_ops_logtype do registro bruto é atribuído ao valor.
vmw_vr_ops_nodename about.resource.attribute.labels.key A string "Ops NodeName" é atribuída à chave.
vmw_vr_ops_nodename about.resource.attribute.labels.value O valor de vmw_vr_ops_nodename do registro bruto é atribuído ao valor.
vs_name additional.fields.key A string "vs_name" é atribuída à chave.
vs_name additional.fields.value.string_value O valor de vs_name do registro bruto é atribuído ao valor. A string "VMWARE" é atribuída. A string "VMWARE_VREALIZE" é atribuída. A string "VMWARE_VREALIZE" é atribuída.

Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.