Raccogliere i log CASB di Symantec CloudSOC
Questo documento spiega come importare i log di Symantec CloudSOC in
Google Security Operations utilizzando Bindplane. Il parser estrae i log da syslog o
messaggi in formato JSON. Esegue diverse operazioni chiave: l'analisi del campo del messaggio, la conversione del messaggio in JSON, se necessario, l'estrazione dei campi, la mappatura al modello Unified Data Model (UDM) e l'arricchimento dell'evento con contesto aggiuntivo, come timestamp e dettagli dei risultati di sicurezza. Il parser gestisce anche
vari formati di log ed esegue azioni specifiche in base al campo activity_type
per classificare correttamente l'evento.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps
- Windows 2016 o versioni successive oppure un host Linux con
systemd
- Se l'esecuzione avviene tramite un proxy, le porte del firewall sono aperte
- Accesso con privilegi a Symantec CloudSOC
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 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 di 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 la guida all'installazione.
Configura l'agente Bindplane per importare Syslog e inviarli 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
,vi
o Blocco note).
- Individua il file
Modifica il file
config.yaml
come segue:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" 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: 'SYMANTEC_CASB' raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Sostituisci 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.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
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart bindplane-agent
Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:
net stop BindPlaneAgent && net start BindPlaneAgent
Configura Syslog in Symantec CASB
- Accedi all'host Symantec CloudSOC.
Esegui questo comando per identificare il logger utilizzato dal sistema:
ls –d /etc/*syslog*
Vai alla sezione corrispondente, in base alla risposta del comando precedente:
- syslog.conf: Syslog legacy.
- syslog-ng.conf: Syslog-ng.
Configurazione Syslog precedente
Apri il file
syslogd
, in genere situato nella directory/etc/default
, utilizzando l'editorvi
.vi /etc/default/syslogd
Assicurati che il valore
SYSLOGD
contenga il flag-r
.SYSLOGD="-r"
Salva il file ed esci dall'editor:
- Passa alla modalità comando premendo il tasto Esc.
- Premi
:
(due punti) per aprire la barra dei prompt. - Digita
wq
dopo i due punti e premi Invio.
Apri il file
services
, in genere situato nella directory/etc
, utilizzando l'editorvi
.vi /etc/services
Modifica il valore della porta per il servizio syslog:
syslog 514/udp
Salva il file ed esci dall'editor:
- Passa alla modalità comando premendo il tasto Esc.
- Premi
:
(due punti) per aprire la barra dei prompt. - Digita
wq
dopo i due punti e premi Invio.
Apri il file
syslog.conf
, in genere situato nella directory/etc
, utilizzando l'editorvi
.vi /etc/syslog.conf
Aggiorna la configurazione per inoltrare tutti i log a Google SecOps.
*.* @bindplane_agent_host
Salva il file ed esci dall'editor:
- Passa alla modalità comando premendo il tasto Esc.
- Premi
:
(due punti) per aprire la barra dei prompt. - Digita
wq
dopo i due punti e premi Invio.
Apri il file
hosts
, in genere situato nella directory/etc
, utilizzando l'editorvi
.vi /etc/hosts
Crea una voce DNS locale per
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
Salva il file ed esci dall'editor:
- Passa alla modalità comando premendo il tasto Esc.
- Premi
:
(due punti) per aprire la barra dei prompt. - Digita
wq
dopo i due punti e premi Invio.
Riavvia il servizio del daemon syslog.
Configurazione di Syslog-ng
Apri il file
syslog-ng.conf
, in genere situato nella directory/etc
, utilizzando l'editorvi
.vi /etc/syslog-ng.conf
Aggiungi il seguente codice alla fine del file:
destination d____ { udp("bindplane_agent_host" port(514));}; log {source(s_src); destination(d____);};
Apri il file
hosts
, in genere situato nella directory/etc
, utilizzando l'editorvi
.vi /etc/hosts
Crea una voce DNS locale per
bindplane_agent_host
.0.0.0.0 bindplane_agent_host
Salva il file ed esci dall'editor:
- Passa alla modalità comando premendo il tasto Esc.
- Premi
:
(due punti) per aprire la barra dei prompt. - Digita
wq
dopo i due punti e premi Invio.
Riavvia il servizio del daemon syslog-ng.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
_domain |
target.hostname |
Il valore del campo _domain |
_domain |
target.asset.hostname |
Il valore del campo _domain |
_id |
metadata.product_log_id |
Il valore del campo _id |
actions_taken |
security_result.detection_fields[].value |
Il valore del campo actions_taken . La chiave viene generata dinamicamente come Action_ + indice. |
activity_type |
metadata.product_event_type |
Il valore del campo activity_type se product_data.activity_type è vuoto o il valore di product_data.activity_type se non è vuoto. |
collector_device_ip |
principal.ip |
Il valore del campo collector_device_ip , se non è Unknown IP . |
collector_device_ip |
principal.asset.ip |
Il valore del campo collector_device_ip , se non è Unknown IP . |
collector_device_name |
principal.hostname |
Il valore del campo collector_device_name . |
collector_device_name |
principal.asset.hostname |
Il valore del campo collector_device_name . |
content_checks.dlp.raw_response.contentdetails[].contentBlockId |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.contentdetails[].contentBlockId . La chiave viene generata dinamicamente come contentBlockId_ + indice. |
content_checks.dlp.raw_response.contentdetails[].topLevelFileType |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.contentdetails[].topLevelFileType . La chiave viene generata dinamicamente come topLevelFileType_ + indice. |
content_checks.dlp.raw_response.requestid |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.requestid . La chiave è Request ID . |
content_checks.dlp.raw_response.responseaction |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.responseaction . La chiave è Response Action . |
content_checks.dlp.raw_response.violation[].name |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.violation[].name . La chiave viene generata dinamicamente come Violation_Policy_Name_ + indice. |
content_checks.dlp.raw_response.violation[].policyId |
security_result.detection_fields[].value |
Il valore di content_checks.dlp.raw_response.violation[].policyId . La chiave viene generata dinamicamente come Violation_Policy_ID_ + indice. |
content_checks.dlp.updated_timestamp |
additional.fields[].value.string_value |
Il valore di content_checks.dlp.updated_timestamp . La chiave è Updated TimeStamp . |
content_checks.filename |
target.file.full_path |
Il valore di content_checks.filename . |
content_checks.mimetype |
target.file.mime_type |
Il valore di content_checks.mimetype . |
content_checks.risktype_list[] |
security_result.detection_fields[].value |
Il valore di content_checks.risktype_list[] . La chiave viene generata dinamicamente come RiskType_ + indice. |
content_checks.vba_macros.expressions[].values[].key |
security_result.detection_fields[].key |
Il valore di content_checks.vba_macros.expressions[].values[].key concatenato con gli indici. |
content_checks.vba_macros.expressions[].values[].value |
security_result.detection_fields[].value |
Il valore di content_checks.vba_macros.expressions[].values[].value . |
content_checks.vk_content_iq_violations[] |
security_result.detection_fields[].value |
Il valore di content_checks.vk_content_iq_violations[] . La chiave viene generata dinamicamente come content_violation_ + indice. |
content_checks.vk_dlp_policy_violations[] |
security_result.detection_fields[].value |
Il valore di content_checks.vk_dlp_policy_violations[] . La chiave viene generata dinamicamente come dlp_policy_violation_ + indice. |
content_checks.vk_encryption |
security_result.detection_fields[].value |
Il valore di content_checks.vk_encryption . La chiave è vk_encryption . |
content_checks.vk_glba |
security_result.detection_fields[].value |
Il valore di content_checks.vk_glba . La chiave è vk_glba . |
content_checks.vk_hipaa |
security_result.detection_fields[].value |
Il valore di content_checks.vk_hipaa . La chiave è vk_hipaa . |
content_checks.vk_pci |
security_result.detection_fields[].value |
Il valore di content_checks.vk_pci . La chiave è vk_pci . |
content_checks.vk_pii |
security_result.detection_fields[].value |
Il valore di content_checks.vk_pii . La chiave è vk_pii . |
content_checks.vk_source_code |
security_result.detection_fields[].value |
Il valore di content_checks.vk_source_code . La chiave è vk_source_code . |
content_checks.vk_vba_macros |
security_result.detection_fields[].value |
Il valore di content_checks.vk_vba_macros . La chiave è vk_vba_macros . |
content_checks.vk_virus |
security_result.detection_fields[].value |
Il valore di content_checks.vk_virus . La chiave è vk_virus . |
content_checks.violations |
security_result.detection_fields[].value |
Il valore di content_checks.violations . La chiave è violations . |
created_timestamp |
additional.fields[].value.string_value |
Il valore di created_timestamp . La chiave è Created TimeStamp . |
date |
metadata.event_timestamp.seconds |
Secondi dall'epoca estratti dal campo date . |
device_ip |
target.ip |
Il valore del campo device_ip , se non è Unknown IP . |
device_ip |
target.asset.ip |
Il valore del campo device_ip , se non è Unknown IP . |
file_size |
target.file.size |
Il valore di file_size o product_data.file_size se il primo è vuoto. Convertito in numero intero senza segno. |
file_url |
target.file.full_path |
Il valore di product_data.file_url . |
group_name |
target.group.group_display_name |
Il nome visualizzato estratto dal campo group_name . |
hosts[] |
principal.ip |
I valori del campo hosts , separati da virgole. |
inserted_timestamp |
additional.fields[].value.string_value |
Il valore di inserted_timestamp . La chiave è Inserted TimeStamp . |
instance |
principal.hostname |
Il primo valore del campo instance se è un array o il valore del campo instance se è una stringa. |
instance |
principal.asset.hostname |
Il primo valore del campo instance se è un array o il valore del campo instance se è una stringa. |
ioi_code |
security_result.summary |
Il valore del campo ioi_code . |
_latency |
security_result.detection_fields[].value |
Il valore del campo _latency . La chiave è Latency . |
locations |
security_result.detection_fields[].value |
Il valore del campo locations . La chiave è Locations . |
log_name |
intermediary.asset.asset_id |
L'ID log estratto dal campo log_name , con il prefisso logid: . |
mailbox_owner |
target.user.userid |
Il valore di product_data.mailbox owner . |
metadata.log_type |
metadata.log_type |
Codificato in modo permanente su SYMANTEC_CASB . |
metadata.product_name |
metadata.product_name |
Codificato in modo permanente su SYMANTEC_CASB . |
metadata.vendor_name |
metadata.vendor_name |
Codificato in modo permanente su SYMANTEC . |
msg |
metadata.description |
Il valore del campo msg o del campo message se msg non è presente. |
name |
security_result.detection_fields[].value |
Il valore del campo name . La chiave è Name . |
object_name |
security_result.detection_fields[].value |
Il valore del campo object_name . La chiave è Object Name . |
object_type |
target.resource.name |
Il valore del campo object_type . |
org_unit |
security_result.detection_fields[].value |
Il valore del campo org_unit . La chiave è org_unit ID . |
policy_action |
security_result.action_details |
Il valore del campo policy_action . |
policy_type |
security_result.detection_fields[].value |
Il valore del campo policy_type . La chiave è policy_type . |
policy_violated |
security_result.detection_fields[].value |
Il valore del campo policy_violated . La chiave è policy_violated . |
product_data._domain |
target.hostname |
Il valore di product_data._domain . |
product_data._domain |
target.asset.hostname |
Il valore di product_data._domain . |
product_data.activity_type |
metadata.product_event_type |
Il valore di product_data.activity_type . |
product_data.file url |
target.file.full_path |
Il valore di product_data.file url . |
product_data.file_size |
target.file.size |
Il valore di product_data.file_size . |
product_data.group |
target.group.group_display_name |
Il valore di product_data.group . |
product_data.location |
principal.location.country_or_region |
Il valore di product_data.location . |
product_data.logon error |
security_result.summary |
Il valore di product_data.logon error . |
product_data.mailbox owner |
target.user.userid |
Il valore di product_data.mailbox owner . |
product_data.name |
target.file.full_path |
Il valore di product_data.name . |
product_data.object_name |
target.file.full_path |
Il valore di product_data.object_name . |
product_data.originatingserver product_data.service |
target.application |
Il valore di product_data.service . |
product_data.site url |
target.url |
Il valore di product_data.site url . |
product_data.target |
target.user.userid |
Il valore di product_data.target . |
product_data.useragent |
network.http.user_agent |
Il valore di product_data.useragent . |
product_name |
intermediary.application |
Il valore del campo product_name . |
product_uid |
metadata.product_name |
Il valore del campo product_uid . |
responsible_logs |
additional.fields[].value.string_value |
Il valore del campo responsible_logs . La chiave è responsible_logs . |
resource_id |
target.resource.product_object_id |
Il valore del campo resource_id . |
risks |
security_result.detection_fields[].value |
Il valore del campo risks . La chiave è Risks . |
security_result.action |
security_result.action |
Derivato da product_data.logon error . Imposta su BLOCK se product_data.logon error è BlockedByConditionalAccess . |
security_result.severity |
security_result.severity |
Il valore in maiuscolo del campo severity , se è uno dei livelli di gravità supportati. |
security_result.severity_details |
security_result.severity_details |
Il valore del campo severity , se non è uno dei livelli di gravità supportati. |
security_result.summary |
security_result.summary |
Il valore del campo ioi_code o product_data.logon error se ioi_code non è presente. |
service |
target.application |
Il valore del campo service se product_data.service è vuoto. |
site_url |
target.url |
Il valore di product_data.site url . |
source |
principal.resource.attribute.labels[].value |
Il valore del campo source . La chiave è Source . |
sub_feature |
additional.fields[].value.string_value |
Il valore del campo sub_feature . La chiave è Sub Feature . |
target.application |
target.application |
Derivato in base a product_data.activity_type e alla presenza dell'entità e della destinazione. |
target.resource.name |
target.resource.name |
Derivato in base a product_data.activity_type e alla presenza dell'entità e della destinazione. |
threat_score |
security_result.detection_fields[].value |
Il valore del campo threat_score . La chiave è Threat Score . |
transaction_id |
security_result.detection_fields[].value |
Il valore del campo transaction_id . La chiave è Transaction ID . |
updated_timestamp |
additional.fields[].value.string_value |
Il valore di updated_timestamp o content_checks.dlp.updated_timestamp se il primo è vuoto. La chiave è Updated TimeStamp . |
user |
principal.user.userid |
Il valore del campo user . |
user_email |
target.user.userid |
Il valore del campo user_email . |
user_mail |
target.user.userid |
Il valore del campo user_mail estratto dal campo msg . |
user_name |
principal.user.user_display_name |
Il valore del campo user_name . |
user_uid |
principal.user.userid o target.user.userid |
Il valore del campo user_uid . Mappato a principal.user.userid se product_data.activity_type non è InvalidLogin o Login , altrimenti mappato a target.user.userid . |
uuid |
intermediary.asset.product_object_id |
Il valore del campo uuid . |
version |
metadata.product_version |
Il valore del campo version . |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.