Recolha registos do VMware vRealize

Compatível com:

Este documento explica como carregar registos do VMware Aria Suite (anteriormente conhecido como VMware vRealize) para o Google Security Operations através do Bindplane. O analisador extrai campos das mensagens syslog através de padrões grok baseados no campo msg_type. Em seguida, mapeia estes campos extraídos para o UDM, processando vários formatos de registo e enriquecendo os dados com contexto adicional, como informações de rede, detalhes do utilizador e atributos de recursos.

Antes de começar

Certifique-se de que tem os seguintes pré-requisitos:

  • Instância do Google SecOps
  • Windows 2016 ou posterior, ou um anfitrião Linux com systemd
  • Se estiver a ser executado através de um proxy, certifique-se de que as portas da firewall estão abertas
  • Acesso privilegiado ao software VMware Aria Suite

Obtenha o ficheiro de autenticação de carregamento do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o Bindplane vai ser instalado.

Obtenha o ID de cliente do Google SecOps

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instale o agente do Bindplane no seu sistema operativo Windows ou Linux de acordo com as seguintes instruções.

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 raiz ou sudo.
  2. Execute o seguinte comando:

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

Recursos de instalação adicionais

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

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

  1. Aceda ao ficheiro de configuração:
    • Localize o ficheiro config.yaml. Normalmente, encontra-se no diretório /etc/bindplane-agent/ no Linux ou no diretório de instalação no Windows.
    • Abra o ficheiro com um editor de texto (por exemplo, nano, vi ou Bloco de notas).
  2. Edite o ficheiro 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
    

Reinicie o agente do Bindplane para aplicar as alterações

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

    sudo systemctl restart bindplane-agent
    
  • Para reiniciar o agente Bindplane no Windows, pode usar a consola Serviços ou introduzir o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configure o Syslog para o VMware Aria Suite

  1. Inicie sessão na IU Web do VMware Aria Suite.
  2. Aceda a Administração > Encaminhamento de eventos.
  3. Clique em Novo destino.
  4. Indique os seguintes detalhes de configuração:
    • Nome: introduza um nome exclusivo para identificar o servidor.
    • Anfitrião: introduza o endereço IP do agente do Bindplane.
    • Protocolo: selecione Syslog.
    • Transporte: selecione UDP ou TCP, consoante a configuração real do agente Bindplane.
    • Porta: introduza o número da porta do agente do Bindplane.
  5. Clique em Testar.
  6. Clique em Guardar.

Tabela de mapeamento da UDM

Campo de registo Mapeamento de UDM Lógica
actorDomain principal.hostname O valor de actorDomain do registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor.
actorUserName principal.user.userid O valor de actorUserName do registo não processado é 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 registo não processado é 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 registo não processado é 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 contiver "win" ou "windows" (sem distinção entre maiúsculas e minúsculas), o valor é "WINDOWS". Se contiver "Mac" (não é sensível a maiúsculas e minúsculas), o valor é "MAC". Se contiver "lin" ou "linux" (sem distinção entre maiúsculas e minúsculas), o valor é "LINUX".
all_request_headers.X-Requested-With network.application_protocol Se o valor contiver "http" (não é sensível a maiúsculas e minúsculas), o valor é definido como "HTTP".
automation_tag metadata.product_event_type O valor de automation_tag do registo não processado é mapeado para o campo da UDM.
client_ip principal.ip O valor de client_ip do registo não processado é mapeado para o campo da UDM.
client_src_port principal.port O valor de client_src_port do registo não processado é 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 registo não processado é 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 registo não processado é 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 é analisado através de pares de chave-valor e chaves específicas (como opID e sub) sã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 é analisado para chaves como comp, subcomp e s2comp, que são depois mapeadas para about.resource.attribute.labels.
data about.resource.attribute.labels.value Veja a lógica de about.resource.attribute.labels.key.
data security_result.description Se msg_type for "Vpxa", "Hostd" ou "VSANMGMTSVC" e, após a análise de data para pares de chave/valor, se existir um campo msg, o respetivo valor é atribuído a security_result.description.
description security_result.description Se o campo description existir no registo não processado, o respetivo valor é mapeado para o campo 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 registo não processado é 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 registo não processado é atribuído ao valor.
direction network.direction Se o valor for "OUT", é mapeado para "OUTBOUND". Se for "IN", é mapeado para "INBOUND".
dst_ip target.ip O valor de dst_ip do registo não processado é mapeado para o campo da UDM.
dst_port target.port O valor de dst_port do registo não processado é mapeado para o campo da UDM.
event_source principal.url O valor de event_source do registo não processado é 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 registo não processado é 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" está 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 registo não processado é atribuído ao valor.
headers_received_from_server.Cookie target.resource.attribute.labels.key A string "headers_received_from_server.Cookie" está atribuída à chave.
headers_received_from_server.Cookie target.resource.attribute.labels.value O valor de headers_sent_to_server.Cookie do registo não processado é atribuído ao valor.
headers_received_from_server.set-cookie target.resource.attribute.labels.key A string "headers_received_from_server.set-cookie" está atribuída à chave.
headers_received_from_server.set-cookie target.resource.attribute.labels.value O valor de headers_received_from_server.set-cookie do registo não processado é 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" está 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 registo não processado é 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" está 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 registo não processado é atribuído ao valor.
hostname principal.hostname O valor de hostname do registo não processado é mapeado para o campo da UDM.
hostname intermediary.hostname O valor de hostname do registo não processado é mapeado para o campo da UDM.
host principal.hostname O valor de host do registo não processado é mapeado para o campo da UDM.
isLocal additional.fields.key A string "isLocal" está atribuída à chave.
isLocal additional.fields.value.string_value O valor de isLocal do registo não processado é atribuído ao valor.
json_data Vários campos em principal, target, additional e security_result O campo json_data do registo não processado é analisado como JSON e os campos extraídos são mapeados para vários campos da UDM com base nos respetivos nomes e na lógica do analisador. Isto 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 chave-valor e os campos extraídos são mapeados para vários campos UDM com base nos respetivos nomes e na lógica do analisador.
level security_result.severity Se o valor for "info" (sem distinção entre maiúsculas e minúsculas), é mapeado para "INFORMATIONAL".
log_id metadata.product_log_id O valor de log_id do registo não processado é mapeado para o campo da UDM.
message Vários campos O campo message é a principal origem de dados e é analisado extensivamente através de padrões grok para extrair vários campos, como ts, hostname, msg_type, sub_msg e outros. Estes campos extraídos são, em seguida, usados para preencher diferentes campos da UDM com base na lógica do analisador.
method network.http.method O valor de method do registo não processado é 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, após qualquer análise relevante de grok, se o campo msg existir, o respetivo valor é atribuído a security_result.description. Existem casos especiais nesta lógica para conteúdo de mensagens específico, como "manter ligação ativa".
msg_type metadata.product_event_type Se msg_type for "FIREWALL_PKTLOG" ou "FIREWALL-PKTLOG", o respetivo valor é mapeado para o campo 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", event_type é "NETWORK_CONNECTION". Se msg_type for "Vpxa", "Hostd", "VSANMGMTSVC", "nsx", "LOAD", "ROUTING", "SWITCHING", "FABRIC", "MONITORING", "SYSTEM", "nestdb", "cfgAgent", "NSX", "NSXV", "Rhttpproxy", "audispd" ou "vsantraceUrgent", event_type é "GENERIC_EVENT". Se msg_type for "queries" ou "responses", event_type é "NETWORK_DNS". Se msg_type for "sudo", event_type é "STATUS_UPDATE". Se o campo description contiver "cmmdsTimeMachineDump", o campo event_type é "GENERIC_EVENT". Se o campo description contiver "prodjbossapp", o campo event_type é "GENERIC_EVENT". Se o campo description contiver "liagent@6876", o campo event_type é "GENERIC_EVENT". Se nenhuma das condições acima for cumprida e o campo description não estiver vazio, o campo event_type é "GENERIC_EVENT". Se src_ip e dst_ip estiverem presentes, event_type é "NETWORK_CONNECTION". Se src_ip, dst_ip ou hostname estiver presente, event_type é "STATUS_UPDATE". Se has_principal_ip for verdadeiro e has_target_ip for verdadeiro, event_type é "SCAN_UNCATEGORIZED". Se has_principal_ip for verdadeiro ou has_principal_host for verdadeiro, event_type é "STATUS_UPDATE". Se nenhuma das condições acima for cumprida, o event_type é "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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor.
objectType security_result.description Se objectType for "LAUNCH" e success não for "true", a descrição é "A tentativa de lançamento da aplicação foi bem-sucedida". Se objectType for "LAUNCH_ERROR" e success não for "true", a descrição é "O utilizador iniciou uma aplicação com um pedido inválido".
opID about.resource.attribute.labels.key A string "opId" é atribuída à chave.
opID about.resource.attribute.labels.value O valor de opID do registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor.
protocol network.ip_protocol O valor de protocol do registo não processado é convertido em maiúsculas e mapeado para o campo UDM. Se o valor for "PROTO", não é mapeado.
protocol additional.fields.key Se o valor de protocol for "PROTO", a string "ip_protocol" é atribuída à chave.
protocol additional.fields.value.string_value Se o valor de protocol for "PROTO", o valor de protocol do registo não processado é atribuído ao valor.
query_data network.dns.questions.name O campo query_data é analisado para extrair o question_name, que é, em seguida, mapeado para o campo UDM.
query_data network.dns.questions.type O campo query_data é analisado para extrair o query_type, que é, em seguida, mapeado para o campo UDM através de uma pesquisa incluída a partir de "dns_record_type.include".
query_data network.dns.questions.class O campo query_data é analisado para extrair o dns_class, que é depois mapeado para o campo UDM através de uma pesquisa incluída a partir de "dns_query_class_mapping.include".
referer principal.url O valor de referer do registo não processado é mapeado para o campo da UDM.
request_content_type additional.fields.key A string "request_content_type" está atribuída à chave.
request_content_type additional.fields.value.string_value O valor de request_content_type do registo não processado é atribuído ao valor.
request_state additional.fields.key A string "request_state" está atribuída à chave.
request_state additional.fields.value.string_value O valor de request_state do registo não processado é atribuído ao valor.
response_code network.http.response_code O valor de response_code ou server_response_code do registo não processado é mapeado para o campo 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 registo não processado é atribuído ao valor.
rule_id security_result.rule_id O valor de rule_id do registo não processado é mapeado para o campo da UDM.
s2comp about.resource.attribute.labels.key A string "S2-Component" está atribuída à chave.
s2comp about.resource.attribute.labels.value O valor de s2comp do registo não processado é atribuído ao valor.
server_ip target.ip O valor de server_ip do registo não processado é mapeado para o campo da UDM.
server_name target.hostname O valor de server_name do registo não processado é mapeado para o campo da UDM.
server_response_code network.http.response_code Veja a lógica de response_code.
server_src_port target.port O valor de server_src_port do registo não processado é 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 registo não processado é atribuído ao valor.
sourceIp principal.ip O valor de sourceIp do registo não processado é mapeado para o campo da UDM.
ssl_cipher network.tls.cipher O valor de ssl_cipher do registo não processado é mapeado para o campo da UDM.
ssl_session_id network.session_id O valor de ssl_session_id do registo não processado é mapeado para o campo da UDM.
ssl_version network.tls.version_protocol O valor de ssl_version do registo não processado é mapeado para o campo da UDM.
sub about.resource.attribute.labels.key A string "Sub Component" está atribuída à chave.
sub about.resource.attribute.labels.value O valor de sub do registo não processado é 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 registo não processado é atribuído ao valor.
sub_msg Vários campos em principal, target, network, security_result e about O campo sub_msg é analisado de forma diferente com base no msg_type. Pode ser analisado como JSON, usando padrões grok ou usando pares de chave-valor. Os campos extraídos são, em seguida, mapeados para vários campos da UDM com base nos respetivos nomes e na lógica do analisador. Isto 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" está atribuída à chave.
subcomp about.resource.attribute.labels.value O valor de subcomp do registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor.
ts metadata.event_timestamp O valor de ts do registo não processado é analisado como um carimbo de data/hora e mapeado para o campo UDM.
ts timestamp O valor de ts do registo não processado é analisado como um carimbo de data/hora e mapeado para o campo UDM.
updateType additional.fields.key A string "updateType" é atribuída à chave.
updateType additional.fields.value.string_value O valor de updateType do registo não processado é atribuído ao valor.
uri_path network.http.referral_url O valor de uri_path do registo não processado é mapeado para o campo da UDM.
user_agent network.http.user_agent O valor de user_agent do registo não processado é mapeado para o campo da UDM.
user_agent network.http.parsed_user_agent O valor de user_agent do registo não processado é analisado como uma string de agente do utilizador e mapeado para o campo do UDM.
USER principal.user.user_display_name O valor de USER do registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor.
values.resourceType principal.resource.resource_subtype O valor de values.resourceType do registo não processado é mapeado para o campo da UDM. O principal.resource.type está definido como "VIRTUAL_MACHINE".
values.success security_result.action Se o valor for "true" (sem distinção entre maiúsculas e minúsculas), é mapeado para "ALLOW". Se for "false" (não é sensível a maiúsculas e minúsculas), é mapeado para "BLOCK".
virtualservice additional.fields.key A string "virtualservice" é atribuída à chave.
virtualservice additional.fields.value.string_value O valor de virtualservice do registo não processado é atribuído ao valor.
vmw_vr_ops_appname about.resource.attribute.labels.key A string "Ops AppName" está atribuída à chave.
vmw_vr_ops_appname about.resource.attribute.labels.value O valor de vmw_vr_ops_appname do registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é 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 registo não processado é atribuído ao valor. A string "VMWARE" é atribuída. A string "VMWARE_VREALIZE" está atribuída. A string "VMWARE_VREALIZE" está atribuída.

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