Recolha registos do Versa Networks Secure Access Service Edge (SASE)

Compatível com:

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

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Agentes de recolha.
  3. 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

  1. Inicie sessão na consola Google SecOps.
  2. Aceda a Definições do SIEM > Perfil.
  3. Copie e guarde o ID do cliente da secção Detalhes da organização.

Instale o agente do Bindplane

Instalação do Windows

  1. Abra a Linha de comandos ou o PowerShell como administrador.
  2. Execute o seguinte 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 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

Configure o agente Bindplane para carregar o Syslog e enviá-lo para o Google SecOps

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

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

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

  1. Inicie sessão no servidor de estatísticas do Versa.
  2. Aceda à CLI executando o comando cli.
  3. Mude para o modo de configuração executando o comando configure e, de seguida, introduza load merge terminal.
  4. 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
    
  5. 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.

  1. Inicie sessão no Versa Director.
  2. Mude para a vista de realizador.
  3. Aceda a Configuração > Dispositivos > Inquilino > Dispositivo para aceder a Vista do dispositivo.
  4. Selecione Configuração > Outros > Sistema > Configuração > Configuração.
  5. No painel Parâmetros, clique em Editar.
  6. Na janela Editar parâmetros, selecione LEF.
  7. Na secção Firewall, selecione a caixa de verificação Incluir registo do ID da sessão.

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