Coletar registros do gerenciador de virtualização de rede e segurança (NSX) do VMware
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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Agentes de coleta.
- 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
- Faça login no console do Google SecOps.
- Acesse Configurações do SIEM > Perfil.
- Copie e salve o ID do cliente na seção Detalhes da organização.
Instalar o agente do BindPlane
Instalação do Windows
- Abra o Prompt de Comando ou o PowerShell como administrador.
Execute este comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Instalação do Linux
- Abra um terminal com privilégios de raiz ou sudo.
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 este guia de instalação.
Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps
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).
- Localize o arquivo
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
Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.
Substitua
<customer_id>
pelo ID de 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 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
- Faça login no vSphere Web Client.
- Acesse Rede e segurança > NSX Edges.
- Selecione a instância específica do NSX Edge que você quer configurar.
- Acesse Configurações de Syslog:
- 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.
- Para NSX 6.4.3 e versões anteriores:
- Acesse Gerenciar > Configurações > Configuração.
- Na caixa de diálogo Detalhes, clique em Mudar.
- Para o NSX 6.4.4 e versões mais recentes:
- 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).
- Clique em OK para salvar as configurações.
Configuração do Syslog para o NSX Manager
- Faça login na interface da Web do NSX Manager com as credenciais de administrador da seguinte maneira:
https://<NSX-Manager-IP>
ouhttps://<NSX-Manager-Hostname>
.
- Acesse Gerenciar configurações do eletrodoméstico > Geral.
- Clique em Editar para configurar as configurações do servidor Syslog.
- 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).
- Clique em OK para salvar as configurações.
Configuração do Syslog para o controlador do NSX
- Faça login no vSphere Web Client.
- Acesse Rede e segurança > Instalação e upgrade > Gerenciamento > Nós do controlador do NSX.
- Selecione o NSX Manager que gerencia os nós do controlador.
- Clique em Editar atributos comuns do controlador.
- Na caixa de diálogo Syslog Servers, clique em Add:
- Digite o nome ou o endereço IP do servidor Syslog.
- Selecione o protocolo UDP (dependendo da configuração do servidor syslog/Bindplane).
- Defina o Nível de registro (por exemplo,
INFO
).
- 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