Coletar registros do Secure Access Service Edge (SASE) da Versa Networks
Este documento descreve como coletar os registros do Secure Access Service Edge (SASE) da Versa Networks. O analisador extrai pares de chave-valor após um filtro grok inicial. Em seguida, ele mapeia esses valores para o modelo de dados unificado (UDM, na sigla em inglês), processando vários formatos de registro, como eventos de firewall, registros de aplicativos e registros de alarme, e realiza conversões e enriquecimentos para campos específicos, como protocolo IP e pontuação de risco.
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 privilegiado ao Versa SASE.
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: 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 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 o arquivo de autenticação de transferência 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 do BindPlane, use o console Services ou digite o seguinte comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configurar o SASE da Versa Networks
Os administradores precisam configurar coletores remotos em cada nó do Versa Analytics para encaminhar registros a sistemas de terceiros.
Para configurar os nós de análise do Versa, faça o seguinte:
- Ativar o encaminhamento de registro
- Ativar o registro de ID da sessão
Ativar o encaminhamento de registro
- Faça login no servidor de análise da Versa.
- Acesse a CLI executando o comando
cli
. - Mude para o modo de configuração executando o comando
configure
e digiteload merge terminal
. Copie e cole os comandos a seguir para configurar o encaminhamento de registros:
- Substitua
<collector_ip>
e<collector_port>
pelo endereço IP e a porta do 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
Salve a configuração:
save
Ativar o registro de ID da sessão
Para registrar informações relacionadas ao IP, ative o registro de ID da sessão.
- Faça login no Versa Director.
- Mude para a Visualização de diretor.
- Acesse Configuração > Dispositivos > Tenant > Dispositivo para acessar a Visão de dispositivo.
- Selecione Configuração > Outros > Sistema > Configuração > Configuração.
- No painel Parâmetros, clique em Editar.
- Na janela Edit parameters, selecione LEF.
Na seção Firewall, marque a caixa de seleção Incluir registro de ID de sessão.
Clique em OK.
Tabela de mapeamento do UDM
Campo de registro | Mapeamento do UDM | Lógica |
---|---|---|
accCkt |
additional.fields[].key : "accCkt"additional.fields[].value.string_value : accCkt |
Valor extraído diretamente do campo accCkt . |
accCktId |
additional.fields[].key : "accCktId"additional.fields[].value.string_value : accCktId |
Valor extraído diretamente do campo accCktId . |
accCktName |
additional.fields[].key : "accCktName"additional.fields[].value.string_value : accCktName |
Valor extraído diretamente do campo accCktName . |
accessType |
additional.fields[].key : "accessType"additional.fields[].value.string_value : accessType |
Valor extraído diretamente do campo accessType . |
action |
security_result.action : action |
Se action , type , idpAction , avAction ou urlAction forem "permitir", então ALLOW . Se action , type , idpAction , avAction ou urlAction forem "reject", "drop", "block", "deny", então BLOCK . Se idpAction for qualquer outro valor, então UNKNOWN_ACTION . |
alarmCause |
security_result.detection_fields[].key : "alarmCause"security_result.detection_fields[].value : alarmCause |
Valor extraído diretamente do campo alarmCause . |
alarmClass |
security_result.detection_fields[].key : "alarmClass"security_result.detection_fields[].value : alarmClass |
Valor extraído diretamente do campo alarmClass . |
alarmClearable |
security_result.detection_fields[].key : "alarmClearable"security_result.detection_fields[].value : alarmClearable |
Valor extraído diretamente do campo alarmClearable . |
alarmEventType |
metadata.product_event_type : alarmEventType |
Valor extraído diretamente do campo alarmEventType . |
alarmKey |
security_result.detection_fields[].key : "alarmKey"security_result.detection_fields[].value : alarmKey |
Valor extraído diretamente do campo alarmKey . |
alarmKind |
security_result.detection_fields[].key : "alarmKind"security_result.detection_fields[].value : alarmKind |
Valor extraído diretamente do campo alarmKind . |
alarmOwner |
security_result.detection_fields[].key : "alarmOwner"security_result.detection_fields[].value : alarmOwner |
Valor extraído diretamente do campo alarmOwner . |
alarmSeqNo |
security_result.detection_fields[].key : "alarmSeqNo"security_result.detection_fields[].value : alarmSeqNo |
Valor extraído diretamente do campo alarmSeqNo . |
alarmSeverity |
security_result.severity_details : alarmSeverity |
Valor extraído diretamente do campo alarmSeverity . |
alarmText |
security_result.summary : alarmText |
Valor retirado diretamente do campo alarmText , com aspas duplas removidas. |
alarmType |
security_result.description : alarmType |
Valor extraído diretamente do campo alarmType . |
appFamily |
metadata.product_event_type : appFamily security_result.detection_fields[].key : "appFamily"security_result.detection_fields[].value : appFamily |
Valor extraído diretamente do campo appFamily . |
appId |
security_result.detection_fields[].key : "Application ID"security_result.detection_fields[].value : appId |
Valor extraído diretamente do campo appId . |
appIdStr |
security_result.detection_fields[].key : "appIdStr"security_result.detection_fields[].value : appIdStr |
Valor extraído diretamente do campo appIdStr . |
applianceName |
principal.hostname : applianceName |
Valor extraído diretamente do campo applianceName , siteName ou site . |
appProductivity |
security_result.detection_fields[].key : "appProductivity"security_result.detection_fields[].value : appProductivity |
Valor extraído diretamente do campo appProductivity . |
appRisk |
security_result.severity_details : appRisk |
Valor extraído diretamente do campo appRisk . |
appSubFamily |
security_result.detection_fields[].key : "appSubFamily"security_result.detection_fields[].value : appSubFamily |
Valor extraído diretamente do campo appSubFamily . |
avAccuracy |
additional.fields[].key : "avAccuracy"additional.fields[].value.string_value : avAccuracy |
Valor extraído diretamente do campo avAccuracy . |
avAction |
security_result.action : avAction |
Consulte action para conferir a lógica. |
avMalwareName |
security_result.threat_name : avMalwareName |
Valor extraído diretamente do campo avMalwareName . |
avMalwareType |
security_result.category_details : avMalwareType |
Valor extraído diretamente do campo avMalwareType . |
classMsg |
security_result.description : classMsg |
Valor retirado diretamente do campo classMsg , com aspas duplas removidas. |
clientIPv4Address |
target.ip : clientIPv4Address |
Valor extraído diretamente do campo clientIPv4Address . |
destIp |
target.ip : destIp destinationIPv4Address : destIp |
Valor extraído diretamente do campo destIp . |
destinationIPv4Address |
target.ip : destinationIPv4Address |
Valor extraído diretamente do campo destinationIPv4Address ou derivado de networkPrefix . |
destinationIPv6Address |
target.ip : destinationIPv6Address |
Valor extraído diretamente do campo destinationIPv6Address . |
destinationPort |
target.port : destinationPort |
Valor extraído diretamente do campo destinationPort e convertido em número inteiro. |
destinationTransportPort |
target.port : destinationTransportPort |
Valor extraído 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 extraído diretamente do campo duration e convertido em número inteiro. |
egressInterfaceName |
additional.fields[].key : "egressInterfaceName"additional.fields[].value.string_value : egressInterfaceName |
Valor extraído diretamente do campo egressInterfaceName . |
event.type |
metadata.event_type : event.type |
Se applianceName (ou sourceIPv4Address , user ou sourceIPv6Address ) e destinationIPv4Address (ou remoteSite , destinationIPv6Address , clientIPv4Address ou hostname ) estiverem presentes, NETWORK_CONNECTION . Caso contrário, STATUS_UPDATE . Se applianceName estiver vazio, será GENERIC_EVENT . |
eventType |
principal.resource.attribute.labels[].key : "eventType"principal.resource.attribute.labels[].value : eventType |
Valor extraído diretamente do campo eventType . |
family |
security_result.detection_fields[].key : "family"security_result.detection_fields[].value : family |
Valor extraído diretamente do campo family . |
fc |
security_result.detection_fields[].key : "ForwardingClass"security_result.detection_fields[].value : fc |
Valor extraído diretamente do campo fc . |
fileTransDir |
additional.fields[].key : "fileTransDir"additional.fields[].value.string_value : fileTransDir |
Valor extraído diretamente do campo fileTransDir . |
filename |
target.file.names : filename |
Valor extraído diretamente do campo filename . |
flowCookie |
metadata.collected_timestamp : flowCookie |
Valor retirado diretamente do campo flowCookie e convertido em carimbo de data/hora usando o formato UNIX. |
flowId |
principal.resource.product_object_id : flowId |
Valor extraído diretamente do campo flowId . |
forwardForwardingClass |
security_result.detection_fields[].key : "forwardForwardingClass"security_result.detection_fields[].value : forwardForwardingClass |
Valor extraído diretamente do campo forwardForwardingClass . |
fromCountry |
principal.location.country_or_region : fromCountry target.location.country_or_region : fromCountry |
Valor extraído diretamente do campo fromCountry . |
fromUser |
principal.user.userid : fromUser |
Valor retirado diretamente do campo fromUser se não estiver vazio, "unknown" ou "Unknown". |
fromZone |
additional.fields[].key : "fromZone"additional.fields[].value.string_value : fromZone |
Valor extraído diretamente do campo fromZone . |
generateTime |
metadata.collected_timestamp : generateTime |
Valor retirado diretamente do campo generateTime e convertido em carimbo de data/hora usando o formato UNIX. |
hostname |
target.hostname : hostname |
Valor extraído diretamente do campo hostname . |
httpUrl |
target.url : httpUrl |
Valor extraído diretamente do campo httpUrl . |
icmpTypeIPv4 |
additional.fields[].key : "icmpTypeIPv4"additional.fields[].value.string_value : icmpTypeIPv4 |
Valor extraído diretamente do campo icmpTypeIPv4 . |
idpAction |
security_result.action : idpAction |
Consulte action para conferir a lógica. |
ingressInterfaceName |
additional.fields[].key : "ingressInterfaceName"additional.fields[].value.string_value : ingressInterfaceName |
Valor extraído diretamente do campo ingressInterfaceName . |
ipsApplication |
additional.fields[].key : "ipsApplication"additional.fields[].value.string_value : ipsApplication |
Valor extraído diretamente do campo ipsApplication . |
ipsDirection |
security_result.detection_fields[].key : "ipsDirection"security_result.detection_fields[].value : ipsDirection |
Valor extraído diretamente do campo ipsDirection . |
ipsProfile |
security_result.detection_fields[].key : "ipsProfile"security_result.detection_fields[].value : ipsProfile |
Valor extraído diretamente do campo ipsProfile . |
ipsProfileRule |
security_result.rule_name : ipsProfileRule |
Valor extraído diretamente do campo ipsProfileRule . |
ipsProtocol |
network.ip_protocol : ipsProtocol |
Valor extraído diretamente do campo ipsProtocol . |
log_type |
metadata.description : log_type metadata.log_type : log_type |
Valor extraído diretamente do campo log_type . |
mstatsTimeBlock |
metadata.collected_timestamp : mstatsTimeBlock |
Valor retirado diretamente do campo mstatsTimeBlock e convertido em carimbo de data/hora usando o 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 extraído diretamente do campo mstatsTotSentOctets e convertido em inteiro não assinado. |
mstatsTotSessCount |
additional.fields[].key : "mstatsTotSessCount"additional.fields[].value.string_value : mstatsTotSessCount |
Valor extraído diretamente do campo mstatsTotSessCount . |
mstatsTotSessDuration |
network.session_duration.seconds : mstatsTotSessDuration |
Valor extraído diretamente do campo mstatsTotSessDuration e convertido em número inteiro. |
mstatsType |
security_result.category_details : mstatsType |
Valor extraído diretamente do campo mstatsType . |
networkPrefix |
target.ip : networkPrefix target.port : networkPrefix |
Endereço IP extraído do campo networkPrefix . Porta extraída do campo networkPrefix e convertida em número inteiro. |
protocolIdentifier |
network.ip_protocol : protocolIdentifier |
Valor extraído diretamente do campo protocolIdentifier , convertido em número inteiro e mapeado para o nome do protocolo IP usando uma pesquisa. |
recvdOctets |
network.received_bytes : recvdOctets |
Valor extraído diretamente do campo recvdOctets e convertido em inteiro não assinado. |
recvdPackets |
network.received_packets : recvdPackets |
Valor extraído diretamente do campo recvdPackets e convertido em número inteiro. |
remoteSite |
target.hostname : remoteSite |
Valor extraído diretamente do campo remoteSite . |
reverseForwardingClass |
security_result.detection_fields[].key : "reverseForwardingClass"security_result.detection_fields[].value : reverseForwardingClass |
Valor extraído diretamente do campo reverseForwardingClass . |
risk |
security_result.risk_score : risk |
Valor extraído diretamente do campo risk e convertido em float. |
rule |
security_result.rule_name : rule |
Valor extraído 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 extraído diretamente do campo sentPackets e convertido em número inteiro. |
serialNum |
security_result.detection_fields[].key : "serialNum"security_result.detection_fields[].value : serialNum |
Valor extraído diretamente do campo serialNum . |
signatureId |
security_result.detection_fields[].key : "signatureID"security_result.detection_fields[].value : signatureId |
Valor extraído diretamente do campo signatureId . |
signatureMsg |
security_result.detection_fields[].key : "signatureMsg"security_result.detection_fields[].value : signatureMsg |
Valor extraído diretamente do campo signatureMsg . |
signaturePriority |
security_result.severity : signaturePriority |
Se signaturePriority for "low" (não diferencia maiúsculas de minúsculas), então LOW . Se signaturePriority for "medium" (não diferencia maiúsculas de minúsculas), então MEDIUM . Se signaturePriority for "high" (não diferencia maiúsculas de minúsculas), então HIGH . |
site |
principal.hostname : site applianceName : site |
Valor extraído diretamente do campo site . |
siteId |
additional.fields[].key : "siteId"additional.fields[].value.string_value : siteId |
Valor extraído diretamente do campo siteId . |
siteName |
principal.hostname : siteName applianceName : siteName |
Valor extraído diretamente do campo siteName . |
sourceIPv4Address |
principal.ip : sourceIPv4Address |
Valor extraído diretamente do campo sourceIPv4Address . |
sourceIPv6Address |
principal.ip : sourceIPv6Address |
Valor extraído diretamente do campo sourceIPv6Address . |
sourcePort |
principal.port : sourcePort |
Valor extraído diretamente do campo sourcePort e convertido em número inteiro. |
sourceTransportPort |
principal.port : sourceTransportPort |
Valor extraído diretamente do campo sourceTransportPort e convertido em número inteiro. |
subFamily |
security_result.detection_fields[].key : "subFamily"security_result.detection_fields[].value : subFamily |
Valor extraído 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 "0". |
tcpConnRefused |
additional.fields[].key : "tcpConnRefused"additional.fields[].value.string_value : tcpConnRefused |
Valor extraído diretamente do campo tcpConnRefused se não estiver vazio ou "0". |
tcpPktsFwd |
network.sent_packets : tcpPktsFwd |
Valor extraído diretamente do campo tcpPktsFwd e convertido em número inteiro. |
tcpPktsRev |
network.received_packets : tcpPktsRev |
Valor extraído diretamente do campo tcpPktsRev e convertido em número inteiro. |
tcpReXmitFwd |
additional.fields[].key : "tcpReXmitFwd"additional.fields[].value.string_value : tcpReXmitFwd |
Valor extraído diretamente do campo tcpReXmitFwd se não estiver vazio ou "0". |
tcpReXmitRev |
additional.fields[].key : "tcpReXmitRev"additional.fields[].value.string_value : tcpReXmitRev |
Valor retirado diretamente do campo tcpReXmitRev se não estiver vazio ou "0". |
tcpSAA |
additional.fields[].key : "tcpSAA"additional.fields[].value.string_value : tcpSAA |
Valor extraído diretamente do campo tcpSAA se não estiver vazio ou "0". |
tcpSSA |
additional.fields[].key : "tcpSSA"additional.fields[].value.string_value : tcpSSA |
Valor extraído diretamente do campo tcpSSA se não estiver vazio ou "0". |
tcpSessCnt |
additional.fields[].key : "tcpSessCnt"additional.fields[].value.string_value : tcpSessCnt |
Valor extraído diretamente do campo tcpSessCnt . |
tcpSessDur |
network.session_duration.seconds : tcpSessDur |
Valor extraído 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 "0". |
tcpSynReXmit |
additional.fields[].key : "tcpSynReXmit"additional.fields[].value.string_value : tcpSynReXmit |
Valor extraído diretamente do campo tcpSynReXmit se não estiver vazio ou "0". |
tcpTWHS |
additional.fields[].key : "tcpTWHS"additional.fields[].value.string_value : tcpTWHS |
Valor extraído diretamente do campo tcpTWHS se não estiver vazio ou "0". |
tenantId |
principal.resource.attribute.labels[].key : "tenantId"principal.resource.attribute.labels[].value : tenantId |
Valor extraído diretamente do campo tenantId . |
tenantName |
observer.hostname : tenantName |
Valor extraído diretamente do campo tenantName . |
threatType |
security_result.detection_fields[].key : "threatType"security_result.detection_fields[].value : threatType |
Valor extraído diretamente do campo threatType . |
toCountry |
target.location.country_or_region : toCountry |
Valor extraído diretamente do campo toCountry . |
toZone |
additional.fields[].key : "toZone"additional.fields[].value.string_value : toZone |
Valor extraído diretamente do campo toZone . |
traffType |
additional.fields[].key : "traffType"additional.fields[].value.string_value : traffType |
Valor extraído diretamente do campo traffType . |
ts |
metadata.event_timestamp : ts |
Valor retirado diretamente do campo ts e convertido em carimbo de data/hora. |
type |
security_result.action : type |
Consulte action para conferir a lógica. |
urlAction |
security_result.action : urlAction |
Consulte action para conferir a lógica. |
urlActionMessage |
security_result.summary : urlActionMessage |
Valor extraído diretamente do campo urlActionMessage . |
urlCategory |
principal.resource.attribute.labels[].key : "urlCategory"principal.resource.attribute.labels[].value : urlCategory |
Valor extraído diretamente do campo urlCategory . |
urlProfile |
additional.fields[].key : "urlProfile"additional.fields[].value.string_value : urlProfile |
Valor extraído diretamente do campo urlProfile . |
urlReputation |
security_result.severity_details : urlReputation |
Valor extraído diretamente do campo urlReputation . |
user |
principal.ip : user |
Valor extraído diretamente do campo user . |
vsnId |
principal.resource.attribute.labels[].key : "vsnId"principal.resource.attribute.labels[].value : vsnId |
Valor extraído diretamente do campo vsnId . Valor codificado. Valor codificado. |
Alterações
2024-06-03
- "idpAction" foi associado a "security_result.action".
- "threatType" foi associado a "security_result.detection_fields".
- "ipsDirection" foi associado a "security_result.detection_fields".
- O "ipsProfile" foi mapeado para "security_result.detection_fields".
- Mapeamos "signaturePriority" para "security_result.severity".
- "signatureMsg" foi associado a "security_result.detection_fields".
- Mapeamos "signatureId" para "security_result.detection_fields".
- "ipsApplication" foi mapeado para "security_result.detection_fields".
- "classMsg" foi associado a "security_result.description".
- "ipsProfileRule" foi associado a "security_result.rule_name".
- "ipsProtocol" foi mapeado para "network.ip_protocol".
2023-07-03
- Inclusão de suporte para "entitlementlog", "monstatslog" e "tcpappmonlog".
2022-11-04
- Parser criado recentemente.