Recolha registos do Versa Networks Secure Access Service Edge (SASE)
Este documento descreve como pode recolher os registos do Versa Networks Secure Access Service Edge (SASE). O analisador extrai pares de chave-valor após um filtro grok inicial. Em seguida, mapeia estes valores para o modelo de dados unificado (UDM), processando vários formatos de registo, como eventos de firewall, registos de aplicações e registos de alarmes, e realiza conversões e enriquecimentos para campos específicos, como o protocolo IP e a pontuação de risco.
Antes de começar
- Certifique-se de que tem uma instância do Google Security Operations.
- Certifique-se de que está a usar o Windows 2016 ou posterior, ou um anfitrião Linux com
systemd
. - Se estiver a executar o serviço através de um proxy, certifique-se de que as portas da firewall estão abertas.
- Certifique-se de que tem acesso privilegiado ao Versa SASE.
Obtenha o ficheiro de autenticação de carregamento do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Agentes de recolha.
- Transfira o ficheiro de autenticação de carregamento. Guarde o ficheiro de forma segura no sistema onde o agente do Bindplane vai ser instalado.
Obtenha o ID de cliente do Google SecOps
- Inicie sessão na consola Google SecOps.
- Aceda a Definições do SIEM > Perfil.
- Copie e guarde o ID do cliente da secção Detalhes da organização.
Instale o agente do Bindplane
Instalação do Windows
- Abra a Linha de comandos ou o PowerShell como administrador.
Execute o seguinte 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 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 este guia de instalação.
Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps
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).
- Localize o ficheiro
Edite o ficheiro
config.yaml
da seguinte forma:receivers: tcplog: # Replace the port and IP address as required listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: `/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 ingestion_labels: log_type: SYSLOG namespace: versa_networks_sase raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - tcplog 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 onde o ficheiro de autenticação foi guardado na secção Obtenha o ficheiro de autenticação de carregamento do Google SecOps.
Reinicie o agente do Bindplane para aplicar as alterações
No Linux, para reiniciar o agente Bindplane, execute o seguinte comando:
sudo systemctl restart bindplane-agent
No Windows, para reiniciar o agente Bindplane, pode usar a consola Serviços ou introduzir o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configure a SASE da Versa Networks
Os administradores têm de configurar coletores remotos em cada nó do Versa Analytics para encaminhar registos para sistemas de terceiros.
Para configurar os nós de estatísticas do Versa, faça o seguinte:
- Ative o encaminhamento de registos
- Ative o registo do ID da sessão
Ative o encaminhamento de registos
- Inicie sessão no servidor de estatísticas do Versa.
- Aceda à CLI executando o comando
cli
. - Mude para o modo de configuração executando o comando
configure
e, de seguida, introduzaload merge terminal
. Copie e cole os seguintes comandos para configurar o encaminhamento de registos:
- Substitua
<collector_ip>
e<collector_port>
pelo endereço IP e pela porta do seu coletor de syslog (Bindplane).
set system analytics log-collector-exporter destination-address <collector_ip> set system analytics log-collector-exporter destination-port <collector_port> set system analytics log-collector-exporter transport tcp set system analytics log-collector-exporter log-types firewall-log set system analytics log-collector-exporter log-types threat-log commit
- Substitua
Guarde a configuração:
save
Ative o registo do ID da sessão
Para registar informações relacionadas com o IP, ative o registo do ID da sessão.
- Inicie sessão no Versa Director.
- Mude para a vista de realizador.
- Aceda a Configuração > Dispositivos > Inquilino > Dispositivo para aceder a Vista do dispositivo.
- Selecione Configuração > Outros > Sistema > Configuração > Configuração.
- No painel Parâmetros, clique em Editar.
- Na janela Editar parâmetros, selecione LEF.
Na secção Firewall, selecione a caixa de verificação Incluir registo do ID da sessão.
Clique em OK.
Tabela de mapeamento da UDM
Campo de registo | Mapeamento de UDM | Lógica |
---|---|---|
accCkt |
additional.fields[].key : "accCkt"additional.fields[].value.string_value : accCkt |
Valor retirado diretamente do campo accCkt . |
accCktId |
additional.fields[].key : "accCktId"additional.fields[].value.string_value : accCktId |
Valor retirado diretamente do campo accCktId . |
accCktName |
additional.fields[].key : "accCktName"additional.fields[].value.string_value : accCktName |
Valor retirado diretamente do campo accCktName . |
accessType |
additional.fields[].key : "accessType"additional.fields[].value.string_value : accessType |
Valor retirado diretamente do campo accessType . |
action |
security_result.action : action |
Se action , type , idpAction , avAction ou urlAction for "permitir", então ALLOW . Se action , type , idpAction , avAction ou urlAction forem "rejeitar", "ignorar", "bloquear" ou "negar", então BLOCK . Se idpAction for qualquer outra coisa que não UNKNOWN_ACTION . |
alarmCause |
security_result.detection_fields[].key : "alarmCause"security_result.detection_fields[].value : alarmCause |
Valor retirado diretamente do campo alarmCause . |
alarmClass |
security_result.detection_fields[].key : "alarmClass"security_result.detection_fields[].value : alarmClass |
Valor retirado diretamente do campo alarmClass . |
alarmClearable |
security_result.detection_fields[].key : "alarmClearable"security_result.detection_fields[].value : alarmClearable |
Valor retirado diretamente do campo alarmClearable . |
alarmEventType |
metadata.product_event_type : alarmEventType |
Valor retirado diretamente do campo alarmEventType . |
alarmKey |
security_result.detection_fields[].key : "alarmKey"security_result.detection_fields[].value : alarmKey |
Valor retirado diretamente do campo alarmKey . |
alarmKind |
security_result.detection_fields[].key : "alarmKind"security_result.detection_fields[].value : alarmKind |
Valor retirado diretamente do campo alarmKind . |
alarmOwner |
security_result.detection_fields[].key : "alarmOwner"security_result.detection_fields[].value : alarmOwner |
Valor retirado diretamente do campo alarmOwner . |
alarmSeqNo |
security_result.detection_fields[].key : "alarmSeqNo"security_result.detection_fields[].value : alarmSeqNo |
Valor retirado diretamente do campo alarmSeqNo . |
alarmSeverity |
security_result.severity_details : alarmSeverity |
Valor retirado diretamente do campo alarmSeverity . |
alarmText |
security_result.summary : alarmText |
Valor retirado diretamente do campo alarmText , com as aspas duplas removidas. |
alarmType |
security_result.description : alarmType |
Valor retirado diretamente do campo alarmType . |
appFamily |
metadata.product_event_type : appFamily security_result.detection_fields[].key : "appFamily"security_result.detection_fields[].value : appFamily |
Valor retirado diretamente do campo appFamily . |
appId |
security_result.detection_fields[].key : "Application ID"security_result.detection_fields[].value : appId |
Valor retirado diretamente do campo appId . |
appIdStr |
security_result.detection_fields[].key : "appIdStr"security_result.detection_fields[].value : appIdStr |
Valor retirado diretamente do campo appIdStr . |
applianceName |
principal.hostname : applianceName |
Valor retirado diretamente do campo applianceName , siteName ou site . |
appProductivity |
security_result.detection_fields[].key : "appProductivity"security_result.detection_fields[].value : appProductivity |
Valor retirado diretamente do campo appProductivity . |
appRisk |
security_result.severity_details : appRisk |
Valor retirado diretamente do campo appRisk . |
appSubFamily |
security_result.detection_fields[].key : "appSubFamily"security_result.detection_fields[].value : appSubFamily |
Valor retirado diretamente do campo appSubFamily . |
avAccuracy |
additional.fields[].key : "avAccuracy"additional.fields[].value.string_value : avAccuracy |
Valor retirado diretamente do campo avAccuracy . |
avAction |
security_result.action : avAction |
Consulte action para ver a lógica. |
avMalwareName |
security_result.threat_name : avMalwareName |
Valor retirado diretamente do campo avMalwareName . |
avMalwareType |
security_result.category_details : avMalwareType |
Valor retirado diretamente do campo avMalwareType . |
classMsg |
security_result.description : classMsg |
Valor retirado diretamente do campo classMsg , com as aspas duplas removidas. |
clientIPv4Address |
target.ip : clientIPv4Address |
Valor retirado diretamente do campo clientIPv4Address . |
destIp |
target.ip : destIp destinationIPv4Address : destIp |
Valor retirado diretamente do campo destIp . |
destinationIPv4Address |
target.ip : destinationIPv4Address |
Valor retirado diretamente do campo destinationIPv4Address ou derivado do campo networkPrefix . |
destinationIPv6Address |
target.ip : destinationIPv6Address |
Valor retirado diretamente do campo destinationIPv6Address . |
destinationPort |
target.port : destinationPort |
Valor retirado diretamente do campo destinationPort e convertido em número inteiro. |
destinationTransportPort |
target.port : destinationTransportPort |
Valor retirado diretamente do campo destinationTransportPort e convertido em número inteiro. |
deviceKey |
about.resource.attribute.labels[].key : "deviceKey"about.resource.attribute.labels[].value : deviceKey |
Valor retirado diretamente do campo deviceKey se não for "Desconhecido". |
deviceName |
about.resource.attribute.labels[].key : "deviceName"about.resource.attribute.labels[].value : deviceName |
Valor retirado diretamente do campo deviceName se não for "Desconhecido". |
duration |
network.session_duration.seconds : duration |
Valor retirado diretamente do campo duration e convertido em número inteiro. |
egressInterfaceName |
additional.fields[].key : "egressInterfaceName"additional.fields[].value.string_value : egressInterfaceName |
Valor retirado diretamente do campo egressInterfaceName . |
event.type |
metadata.event_type : event.type |
Se applianceName (ou sourceIPv4Address ou user ou sourceIPv6Address ) e destinationIPv4Address (ou remoteSite ou destinationIPv6Address ou clientIPv4Address ou hostname ) estiverem presentes, então NETWORK_CONNECTION . Caso contrário, STATUS_UPDATE . Se applianceName estiver vazio, GENERIC_EVENT . |
eventType |
principal.resource.attribute.labels[].key : "eventType"principal.resource.attribute.labels[].value : eventType |
Valor retirado diretamente do campo eventType . |
family |
security_result.detection_fields[].key : "family"security_result.detection_fields[].value : family |
Valor retirado diretamente do campo family . |
fc |
security_result.detection_fields[].key : "ForwardingClass"security_result.detection_fields[].value : fc |
Valor retirado diretamente do campo fc . |
fileTransDir |
additional.fields[].key : "fileTransDir"additional.fields[].value.string_value : fileTransDir |
Valor retirado diretamente do campo fileTransDir . |
filename |
target.file.names : filename |
Valor retirado diretamente do campo filename . |
flowCookie |
metadata.collected_timestamp : flowCookie |
Valor retirado diretamente do campo flowCookie e convertido em data/hora através do formato UNIX. |
flowId |
principal.resource.product_object_id : flowId |
Valor retirado diretamente do campo flowId . |
forwardForwardingClass |
security_result.detection_fields[].key : "forwardForwardingClass"security_result.detection_fields[].value : forwardForwardingClass |
Valor retirado diretamente do campo forwardForwardingClass . |
fromCountry |
principal.location.country_or_region : fromCountry target.location.country_or_region : fromCountry |
Valor retirado diretamente do campo fromCountry . |
fromUser |
principal.user.userid : fromUser |
Valor retirado diretamente do campo fromUser se não estiver vazio, for "unknown" ou "Unknown". |
fromZone |
additional.fields[].key : "fromZone"additional.fields[].value.string_value : fromZone |
Valor retirado diretamente do campo fromZone . |
generateTime |
metadata.collected_timestamp : generateTime |
Valor retirado diretamente do campo generateTime e convertido em data/hora através do formato UNIX. |
hostname |
target.hostname : hostname |
Valor retirado diretamente do campo hostname . |
httpUrl |
target.url : httpUrl |
Valor retirado diretamente do campo httpUrl . |
icmpTypeIPv4 |
additional.fields[].key : "icmpTypeIPv4"additional.fields[].value.string_value : icmpTypeIPv4 |
Valor retirado diretamente do campo icmpTypeIPv4 . |
idpAction |
security_result.action : idpAction |
Consulte action para ver a lógica. |
ingressInterfaceName |
additional.fields[].key : "ingressInterfaceName"additional.fields[].value.string_value : ingressInterfaceName |
Valor retirado diretamente do campo ingressInterfaceName . |
ipsApplication |
additional.fields[].key : "ipsApplication"additional.fields[].value.string_value : ipsApplication |
Valor retirado diretamente do campo ipsApplication . |
ipsDirection |
security_result.detection_fields[].key : "ipsDirection"security_result.detection_fields[].value : ipsDirection |
Valor retirado diretamente do campo ipsDirection . |
ipsProfile |
security_result.detection_fields[].key : "ipsProfile"security_result.detection_fields[].value : ipsProfile |
Valor retirado diretamente do campo ipsProfile . |
ipsProfileRule |
security_result.rule_name : ipsProfileRule |
Valor retirado diretamente do campo ipsProfileRule . |
ipsProtocol |
network.ip_protocol : ipsProtocol |
Valor retirado diretamente do campo ipsProtocol . |
log_type |
metadata.description : log_type metadata.log_type : log_type |
Valor retirado diretamente do campo log_type . |
mstatsTimeBlock |
metadata.collected_timestamp : mstatsTimeBlock |
Valor retirado diretamente do campo mstatsTimeBlock e convertido em data/hora através do formato UNIX. |
mstatsTotRecvdOctets |
network.received_bytes : mstatsTotRecvdOctets |
Valor retirado diretamente do campo mstatsTotRecvdOctets e convertido em número inteiro não assinado. |
mstatsTotSentOctets |
network.sent_bytes : mstatsTotSentOctets |
Valor retirado diretamente do campo mstatsTotSentOctets e convertido em número inteiro não assinado. |
mstatsTotSessCount |
additional.fields[].key : "mstatsTotSessCount"additional.fields[].value.string_value : mstatsTotSessCount |
Valor retirado diretamente do campo mstatsTotSessCount . |
mstatsTotSessDuration |
network.session_duration.seconds : mstatsTotSessDuration |
Valor retirado diretamente do campo mstatsTotSessDuration e convertido em número inteiro. |
mstatsType |
security_result.category_details : mstatsType |
Valor retirado diretamente do campo mstatsType . |
networkPrefix |
target.ip : networkPrefix target.port : networkPrefix |
Endereço IP extraído do campo networkPrefix . A porta foi extraída do campo networkPrefix e convertida em número inteiro. |
protocolIdentifier |
network.ip_protocol : protocolIdentifier |
Valor retirado diretamente do campo protocolIdentifier , convertido em número inteiro e mapeado para o nome do protocolo IP através de uma pesquisa. |
recvdOctets |
network.received_bytes : recvdOctets |
Valor retirado diretamente do campo recvdOctets e convertido em número inteiro não assinado. |
recvdPackets |
network.received_packets : recvdPackets |
Valor retirado diretamente do campo recvdPackets e convertido em número inteiro. |
remoteSite |
target.hostname : remoteSite |
Valor retirado diretamente do campo remoteSite . |
reverseForwardingClass |
security_result.detection_fields[].key : "reverseForwardingClass"security_result.detection_fields[].value : reverseForwardingClass |
Valor retirado diretamente do campo reverseForwardingClass . |
risk |
security_result.risk_score : risk |
Valor retirado diretamente do campo risk e convertido em número de ponto flutuante. |
rule |
security_result.rule_name : rule |
Valor retirado diretamente do campo rule . |
sentOctets |
network.sent_bytes : sentOctets |
Valor retirado diretamente do campo sentOctets e convertido em número inteiro não assinado. |
sentPackets |
network.sent_packets : sentPackets |
Valor retirado diretamente do campo sentPackets e convertido em número inteiro. |
serialNum |
security_result.detection_fields[].key : "serialNum"security_result.detection_fields[].value : serialNum |
Valor retirado diretamente do campo serialNum . |
signatureId |
security_result.detection_fields[].key : "signatureID"security_result.detection_fields[].value : signatureId |
Valor retirado diretamente do campo signatureId . |
signatureMsg |
security_result.detection_fields[].key : "signatureMsg"security_result.detection_fields[].value : signatureMsg |
Valor retirado diretamente do campo signatureMsg . |
signaturePriority |
security_result.severity : signaturePriority |
Se signaturePriority for "low" (não sensível a maiúsculas e minúsculas), então LOW . Se signaturePriority for "medium" (não é sensível a maiúsculas e minúsculas), então MEDIUM . Se signaturePriority for "high" (sem distinção entre maiúsculas e minúsculas), então HIGH . |
site |
principal.hostname : site applianceName : site |
Valor retirado diretamente do campo site . |
siteId |
additional.fields[].key : "siteId"additional.fields[].value.string_value : siteId |
Valor retirado diretamente do campo siteId . |
siteName |
principal.hostname : siteName applianceName : siteName |
Valor retirado diretamente do campo siteName . |
sourceIPv4Address |
principal.ip : sourceIPv4Address |
Valor retirado diretamente do campo sourceIPv4Address . |
sourceIPv6Address |
principal.ip : sourceIPv6Address |
Valor retirado diretamente do campo sourceIPv6Address . |
sourcePort |
principal.port : sourcePort |
Valor retirado diretamente do campo sourcePort e convertido em número inteiro. |
sourceTransportPort |
principal.port : sourceTransportPort |
Valor retirado diretamente do campo sourceTransportPort e convertido em número inteiro. |
subFamily |
security_result.detection_fields[].key : "subFamily"security_result.detection_fields[].value : subFamily |
Valor retirado diretamente do campo subFamily . |
tcpConnAborted |
additional.fields[].key : "tcpConnAborted"additional.fields[].value.string_value : tcpConnAborted |
Valor retirado diretamente do campo tcpConnAborted se não estiver vazio ou for "0". |
tcpConnRefused |
additional.fields[].key : "tcpConnRefused"additional.fields[].value.string_value : tcpConnRefused |
Valor retirado diretamente do campo tcpConnRefused se não estiver vazio ou for "0". |
tcpPktsFwd |
network.sent_packets : tcpPktsFwd |
Valor retirado diretamente do campo tcpPktsFwd e convertido em número inteiro. |
tcpPktsRev |
network.received_packets : tcpPktsRev |
Valor retirado diretamente do campo tcpPktsRev e convertido em número inteiro. |
tcpReXmitFwd |
additional.fields[].key : "tcpReXmitFwd"additional.fields[].value.string_value : tcpReXmitFwd |
Valor retirado diretamente do campo tcpReXmitFwd se não estiver vazio ou for "0". |
tcpReXmitRev |
additional.fields[].key : "tcpReXmitRev"additional.fields[].value.string_value : tcpReXmitRev |
Valor retirado diretamente do campo tcpReXmitRev se não estiver vazio ou for "0". |
tcpSAA |
additional.fields[].key : "tcpSAA"additional.fields[].value.string_value : tcpSAA |
Valor retirado diretamente do campo tcpSAA se não estiver vazio ou for "0". |
tcpSSA |
additional.fields[].key : "tcpSSA"additional.fields[].value.string_value : tcpSSA |
Valor retirado diretamente do campo tcpSSA se não estiver vazio ou for "0". |
tcpSessCnt |
additional.fields[].key : "tcpSessCnt"additional.fields[].value.string_value : tcpSessCnt |
Valor retirado diretamente do campo tcpSessCnt . |
tcpSessDur |
network.session_duration.seconds : tcpSessDur |
Valor retirado diretamente do campo tcpSessDur e convertido em número inteiro. |
tcpSynAckReXmit |
additional.fields[].key : "tcpSynAckReXmit"additional.fields[].value.string_value : tcpSynAckReXmit |
Valor retirado diretamente do campo tcpSynAckReXmit se não estiver vazio ou for "0". |
tcpSynReXmit |
additional.fields[].key : "tcpSynReXmit"additional.fields[].value.string_value : tcpSynReXmit |
Valor retirado diretamente do campo tcpSynReXmit se não estiver vazio ou for "0". |
tcpTWHS |
additional.fields[].key : "tcpTWHS"additional.fields[].value.string_value : tcpTWHS |
Valor retirado diretamente do campo tcpTWHS se não estiver vazio ou for "0". |
tenantId |
principal.resource.attribute.labels[].key : "tenantId"principal.resource.attribute.labels[].value : tenantId |
Valor retirado diretamente do campo tenantId . |
tenantName |
observer.hostname : tenantName |
Valor retirado diretamente do campo tenantName . |
threatType |
security_result.detection_fields[].key : "threatType"security_result.detection_fields[].value : threatType |
Valor retirado diretamente do campo threatType . |
toCountry |
target.location.country_or_region : toCountry |
Valor retirado diretamente do campo toCountry . |
toZone |
additional.fields[].key : "toZone"additional.fields[].value.string_value : toZone |
Valor retirado diretamente do campo toZone . |
traffType |
additional.fields[].key : "traffType"additional.fields[].value.string_value : traffType |
Valor retirado diretamente do campo traffType . |
ts |
metadata.event_timestamp : ts |
Valor retirado diretamente do campo ts e convertido em data/hora. |
type |
security_result.action : type |
Consulte action para ver a lógica. |
urlAction |
security_result.action : urlAction |
Consulte action para ver a lógica. |
urlActionMessage |
security_result.summary : urlActionMessage |
Valor retirado diretamente do campo urlActionMessage . |
urlCategory |
principal.resource.attribute.labels[].key : "urlCategory"principal.resource.attribute.labels[].value : urlCategory |
Valor retirado diretamente do campo urlCategory . |
urlProfile |
additional.fields[].key : "urlProfile"additional.fields[].value.string_value : urlProfile |
Valor retirado diretamente do campo urlProfile . |
urlReputation |
security_result.severity_details : urlReputation |
Valor retirado diretamente do campo urlReputation . |
user |
principal.ip : user |
Valor retirado diretamente do campo user . |
vsnId |
principal.resource.attribute.labels[].key : "vsnId"principal.resource.attribute.labels[].value : vsnId |
Valor retirado diretamente do campo vsnId . Valor codificado. Valor codificado. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais da Google SecOps.