Coletar registros do VMware vCenter
Este documento explica como ingerir registros do VMware vCenter no Google Security Operations usando o Bindplane. O analisador transforma registros brutos em um modelo de dados unificado (UDM). Primeiro, ele tenta analisar os dados de registro como JSON e, se não for possível, trata os dados como uma mensagem syslog, extraindo campos usando padrões grok e mapeando-os para o esquema da UDM.
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 VMware vCenter
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.
- 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
- 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
Instale o agente do Bindplane no sistema operacional Windows ou Linux de acordo com as instruções a seguir.
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 root 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 o guia de instalação.
Configurar o agente do Bindplane para ingerir o Syslog e enviar ao Google SecOps
- 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).
- Localize o arquivo
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_VCENTER' 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 vCenter
- Faça login na UI da Web do vCenter Server Management.
- Acesse Syslog > Configuração de encaminhamento > Configurar.
- Selecione Criar configuração de encaminhamento e insira o endereço IP do agente do Bindplane.
- No menu suspenso Protocolo, selecione UDP ou TCP, dependendo da configuração real do agente do Bindplane.
- Na seção Porta, insira o número da porta do agente do Bindplane.
- Clique em Salvar.
- Clique em Enviar mensagem de teste e verifique se ela foi recebida.
Tabela de mapeamento da UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
Access Mask |
principal.process.access_mask | Convertido de hexadecimal para decimal. |
Account Domain |
principal.administrative_domain | |
Account Name |
principal.user.userid | |
ApplicationProtocol |
additional.fields | |
Authentication Package |
security_result.about.resource.name | |
Client Address |
principal.ip, principal.asset.ip | Analisado como IP. |
Client Port |
principal.port | Convertido em número inteiro. |
cmd |
target.process.command_line | |
date |
timestamp | Analisado como aaaa-MM-dd e mesclado com a hora como aaaa-MM-dd HH:mm:ss para "quando", analisado como data. |
date_time |
timestamp | Analisado como data com formatos RFC 3339, TIMESTAMP_ISO8601 e SYSLOGTIMESTAMP. |
desc |
metadata.description | |
eventid |
metadata.product_event_type | Mesclado com a tarefa como eventid - task. |
host_name |
principal.hostname, principal.asset.hostname | |
http_method |
network.http.method | |
ip |
target.ip, target.asset.ip | |
kv_data1 |
Analisados como pares de chave-valor. | |
kv_data2 |
Analisados como pares de chave-valor. | |
kv_msg1.cipher |
network.tls.cipher | |
kv_msg1.ctladdr |
intermediary.labels | |
kv_msg1.daemon |
security_result.about.labels | |
kv_msg1.from |
network.email.from | Se "mail_from" não contiver @, ele será anexado com @local. |
kv_msg1.msgid |
network.email.mail_id | |
kv_msg1.proto |
security_result.about.labels | |
kv_msg1.relay |
intermediary.hostname, intermediary.ip | Analisado como (HOSTNAME)? [IP] ou HOSTNAME. Se relay_domain estiver presente, defina como intermediary.hostname. Se relay_ip estiver presente, mescle com intermediary.ip. |
kv_msg1.size |
network.sent_bytes | Convertido para número inteiro sem sinal. |
kv_msg1.stat |
security_result.summary | |
kv_msg1.verify |
security_result.description, security_result.action | Se kv_msg1.verify for FAIL, security_result.action será definido como BLOCK. |
kv_msg1.version |
network.tls.version | |
labels.log_type |
metadata.product_event_type | |
labels.net.host.ip |
principal.ip, principal.asset.ip | |
labels.net.host.port |
principal.port | |
labels.net.peer.ip |
target.ip, target.asset.ip | |
labels.net.peer.port |
target.port | |
labels.net.transport |
network.ip_protocol | Se labels.net.transport for TCP, então TCP. |
level |
security_result.severity | Se o nível for INFO/Informational/DEBUG/info/Information, será INFORMATIONAL. Se for ERROR/error, será ERROR. Se for WARNING, será LOW. |
log.file.path |
target.process.file.full_path | |
logName |
security_result.category_details | |
Logon Account |
principal.user.userid | |
Logon Type |
extensions.auth.mechanism | Se logon_type for 2/Interactive, será INTERACTIVE. Se for 3/8, será NETWORK. Se for 4, será BATCH. Se for 5, será SERVICE. Se for 7, será UNLOCK. Se for 9, será NEW_CREDENTIALS. Se for 10, será REMOTE_INTERACTIVE. Se for 11, será CACHED_INTERACTIVE. Caso contrário, será MECHANISM_UNSPECIFIED. |
mail_from |
network.email.from | Se "mail_from" não contiver @, ele será anexado com @local. |
mail_to |
network.email.to | Se mail_to não contiver @, ele será anexado com @local. |
message |
Analisado com padrões grok. | |
namespace |
principal.namespace | |
port |
target.port | Convertido em número inteiro. |
process_id |
target.process.pid | |
providername |
principal.application | |
Relative Target Name |
target.file.full_path | |
resource.labels.project_id |
src.cloud.project.id | |
resource.type |
src.labels | |
response_status |
network.http.response_code | Convertido em número inteiro. |
sec_desc |
security_result.description | |
Security ID |
target.user.windows_sid | |
security_result_action_detail |
security_result.action_details | |
server_name |
target.hostname, target.asset.hostname | |
Share Name |
target.resource.name | |
Source Network Address |
principal.ip, principal.asset.ip | Analisado como IP. |
Source Port |
principal.port | Convertido em número inteiro. |
summary |
security_result.summary | |
target_host |
target.hostname, target.asset.hostname | |
target_url |
target.url | |
target_userid |
target.user.userid | |
time |
timestamp | Analisado como HH:mm:ss e mesclado com a data como yyyy-MM-dd HH:mm:ss para "quando", analisado como data. |
upn_name |
intermediary.url | |
URL |
target.url | |
User ID |
target.user.windows_sid | |
user_id |
principal.user.userid | |
UserAgent |
network.http.user_agent | |
metadata.event_type | Definido como STATUS_UPDATE se msg contiver API_HEALTH ou JobDispatcher. Definido como USER_LOGIN se msg contiver logged in as e target_userid não estiver vazio. Definido como SCAN_HOST se msg contiver Leave Validate. Definido como NETWORK_UNCATEGORIZED se msg contiver Getting IP Address from host. Definido como RESOURCE_WRITTEN se msg contiver Wrote vpxd health. Definido como NETWORK_HTTP se has_principal e has_target forem verdadeiros e application_protocol não estiver vazio. Definido como PROCESS_LAUNCH se process_id e cmd não estiverem vazios. Definido como USER_UNCATEGORIZED se user_id não estiver vazio ou eventid for 4776. Definido como USER_LOGIN se eventid for 4624/4768/4769. Definido como USER_LOGOUT se eventid for 4634/4647. Definido como USER_RESOURCE_ACCESS se eventid for 5145. Definido como STATUS_UPDATE se host_name não estiver vazio. Caso contrário, definido como GENERIC_EVENT. | |
extensions.auth.type | Defina como MACHINE se eventid for 4624/4768/4769. | |
metadata.log_type | Definido como VMWARE_VCENTER. | |
metadata.vendor_name | Definido como VMWARE. | |
metadata.product_name | Defina como VCENTER. | |
security_result.action | Definido como ALLOW se response_status for 200 ou action for Allow. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.