Raccogliere i log del database Imperva
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
- 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
Installazione di Windows
- 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 questa guida all'installazione.
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/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).
- Individua il file
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
al percorso in cui è stato salvato il file di autenticazione nella sezione Recupera il file di autenticazione per l'importazione di Google SecOps.
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
- Accedi alla console di gestione di Imperva SecureSphere.
- Vai a Configurazione > 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
). - 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.
- 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 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".description description 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.