Coletar registros do Secure Access Service Edge (SASE) da Versa Networks

Compatível com:

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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Agentes de coleta.
  3. 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

  1. Faça login no console do Google SecOps.
  2. Acesse Configurações do SIEM > Perfil.
  3. Copie e salve o ID do cliente na seção Detalhes da organização.

Instalar o agente do BindPlane

Instalação do Windows

  1. Abra o Prompt de Comando ou o PowerShell como administrador.
  2. Execute este comando:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Instalação do Linux

  1. Abra um terminal com privilégios de raiz ou sudo.
  2. 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

Configurar o agente BindPlane para ingerir o Syslog e enviar ao Google SecOps

  1. 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).
  2. 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
    
    
  3. Substitua a porta e o endereço IP conforme necessário na sua infraestrutura.

  4. Substitua <customer_id> pelo ID do cliente real.

  5. 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

  1. Faça login no servidor de análise da Versa.
  2. Acesse a CLI executando o comando cli.
  3. Mude para o modo de configuração executando o comando configure e digite load merge terminal.
  4. 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
    
  5. 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.

  1. Faça login no Versa Director.
  2. Mude para a Visualização de diretor.
  3. Acesse Configuração > Dispositivos > Tenant > Dispositivo para acessar a Visão de dispositivo.
  4. Selecione Configuração > Outros > Sistema > Configuração > Configuração.
  5. No painel Parâmetros, clique em Editar.
  6. Na janela Edit parameters, selecione LEF.
  7. Na seção Firewall, marque a caixa de seleção Incluir registro de ID de sessão.

  8. 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.