Raccogliere i log di BloxOne Threat Defense
Questo documento spiega come importare i log di BloxOne Threat Defense in
Google Security Operations utilizzando Bindplane. L'analizzatore sintattico Logstash estrae i campi dai log BLOXONE DNS
ricevuti in formato SYSLOG o JSON. Innanzitutto, normalizza il
messaggio di log in un oggetto JSON, quindi mappa i campi estratti nel modello
di dati unificato (UDM), arricchendo i dati con i dettagli di geolocalizzazione e DNS per
l'analisi della sicurezza.
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 privilegiato a Infoblox BloxOne
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: 'BLOXONE' 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
Configurare Syslog in Infoblox BloxOne
- Accedi al portale Infoblox.
- Vai a Configura > Amministrazione > Data Connector.
- Seleziona la scheda Configurazione destinazione.
- Fai clic su Crea > Syslog.
- Fornisci i seguenti dettagli di configurazione:
- Nome: fornisci un nome descrittivo (ad esempio, raccoglitore Google SecOps).
- Descrizione: fornisci una breve descrizione.
- Stato: seleziona Attiva.
- Tag: fai clic su Aggiungi e specifica quanto segue per associare una chiave alla destinazione:
- KEY: inserisci un nome descrittivo per la chiave.
- VALUE: inserisci il valore della chiave.
- Formato: seleziona CEF.
- Protocollo: seleziona UDP o TCP (a seconda della configurazione dell'agente Bindplane).
- FQDN/IP: inserisci l'indirizzo IP dell'agente Bindplane.
- Porta: inserisci la porta dell'agente Bindplane (il valore predefinito è
514
per UDP).
- Fai clic su Salva e chiudi.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
additional_list.key |
Questo campo viene utilizzato in un ciclo per scorrere l'array additional_list ed estrarre i dati in base al valore del campo key . Non è mappato direttamente sull'UDM. |
|
additional_list.value |
principal.location.region_latitude , principal.location.region_longitude , target.location.region_latitude , target.location.region_longitude |
Questo campo viene utilizzato in combinazione con additional_list.key per estrarre valori specifici dall'array additional_list . La logica di estrazione e mappatura del valore dipende dal key corrispondente. Ad esempio: - Se additional_list.key è intel:source:ip:geoIP:location , estrai i valori di latitudine e longitudine utilizzando grok e mappali rispettivamente a principal.location.region_latitude e principal.location.region_longitude . : se additional_list.key è intel:destination:ip:geoIP:location , estrai i valori di latitudine e longitudine utilizzando grok e mappali rispettivamente a target.location.region_latitude e target.location.region_longitude . |
additional_string.key |
Simile a additional_list.key , questo campo viene utilizzato in un ciclo per scorrere l'array additional_string ed estrarre i dati in base al valore key . Non è mappato direttamente sull'UDM. |
|
additional_string.value |
additional.fields.value.string_value , principal.location.country_or_region , target.location.country_or_region , src.ip , src.port , src.hostname , network.ip_protocol |
Utilizzato con additional_string.key per estrarre i valori dall'array additional_string . La logica per mappare il valore dipende dall'elemento key corrispondente. Ad esempio: . Se additional_string.key è intel:source:ip:ip2asn:start_ip , intel:source:ip:ip2asn:finish_ip , intel:destination:ip:ip2asn:start_ip o intel:destination:ip:ip2asn:finish_ip , mappa il valore a additional.fields.value.string_value con la chiave corrispondente. : se additional_string.key è intel:source:ip:geoIP:country , mappa il valore su principal.location.country_or_region . : se additional_string.key è intel:destination:ip:geoIP:country , mappa il valore su target.location.country_or_region . : se additional_string.key è log:source:ip , mappa il valore su src.ip . : se additional_string.key è log:source:port , mappa il valore su src.port dopo averlo convertito in un numero intero. : se additional_string.key è log:source:hostname , mappa il valore su src.hostname . : se additional_string.key è log:cdh:input:protocol , mappa il valore su network.ip_protocol dopo averlo convertito in maiuscolo. |
app_category |
security_result.category_details |
Mappato direttamente. |
confidence |
security_result.confidence |
Mappatura eseguita in base alla seguente logica: - Se confidence è LOW , esegui la mappatura a LOW_CONFIDENCE .- Se confidence è MEDIUM , mappalo su MEDIUM_CONFIDENCE .- Se confidence è HIGH , mappalo su HIGH_CONFIDENCE . |
country |
principal.location.name |
Mappato direttamente, ma solo se raw.infobloxb1region è vuoto. |
device |
principal.ip , principal.asset.ip |
Mappato direttamente, ma solo se raw.dvc è vuoto. |
dhcp_fingerprint |
security_result.detection_fields.value |
Mappato direttamente con il tasto dhcp_fingerprint . |
dns_view |
security_result.detection_fields.value |
Mappato direttamente con il tasto dns_view . |
endpoint_groups |
security_result.detection_fields.value |
Mappato direttamente con il tasto endpoint_groups . |
event_time |
metadata.event_timestamp.seconds |
Analizzato come timestamp ISO8601 e viene estratto il valore dei secondi. Utilizzato solo se il campo timestamp è vuoto. |
feed_name |
principal.resource.name |
feed_name è mappato a principal.resource.name . |
feed_type |
principal.resource.attribute.labels.value |
Mappato direttamente con il tasto feed_type . |
mac_address |
principal.mac |
Mappato direttamente dopo la conversione in minuscolo. |
network |
principal.hostname , principal.asset.hostname |
Mappato direttamente, ma solo se sia raw.dvchost che raw.dvc sono vuoti. |
os_version |
principal.platform_version |
Mappato direttamente. |
policy_action |
security_result.action_details , security_result.action |
policy_action è mappato direttamente a security_result.action_details .security_result.action viene derivato in base alla seguente logica:- Se policy_action è Redirect o Log , mappalo su ALLOW .- Se policy_action è BLOCK , mappalo su BLOCK . |
policy_name |
security_result.detection_fields.value |
Mappato direttamente con il tasto policy_name . |
qname |
network.dns.questions.name |
Mappato direttamente. |
qtype |
network.dns.questions.type |
Mappato in base alla seguente logica: - Se qtype è A , esegui la mappatura a 1 (convertito in numero intero senza segno).- Se qtype è PTR , mappalo su 12 (convertito in numero intero senza segno). |
raw.act |
security_result.action_details |
Mappato direttamente. |
raw.app |
network.application_protocol |
Mappato direttamente dopo la conversione in maiuscolo. |
raw.deviceeventclassid |
metadata.product_event_type |
Concatenato con raw.name (separato da - ) e mappato a metadata.product_event_type . |
raw.devicevendor |
metadata.vendor_name |
Mappato direttamente. |
raw.deviceproduct |
metadata.product_name |
Mappato direttamente. |
raw.deviceversion |
metadata.product_version |
Mappato direttamente. |
raw.deviceseverity |
security_result.severity_details , security_result.severity |
raw.deviceseverity è mappato direttamente a security_result.severity_details .security_result.severity viene derivato in base alla seguente logica:- Se raw.deviceseverity è in [0 , 1 , 2 , 3 ], mappalo su LOW .- Se raw.deviceseverity è in [4 , 5 , 6 ], mappalo su MEDIUM .- If raw.deviceseverity is in [7 , 8 ], map to HIGH .- If raw.deviceseverity is in [9 , 10 ], map to CRITICAL . |
raw.dvc |
principal.ip , principal.asset.ip |
Mappato direttamente. |
raw.dvchost |
principal.hostname , principal.asset.hostname |
Mappato direttamente, ma solo se non è uguale a raw.dvc . |
raw.infobloxb1connectiontype |
additional.fields.value.string_value |
Mappato direttamente con il tasto infobloxb1connectiontype . |
raw.infobloxb1ophname |
observer.hostname , observer.asset.hostname |
Mappato direttamente. |
raw.infobloxb1ophipaddress |
observer.ip |
Mappato direttamente. |
raw.infobloxb1policyname |
security_result.detection_fields.value |
Mappato direttamente con il tasto infobloxb1policyname . |
raw.infobloxdnsqclass |
dns_question.class , dns_answer.class |
Utilizzato per derivare dns_question.class e dns_answer.class in base a una tabella di ricerca definita nel file dns_query_class_mapping.include . |
raw.infobloxdnsqtype |
dns_question.type , dns_answer.type |
Utilizzato per derivare dns_question.type e dns_answer.type in base a una tabella di ricerca definita nel file dns_record_type.include . |
raw.infobloxdnsrcode |
network.dns.response_code |
Utilizzato per derivare network.dns.response_code in base a una tabella di ricerca definita nel file dns_response_code.include . |
raw.infobloxpolicyid |
security_result.detection_fields.value |
Mappato direttamente con il tasto infobloxpolicyid . |
raw.msg |
metadata.description |
raw.msg viene mappato direttamente a metadata.description dopo la rimozione delle virgolette iniziali e finali. |
raw.name |
metadata.product_event_type |
Concatenato con raw.deviceeventclassid (separato da - ) e mappato a metadata.product_event_type . |
rcode |
security_result.detection_fields.value , network.dns.response_code |
rcode è mappato direttamente a security_result.detection_fields.value con la chiave rcode .Se rcode è NXDOMAIN , network.dns.response_code è impostato su 3 (convertito in numero intero senza segno). |
rdata |
network.dns.answers.data |
Mappato direttamente. |
rip |
target.ip , target.asset.ip |
Mappato direttamente. |
severity |
security_result.severity |
Mappatura eseguita in base alla seguente logica: - Se severity è INFO (senza distinzione tra maiuscole e minuscole), esegui la mappatura a INFORMATIONAL .- Se severity è HIGH , mappalo su HIGH . |
tclass |
security_result.detection_fields.value |
Mappato direttamente con il tasto tclass . |
threat_indicator |
security_result.detection_fields.value |
Mappato direttamente con il tasto threat_indicator . |
timestamp |
metadata.event_timestamp.seconds |
Analizzato come timestamp ISO8601 e viene estratto il valore dei secondi. |
user |
principal.user.user_display_name |
Mappato direttamente. |
user_groups |
security_result.detection_fields.value |
Mappato direttamente con il tasto user_groups . |
N/D | principal.resource.resource_subtype |
Imposta questo valore su Feed se feed_name non è vuoto. |
N/D | metadata.log_type |
Imposta su BLOXONE . |
N/D | additional.fields.key |
Imposta su infobloxancount , infobloxarcount , infobloxb1connectiontype , infobloxnscount , intel:destination:ip:ip2asn:finish_ip , intel:destination:ip:ip2asn:start_ip , intel:source:ip:ip2asn:finish_ip o intel:source:ip:ip2asn:start_ip in base ai campi raw corrispondenti. |
N/D | metadata.event_type |
Imposta su STATUS_UPDATE se has_principal è true , altrimenti imposta su GENERIC_EVENT . |
N/D | network.dns.questions.type |
Imposta su 1 per i record A e su 12 per i record PTR , convertiti in numeri interi senza segno. |
N/D | network.dns.answers.name , network.dns.answers.type , network.dns.answers.class |
Estratto da raw.msg analizzando la stringa di risposta DNS. |
N/D | intermediary.hostname , intermediary.ip , intermediary.asset.ip |
Estratto da raw.msg analizzando la stringa di risposta DNS. |
Nota:questa tabella include solo i campi mappati all'UDM. Alcuni campi del log non elaborato potrebbero essere utilizzati internamente dal parser, ma non si riflettono direttamente nell'output UDM finale.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.