Raccogli i log di BloxOne Threat Defense

Versione parser: 8.0

Supportato in:

Questo documento spiega come importare i log di BloxOne Threat Defense in Google Security Operations utilizzando l'agente Bindplane.

Infoblox BloxOne Threat Defense è un servizio di sicurezza DNS gestito nel cloud che genera messaggi syslog in formato CEF per query DNS, eventi di threat intelligence e azioni delle policy. Il parser normalizza i campi e li mappa al modello UDM (Unified Data Model).

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows Server 2016 o versioni successive oppure host Linux con systemd
  • Connettività di rete tra l'agente Bindplane e la piattaforma Infoblox BloxOne
  • 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 al portale Infoblox

Ottieni le credenziali di Google SecOps per l'agente Bindplane

Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:

  • Nuovi deployment: utilizza l'API Chronicle (opzione 1).
  • Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (opzione 2) fino al ritiro dell'API Ingestion il 20 luglio 2027.
  1. Accedi alla consoleGoogle Cloud e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
  2. Vai a IAM e amministrazione > Service account.
  3. Fai clic su Crea service account.
  4. Fornisci i seguenti dettagli di configurazione:
    • Nome service account: inserisci un nome per l'account (ad esempio, bindplane-ingest).
    • Descrizione del service account: inserisci una descrizione (ad esempio, Bindplane agent log ingestion).
  5. Fai clic su Crea e continua.
  6. Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Chronicle Editor.
  7. Fai clic su Continua, quindi su Fine.
  8. Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
  9. Fai clic su Aggiungi chiave > Crea nuova chiave.
  10. Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul tuo computer.
  11. Salva il file della chiave come ingestion-auth.json nella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.json su Linux o C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json su Windows) oppure aggiorna creds_file_path in config.yaml in modo che corrisponda al percorso in cui lo salvi.
  12. Vai a IAM e amministrazione > Impostazioni e copia il Numero progetto. Ti servirà per la configurazione dell'esportatore.

Opzione 2: scarica il file di autenticazione dell'acquisizione (legacy)

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. Scarica il file di autenticazione dell'acquisizione.
  4. Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.

Ottieni 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 organizzazione.

Installa l'agente Bindplane

Installa l'agente Bindplane sul sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.

Installazione di Windows

  1. Apri 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
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    sc query observiq-otel-collector
    

    Il servizio dovrebbe essere visualizzato come RUNNING.

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
    
  3. Attendi il completamento dell'installazione.

  4. Verifica l'installazione eseguendo:

    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 il syslog e inviarlo a Google SecOps

Individua il file di configurazione

  • Linux:

    sudo nano /opt/observiq-otel-collector/config.yaml
    
  • Windows:

    notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
    

Modifica il file di configurazione

  • Sostituisci l'intero contenuto di config.yaml con la seguente configurazione:

    receivers:
      udplog:
        listen_address: "0.0.0.0:514"
    
    exporters:
      chronicle/bloxone:
        protocol: https
        # Region of your instance, for example us, europe, asia-southeast1
        location: <LOCATION>
        # Project number of the Google Cloud project linked to the instance
        project: '<PROJECT_NUMBER>'
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: chronicle.googleapis.com
        log_type: BLOXONE
        raw_log_field: body
    
    service:
      pipelines:
        logs/bloxone_to_chronicle:
          receivers:
            - udplog
          exporters:
            - chronicle/bloxone
    

Parametri di configurazione

Sostituisci i seguenti segnaposto:

  • Configurazione del ricevitore:

    • listen_address: Indirizzo IP e porta da ascoltare:
      • 0.0.0.0 per ascoltare su tutte le interfacce (consigliato)
      • La porta 514 è la porta syslog standard (richiede l'accesso root su Linux; utilizza 1514 per l'accesso non root)
  • Configurazione dell'esportatore:

    • creds_file_path: percorso completo del file della chiave JSON del account di servizio (opzione 1):
      • Linux: /opt/observiq-otel-collector/ingestion-auth.json
      • Windows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json
    • customer_id: ID cliente copiato dalla console Google SecOps
    • location: sostituisci <LOCATION> con la regione della tua istanza Google SecOps (ad esempio us, europe o asia-southeast1). L'esportatore aggiunge chronicle.googleapis.com come prefisso a questo valore. Per l'elenco completo, consulta Endpoint regionali.
    • project: sostituisci <PROJECT_NUMBER> con il numero di progetto in IAM e amministrazione > Impostazioni.
    • endpoint: mantieni l'impostazione chronicle.googleapis.com.

Esportatore dell'API di importazione precedente

  • Se utilizzi il file di autenticazione dell'acquisizione dell'Opzione 2, sostituisci il blocco exporters con il seguente. Imposta creds_file_path sul percorso del file di autenticazione dell'importazione e, se la tua istanza si trova al di fuori degli Stati Uniti, sostituisci malachiteingestion-pa.googleapis.com con l'endpoint regionale (ad esempio, europe-malachiteingestion-pa.googleapis.com).

    exporters:
      chronicle/bloxone:
        compression: gzip
        creds_file_path: '/opt/observiq-otel-collector/ingestion-auth.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: BLOXONE
        raw_log_field: body
    

Salva il file di configurazione

  • Dopo la modifica, salva il file:
    • Linux: premi Ctrl+O, poi Enter e infine Ctrl+X
    • Windows: fai clic su File > Salva.

Riavvia l'agente Bindplane per applicare le modifiche

  • Per riavviare l'agente Bindplane in Linux, esegui questo comando:

    sudo systemctl restart observiq-otel-collector
    
    1. Verifica che il servizio sia in esecuzione:

      sudo systemctl status observiq-otel-collector
      
    2. Controlla i log per verificare la presenza di 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-collector
      
    • Console dei servizi:

      1. Premi Win+R, digita services.msc e premi Invio.
      2. Individua observIQ OpenTelemetry Collector.
      3. Fai clic con il tasto destro del mouse e seleziona Riavvia.
      4. Verifica che il servizio sia in esecuzione:

        sc query observiq-otel-collector
        
      5. Controlla i log per verificare la presenza di errori:

        type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
        

Configura Syslog in Infoblox BloxOne

  1. Accedi al portale Infoblox.
  2. Vai a Configura > Amministrazione > Data Connector.
  3. Seleziona la scheda Configurazione destinazione.
  4. Fai clic su Crea > Syslog.
  5. 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).
  6. Fai clic su Salva e chiudi.

Tabella di mappatura UDM

Campo log mappatura UDM Logica
additional_list.key Questo campo viene utilizzato in un loop per eseguire l'iterazione dell'array additional_list ed estrarre i dati in base al valore del campo key. Non è mappato direttamente all'UDM.
additional_list.value principal.location.region_latitude, principal.location.region_longitude, target.location.region_latitude, target.location.region_longitude Questo campo viene utilizzato insieme a additional_list.key per estrarre valori specifici dall'array additional_list. La logica per l'estrazione e la 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 Analogamente 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 all'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 la mappatura del valore dipende dal 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 a principal.location.country_or_region.
- Se additional_string.key è intel:destination:ip:geoIP:country, mappa il valore a target.location.country_or_region.
: se additional_string.key è log:source:ip, mappa il valore a 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 a src.hostname.
: se additional_string.key è log:cdh:input:protocol, mappa il valore a network.ip_protocol dopo averlo convertito in lettere maiuscole.
app_category security_result.category_details Mappato direttamente.
confidence security_result.confidence Mappato in base alla seguente logica:
- Se confidence è LOW, esegui la mappatura a LOW_CONFIDENCE.
- Se confidence è MEDIUM, mappalo su MEDIUM_CONFIDENCE.
- Se confidence è HIGH, mappa a HIGH_CONFIDENCE.
country principal.location.name Mappatura diretta, ma solo se raw.infobloxb1region è vuoto.
device principal.ip, principal.asset.ip Mappatura diretta, ma solo se raw.dvc è vuoto.
dhcp_fingerprint security_result.detection_fields.value Mappato direttamente con la chiave dhcp_fingerprint.
dns_view security_result.detection_fields.value Mappato direttamente con la chiave dns_view.
endpoint_groups security_result.detection_fields.value Mappato direttamente con la chiave 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 la chiave feed_type.
mac_address principal.mac Vengono mappati direttamente dopo la conversione in lettere minuscole.
network principal.hostname, principal.asset.hostname Mappatura diretta, 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, mappa a BLOCK.
policy_name security_result.detection_fields.value Mappato direttamente con la chiave policy_name.
qname network.dns.questions.name Mappato direttamente.
qtype network.dns.questions.type Mappato in base alla seguente logica:
- Se qtype è A, mappa a 1 (convertito in numero intero senza segno).
: se qtype è PTR, esegui la mappatura a 12 (convertito in un 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 ricavato in base alla seguente logica:
- Se raw.deviceseverity è in [0, 1, 2, 3], mappa a LOW.
- Se raw.deviceseverity è in [4, 5, 6], mappalo su MEDIUM.
- Se raw.deviceseverity è compreso tra [7, 8], mappa a HIGH.
- Se raw.deviceseverity è compreso tra [9, 10], mappa a 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 la chiave 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 la chiave 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 ricavare 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 ricavare 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 la chiave infobloxpolicyid.
raw.msg metadata.description raw.msg viene mappato direttamente a metadata.description dopo aver rimosso le 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 un numero intero senza segno).
rdata network.dns.answers.data Mappato direttamente.
rip target.ip, target.asset.ip Mappato direttamente.
severity security_result.severity Mappatura in base alla seguente logica:
- Se severity è INFO (senza distinzione tra maiuscole e minuscole), mappatura a INFORMATIONAL.
- Se severity è HIGH, mappa a HIGH.
tclass security_result.detection_fields.value Mappato direttamente con la chiave tclass.
threat_indicator security_result.detection_fields.value Mappato direttamente con la chiave 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 la chiave user_groups.
N/D principal.resource.resource_subtype Impostato su Feed se feed_name non è vuoto.
N/D metadata.log_type Da impostare 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 Impostato su STATUS_UPDATE se has_principal è true, altrimenti impostato su GENERIC_EVENT.
N/D network.dns.questions.type Impostato su 1 per i record A e su 12 per i record PTR, convertito in un numero intero 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.
intermediaryhost intermediary.hostname Mappato dal log delle modifiche
app_name principal.application Mappato dal log delle modifiche
endpoint_groups", "user_groups", "dns_view", "dhcp_fingerprint", "policy_name", "tclass", "tproperty", "threat_indicator", "category", and "rcode security_result.detection_fields Mappato dal log delle modifiche

Log delle modifiche

Visualizza il log delle modifiche per questo parser

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.