Raccogliere i log DNS di Infoblox
Questo documento spiega come importare i log DNS di Infoblox in Google Security Operations utilizzando Bindplane.
Il parser estrae i campi dai log formattati Infoblox DNS SYSLOG e CEF. Utilizza grok e/o kv per analizzare il messaggio di log e quindi mappa questi valori al modello UDM (Unified Data Model). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Windows Server 2016 o versioni successive oppure host Linux con
systemd - Se l'agente viene eseguito dietro un proxy, assicurati che le porte del firewall siano aperte in base ai requisiti dell'agente Bindplane
- Accesso privilegiato all'interfaccia web di Infoblox Grid Manager
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
Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di Windows
- Apri 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" /quietAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sc query observiq-otel-collector
Il servizio dovrebbe essere visualizzato come IN ESECUZIONE.
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.shAttendi il completamento dell'installazione.
Verifica l'installazione eseguendo il comando:
sudo systemctl status observiq-otel-collector
Il servizio dovrebbe essere visualizzato come attivo (in esecuzione).
Risorse aggiuntive per l'installazione
Per ulteriori opzioni di installazione e risoluzione dei problemi, consulta la Guida all'installazione dell'agente Bindplane.
Configura l'agente Bindplane per importare syslog e inviarli a Google SecOps
Individua il file di configurazione
Linux:
sudo nano /etc/bindplane-agent/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
Modifica il file di configurazione
Sostituisci l'intero contenuto di
config.yamlcon la seguente configurazione:receivers: udplog: listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: compression: gzip creds_file_path: '/path/to/ingestion-authentication-file.json' customer_id: 'YOUR_CUSTOMER_ID' endpoint: malachiteingestion-pa.googleapis.com log_type: 'INFOBLOX_DNS' raw_log_field: body ingestion_labels: service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
Parametri di configurazione
Sostituisci i seguenti segnaposto:
Configurazione del ricevitore:
udplog: utilizzaudplogper syslog UDP otcplogper syslog TCP0.0.0.0: indirizzo IP su cui ascoltare (0.0.0.0per ascoltare su tutte le interfacce)514: Numero di porta su cui ascoltare (porta syslog standard)
Configurazione dell'esportatore:
creds_file_path: percorso completo del file di autenticazione importazione:- Linux:
/etc/bindplane-agent/ingestion-auth.json - Windows:
C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
- Linux:
YOUR_CUSTOMER_ID: l'ID cliente della sezione Recupera ID clienteendpoint: URL endpoint regionale:- Stati Uniti:
malachiteingestion-pa.googleapis.com - Europa:
europe-malachiteingestion-pa.googleapis.com - Asia:
asia-southeast1-malachiteingestion-pa.googleapis.com - Per l'elenco completo, vedi Endpoint regionali.
- Stati Uniti:
log_type: Tipo di log esattamente come appare in Chronicle (INFOBLOX_DNS)
Salvare il file di configurazione
- Dopo la modifica, salva il file:
- Linux: premi
Ctrl+O, poiEntere infineCtrl+X. - Windows: fai clic su File > Salva.
- Linux: premi
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorVerifica che il servizio sia in esecuzione:
sudo systemctl status observiq-otel-collectorControlla i log per individuare eventuali errori:
sudo journalctl -u observiq-otel-collector -f
Per riavviare l'agente Bindplane in Windows, scegli una delle seguenti opzioni:
Prompt dei comandi o PowerShell come amministratore:
net stop observiq-otel-collector && net start observiq-otel-collectorConsole dei servizi:
- Premi
Win+R, digitaservices.msce premi Invio. - Individua observIQ OpenTelemetry Collector.
Fai clic con il tasto destro del mouse e seleziona Riavvia.
Verifica che il servizio sia in esecuzione:
sc query observiq-otel-collectorControlla i log per individuare eventuali errori:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
- Premi
Configura l'inoltro di Syslog su Infoblox DNS
- Accedi all'interfaccia web di Infoblox Grid Manager.
- Vai a Griglia > Gestione griglia > Membri.
- Seleziona il membro da configurare e fai clic su Modifica.
- Vai alla scheda Monitoraggio.
- Nella sezione Syslog, fai clic su Aggiungi per aggiungere un nuovo server syslog.
- Fornisci i seguenti dettagli di configurazione:
- Indirizzo: inserisci l'indirizzo IP dell'host dell'agente Bindplane.
- Porta: inserisci
514. - Trasporto: seleziona UDP.
- ID nodo: seleziona il nodo Infoblox (per le coppie HA).
- Gravità: seleziona Informazioni (o il livello di gravità che preferisci).
- Struttura: seleziona local0 (o la struttura che preferisci).
- Attiva le seguenti categorie di log:
- Query DNS: seleziona Registra query DNS in Proprietà DNS della griglia > Logging.
- Risposte DNS: seleziona Registra risposte DNS.
- DHCP: attiva la registrazione DHCP in Proprietà DHCP della griglia.
- Audit: attiva la registrazione dei controlli in Proprietà griglia > Monitoraggio.
- Fai clic su Salva e chiudi.
- Se necessario, riavvia il servizio DNS.
- Verifica che i messaggi syslog vengano inviati controllando i log dell'agente Bindplane.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| agent.hostname | principal.hostname | Per i log in formato CEF, se esiste agent.hostname, viene mappato a principal.hostname. |
| client_ip | principal.ip | Per i log in formato CEF, se esiste client_ip, viene mappato a principal.ip. |
| client_port | principal.port | Per i log in formato CEF, se esiste client_port, viene mappato a principal.port. |
| dati | answers.data | Estratto dal campo dati della sezione delle risposte nel log non elaborato. Le occorrenze multiple vengono mappate come oggetti di risposta separati. |
| descrizione | metadata.description | Mappato direttamente dal campo di descrizione del log non elaborato o estratto utilizzando pattern grok da altri campi come messaggio e msg2. |
| dest_ip1 | target.ip | Estratto dal log non elaborato e mappato su target.ip. |
| destinationDnsDomain | dns_question.name | Per i log in formato CEF, se esiste destinationDnsDomain, viene mappato a dns_question.name. |
| dns_class | dns_question.class | Mappato utilizzando la tabella di ricerca dns_query_class_mapping.include. |
| dns_domain | dns_question.name | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok e mappato a dns_question.name. |
| dns_name | dns_question.name | Estratto dal campo dns_domain utilizzando pattern grok e mappato a dns_question.name. |
| dns_records | answers.data | Per i log in formato CEF, se esiste dns_records, viene mappato a answers.data. Le occorrenze multiple vengono mappate come oggetti di risposta separati. |
| dst_ip | target.ip o target.hostname | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok. Se è un indirizzo IP valido, viene mappato su target.ip; altrimenti, viene mappato su target.hostname. |
| dst_ip1 | target.ip o target.hostname | Estratto dal campo messaggio o msg2 del log non elaborato utilizzando i pattern grok. Se è un indirizzo IP valido, viene mappato su target.ip; altrimenti, viene mappato su target.hostname. Mappato solo se diverso da dst_ip. |
| evt_type | metadata.product_event_type | Mappato direttamente dal campo evt_type del log non elaborato, che viene estratto dal campo del messaggio utilizzando i pattern grok. |
| InfobloxB1OPHIPAddress | principal.ip | Per i log in formato CEF, se esiste InfobloxB1OPHIPAddress, viene mappato a principal.ip. |
| InfobloxB1Region | principal.location.country_or_region | Per i log in formato CEF, se esiste InfobloxB1Region, viene mappato a principal.location.country_or_region. |
| InfobloxDNSQType | dns_question.type | Per i log formattati CEF, se esiste InfobloxDNSQType, viene mappato a dns_question.type. |
| intermediario | intermediary.ip o intermediary.hostname | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok. Se è un indirizzo IP valido, viene mappato a intermediary.ip; in caso contrario, viene mappato a intermediary.hostname. |
| msg2 | metadata.description, dns.response_code, dns_question.name, target.ip, target.hostname, answers.name, answers.ttl, answers.data, answers.class, answers.type, security_result.severity | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok. Utilizzato per estrarre vari campi, ma non mappato direttamente a UDM. |
| name1 | answers.name | Estratto dal campo msg2 del log non elaborato utilizzando i pattern grok e mappato a answers.name. |
| name2 | answers.name | Estratto dal campo msg2 del log non elaborato utilizzando i pattern grok e mappato a answers.name. |
| protocollo | network.ip_protocol | Mappato direttamente dal campo del protocollo del log non elaborato se corrisponde a protocolli noti. |
| qclass | dns_question.class | Campo intermedio utilizzato per mappare dns_class a UDM. |
| qclass1 | answers.class | Campo intermedio utilizzato per mappare dns_class1 a UDM. |
| qclass2 | answers.class | Campo intermedio utilizzato per mappare dns_class2 a UDM. |
| query_type | dns_question.type | Mappato utilizzando la tabella di ricerca dns_record_type.include. |
| query_type1 | answers.type | Mappato utilizzando la tabella di ricerca dns_record_type.include. |
| query_type2 | answers.type | Mappato utilizzando la tabella di ricerca dns_record_type.include. |
| recursion_flag | network.dns.recursion_desired | Se recursion_flag contiene un "+", viene mappato a network.dns.recursion_desired come true. |
| record_type | dns_question.type | Campo intermedio utilizzato per mappare query_type a UDM. |
| record_type1 | answers.type | Campo intermedio utilizzato per mappare query_type1 a UDM. |
| record_type2 | answers.type | Campo intermedio utilizzato per mappare query_type2 a UDM. |
| res_code | network.dns.response_code | Mappato utilizzando la tabella di ricerca dns_response_code.include. |
| response_code | network.dns.response_code | Per i log in formato CEF, se esiste response_code, viene mappato a network.dns.response_code utilizzando la tabella di ricerca dns_response_code.include. |
| security_action | security_result.action | Derivato dal campo Stato. Se lo stato è "denied" (negato), security_action è impostato su "BLOCK" (BLOCCO); in caso contrario, è impostato su "ALLOW" (CONSENTI). |
| gravità | security_result.severity | Per i log formattati CEF, se la gravità esiste ed è "informativa", viene mappata a security_result.severity come "INFORMATIONAL". |
| src_host | principal.hostname | Estratto dal campo descrizione o messaggio del log non elaborato utilizzando i pattern grok e mappato a principal.hostname. |
| src_ip | principal.ip o principal.hostname | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok. Se è un indirizzo IP valido, viene mappato a principal.ip; in caso contrario, viene mappato a principal.hostname. |
| src_port | principal.port | Estratto dal campo del messaggio del log non elaborato utilizzando i pattern grok e mappato su principal.port. |
| ttl1 | answers.ttl | Estratto dal campo msg2 del log non elaborato utilizzando pattern grok e mappato su answers.ttl. |
| ttl2 | answers.ttl | Estratto dal campo msg2 del log non elaborato utilizzando pattern grok e mappato su answers.ttl. |
| metadata.event_type | metadata.event_type | Derivato da vari campi e dalla logica del parser. Il valore predefinito è GENERIC_EVENT se non viene identificato nessun altro tipo di evento. I valori possibili includono NETWORK_DNS, NETWORK_CONNECTION e STATUS_UPDATE. |
| metadata.log_type | metadata.log_type | Impostato su "INFOBLOX_DNS" dal parser. |
| metadata.product_name | metadata.product_name | Impostato su "Infoblox DNS" dal parser. |
| metadata.vendor_name | metadata.vendor_name | Impostato su "INFOBLOX" dal parser. |
| metadata.product_version | metadata.product_version | Estratto dai messaggi CEF. |
| metadata.event_timestamp | metadata.event_timestamp | Copiato dal campo timestamp. |
| network.application_protocol | network.application_protocol | Impostato su "DNS" se event_type non è "GENERIC_EVENT" o "STATUS_UPDATE". |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.