Raccogliere i log del database Imperva

Supportato in:

Questo documento spiega come importare i log del database Imperva in Google Security Operations utilizzando Bindplane. Il parser tenta innanzitutto di estrarre i campi da vari formati di log strutturati come CEF, LEEF e JSON. Se questi formati non vengono trovati, utilizza i pattern grok per estrarre i campi dai messaggi syslog non strutturati, mappando infine i dati estratti a un modello UDM (Unified Data Model). Imperva Database Security offre funzionalità complete di monitoraggio, controllo e protezione dell'attività del database.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Windows 2016 o versioni successive oppure un 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 con privilegi alla console di gestione di Imperva SecureSphere

Recuperare il file di autenticazione importazione di Google SecOps

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Agenti di raccolta.
  3. 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

  1. Accedi alla console Google SecOps.
  2. Vai a Impostazioni SIEM > Profilo.
  3. Copia e salva l'ID cliente dalla sezione Dettagli dell'organizzazione.

Installa l'agente Bindplane

Installazione di Windows

  1. Apri il 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
    

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
    

Risorse aggiuntive per l'installazione

Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps

  1. Accedi al file di configurazione:

    1. Individua il file config.yaml. In genere, si trova nella directory /etc/bindplane-agent/ su Linux o nella directory di installazione su Windows.
    2. Apri il file utilizzando un editor di testo (ad esempio nano, vi o Blocco note).
  2. 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_file_path: '/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
        log_type: 'IMPERVA_DB'
        raw_log_field: body
        ingestion_labels:
    
    service:
      pipelines:
        logs/source0__chronicle_w_labels-0:
          receivers:
            - udplog
          exporters:
            - chronicle/chronicle_w_labels
    

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 l'inoltro di Syslog sul database Imperva

  1. Accedi alla console di gestione di Imperva SecureSphere.
  2. Vai a Configurazione > Set di azioni.
  3. Fai clic su Aggiungi per creare un nuovo insieme di azioni o modificarne uno esistente.
  4. Fai clic su Aggiungi azione e fornisci i seguenti dettagli di configurazione:
    • Nome: inserisci un nome descrittivo (ad esempio, Google SecOps Syslog).
    • Tipo di azione: seleziona GW Syslog.
    • Host: inserisci l'indirizzo IP dell'agente BindPlane.
    • Porta: inserisci il numero di porta dell'agente BindPlane (valore predefinito 514).
    • Protocollo: seleziona UDP o TCP, a seconda della configurazione di BindPlane Agent.
    • Livello di log Syslog: seleziona DEBUG per la registrazione completa.
    • Funzione Syslog: seleziona LOCAL0 o la funzione appropriata.
    • Interfaccia azione: seleziona Log gateway - Evento di sicurezza - Log di sistema (syslog) - Formato JSON (esteso) per il formato SYSLOG+JSON oppure Log gateway - Evento di sicurezza - Log di sistema (syslog) per il formato SYSLOG standard.
  5. Salva la configurazione dell'azione.
  6. Vai a Policy > Policy di sicurezza o Policy > Policy di controllo del database.
  7. Modifica i criteri pertinenti e aggiungi il set di azioni contenente l'azione syslog per assicurarti che gli eventi vengano inoltrati a Google SecOps.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
acct principal.user.userid Se acct è "admin", mappalo su target.user.userid, altrimenti mappalo su principal.user.userid. Rimuovi virgolette e spazi da acct prima del mapping.
azione security_result.action_details Valore del campo action dal log non elaborato
alertSev security_result.severity Se alertSev è "Informativo", mappalo come "INFORMATIONAL", altrimenti mappalo come versione in maiuscolo di alertSev
applicazione principal.application Se application è "pam_unix(sudo:session)" o description contiene "pam_unix", mappalo come "pam_unix". Se message contiene "run-parts", mappalo come "run-parts". Se message contiene "audispd", mappalo come "audispd". Se message contiene "FSS audit", mappalo come "FSS audit". Altrimenti, mappalo come campo application dal log non elaborato
nome-applicazione target.application Valore del campo application-name dal log non elaborato
audit-policy security_result.category_details Valore del campo audit-policy dal log non elaborato
bind-variables additional.fields.bind_variables_label.value.string_value Valore del campo bind-variables dal log non elaborato
categoria security_result.category_details Valore del campo category dal log non elaborato
COMANDO target.process.command_line Se exe non è vuoto, mappalo come campo exe dal log non elaborato. Altrimenti, mappalo come campo COMMAND dal log non elaborato
Ora di creazione Non mappato
db-schema-pair additional.fields.DB Name_{index}.value.string_value, additional.fields.Schema Name_{index}.value.string_value Per ogni oggetto db-schema-pair nel log non elaborato, estrai i campi db-name e schema-name e mappali rispettivamente a DB Name_{index} e Schema Name_{index} nell'UDM, dove index è l'indice dell'oggetto nell'array.
db-user principal.user.userid Se db-user non è vuoto, mappalo come campo db-user dal log non elaborato. Altrimenti, se os-user non è vuoto e db-user è vuoto, esegui il mapping come campo os-user dal log non elaborato
dbName target.resource.name Valore del campo dbName dal log non elaborato
dest-ip target.ip, target.asset.ip Valore del campo dest-ip dal log non elaborato
dest-port target.port Valore del campo dest-port dal log non elaborato
descrizione metadata.description Se description contiene "user:", estrai l'ID utente da description e mappalo a userid. Se userid non è vuoto e description contiene "Non valido", sostituisci "Utente non valido" con "Non valido". Se application è "sshd", rimuovi "da" e "di" da description. Altrimenti, mappalo come campo description dal log non elaborato
dst target.ip, target.asset.ip Valore del campo dst dal log non elaborato
dstIP target.ip, target.asset.ip Valore del campo dstIP dal log non elaborato
dstPort target.port Valore del campo dstPort dal log non elaborato
event-type metadata.product_event_type Valore del campo event-type dal log non elaborato
eventType metadata.product_event_type, metadata.event_type Se eventType non è vuoto e srcIP e dstIP non sono vuoti, mappa eventType a metadata.product_event_type e "NETWORK_CONNECTION" a metadata.event_type
evntDesc security_result.description Valore del campo evntDesc dal log non elaborato
exe target.process.command_line Valore del campo exe dal log non elaborato
da network.email.from Rimuovi "<" e ">" da from e mappalo su network.email.from
gruppo target.user.group_identifiers Valore del campo group dal log non elaborato
gw-ip intermediary.ip, intermediary.asset.ip Valore del campo gw-ip dal log non elaborato
host target.hostname, target.asset.hostname Valore del campo host dal log non elaborato
host-name principal.hostname, principal.asset.hostname Valore del campo host-name dal log non elaborato
nome host principal.hostname, principal.asset.hostname Valore del campo hostname dal log non elaborato
ip target.ip, target.asset.ip Valore del campo ip dal log non elaborato
mx-ip intermediary.ip, intermediary.asset.ip Valore del campo mx-ip dal log non elaborato
objects-list additional.fields.Object_{index}.value.string_value Per ogni oggetto objects-list nel log non elaborato, estrai l'oggetto e mappalo in Object_{index} nell'UDM, dove index è l'indice dell'oggetto nell'array.
Operazione about.labels.Operation.value Valore del campo Operation dal log non elaborato
Operation type about.labels.Operation Type.value Valore del campo Operation type dal log non elaborato
os-user principal.user.userid, additional.fields.OS User.value.string_value Se os-user non è vuoto e db-user è vuoto, esegui il mapping come campo os-user dal log non elaborato. Altrimenti, mappalo come campo OS User dal log non elaborato
Query analizzata target.process.command_line Valore del campo Parsed Query dal log non elaborato
parsed-query additional.fields.Parsed Query.value.string_value Valore del campo parsed-query dal log non elaborato
pid target.process.pid Valore del campo pid dal log non elaborato
policy-id security_result.detection_fields.Policy_ID_{index}.value Per ogni oggetto policy-id nel log non elaborato, estrai la norma e mappala in Policy_ID_{index} nell'UDM, dove index è l'indice dell'oggetto nell'array.
policyName security_result.detection_fields.policyName_label.value Valore del campo policyName dal log non elaborato
porta target.port Valore del campo port dal log non elaborato
Con privilegi about.labels.Privileged.value Se Privileged è true, mappalo come "True", altrimenti mappalo come "False".
proto network.ip_protocol Valore del campo proto dal log non elaborato
protocollo network.ip_protocol Se protocol è "TCP" o "UDP", esegui la mappatura come campo protocol dal log non elaborato
PWD target.file.full_path Valore del campo PWD dal log non elaborato
Raw Data target.resource.attribute.labels.raw_Data.value Valore del campo Raw Data dal log non elaborato
raw-query additional.fields.Raw Query.value.string_value Valore del campo raw-query dal log non elaborato
ruleName security_result.rule_name Valore del campo ruleName dal log non elaborato
server-group additional.fields.serve_group_label.value.string_value Valore del campo server-group dal log non elaborato
service-name additional.fields.service_name_label.value.string_value Valore del campo service-name dal log non elaborato
Service Type additional.fields.Service Type.value.string_value Valore del campo Service Type dal log non elaborato
dimensioni network.received_bytes Valore del campo size dal log non elaborato
Stored Proc about.labels.Stored_Proc.value Se Stored Proc è true, mappalo come "True", altrimenti mappalo come "False".
Table Group target.group.group_display_name Valore del campo Table Group dal log non elaborato
timestamp metadata.event_timestamp Valore del campo timestamp dal log non elaborato
a network.email.to Rimuovi "<" e ">" da to e mappalo su network.email.to
UTENTE principal.user.userid, target.user.userid Se USER non è vuoto e USER è "admin", esegui la mappatura come campo USER dal log non elaborato a target.user.userid. Altrimenti, se USER non è vuoto, esegui la mappatura come campo USER dal log non elaborato a principal.user.userid
user-authenticated security_result.detection_fields.user_authenticated.value Valore del campo user-authenticated dal log non elaborato
user-group additional.fields.user_group_label.value.string_value Valore del campo user-group dal log non elaborato
nome utente principal.user.user_display_name Valore del campo username dal log non elaborato
usrName principal.user.userid Valore del campo usrName dal log non elaborato
extensions.auth.mechanism Codificato in modo permanente su "USERNAME_PASSWORD" se description contiene "authentication failure" (errore di autenticazione) o "check pass; user unknown" (verifica password; utente sconosciuto) o "Invalid user" (utente non valido) o "invalid user" (utente non valido) o se error non è vuoto
extensions.auth.type Codificato come "AUTHTYPE_UNSPECIFIED" se has_principal è "true", has_target è "true" e event-type è "Login"
metadata.event_type Codificato in modo permanente su "PROCESS_OPEN" se PWD non è vuoto. Codificato in modo permanente su "PROCESS_OPEN" se message contiene "starting" o application è "pman" o "CROND" o "run-parts" e event_type è vuoto. Codificato in modo permanente su "NETWORK_CONNECTION" se description è "Syslog connection established" (Connessione Syslog stabilita), "Syslog connection broken" (Connessione Syslog interrotta) o "Syslog connection failed" (Connessione Syslog non riuscita). Codificato in modo permanente su "EMAIL_UNCATEGORIZED" se application è "postfix/qmgr", "postfix/local" o "postfix/pickup". Codificato come "EMAIL_TRANSACTION" se application è "postfix/local" o "postfix/pickup" e status è "sent (delivered to mailbox)". Codificato in modo permanente su "NETWORK_HTTP" se application è "sshd" e description non contiene "check pass; user unknown", "authentication failure" e "invalid".descriptiondescription Codificato in modo permanente su "USER_LOGIN" se description contiene "authentication failure" (errore di autenticazione) o "check pass; user unknown" (verifica pass; utente sconosciuto) o "Invalid user" (utente non valido) o "invalid user" (utente non valido) o se error non è vuoto. Codificato in modo permanente su "FILE_SYNC" se file_path non è vuoto. Codificato come "PROCESS_UNCATEGORIZED" se message contiene "reconfigure" e application è "pman". Codificato come "PROCESS_TERMINATION" se message contiene "exit code 1" e application è "pman". Codificato in modo permanente su "NETWORK_CONNECTION" se eventType non è vuoto e srcIP e dstIP non sono vuoti. Codificato come "USER_LOGIN" se has_principal è "true", has_target è "true" e event-type è "Login". Codificato in modo permanente su "NETWORK_CONNECTION" se has_principal è "true", has_target è "true" e protocol non è vuoto. Codificato come "STATUS_UPDATE" se has_principal è "true". Codificato in modo permanente su "GENERIC_EVENT" se event_type è vuoto o "GENERIC_EVENT"
metadata.log_type Codificato come "IMPERVA_DB"
metadata.product_name Codificato come "IMPERVA DB"
metadata.vendor_name Codificato come "IMPERVA DB"
security_result.action Codificato in modo permanente su "ALLOW" se description non contiene "authentication failure" (errore di autenticazione) o "check pass; user unknown" (controllo superato; utente sconosciuto) o "Invalid user" (utente non valido) o "invalid user" (utente non valido) e error è vuoto. Codificato in modo permanente su "BLOCK" se description contiene "authentication failure" (autenticazione non riuscita) o "check pass; user unknown" (verifica pass; utente sconosciuto) o "Invalid user" (utente non valido) o "invalid user" (utente non valido) o se error non è vuoto
security_result.rule_id Se description contiene "alert_score" o "new_alert_score", estrai ruleid da description e mappalo a security_result.rule_id

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