Coletar registros do gerenciador de virtualização de rede e segurança (NSX) do VMware

Compatível com:

Este documento descreve como coletar os registros do Gerenciador de virtualização de rede e segurança (NSX) da VMware. O analisador extrai campos usando vários padrões grok com base no formato da mensagem. Em seguida, ele realiza a análise de valor-chave, a análise JSON e a lógica condicional para mapear os campos extraídos para o UDM, processando diferentes formatos de registro e enriquecendo os dados com mais contexto.

Antes de começar

  • Verifique se você tem uma instância do Google Security Operations.
  • Verifique se você está usando o Windows 2016 ou uma versão mais recente ou um host Linux com systemd.
  • Se estiver executando por trás de um proxy, verifique se as portas do firewall estão abertas.
  • Verifique se você tem acesso administrativo ao VMWare NSX.

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. Faça o download do arquivo de autenticação de transferência. Salve o arquivo com segurança no sistema em que o BindPlane será instalado.

Receber o ID de 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

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 raiz 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

Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. Acesse o arquivo de configuração:

    • Localize o arquivo config.yaml. Normalmente, ele está 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 Notepad).
  2. Edite o arquivo config.yaml da seguinte forma:

    receivers:
        udplog:
            # Replace the below port <54525> and IP <0.0.0.0> with your specific values
            listen_address: "0.0.0.0:54525" 
    
    exporters:
        chronicle/chronicle_w_labels:
            compression: gzip
            # Adjust the creds location below according the placement of the credentials file you downloaded
            creds: '{ json file for creds }'
            # Replace <customer_id> below with your actual ID that you copied
            customer_id: <customer_id>
            endpoint: malachiteingestion-pa.googleapis.com
            # You can apply ingestion labels below as preferred
            ingestion_labels:
            log_type: SYSLOG
            namespace: vmware_nsx
            raw_log_field: body
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID de cliente real.

  5. Atualize /path/to/ingestion-authentication-file.json para o caminho em que o arquivo de autenticação foi salvo na seção Receber o arquivo de autenticação de ingestão do Google SecOps.

Reinicie o agente BindPlane para aplicar as mudanças.

  • No Linux, para reiniciar o agente BindPlane, execute o seguinte comando:

    sudo systemctl restart bindplane-agent
    
  • No Windows, para reiniciar o agente BindPlane, use o console Services ou digite o seguinte comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configuração do Syslog para o NSX Edge

  1. Faça login no vSphere Web Client.
  2. Acesse Rede e segurança > NSX Edges.
  3. Selecione a instância específica do NSX Edge que você quer configurar.
  4. Acesse Configurações de Syslog:
    1. Para o NSX 6.4.4 e versões mais recentes:
      • Acesse Gerenciar > Configurações > Configurações do dispositivo.
      • Clique em Configurações > Alterar a configuração do Syslog.
    2. Para NSX 6.4.3 e versões anteriores:
      • Acesse Gerenciar > Configurações > Configuração.
      • Na caixa de diálogo Detalhes, clique em Mudar.
  5. Configure os detalhes do servidor Syslog:
    • Servidor: insira o endereço IP ou o nome do host do servidor Syslog (Bindplane).
    • Protocolo: selecione UDP ou TCP (dependendo da configuração do servidor de syslog/Bindplane).
    • Porta: digite o número da porta (dependendo da configuração do servidor syslog/Bindplane).
  6. Clique em OK para salvar as configurações.

Configuração do Syslog para o NSX Manager

  1. Faça login na interface da Web do NSX Manager com as credenciais de administrador da seguinte maneira:
    • https://<NSX-Manager-IP> ou https://<NSX-Manager-Hostname>.
  2. Acesse Gerenciar configurações do eletrodoméstico > Geral.
  3. Clique em Editar para configurar as configurações do servidor Syslog.
  4. Insira os detalhes do servidor Syslog:
    • Servidor: insira o endereço IP ou o nome do host do servidor Syslog (Bindplane).
    • Protocolo: selecione UDP ou TCP (dependendo da configuração do servidor de syslog/Bindplane).
    • Porta: digite o número da porta (dependendo da configuração do servidor syslog/Bindplane).
  5. Clique em OK para salvar as configurações.

Configuração do Syslog para o controlador do NSX

  1. Faça login no vSphere Web Client.
  2. Acesse Rede e segurança > Instalação e upgrade > Gerenciamento > Nós do controlador do NSX.
  3. Selecione o NSX Manager que gerencia os nós do controlador.
  4. Clique em Editar atributos comuns do controlador.
  5. Na caixa de diálogo Syslog Servers, clique em Add:
    1. Digite o nome ou o endereço IP do servidor Syslog.
    2. Selecione o protocolo UDP (dependendo da configuração do servidor syslog/Bindplane).
    3. Defina o Nível de registro (por exemplo, INFO).
  6. Clique em OK para salvar as configurações.

Tabela de mapeamento do UDM

Campo de registro Mapeamento do UDM Lógica
DST event.idm.read_only_udm.target.ip O endereço IP de destino é extraído do campo DST no registro bruto.
ID event.idm.read_only_udm.metadata.product_log_id O ID do registro do produto é extraído do campo ID no registro bruto.
MAC event.idm.read_only_udm.principal.mac O endereço MAC é extraído do campo MAC no registro bruto.
ModuleName event.idm.read_only_udm.metadata.product_event_type O tipo de evento do produto é extraído do campo ModuleName no registro bruto.
Operation event.idm.read_only_udm.principal.resource.attribute.labels.value A operação é extraída do campo Operation no registro bruto e adicionada como um rótulo com a chave "Operação".
PROTO event.idm.read_only_udm.network.ip_protocol O protocolo IP é extraído do campo PROTO no registro bruto.
RES event.idm.read_only_udm.target.resource.name O nome do recurso de destino é extraído do campo RES no registro bruto.
SRC event.idm.read_only_udm.principal.ip O endereço IP de origem é extraído do campo SRC no registro bruto.
SPT event.idm.read_only_udm.principal.port A porta de origem é extraída do campo SPT no registro bruto.
UserName event.idm.read_only_udm.principal.user.userid O ID do usuário é extraído do campo UserName no registro bruto.
app_type event.idm.read_only_udm.principal.application A aplicação principal é extraída do campo app_type no registro bruto.
application event.idm.read_only_udm.target.application O aplicativo de destino é extraído do campo application no registro bruto.
audit event.idm.read_only_udm.principal.resource.attribute.labels.value O valor da auditoria é extraído do campo audit no registro bruto e adicionado como um rótulo com a chave "audit".
cancelTimeUTC event.idm.read_only_udm.principal.resource.attribute.last_update_time O horário da última atualização é derivado do campo cancelTimeUTC no registro bruto.
client event.idm.read_only_udm.principal.ip ou event.idm.read_only_udm.principal.administrative_domain Se o campo client for um endereço IP, ele será mapeado para o IP principal. Caso contrário, ele é mapeado para o domínio administrativo principal.
comp event.idm.read_only_udm.principal.resource.attribute.labels.value O valor do componente é extraído do campo comp no registro bruto e adicionado como um rótulo com a chave "Comp".
datetime event.idm.read_only_udm.metadata.event_timestamp O carimbo de data/hora do evento é extraído do campo datetime no registro bruto.
description event.idm.read_only_udm.metadata.description A descrição é extraída do campo description no registro bruto.
details event.idm.read_only_udm.principal.resource.attribute.labels Os detalhes são extraídos do campo details no registro bruto e adicionados como rótulos.
direction event.idm.read_only_udm.network.direction Se o campo direction for "OUT", ele será mapeado para "SAÍDA".
dst_ip event.idm.read_only_udm.target.ip O endereço IP de destino é extraído do campo dst_ip no registro bruto.
DPT event.idm.read_only_udm.target.port A porta de destino é extraída do campo DPT no registro bruto.
errorCode event.idm.read_only_udm.security_result.detection_fields O código de erro é extraído do campo errorCode no registro bruto e adicionado como um campo de detecção.
eventType event.idm.read_only_udm.metadata.product_event_type O tipo de evento do produto é extraído do campo eventType no registro bruto.
filepath event.idm.read_only_udm.principal.process.file.full_path O caminho do arquivo é extraído do campo filepath no registro bruto.
hostname event.idm.read_only_udm.principal.ip O nome do host é extraído do campo hostname no registro bruto e, se for um endereço IP, é mapeado para o IP principal.
kv_data Vários campos do UDM Os pares de chave-valor em kv_data são mapeados para vários campos da UDM com base nas chaves.
kv_data1 Vários campos do UDM Os pares de chave-valor em kv_data1 são mapeados para vários campos da UDM com base nas chaves.
kv_data2 Vários campos do UDM Os pares de chave-valor em kv_data2 são mapeados para vários campos da UDM com base nas chaves.
kv_data3 Vários campos do UDM Os pares de chave-valor em kv_data3 são mapeados para vários campos da UDM com base nas chaves.
kv_data4 Vários campos do UDM Os pares de chave-valor em kv_data4 são mapeados para vários campos da UDM com base nas chaves.
level event.idm.read_only_udm.security_result.severity Se o campo level for "INFO", ele será mapeado como "INFORMATIONAL". Se for "ERROR", ele será mapeado para "ERROR".
managedExternally event.idm.read_only_udm.principal.resource.attribute.labels.value O valor managedExternally é extraído do campo managedExternally no registro bruto e adicionado como um rótulo com a chave "managedExternally".
message Vários campos do UDM O campo de mensagem é analisado para extrair vários campos do UDM.
message_data event.idm.read_only_udm.principal.resource.attribute.labels.value Os dados da mensagem são extraídos do campo message_data no registro bruto e adicionados como um rótulo com a chave "message".
network_status event.idm.read_only_udm.additional.fields O status da rede é extraído do campo network_status no registro bruto e adicionado como um campo adicional com a chave "Network_Connection_Status".
new_value Vários campos event.idm.read_only_udm.target O novo valor é extraído do campo new_value no registro bruto e usado para preencher vários campos de destino.
node event.idm.read_only_udm.principal.resource.attribute.labels.value O valor do nó é extraído do campo node no registro bruto e adicionado como um rótulo com a chave "node".
old_value Vários campos do UDM O valor antigo é extraído do campo old_value no registro bruto e usado para preencher vários campos da UDM.
payload Vários campos do UDM O payload é extraído do campo payload no registro bruto e usado para preencher vários campos do UDM.
pid event.idm.read_only_udm.target.process.pid O ID do processo é extraído do campo pid no registro bruto.
reqId event.idm.read_only_udm.metadata.product_log_id O ID do registro do produto é extraído do campo reqId no registro bruto.
resourceId event.idm.read_only_udm.principal.resource.product_object_id O ID do objeto do produto é extraído do campo resourceId no registro bruto.
s2comp event.idm.read_only_udm.principal.resource.attribute.labels.value O valor s2comp é extraído do campo s2comp no registro bruto e adicionado como um rótulo com a chave "s2comp".
ses event.idm.read_only_udm.network.session_id O ID da sessão é extraído do campo ses no registro bruto.
src_host event.idm.read_only_udm.principal.hostname O nome do host principal é extraído do campo src_host no registro bruto.
src_ip event.idm.read_only_udm.principal.ip O endereço IP de origem é extraído do campo src_ip no registro bruto.
src_ip1 event.idm.read_only_udm.principal.ip O endereço IP de origem é extraído do campo src_ip1 no registro bruto.
src_port event.idm.read_only_udm.principal.port A porta de origem é extraída do campo src_port no registro bruto.
startTimeUTC event.idm.read_only_udm.principal.resource.attribute.creation_time O horário de criação é derivado do campo startTimeUTC no registro bruto.
subcomp event.idm.read_only_udm.network.application_protocol ou event.idm.read_only_udm.principal.resource.attribute.labels.value Se o campo subcomp for "http", ele será mapeado para "HTTP". Caso contrário, ele será adicionado como um rótulo com a chave "Sub Comp".
tname event.idm.read_only_udm.principal.resource.attribute.labels.value O valor tname é extraído do campo tname no registro bruto e adicionado como um rótulo com a chave "tname".
type event.idm.read_only_udm.metadata.product_event_type O tipo de evento do produto é extraído do campo type no registro bruto.
uid event.idm.read_only_udm.principal.user.userid O ID do usuário é extraído do campo uid no registro bruto.
update event.idm.read_only_udm.principal.resource.attribute.labels.value O valor da atualização é extraído do campo update no registro bruto e adicionado como um rótulo com a chave "update".
user event.idm.read_only_udm.principal.user.user_display_name O nome de exibição do usuário é extraído do campo user no registro bruto.
vmw_cluster event.idm.read_only_udm.target.resource.name O nome do recurso de destino é extraído do campo vmw_cluster no registro bruto.
vmw_datacenter event.idm.read_only_udm.target.resource.attribute.labels.value O valor vmw_datacenter é extraído do campo vmw_datacenter no registro bruto e adicionado como um rótulo com a chave "vmw_datacenter".
vmw_host event.idm.read_only_udm.target.hostname ou event.idm.read_only_udm.target.ip Se o campo vmw_host for um nome de host, ele será mapeado para o nome de host de destino. Caso contrário, se for um endereço IP, ele será mapeado para o IP de destino.
vmw_object_id event.idm.read_only_udm.target.resource.product_object_id O ID do objeto do produto é extraído do campo vmw_object_id no registro bruto.
vmw_product event.idm.read_only_udm.target.application O aplicativo de destino é extraído do campo vmw_product no registro bruto.
vmw_vcenter event.idm.read_only_udm.target.cloud.availability_zone A zona de disponibilidade é extraída do campo vmw_vcenter no registro bruto.
vmw_vcenter_id event.idm.read_only_udm.target.resource.attribute.labels.value O valor vmw_vcenter_id é extraído do campo vmw_vcenter_id no registro bruto e adicionado como um rótulo com a chave "vmw_vcenter_id".
vmw_vr_ops_appname event.idm.read_only_udm.intermediary.application A solicitação intermediária é extraída do campo vmw_vr_ops_appname no registro bruto.
vmw_vr_ops_clustername event.idm.read_only_udm.intermediary.resource.name O nome do recurso intermediário é extraído do campo vmw_vr_ops_clustername no registro bruto.
vmw_vr_ops_clusterrole event.idm.read_only_udm.intermediary.resource.attribute.roles.name O nome da função de recurso intermediário é extraído do campo vmw_vr_ops_clusterrole no registro bruto.
vmw_vr_ops_hostname event.idm.read_only_udm.intermediary.hostname O nome do host intermediário é extraído do campo vmw_vr_ops_hostname no registro bruto.
vmw_vr_ops_id event.idm.read_only_udm.intermediary.resource.product_object_id O ID do objeto do produto intermediário é extraído do campo vmw_vr_ops_id no registro bruto.
vmw_vr_ops_logtype event.idm.read_only_udm.intermediary.resource.attribute.labels.value O valor vmw_vr_ops_logtype é extraído do campo vmw_vr_ops_logtype no registro bruto e adicionado como um rótulo com a chave "vmw_vr_ops_logtype".
vmw_vr_ops_nodename event.idm.read_only_udm.intermediary.resource.attribute.labels.value O valor vmw_vr_ops_nodename é extraído do campo vmw_vr_ops_nodename no registro bruto e adicionado como um rótulo com a chave "vmw_vr_ops_nodename". Determinado por uma série de instruções condicionais com base nos valores de outros campos. Os valores possíveis são USER_LOGIN, NETWORK_CONNECTION, STATUS_UPDATE e GENERIC_EVENT. Fixado em "VMWARE_NSX". Fixado em "VMWARE_NSX". Fixado em "VMWARE_NSX". Defina como "AUTHTYPE_UNSPECIFIED" se Operation for "LOGIN" e target_details não estiver em branco ou se message contiver "falha de autenticação" e application não estiver em branco. Defina como "SSH" se PROTO for "ssh2" ou como "HTTP" se subcomp for "http". Determinado por uma série de instruções condicionais com base nos valores de outros campos. Os valores possíveis são ALLOW e BLOCK. Defina como "VIRTUAL_MACHINE" se vmw_cluster não estiver vazio.

Alterações

2023-11-15

  • Melhoria: no campo "Valor antigo":
  • "unique_id" foi mapeado para "principal.resource.product_object_id".
  • "resource_type" foi mapeado para "principal.resource.sub_type".
  • "_create_user" e "_last_modified_user" foram associados a "principal.user.email_addresses".
  • Mapeamos "action" para "security_result.action".
  • "rule_id" foi associado a "security_result.rule_id".
  • "display_name" foi mapeado para "principal.resource.name".
  • "_last_modified_time" foi associado a "principal.resource.attribute.last_update_time".
  • "_create_time" foi associado a "principal.resource.attribute.creation_time".
  • "parent_path" foi mapeado para "principal.resource.parent".
  • O "path" foi mapeado para "principal.process.file.full_path".
  • "id" foi mapeado para "principal.resource.id".
  • No campo "Novo valor":
  • "resource_type" foi associado a "target.resource.sub_type".
  • "unique_id" foi mapeado para "target.resource.product_object_id".
  • O "path" foi mapeado para "target.process.file.full_path".
  • "display_name" foi mapeado para "target.resource.name".
  • O "id" foi mapeado para "target.resource.id".
  • Mapeou "vmw_host" para "target_details.hostname ou target_details.ip" com base no valor em vmw_host.
  • Mapeou "vmw_product" para "target.application".
  • Mapeamos "vmw_vcenter" para "target.cloud.availability_zone".
  • "vmw_cluster" foi mapeado para "target.resource.name".
  • "vmw_object_id" foi mapeado para "target.resource.product_object_id".
  • "vmw_datacenter" foi mapeado para "target.resource.attribute.labels".
  • "vmw_vcenter_id" foi mapeado para "target.resource.attribute.labels".
  • "vmw_vr_ops_logtype" foi mapeado para "intermediary.resource.attribute.labels".
  • Mapeamos "vmw_vr_ops_appname" para "intermediary.application".
  • "vmw_vr_ops_hostname" foi mapeado para "intermediary.hostname".
  • "vmw_vr_ops_nodename" foi mapeado para "intermediary.resource.attribute.labels".
  • Mapeamos "vmw_vr_ops_clustername" para "intermediary.resource.name".
  • "vmw_vr_ops_clusterrole" foi mapeado para "intermediary.resource.attribute.labels.roles.name".
  • "vmw_vr_ops_id" foi mapeado para "intermediary.resource.product_object_id".

2023-10-13

  • Melhoria: um padrão Grok foi modificado para analisar "sourceIp" com portas.
  • Mapeou "vmw_host","vmw_product","vmw_vcenter","vmw_cluster","vmw_vr_ops_id","vmw_object_id","vmw_datacenter","vmw_vcenter_id","vmw_vr_ops_logtype","vmw_vr_ops_appname","vmw_vr_ops_hostname","vmw_vr_ops_nodename","vmw_vr_ops_clustername","vmw_vr_ops_clusterrole","managedExternally","update","filepath","eventType","resourceId" para "principal.resource.attribute.labels".
  • Os campos mapeados em "payload" foram mapeados para "principal.resource.attribute.labels".
  • "client" foi associado a "principal.ip"
  • Os campos mapeados em "new_value" foram mapeados para "target.resource.attribute.labels".

2023-10-03

  • Melhoria: foi adicionado um padrão Grok para verificar se "sourceIp" é um endereço IP válido antes de mapeá-lo para o campo UDM.

2023-09-12

  • Melhoria: adição de suporte a registros syslog com campos "Novo valor" e "Valor antigo".

2023-06-26

  • Valores mapeados em "PASS", "DROP", "REJECT", "NAT", "NONAT", "RDR", "NORDR", "PUNT", "REDIRECT" e "COPY" para a chave "additional.fields" como "Network_Status".

2023-03-07

  • "errorCode" foi associado a "security_result.detection_fields".
  • "app_type" foi associado a "principal.application".
  • "Tname", "s2comp" e "node" foram mapeados para "principal.resource.attribute.labels".
  • "exe" foi mapeado para "target.process.file.full_path".
  • "dst_ip" foi mapeado para "target.ip".
  • "ses" foi mapeado para "network.session_id".
  • "hostname" foi mapeado para "principal.ip".
  • Mapeamos "direction" para "network.direction".
  • "reqId" foi mapeado para "metadata.product_log_id".

2022-06-10

  • Parser recém-criado