Raccogli i log di Versa Networks Secure Access Service Edge (SASE)

Supportato in:

Questo documento descrive come raccogliere i log di Versa Networks Secure Access Service Edge (SASE). Il parser estrae le coppie chiave-valore dopo un filtro grok iniziale. Poi mappa questi valori al modello di dati unificato (UDM), gestisce vari formati di log come eventi della firewall, log delle applicazioni e log di avviso ed esegue conversioni e arricchimenti per campi specifici come protocollo IP e punteggio di rischio.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati di utilizzare Windows 2016 o versioni successive o un host Linux con systemd.
  • Se il servizio è in esecuzione dietro un proxy, assicurati che le porte del firewall siano aperte.
  • Assicurati di disporre dell'accesso privilegiato a Versa SASE.

Recupera il file di autenticazione di importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'importazione. Salva il file in modo sicuro sul sistema in cui verrà installato BindPlane.

Ottenere l'ID cliente Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa BindPlane Agent

Installazione di Windows

  1. Apri il prompt dei comandi o PowerShell come amministratore.
  2. Esegui questo comando:

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

Installazione di Linux

  1. Apri un terminale con privilegi root o sudo.
  2. Esegui questo comando:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Risorse di installazione aggiuntive

Configurare l'agente BindPlane per importare i syslog e inviarli a Google SecOps

  1. Accedi al file di configurazione:

    • Individua il file config.yaml. In genere si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    • Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. Modifica il file config.yaml come segue:

    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. Sostituisci la porta e l'indirizzo IP come richiesto nella tua infrastruttura.

  4. Sostituisci <customer_id> con l'ID cliente effettivo.

  5. Aggiorna /path/to/ingestion-authentication-file.json con il percorso in cui è stato salvato il file di autenticazione nella sezione Ottenere il file di autenticazione per l'importazione di Google SecOps.

Riavvia BindPlane Agent per applicare le modifiche

  • In Linux, per riavviare BindPlane Agent, esegui il seguente comando:

    sudo systemctl restart bindplane-agent
    
  • In Windows, per riavviare l'agente BindPlane, puoi utilizzare la console Servizi o inserire il seguente comando:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Configura Versa Networks SASE

Gli amministratori devono configurare i collector remoti su ogni nodo Versa Analytics per inoltrare i log a sistemi di terze parti.

Per configurare i nodi di analisi di Versa:

  • Attivare il Forwarding dei log
  • Attivare il logging dell'ID sessione

Attivare il Forwarding dei log

  1. Accedi al server Versa Analytics.
  2. Vai all'interfaccia a riga di comando eseguendo il comando cli.
  3. Passa alla modalità di configurazione eseguendo il comando configure, quindi inserisci load merge terminal.
  4. Copia e incolla i seguenti comandi per configurare il Forwarding dei log:

    • Sostituisci <collector_ip> e <collector_port> con l'indirizzo IP e la porta del tuo collector 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. Salva la configurazione:

    save
    

Attivare il logging dell'ID sessione

Per registrare le informazioni relative all'IP, attiva il logging dell'ID sessione.

  1. Accedi a Versa Director.
  2. Passa alla visualizzazione regista.
  3. Vai a Configurazione > Dispositivi > Tenant > Dispositivo per accedere a Visualizzazione dell'appliance.
  4. Seleziona Configurazione > Altro > Sistema > Configurazione > Configurazione.
  5. Nel riquadro Parametri, fai clic su Modifica.
  6. Nella finestra Modifica parametri, seleziona LEF.
  7. Nella sezione Firewall, seleziona la casella di controllo Includi registrazione dell'ID sessione.

  8. Fai clic su OK.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
accCkt additional.fields[].key: "accCkt"
additional.fields[].value.string_value: accCkt
Valore preso direttamente dal campo accCkt.
accCktId additional.fields[].key: "accCktId"
additional.fields[].value.string_value: accCktId
Valore preso direttamente dal campo accCktId.
accCktName additional.fields[].key: "accCktName"
additional.fields[].value.string_value: accCktName
Valore preso direttamente dal campo accCktName.
accessType additional.fields[].key: "accessType"
additional.fields[].value.string_value: accessType
Valore preso direttamente dal campo accessType.
action security_result.action: action Se action, type, idpAction, avAction o urlAction sono "allow", allora ALLOW. Se action, type, idpAction, avAction o urlAction sono "reject", "drop", "block", "deny", allora BLOCK. Se idpAction è diverso da UNKNOWN_ACTION.
alarmCause security_result.detection_fields[].key: "alarmCause"
security_result.detection_fields[].value: alarmCause
Valore preso direttamente dal campo alarmCause.
alarmClass security_result.detection_fields[].key: "alarmClass"
security_result.detection_fields[].value: alarmClass
Valore preso direttamente dal campo alarmClass.
alarmClearable security_result.detection_fields[].key: "alarmClearable"
security_result.detection_fields[].value: alarmClearable
Valore preso direttamente dal campo alarmClearable.
alarmEventType metadata.product_event_type: alarmEventType Valore preso direttamente dal campo alarmEventType.
alarmKey security_result.detection_fields[].key: "alarmKey"
security_result.detection_fields[].value: alarmKey
Valore preso direttamente dal campo alarmKey.
alarmKind security_result.detection_fields[].key: "alarmKind"
security_result.detection_fields[].value: alarmKind
Valore preso direttamente dal campo alarmKind.
alarmOwner security_result.detection_fields[].key: "alarmOwner"
security_result.detection_fields[].value: alarmOwner
Valore preso direttamente dal campo alarmOwner.
alarmSeqNo security_result.detection_fields[].key: "alarmSeqNo"
security_result.detection_fields[].value: alarmSeqNo
Valore preso direttamente dal campo alarmSeqNo.
alarmSeverity security_result.severity_details: alarmSeverity Valore preso direttamente dal campo alarmSeverity.
alarmText security_result.summary: alarmText Valore preso direttamente dal campo alarmText, con le virgolette doppie rimosse.
alarmType security_result.description: alarmType Valore preso direttamente dal campo alarmType.
appFamily metadata.product_event_type: appFamily
security_result.detection_fields[].key: "appFamily"
security_result.detection_fields[].value: appFamily
Valore preso direttamente dal campo appFamily.
appId security_result.detection_fields[].key: "Application ID"
security_result.detection_fields[].value: appId
Valore preso direttamente dal campo appId.
appIdStr security_result.detection_fields[].key: "appIdStr"
security_result.detection_fields[].value: appIdStr
Valore preso direttamente dal campo appIdStr.
applianceName principal.hostname: applianceName Valore preso direttamente dal campo applianceName, siteName o site.
appProductivity security_result.detection_fields[].key: "appProductivity"
security_result.detection_fields[].value: appProductivity
Valore preso direttamente dal campo appProductivity.
appRisk security_result.severity_details: appRisk Valore preso direttamente dal campo appRisk.
appSubFamily security_result.detection_fields[].key: "appSubFamily"
security_result.detection_fields[].value: appSubFamily
Valore preso direttamente dal campo appSubFamily.
avAccuracy additional.fields[].key: "avAccuracy"
additional.fields[].value.string_value: avAccuracy
Valore preso direttamente dal campo avAccuracy.
avAction security_result.action: avAction Per la logica, consulta action.
avMalwareName security_result.threat_name: avMalwareName Valore preso direttamente dal campo avMalwareName.
avMalwareType security_result.category_details: avMalwareType Valore preso direttamente dal campo avMalwareType.
classMsg security_result.description: classMsg Valore preso direttamente dal campo classMsg, con le virgolette doppie rimosse.
clientIPv4Address target.ip: clientIPv4Address Valore preso direttamente dal campo clientIPv4Address.
destIp target.ip: destIp
destinationIPv4Address: destIp
Valore preso direttamente dal campo destIp.
destinationIPv4Address target.ip: destinationIPv4Address Valore preso direttamente dal campo destinationIPv4Address o derivato dal campo networkPrefix.
destinationIPv6Address target.ip: destinationIPv6Address Valore preso direttamente dal campo destinationIPv6Address.
destinationPort target.port: destinationPort Valore preso direttamente dal campo destinationPort e convertito in numero intero.
destinationTransportPort target.port: destinationTransportPort Valore preso direttamente dal campo destinationTransportPort e convertito in numero intero.
deviceKey about.resource.attribute.labels[].key: "deviceKey"
about.resource.attribute.labels[].value: deviceKey
Valore preso direttamente dal campo deviceKey, se non "Sconosciuto".
deviceName about.resource.attribute.labels[].key: "deviceName"
about.resource.attribute.labels[].value: deviceName
Valore preso direttamente dal campo deviceName, se non "Sconosciuto".
duration network.session_duration.seconds: duration Valore preso direttamente dal campo duration e convertito in numero intero.
egressInterfaceName additional.fields[].key: "egressInterfaceName"
additional.fields[].value.string_value: egressInterfaceName
Valore preso direttamente dal campo egressInterfaceName.
event.type metadata.event_type: event.type Se sono presenti sia applianceName (o sourceIPv4Address o user o sourceIPv6Address) sia destinationIPv4Address (o remoteSite o destinationIPv6Address o clientIPv4Address o hostname), allora NETWORK_CONNECTION. In caso contrario, STATUS_UPDATE. Se applianceName è vuoto, allora GENERIC_EVENT.
eventType principal.resource.attribute.labels[].key: "eventType"
principal.resource.attribute.labels[].value: eventType
Valore preso direttamente dal campo eventType.
family security_result.detection_fields[].key: "family"
security_result.detection_fields[].value: family
Valore preso direttamente dal campo family.
fc security_result.detection_fields[].key: "ForwardingClass"
security_result.detection_fields[].value: fc
Valore preso direttamente dal campo fc.
fileTransDir additional.fields[].key: "fileTransDir"
additional.fields[].value.string_value: fileTransDir
Valore preso direttamente dal campo fileTransDir.
filename target.file.names: filename Valore preso direttamente dal campo filename.
flowCookie metadata.collected_timestamp: flowCookie Valore preso direttamente dal campo flowCookie e convertito in timestamp utilizzando il formato UNIX.
flowId principal.resource.product_object_id: flowId Valore preso direttamente dal campo flowId.
forwardForwardingClass security_result.detection_fields[].key: "forwardForwardingClass"
security_result.detection_fields[].value: forwardForwardingClass
Valore preso direttamente dal campo forwardForwardingClass.
fromCountry principal.location.country_or_region: fromCountry
target.location.country_or_region: fromCountry
Valore preso direttamente dal campo fromCountry.
fromUser principal.user.userid: fromUser Valore preso direttamente dal campo fromUser, se non vuoto, "unknown" o "Sconosciuto".
fromZone additional.fields[].key: "fromZone"
additional.fields[].value.string_value: fromZone
Valore preso direttamente dal campo fromZone.
generateTime metadata.collected_timestamp: generateTime Valore preso direttamente dal campo generateTime e convertito in timestamp utilizzando il formato UNIX.
hostname target.hostname: hostname Valore preso direttamente dal campo hostname.
httpUrl target.url: httpUrl Valore preso direttamente dal campo httpUrl.
icmpTypeIPv4 additional.fields[].key: "icmpTypeIPv4"
additional.fields[].value.string_value: icmpTypeIPv4
Valore preso direttamente dal campo icmpTypeIPv4.
idpAction security_result.action: idpAction Per la logica, consulta action.
ingressInterfaceName additional.fields[].key: "ingressInterfaceName"
additional.fields[].value.string_value: ingressInterfaceName
Valore preso direttamente dal campo ingressInterfaceName.
ipsApplication additional.fields[].key: "ipsApplication"
additional.fields[].value.string_value: ipsApplication
Valore preso direttamente dal campo ipsApplication.
ipsDirection security_result.detection_fields[].key: "ipsDirection"
security_result.detection_fields[].value: ipsDirection
Valore preso direttamente dal campo ipsDirection.
ipsProfile security_result.detection_fields[].key: "ipsProfile"
security_result.detection_fields[].value: ipsProfile
Valore preso direttamente dal campo ipsProfile.
ipsProfileRule security_result.rule_name: ipsProfileRule Valore preso direttamente dal campo ipsProfileRule.
ipsProtocol network.ip_protocol: ipsProtocol Valore preso direttamente dal campo ipsProtocol.
log_type metadata.description: log_type
metadata.log_type: log_type
Valore preso direttamente dal campo log_type.
mstatsTimeBlock metadata.collected_timestamp: mstatsTimeBlock Valore preso direttamente dal campo mstatsTimeBlock e convertito in timestamp utilizzando il formato UNIX.
mstatsTotRecvdOctets network.received_bytes: mstatsTotRecvdOctets Valore preso direttamente dal campo mstatsTotRecvdOctets e convertito in numero intero non firmato.
mstatsTotSentOctets network.sent_bytes: mstatsTotSentOctets Valore preso direttamente dal campo mstatsTotSentOctets e convertito in numero intero non firmato.
mstatsTotSessCount additional.fields[].key: "mstatsTotSessCount"
additional.fields[].value.string_value: mstatsTotSessCount
Valore preso direttamente dal campo mstatsTotSessCount.
mstatsTotSessDuration network.session_duration.seconds: mstatsTotSessDuration Valore preso direttamente dal campo mstatsTotSessDuration e convertito in numero intero.
mstatsType security_result.category_details: mstatsType Valore preso direttamente dal campo mstatsType.
networkPrefix target.ip: networkPrefix
target.port: networkPrefix
Indirizzo IP estratto dal campo networkPrefix. Porta estratta dal campo networkPrefix e convertita in numero intero.
protocolIdentifier network.ip_protocol: protocolIdentifier Valore preso direttamente dal campo protocolIdentifier, convertito in numero intero e mappato al nome del protocollo IP utilizzando una ricerca.
recvdOctets network.received_bytes: recvdOctets Valore preso direttamente dal campo recvdOctets e convertito in numero intero non firmato.
recvdPackets network.received_packets: recvdPackets Valore preso direttamente dal campo recvdPackets e convertito in numero intero.
remoteSite target.hostname: remoteSite Valore preso direttamente dal campo remoteSite.
reverseForwardingClass security_result.detection_fields[].key: "reverseForwardingClass"
security_result.detection_fields[].value: reverseForwardingClass
Valore preso direttamente dal campo reverseForwardingClass.
risk security_result.risk_score: risk Valore preso direttamente dal campo risk e convertito in float.
rule security_result.rule_name: rule Valore preso direttamente dal campo rule.
sentOctets network.sent_bytes: sentOctets Valore preso direttamente dal campo sentOctets e convertito in numero intero non firmato.
sentPackets network.sent_packets: sentPackets Valore preso direttamente dal campo sentPackets e convertito in numero intero.
serialNum security_result.detection_fields[].key: "serialNum"
security_result.detection_fields[].value: serialNum
Valore preso direttamente dal campo serialNum.
signatureId security_result.detection_fields[].key: "signatureID"
security_result.detection_fields[].value: signatureId
Valore preso direttamente dal campo signatureId.
signatureMsg security_result.detection_fields[].key: "signatureMsg"
security_result.detection_fields[].value: signatureMsg
Valore preso direttamente dal campo signatureMsg.
signaturePriority security_result.severity: signaturePriority Se signaturePriority è "low" (senza distinzione tra maiuscole e minuscole), LOW. Se signaturePriority è "medium" (senza distinzione tra maiuscole e minuscole), MEDIUM. Se signaturePriority è "high" (senza distinzione tra maiuscole e minuscole), HIGH.
site principal.hostname: site
applianceName: site
Valore preso direttamente dal campo site.
siteId additional.fields[].key: "siteId"
additional.fields[].value.string_value: siteId
Valore preso direttamente dal campo siteId.
siteName principal.hostname: siteName
applianceName: siteName
Valore preso direttamente dal campo siteName.
sourceIPv4Address principal.ip: sourceIPv4Address Valore preso direttamente dal campo sourceIPv4Address.
sourceIPv6Address principal.ip: sourceIPv6Address Valore preso direttamente dal campo sourceIPv6Address.
sourcePort principal.port: sourcePort Valore preso direttamente dal campo sourcePort e convertito in numero intero.
sourceTransportPort principal.port: sourceTransportPort Valore preso direttamente dal campo sourceTransportPort e convertito in numero intero.
subFamily security_result.detection_fields[].key: "subFamily"
security_result.detection_fields[].value: subFamily
Valore preso direttamente dal campo subFamily.
tcpConnAborted additional.fields[].key: "tcpConnAborted"
additional.fields[].value.string_value: tcpConnAborted
Valore preso direttamente dal campo tcpConnAborted, se non vuoto o "0".
tcpConnRefused additional.fields[].key: "tcpConnRefused"
additional.fields[].value.string_value: tcpConnRefused
Valore preso direttamente dal campo tcpConnRefused, se non vuoto o "0".
tcpPktsFwd network.sent_packets: tcpPktsFwd Valore preso direttamente dal campo tcpPktsFwd e convertito in numero intero.
tcpPktsRev network.received_packets: tcpPktsRev Valore preso direttamente dal campo tcpPktsRev e convertito in numero intero.
tcpReXmitFwd additional.fields[].key: "tcpReXmitFwd"
additional.fields[].value.string_value: tcpReXmitFwd
Valore preso direttamente dal campo tcpReXmitFwd, se non vuoto o "0".
tcpReXmitRev additional.fields[].key: "tcpReXmitRev"
additional.fields[].value.string_value: tcpReXmitRev
Valore preso direttamente dal campo tcpReXmitRev, se non vuoto o "0".
tcpSAA additional.fields[].key: "tcpSAA"
additional.fields[].value.string_value: tcpSAA
Valore preso direttamente dal campo tcpSAA, se non vuoto o "0".
tcpSSA additional.fields[].key: "tcpSSA"
additional.fields[].value.string_value: tcpSSA
Valore preso direttamente dal campo tcpSSA, se non vuoto o "0".
tcpSessCnt additional.fields[].key: "tcpSessCnt"
additional.fields[].value.string_value: tcpSessCnt
Valore preso direttamente dal campo tcpSessCnt.
tcpSessDur network.session_duration.seconds: tcpSessDur Valore preso direttamente dal campo tcpSessDur e convertito in numero intero.
tcpSynAckReXmit additional.fields[].key: "tcpSynAckReXmit"
additional.fields[].value.string_value: tcpSynAckReXmit
Valore preso direttamente dal campo tcpSynAckReXmit, se non vuoto o "0".
tcpSynReXmit additional.fields[].key: "tcpSynReXmit"
additional.fields[].value.string_value: tcpSynReXmit
Valore preso direttamente dal campo tcpSynReXmit, se non vuoto o "0".
tcpTWHS additional.fields[].key: "tcpTWHS"
additional.fields[].value.string_value: tcpTWHS
Valore preso direttamente dal campo tcpTWHS, se non vuoto o "0".
tenantId principal.resource.attribute.labels[].key: "tenantId"
principal.resource.attribute.labels[].value: tenantId
Valore preso direttamente dal campo tenantId.
tenantName observer.hostname: tenantName Valore preso direttamente dal campo tenantName.
threatType security_result.detection_fields[].key: "threatType"
security_result.detection_fields[].value: threatType
Valore preso direttamente dal campo threatType.
toCountry target.location.country_or_region: toCountry Valore preso direttamente dal campo toCountry.
toZone additional.fields[].key: "toZone"
additional.fields[].value.string_value: toZone
Valore preso direttamente dal campo toZone.
traffType additional.fields[].key: "traffType"
additional.fields[].value.string_value: traffType
Valore preso direttamente dal campo traffType.
ts metadata.event_timestamp: ts Valore preso direttamente dal campo ts e convertito in timestamp.
type security_result.action: type Per la logica, consulta action.
urlAction security_result.action: urlAction Per la logica, consulta action.
urlActionMessage security_result.summary: urlActionMessage Valore preso direttamente dal campo urlActionMessage.
urlCategory principal.resource.attribute.labels[].key: "urlCategory"
principal.resource.attribute.labels[].value: urlCategory
Valore preso direttamente dal campo urlCategory.
urlProfile additional.fields[].key: "urlProfile"
additional.fields[].value.string_value: urlProfile
Valore preso direttamente dal campo urlProfile.
urlReputation security_result.severity_details: urlReputation Valore preso direttamente dal campo urlReputation.
user principal.ip: user Valore preso direttamente dal campo user.
vsnId principal.resource.attribute.labels[].key: "vsnId"
principal.resource.attribute.labels[].value: vsnId
Valore preso direttamente dal campo vsnId. Valore hardcoded. Valore hardcoded.

Modifiche

2024-06-03

  • "idpAction" è stato mappato a "security_result.action".
  • "threatType" è stato mappato a "security_result.detection_fields".
  • "ipsDirection" è stato mappato a "security_result.detection_fields".
  • "ipsProfile" è stato mappato a "security_result.detection_fields".
  • "signaturePriority" è stato mappato a "security_result.severity".
  • "signatureMsg" è stato mappato a "security_result.detection_fields".
  • "signatureId" è stato mappato a "security_result.detection_fields".
  • "ipsApplication" è stato mappato a "security_result.detection_fields".
  • "classMsg" è stato mappato a "security_result.description".
  • "ipsProfileRule" è stato mappato a "security_result.rule_name".
  • "ipsProtocol" è stato mappato a "network.ip_protocol".

2023-07-03

  • È stato aggiunto il supporto per "entitlementlog", "monstatslog" e "tcpappmonlog".

2022-11-04

  • Parser creato da Mewly.