Raccogli i log del database Imperva
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 al modello UDM (Unified Data Model). Inoltre, imposta i valori predefiniti dei metadati per l'origine e il tipo di evento. Imperva Database Security offre funzionalità complete di monitoraggio, controllo e protezione delle 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'esecuzione avviene 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 Imperva SecureSphere
Ottieni le credenziali di Google SecOps per l'agente Bindplane
Per autenticare l'agente Bindplane in Google SecOps, scegli uno dei seguenti metodi:
- Nuove implementazioni: utilizza l'API Chronicle (opzione 1).
- Deployment legacy: continua a utilizzare il file di autenticazione dell'acquisizione (Opzione 2) fino alla dismissione dell'API Ingestion il 20 luglio 2027.
Opzione 1: crea un account di servizio per l'API Chronicle (consigliata)
- Accedi alla consoleGoogle Cloud e seleziona il progetto Google Cloud collegato alla tua istanza Google SecOps.
- Vai a IAM e amministrazione > Service account.
- Fai clic su Crea service account.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci un nome per l'account (ad esempio
bindplane-ingest). - Descrizione service account: inserisci una descrizione (ad esempio
Bindplane agent log ingestion).
- Nome service account: inserisci un nome per l'account (ad esempio
- Fai clic su Crea e continua.
- Nella sezione Concedi a questo account di servizio l'accesso al progetto, fai clic su Seleziona un ruolo e seleziona Chronicle Editor.
- Fai clic su Continua, quindi su Fine.
- Fai clic sul account di servizio che hai creato, quindi vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON e fai clic su Crea. Il file della chiave viene scaricato sul tuo computer.
- Salva il file della chiave come
ingestion-auth.jsonnella directory del raccoglitore Bindplane (/opt/observiq-otel-collector/ingestion-auth.jsonsu Linux oC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonsu Windows) oppure aggiornacreds_file_pathinconfig.yamlin modo che corrisponda al percorso in cui lo salvi. - 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)
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Agenti di raccolta.
- Scarica il file di autenticazione dell'acquisizione.
- Salva il file in modo sicuro sul sistema in cui verrà installato l'agente Bindplane.
Ottieni l'ID cliente Google SecOps
- Accedi alla console Google SecOps.
- Vai a Impostazioni SIEM > Profilo.
- Copia e salva l'ID cliente dalla sezione Dettagli organizzazione.
Installa l'agente Bindplane
Installa l'agente Bindplane sul tuo sistema operativo Windows o Linux seguendo le istruzioni riportate di seguito.
Installazione di finestre
- 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 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 dell'agente Bindplane.
Configura l'agente Bindplane per importare Syslog e inviarlo a Google SecOps
Accedi al file di configurazione:
- Individua il file
config.yaml. In genere, si trova nella directory/opt/observiq-otel-collector/su Linux o nella directory di installazione su Windows. - Apri il file utilizzando un editor di testo (ad esempio
nano,vio Blocco note).
- Individua il file
Modifica il file
config.yamlcome segue:receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: 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 # 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: chronicle.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
<LOCATION>con la regione della tua istanza Google SecOps (ad esempious,europeoasia-southeast1). L'esportatore anteponechronicle.googleapis.coma questo valore. - Sostituisci
<PROJECT_NUMBER>con il numero di progetto in IAM e amministrazione > Impostazioni. - Sostituisci
<CUSTOMER_ID>con l'ID cliente effettivo. - Aggiorna
/path/to/ingestion-authentication-file.jsoncon il percorso del file in cui è stato salvato il file della chiave del account di servizio (Opzione 1) nel Passaggio 1.
Esportatore API di importazione legacy
Se utilizzi il file di autenticazione dell'acquisizione dell'Opzione 2, sostituisci il blocco
exporterscon il seguente. Impostacreds_file_pathsul percorso del file di autenticazione dell'importazione e, se la tua istanza si trova al di fuori degli Stati Uniti, sostituiscimalachiteingestion-pa.googleapis.comcon l'endpoint regionale (ad esempio,europe-malachiteingestion-pa.googleapis.com).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:
Riavvia l'agente Bindplane per applicare le modifiche
Per riavviare l'agente Bindplane in Linux, esegui questo comando:
sudo systemctl restart observiq-otel-collectorPer 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 sul database Imperva
- Accedi alla console di gestione Imperva SecureSphere.
- Vai a Configuration (Configurazione) > Action Sets (Set di azioni).
- Fai clic su Aggiungi per creare un nuovo insieme di azioni o modificarne uno esistente.
- Fai clic su Aggiungi azione e fornisci i seguenti dettagli di configurazione:
- Nome: inserisci un nome descrittivo (ad esempio
Google SecOps Syslog). - Action Type (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.
- Syslog Facility (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.
- Nome: inserisci un nome descrittivo (ad esempio
- Salva la configurazione dell'azione.
- Vai a Policy > Policy di sicurezza o Policy > Policy di controllo del database.
- Modifica le policy 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", esegui la mappatura a target.user.userid, altrimenti esegui la mappatura a principal.user.userid. Rimuovi le virgolette e gli spazi da acct prima della mappatura. |
| 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", mappa come "run-parts". Se message contiene "audispd", mappalo come "audispd". Se message contiene "FSS audit", mappa come "FSS audit". Altrimenti, mappa come campo application dal log non elaborato |
| application-name | 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, mappa 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, esegui la mappatura come campo db-user dal log non elaborato. Else if os-user is not empty and db-user is empty then map as os-user field from raw log |
| 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 "Invalid" o "invalid", sostituisci "Invalid user" con "Invalid". Se application è "sshd", rimuovi "da" e "da" da description. Altrimenti, mappa 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 a 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 la mappatura come campo os-user dal log non elaborato. Altrimenti, mappa 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 policy e mappala a 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, esegui il mapping come "True", altrimenti 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, mappa come "True", altrimenti mappa 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. Else if USER is not empty then map as USER field from raw log to principal.user.userid |
| autenticato dall'utente | 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 | Impostato come hardcoded su "USERNAME_PASSWORD" se description contiene "authentication failure" o "check pass; user unknown" o "Invalid user" o "invalid user" o se error non è vuoto |
|
| extensions.auth.type | Impostato come hardcoded su "AUTHTYPE_UNSPECIFIED" se has_principal è "true", has_target è "true" e event-type è "Login" |
|
| metadata.event_type | Impostato come hardcoded 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. Impostato come hardcoded su "NETWORK_CONNECTION" se description è "Syslog connection established" o "Syslog connection broken" o "Syslog connection failed". Impostato come hardcoded su "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 in modo permanente su "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. Impostato come hardcoded su "PROCESS_UNCATEGORIZED" se message contiene "reconfigure" e application è "pman". Impostato come hardcoded 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 in modo permanente su "USER_LOGIN" se has_principal è "true", has_target è "true" e event-type è "Login". Impostato come hardcoded 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". Impostato come hardcoded su "GENERIC_EVENT" se event_type è vuoto o "GENERIC_EVENT" |
|
| metadata.log_type | Impostato come hardcoded su "IMPERVA_DB" | |
| metadata.product_name | Impostato come hardcoded su "IMPERVA DB" | |
| metadata.vendor_name | Impostato come hardcoded su "IMPERVA DB" | |
| security_result.action | Impostato come hardcoded su "ALLOW" se description non contiene "authentication failure" o "check pass; user unknown" o "Invalid user" o "invalid user" e error è vuoto. Impostato come hardcoded su "BLOCK" se description contiene "authentication failure" o "check pass; user unknown" o "Invalid user" o "invalid user" o error non è vuoto |
|
| security_result.rule_id | Se description contiene "alert_score" o "new_alert_score", estrai il 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.