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

Supportato in:

Questo documento descrive come raccogliere i log di Versa Networks Secure Access Service Edge (SASE). L'analizzatore sintattico estrae le coppie chiave-valore dopo un filtro grok iniziale. Quindi, mappa questi valori al modello di dati unificato (UDM), gestendo vari formati di log come eventi firewall, log delle applicazioni e log degli allarmi, ed esegue conversioni e arricchimenti per campi specifici come il protocollo IP e il punteggio di rischio.

Prima di iniziare

  • Assicurati di avere un'istanza Google Security Operations.
  • Assicurati di utilizzare Windows 2016 o versioni successive oppure un host Linux con systemd.
  • Se l'esecuzione avviene tramite un proxy, assicurati che le porte del firewall siano aperte.
  • Assicurati di disporre dell'accesso con privilegi a Versa SASE.

Recuperare il file di autenticazione importazione di Google SecOps

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

Recuperare 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 l'agente Bindplane

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 di 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 aggiuntive per l'installazione

Configura l'agente Bindplane per importare Syslog e inviarlo 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 in base alle esigenze della tua infrastruttura.

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

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

Riavvia l'agente Bindplane per applicare le modifiche

  • In Linux, per riavviare Bindplane Agent, esegui questo 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
    

Configurare SASE di Versa Networks

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

Per configurare i nodi di analisi di Versa:

  • Abilita l'inoltro dei log
  • Abilitare la registrazione dell'ID sessione

Abilita l'inoltro dei log

  1. Accedi al server di analisi di Versa.
  2. Vai a CLI 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 l'inoltro dei log:

    • Sostituisci <collector_ip> e <collector_port> con l'indirizzo IP e la porta del raccoglitore 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
    

Abilitare la registrazione dell'ID sessione

Per registrare le informazioni relative all'IP, attiva la registrazione dell'ID sessione.

  1. Accedi a Versa Director.
  2. Passa alla visualizzazione del regista.
  3. Vai a Configurazione > Dispositivi > Tenant > Dispositivo per accedere a Visualizzazione appliance.
  4. Seleziona Configuration > Others > System > Configuration > Configuration.
  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 ID sessione.

  8. Fai clic su OK.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
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 impostati su "consenti", 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 estratto 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: "ID applicazione"
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 estratto 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, vedi 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 estratto 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 estratto direttamente dal campo destinationPort e convertito in numero intero.
destinationTransportPort target.port: destinationTransportPort Valore estratto direttamente dal campo destinationTransportPort e convertito in numero intero.
deviceKey about.resource.attribute.labels[].key: "deviceKey"
about.resource.attribute.labels[].value: deviceKey
Valore estratto direttamente dal campo deviceKey se non è "Sconosciuto".
deviceName about.resource.attribute.labels[].key: "deviceName"
about.resource.attribute.labels[].value: deviceName
Valore estratto direttamente dal campo deviceName se non è "Sconosciuto".
duration network.session_duration.seconds: duration Valore estratto 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. Altrimenti, 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 estratto 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 estratto direttamente dal campo fromUser se non è vuoto, "sconosciuto" 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 estratto 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, vedi 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 estratto direttamente dal campo mstatsTimeBlock e convertito in timestamp utilizzando il formato UNIX.
mstatsTotRecvdOctets network.received_bytes: mstatsTotRecvdOctets Valore estratto direttamente dal campo mstatsTotRecvdOctets e convertito in numero intero senza segno.
mstatsTotSentOctets network.sent_bytes: mstatsTotSentOctets Valore estratto direttamente dal campo mstatsTotSentOctets e convertito in numero intero senza segno.
mstatsTotSessCount additional.fields[].key: "mstatsTotSessCount"
additional.fields[].value.string_value: mstatsTotSessCount
Valore preso direttamente dal campo mstatsTotSessCount.
mstatsTotSessDuration network.session_duration.seconds: mstatsTotSessDuration Valore estratto 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 estratto direttamente dal campo protocolIdentifier, convertito in numero intero e mappato al nome del protocollo IP utilizzando una ricerca.
recvdOctets network.received_bytes: recvdOctets Valore estratto direttamente dal campo recvdOctets e convertito in numero intero senza segno.
recvdPackets network.received_packets: recvdPackets Valore estratto 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 estratto direttamente dal campo risk e convertito in virgola mobile.
rule security_result.rule_name: rule Valore preso direttamente dal campo rule.
sentOctets network.sent_bytes: sentOctets Valore estratto direttamente dal campo sentOctets e convertito in numero intero senza segno.
sentPackets network.sent_packets: sentPackets Valore estratto 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), allora LOW. Se signaturePriority è "medium" (senza distinzione tra maiuscole e minuscole), allora MEDIUM. Se signaturePriority è "alto" (senza distinzione tra maiuscole e minuscole), allora 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 estratto direttamente dal campo sourcePort e convertito in numero intero.
sourceTransportPort principal.port: sourceTransportPort Valore estratto 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 estratto direttamente dal campo tcpConnAborted se non è vuoto o "0".
tcpConnRefused additional.fields[].key: "tcpConnRefused"
additional.fields[].value.string_value: tcpConnRefused
Valore estratto direttamente dal campo tcpConnRefused se non è vuoto o "0".
tcpPktsFwd network.sent_packets: tcpPktsFwd Valore estratto direttamente dal campo tcpPktsFwd e convertito in numero intero.
tcpPktsRev network.received_packets: tcpPktsRev Valore estratto direttamente dal campo tcpPktsRev e convertito in numero intero.
tcpReXmitFwd additional.fields[].key: "tcpReXmitFwd"
additional.fields[].value.string_value: tcpReXmitFwd
Valore estratto direttamente dal campo tcpReXmitFwd se non è vuoto o "0".
tcpReXmitRev additional.fields[].key: "tcpReXmitRev"
additional.fields[].value.string_value: tcpReXmitRev
Valore estratto direttamente dal campo tcpReXmitRev se non è vuoto o "0".
tcpSAA additional.fields[].key: "tcpSAA"
additional.fields[].value.string_value: tcpSAA
Valore estratto direttamente dal campo tcpSAA se non è vuoto o "0".
tcpSSA additional.fields[].key: "tcpSSA"
additional.fields[].value.string_value: tcpSSA
Valore estratto 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 estratto direttamente dal campo tcpSessDur e convertito in numero intero.
tcpSynAckReXmit additional.fields[].key: "tcpSynAckReXmit"
additional.fields[].value.string_value: tcpSynAckReXmit
Valore estratto direttamente dal campo tcpSynAckReXmit se non è vuoto o "0".
tcpSynReXmit additional.fields[].key: "tcpSynReXmit"
additional.fields[].value.string_value: tcpSynReXmit
Valore estratto direttamente dal campo tcpSynReXmit se non è vuoto o "0".
tcpTWHS additional.fields[].key: "tcpTWHS"
additional.fields[].value.string_value: tcpTWHS
Valore estratto 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 estratto direttamente dal campo ts e convertito in timestamp.
type security_result.action: type Per la logica, vedi action.
urlAction security_result.action: urlAction Per la logica, vedi 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.

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.