Raccogliere 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). 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 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
  • Abilita la registrazione dell'ID sessione

Abilita l'inoltro dei log

  1. Accedi al server di analisi di Versa.
  2. Vai alla 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 tuo 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
    

Abilita 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 la registrazione dell'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 estratto direttamente dal campo accCkt.
accCktId additional.fields[].key: "accCktId"
additional.fields[].value.string_value: accCktId
Valore estratto direttamente dal campo accCktId.
accCktName additional.fields[].key: "accCktName"
additional.fields[].value.string_value: accCktName
Valore estratto direttamente dal campo accCktName.
accessType additional.fields[].key: "accessType"
additional.fields[].value.string_value: accessType
Valore estratto 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 estratto direttamente dal campo alarmCause.
alarmClass security_result.detection_fields[].key: "alarmClass"
security_result.detection_fields[].value: alarmClass
Valore estratto direttamente dal campo alarmClass.
alarmClearable security_result.detection_fields[].key: "alarmClearable"
security_result.detection_fields[].value: alarmClearable
Valore estratto direttamente dal campo alarmClearable.
alarmEventType metadata.product_event_type: alarmEventType Valore estratto direttamente dal campo alarmEventType.
alarmKey security_result.detection_fields[].key: "alarmKey"
security_result.detection_fields[].value: alarmKey
Valore estratto direttamente dal campo alarmKey.
alarmKind security_result.detection_fields[].key: "alarmKind"
security_result.detection_fields[].value: alarmKind
Valore estratto direttamente dal campo alarmKind.
alarmOwner security_result.detection_fields[].key: "alarmOwner"
security_result.detection_fields[].value: alarmOwner
Valore estratto direttamente dal campo alarmOwner.
alarmSeqNo security_result.detection_fields[].key: "alarmSeqNo"
security_result.detection_fields[].value: alarmSeqNo
Valore estratto direttamente dal campo alarmSeqNo.
alarmSeverity security_result.severity_details: alarmSeverity Valore estratto 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 estratto direttamente dal campo alarmType.
appFamily metadata.product_event_type: appFamily
security_result.detection_fields[].key: "appFamily"
security_result.detection_fields[].value: appFamily
Valore estratto direttamente dal campo appFamily.
appId security_result.detection_fields[].key: "ID applicazione"
security_result.detection_fields[].value: appId
Valore estratto direttamente dal campo appId.
appIdStr security_result.detection_fields[].key: "appIdStr"
security_result.detection_fields[].value: appIdStr
Valore estratto 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 estratto direttamente dal campo appProductivity.
appRisk security_result.severity_details: appRisk Valore estratto direttamente dal campo appRisk.
appSubFamily security_result.detection_fields[].key: "appSubFamily"
security_result.detection_fields[].value: appSubFamily
Valore estratto direttamente dal campo appSubFamily.
avAccuracy additional.fields[].key: "avAccuracy"
additional.fields[].value.string_value: avAccuracy
Valore estratto direttamente dal campo avAccuracy.
avAction security_result.action: avAction Per la logica, vedi action.
avMalwareName security_result.threat_name: avMalwareName Valore estratto direttamente dal campo avMalwareName.
avMalwareType security_result.category_details: avMalwareType Valore estratto 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 estratto direttamente dal campo clientIPv4Address.
destIp target.ip: destIp
destinationIPv4Address: destIp
Valore estratto direttamente dal campo destIp.
destinationIPv4Address target.ip: destinationIPv4Address Valore estratto direttamente dal campo destinationIPv4Address o derivato dal campo networkPrefix.
destinationIPv6Address target.ip: destinationIPv6Address Valore estratto 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 estratto 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 estratto direttamente dal campo eventType.
family security_result.detection_fields[].key: "family"
security_result.detection_fields[].value: family
Valore estratto direttamente dal campo family.
fc security_result.detection_fields[].key: "ForwardingClass"
security_result.detection_fields[].value: fc
Valore estratto direttamente dal campo fc.
fileTransDir additional.fields[].key: "fileTransDir"
additional.fields[].value.string_value: fileTransDir
Valore estratto direttamente dal campo fileTransDir.
filename target.file.names: filename Valore estratto 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 estratto direttamente dal campo flowId.
forwardForwardingClass security_result.detection_fields[].key: "forwardForwardingClass"
security_result.detection_fields[].value: forwardForwardingClass
Valore estratto direttamente dal campo forwardForwardingClass.
fromCountry principal.location.country_or_region: fromCountry
target.location.country_or_region: fromCountry
Valore estratto direttamente dal campo fromCountry.
fromUser principal.user.userid: fromUser Valore estratto direttamente dal campo fromUser se non è vuoto, "unknown" o "Unknown".
fromZone additional.fields[].key: "fromZone"
additional.fields[].value.string_value: fromZone
Valore estratto 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 estratto direttamente dal campo hostname.
httpUrl target.url: httpUrl Valore estratto direttamente dal campo httpUrl.
icmpTypeIPv4 additional.fields[].key: "icmpTypeIPv4"
additional.fields[].value.string_value: icmpTypeIPv4
Valore estratto 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 estratto direttamente dal campo ingressInterfaceName.
ipsApplication additional.fields[].key: "ipsApplication"
additional.fields[].value.string_value: ipsApplication
Valore estratto direttamente dal campo ipsApplication.
ipsDirection security_result.detection_fields[].key: "ipsDirection"
security_result.detection_fields[].value: ipsDirection
Valore estratto direttamente dal campo ipsDirection.
ipsProfile security_result.detection_fields[].key: "ipsProfile"
security_result.detection_fields[].value: ipsProfile
Valore estratto direttamente dal campo ipsProfile.
ipsProfileRule security_result.rule_name: ipsProfileRule Valore estratto direttamente dal campo ipsProfileRule.
ipsProtocol network.ip_protocol: ipsProtocol Valore estratto direttamente dal campo ipsProtocol.
log_type metadata.description: log_type
metadata.log_type: log_type
Valore estratto 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 estratto 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 estratto 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 estratto direttamente dal campo remoteSite.
reverseForwardingClass security_result.detection_fields[].key: "reverseForwardingClass"
security_result.detection_fields[].value: reverseForwardingClass
Valore estratto 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 estratto 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 estratto direttamente dal campo serialNum.
signatureId security_result.detection_fields[].key: "signatureID"
security_result.detection_fields[].value: signatureId
Valore estratto direttamente dal campo signatureId.
signatureMsg security_result.detection_fields[].key: "signatureMsg"
security_result.detection_fields[].value: signatureMsg
Valore estratto 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 è "elevato" (senza distinzione tra maiuscole e minuscole), allora HIGH.
site principal.hostname: site
applianceName: site
Valore estratto direttamente dal campo site.
siteId additional.fields[].key: "siteId"
additional.fields[].value.string_value: siteId
Valore estratto direttamente dal campo siteId.
siteName principal.hostname: siteName
applianceName: siteName
Valore estratto direttamente dal campo siteName.
sourceIPv4Address principal.ip: sourceIPv4Address Valore estratto direttamente dal campo sourceIPv4Address.
sourceIPv6Address principal.ip: sourceIPv6Address Valore estratto 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 estratto 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 estratto 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 estratto direttamente dal campo tenantId.
tenantName observer.hostname: tenantName Valore estratto direttamente dal campo tenantName.
threatType security_result.detection_fields[].key: "threatType"
security_result.detection_fields[].value: threatType
Valore estratto direttamente dal campo threatType.
toCountry target.location.country_or_region: toCountry Valore estratto direttamente dal campo toCountry.
toZone additional.fields[].key: "toZone"
additional.fields[].value.string_value: toZone
Valore estratto direttamente dal campo toZone.
traffType additional.fields[].key: "traffType"
additional.fields[].value.string_value: traffType
Valore estratto 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 estratto direttamente dal campo urlActionMessage.
urlCategory principal.resource.attribute.labels[].key: "urlCategory"
principal.resource.attribute.labels[].value: urlCategory
Valore estratto direttamente dal campo urlCategory.
urlProfile additional.fields[].key: "urlProfile"
additional.fields[].value.string_value: urlProfile
Valore estratto direttamente dal campo urlProfile.
urlReputation security_result.severity_details: urlReputation Valore estratto direttamente dal campo urlReputation.
user principal.ip: user Valore estratto direttamente dal campo user.
vsnId principal.resource.attribute.labels[].key: "vsnId"
principal.resource.attribute.labels[].value: vsnId
Valore estratto 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.