Coletar registros do Secure Access Service Edge (SASE) da Versa Networks
Neste documento, descrevemos 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 Unificado de Dados (UDM, na sigla em inglês), processando vários formatos de registro, como eventos de firewall, registros de aplicativos e registros de alarmes, 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.
- Use o Windows 2016 ou uma versão 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.
- 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.
- Baixe o arquivo de autenticação de ingestão. Salve o arquivo com segurança no sistema em que o agente do 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
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 este guia de instalação.
Configurar o agente do Bindplane para ingerir 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: 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 arquivo de autenticação de ingestão do Google SecOps.
Reinicie o agente do Bindplane para aplicar as mudanças
No Linux, para reiniciar o agente do Bindplane, execute o seguinte comando:
sudo systemctl restart bindplane-agent
No Windows, para reiniciar o Bindplane Agent, use o console Serviços ou insira 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 registros
- Ativar o registro do ID da sessão
Ativar o encaminhamento de registros
- Faça login no servidor de análise do Versa.
- Acesse a CLI executando o comando
cli
. - Mude para o Modo de configuração executando o comando
configure
e insiraload 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 pela porta do seu coletor 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 do ID da sessão
Para registrar informações relacionadas ao IP, ative o registro do ID da sessão.
- Faça login no Versa Director.
- Mude para a Visualização do diretor.
- Acesse Configuração > Dispositivos > Inquilino > Dispositivo para acessar a Visualização de dispositivos.
- Selecione Configuração > Outros > Sistema > Configuração > Configuração.
- No painel Parâmetros, clique em Editar.
- Na janela Editar parâmetros, selecione LEF.
Na seção Firewall, marque a caixa de seleção Incluir geração de registros de ID da 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 outra coisa, 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 extraído 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 ver 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 extraído 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 do campo 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 extraído diretamente do campo deviceKey , se não for "Desconhecido". |
deviceName |
about.resource.attribute.labels[].key : "deviceName"about.resource.attribute.labels[].value : deviceName |
Valor extraído 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 ou user ou sourceIPv6Address ) e destinationIPv4Address (ou remoteSite ou destinationIPv6Address ou clientIPv4Address ou hostname ) estiverem presentes, 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 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 extraído 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 extraído 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 extraído 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 ver 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 extraído diretamente do campo mstatsTimeBlock e convertido em carimbo de data/hora usando o formato UNIX. |
mstatsTotRecvdOctets |
network.received_bytes : mstatsTotRecvdOctets |
Valor extraído diretamente do campo mstatsTotRecvdOctets e convertido em um número inteiro sem sinal. |
mstatsTotSentOctets |
network.sent_bytes : mstatsTotSentOctets |
Valor extraído diretamente do campo mstatsTotSentOctets e convertido em um número inteiro sem sinal. |
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 um número inteiro sem sinal. |
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 ponto flutuante. |
rule |
security_result.rule_name : rule |
Valor extraído diretamente do campo rule . |
sentOctets |
network.sent_bytes : sentOctets |
Valor extraído diretamente do campo sentOctets e convertido em um número inteiro sem sinal. |
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 e minúsculas), então MEDIUM . Se signaturePriority for "high" (sem diferenciar 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 extraído diretamente do campo tcpConnAborted se não estiver vazio ou for "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 for "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 for "0". |
tcpReXmitRev |
additional.fields[].key : "tcpReXmitRev"additional.fields[].value.string_value : tcpReXmitRev |
Valor extraído diretamente do campo tcpReXmitRev se não estiver vazio ou for "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 for "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 for "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 extraído diretamente do campo tcpSynAckReXmit se não estiver vazio ou for "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 for "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 for "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 extraído diretamente do campo ts e convertido em carimbo de 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 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. |
Precisa de mais ajuda? Receba respostas de membros da comunidade e profissionais do Google SecOps.