Raccogliere i log di Versa Networks Secure Access Service Edge (SASE)
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
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- 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
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.
Installa l'agente Bindplane
Installazione di Windows
- Apri il prompt dei comandi o PowerShell come amministratore.
Esegui questo comando:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Installazione di Linux
- Apri un terminale con privilegi root o sudo.
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
- Per ulteriori opzioni di installazione, consulta questa guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
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,vio Blocco note).
- Individua il file
Modifica il file
config.yamlcome 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_labelsSostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.
Sostituisci
<customer_id>con l'ID cliente effettivo.Aggiorna
/path/to/ingestion-authentication-file.jsonal 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-agentIn 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
- Accedi al server di analisi di Versa.
- Vai alla CLI eseguendo il comando
cli. - Passa alla modalità di configurazione eseguendo il comando
configure, quindi inserisciload merge terminal. 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- Sostituisci
Salva la configurazione:
save
Abilita la registrazione dell'ID sessione
Per registrare le informazioni relative all'IP, attiva la registrazione dell'ID sessione.
- Accedi a Versa Director.
- Passa alla visualizzazione del regista.
- Vai a Configurazione > Dispositivi > Tenant > Dispositivo per accedere a Visualizzazione appliance.
- Seleziona Configuration > Others > System > Configuration > Configuration.
- Nel riquadro Parametri, fai clic su Modifica.
- Nella finestra Modifica parametri, seleziona LEF.
Nella sezione Firewall, seleziona la casella di controllo Includi la registrazione dell'ID sessione.
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: appFamilysecurity_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: destIpdestinationIPv4Address: 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: fromCountrytarget.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_typemetadata.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: networkPrefixtarget.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: siteapplianceName: 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: siteNameapplianceName: 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.