Raccogliere i log del database Imperva

Supportato in:

Questo documento spiega come importare i log del database Imperva in Google Security Operations utilizzando l'agente Bindplane.

Il parser estrae i campi dai log formattati syslog del database Imperva. Utilizza grok e/o kv per analizzare il messaggio di log e poi mappa questi valori nel modello Unified Data Model (UDM). Imposta anche i valori predefiniti dei metadati per l'origine e il tipo di evento. 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
  • Un host Windows 2016 o versioni successive o 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 alla console di gestione di Imperva SecureSphere

Recuperare il file di autenticazione dell'importazione di Google SecOps

  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.

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

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

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

Per ulteriori opzioni di installazione, consulta la Guida all'installazione dell'agente Bindplane.

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

  1. 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).
  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
    
    • 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 con il percorso del file in cui è stato salvato il file di autenticazione nel passaggio 1.

Riavvia l'agente Bindplane per applicare le modifiche

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

    sudo systemctl restart observiq-otel-collector
    
  2. Per riavviare l'agente Bindplane in Windows, puoi utilizzare la console Servizi o inserire il seguente comando:

    net stop observiq-otel-collector && net start observiq-otel-collector
    

Configura l'inoltro di Syslog su Imperva Database

  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 (il valore predefinito è 514).
    • Protocollo: seleziona UDP o TCP, a seconda della configurazione dell'agente Bindplane.
    • 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 o Log gateway - Evento di sicurezza - Log di sistema (syslog) per il formato SYSLOG standard.
  5. Salva la configurazione dell'azione.
  6. Vai a Norme > Norme di sicurezza o Norme > Norme 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 Logica
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", esegui il mapping 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 mappa "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} nel modello 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 in modo permanente su "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 come "EMAIL_UNCATEGORIZED" se application è "postfix/qmgr", "postfix/local" o "postfix/pickup". Codificato in modo permanente su "EMAIL_TRANSACTION" se application è "postfix/local" o "postfix/pickup" e status è "sent (delivered to mailbox)". Codificato come "NETWORK_HTTP" se application è "sshd" e description non contiene "check pass; user unknown" e description non contiene "authentication failure" e description non contiene "invalid". Codificato come "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 in modo permanente su "PROCESS_UNCATEGORIZED" se message contiene "reconfigure" e application è "pman". Codificato in modo permanente su "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 in modo permanente su "STATUS_UPDATE" se has_principal è "true". Codificato in modo permanente su "GENERIC_EVENT" se event_type è vuoto o "GENERIC_EVENT"
metadata.log_type Codificato in modo permanente su "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" (verifica pass; 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" (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
security_result.rule_id Se description contiene "alert_score" o "new_alert_score", estrai ruleid da description e mappalo a security_result.rule_id
version metadata.product_version Mappato dal log delle modifiche
source-ip principal.ip Mappato dal log delle modifiche
source-port principal.port Mappato dal log delle modifiche
server-group", "service-name", "user-group", "raw-query", "parsed-query", "bind-variables", "sql-error", "db-schema-pair.db-name", "db-schema-pair.schema-name", and "objects-list additional.fields Mappato dal log delle modifiche
source-application principal.application Mappato dal log delle modifiche
event-id metadata.product_log_id Mappato dal log delle modifiche
application-user principal.user.user_display_name Mappato dal log delle modifiche
mx-ip", "gw-ip intermediary.ip Mappato dal log delle modifiche
policy-id" and "user-authenticated security_result.detection_fields Mappato dal log delle modifiche
srcPort principal.port Mappato dal log delle modifiche
srcIP principal.ip Mappato dal log delle modifiche
event_name metadata.product_event_type 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.