Raccogliere i log di Oracle DB

Supportato in:

Questo documento spiega come importare i log del database Oracle in Google Security Operations utilizzando Bindplane. Il parser estrae i campi dai messaggi SYSLOG, gestendo più formati utilizzando pattern grok e l'analisi chiave-valore. Quindi mappa questi campi estratti al modello Unified Data Model (UDM), arricchendo i dati con metadati statici come i nomi di fornitori e prodotti e impostando dinamicamente i tipi di eventi in base a valori di campi specifici come ACTION e USERID. L'analizzatore sintattico gestisce anche varie operazioni di pulizia dei dati, come la sostituzione dei caratteri e la conversione dei tipi di dati.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Windows 2016 o versioni successive oppure un host Linux con systemd
  • Se l'esecuzione avviene tramite un proxy, le porte del firewall sono aperte
  • Accesso con privilegi (ruolo AUDIT_SYSTEM) al database Oracle

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 di 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.

Configura l'agente Bindplane per importare Syslog e inviarli 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
            ingestion_labels:
                log_type: 'ORACLE_DB'
                raw_log_field: body
    
    service:
        pipelines:
            logs/source0__chronicle_w_labels-0:
                receivers:
                    - udplog
                exporters:
                    - chronicle/chronicle_w_labels
    
  3. Sostituisci la porta e l'indirizzo IP in base alle esigenze della tua infrastruttura.

  4. Sostituisci <customer_id> con l'ID cliente effettivo.

  5. 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
    

Abilita il controllo per Oracle Database

  1. Connettiti al database Oracle con SQLplus.
  2. Arresta il database con il comando seguente:

    shutdown immediate
    
  3. Interrompi il servizio di listener Oracle digitando il seguente comando:

    lsnrctl stop
    
  4. (Facoltativo) Solo se applicabile, arresta Enterprise Manager utilizzando i seguenti comandi:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. Collega Oracle DB con l'opzione uniaud utilizzando i seguenti comandi:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Connettiti al database Oracle con SQLplus.

  7. Riavvia il database utilizzando il seguente comando:

    startup
    
  8. Riavvia il servizio di listener Oracle utilizzando il comando seguente:

    lsnrctl start
    
  9. (Facoltativo) Solo se applicabile, riavvia Enterprise Manager utilizzando i seguenti comandi:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. Verifica che l'audit unificato sia abilitato, connettiti al database Oracle con SQLplus e poi digita il seguente comando:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Verifica che il comando restituisca una riga con VALUE uguale a "TRUE".

Configura Syslog per il database Oracle

  1. Accedi all'istanza Oracle.
  2. Apri il seguente file utilizzando vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Inserisci i seguenti comandi per la configurazione di syslog:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Assicurati che il daemon syslog sull'host Oracle sia configurato per inoltrare il log di controllo.

  5. Su Red Hat Enterprise, apri il seguente file /etc/syslog.conf utilizzando vi e inserisci la seguente riga:

    local0.info @ <bindplane-ip>:514
    
  6. Salva ed esci dal file:

    :wq
    
  7. Su Red Hat Enterprise, digita questo comando per ricaricare la configurazione di syslog:

    kill -HUP /var/run/syslogd.pid
    
  8. Connettiti a SQLplus e accedi come sysdba per riavviare:

    sys as sysdba
    
  9. Arresta il database con il comando seguente:

    shutdown immediate
    
  10. Riavvia il database utilizzando il seguente comando:

    startup
    

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
ACTION security_result.action_details Il valore di ACTION del log non elaborato viene mappato direttamente a questo campo UDM. Viene applicata una logica aggiuntiva per determinare security_result.action e security_result.description in base al valore di ACTION (ad es. 100 corrisponde a CONSENTI e Successo).
ACTION_NAME metadata.product_event_type Mappato direttamente.
ACTION_NUMBER additional.fields[action_number].value.string_value Mappato direttamente con il tasto Source Event. Utilizzato anche in combinazione con altri campi per derivare metadata.event_type e metadata.product_event_type.
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value Mappato direttamente con il tasto APPLICATION_CONTEXTS.
AUDIT_POLICY additional.fields[audit_policy_label].value.string_value o additional.fields[AUDIT_POLICY_#].value.string_value Se AUDIT_POLICY contiene una virgola, viene suddiviso in più etichette con chiavi come AUDIT_POLICY_0, AUDIT_POLICY_1 e così via. In caso contrario, viene mappato direttamente con la chiave AUDIT_POLICY.
AUDIT_TYPE additional.fields[audit_type_label].value.string_value Mappato direttamente con il tasto AUDIT_TYPE.
AUTHENTICATION_TYPE metadata.event_type, extensions.auth.type Utilizzato per derivare metadata.event_type come USER_LOGIN se auth_type (estratto da AUTHENTICATION_TYPE) non è vuoto e vengono soddisfatte altre condizioni. extensions.auth.type è impostato su AUTHTYPE_UNSPECIFIED.
CLIENT_ADDRESS principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid IP, porta e protocollo vengono estratti utilizzando i pattern grok. Se è presente un nome utente nel campo CLIENT_ADDRESS, questo viene mappato a intermediary[host].user.userid.
CLIENT_ID target.user.userid Mappato direttamente.
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value Mappato direttamente con il tasto CLIENT_PROGRAM_NAME.
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mappato direttamente con il tasto CLIENT_TERMINAL.
CLIENT_USER target.user.user_display_name Mappato direttamente.
COMMENT$TEXT additional.fields[comment_text_label].value.string_value Mappato direttamente con la chiave comment_text dopo aver sostituito "+" con ":".
CURRENT_USER additional.fields[current_user_label].value.string_value Mappato direttamente con il tasto current_user.
CURUSER additional.fields[current_user_label].value.string_value Mappato direttamente con il tasto current_user.
DATABASE_USER principal.user.user_display_name Mappato direttamente se non è vuoto o /.
DBID metadata.product_log_id Mappato direttamente dopo la rimozione degli apici singoli.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Imposta resource_type su DATABASE, resource_subtype su Oracle Database e mappa DBNAME su name.
DBPROXY_USERRNAME intermediary[dbproxy].user.userid Mappato direttamente.
DBUSERNAME target.user.user_display_name Mappato direttamente.
ENTRYID target.resource.attribute.labels[entry_id_label].value Mappato direttamente con il tasto Entry Id.
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value Mappato direttamente con il tasto EXTERNAL_USERID.
LENGTH additional.fields[length_label].value.string_value Mappato direttamente con il tasto length.
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value Mappato direttamente con il tasto LOGOFFDEAD.
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value Mappato direttamente con il tasto LOGOFFLREAD.
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value Mappato direttamente con il tasto LOGOFFLWRITE.
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value Mappato direttamente con il tasto LOGOFFPREAD.
NTIMESTAMP# metadata.event_timestamp Analizzato e convertito nel formato RFC 3339 o ISO8601.
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value Mappato direttamente con il tasto OBJ Creator.
OBJNAME target.resource.attribute.labels[obj_name_label].value Mappato direttamente con il tasto OBJ Name.
OS_USERNAME principal.user.user_display_name Mappato direttamente.
OSUSERID target.user.userid Mappato direttamente.
PDB_GUID principal.resource.product_object_id Mappato direttamente.
PRIV$USED additional.fields[privused_label].value.string_value Mappato direttamente con il tasto privused.
PRIVILEGE principal.user.attribute.permissions.name Mappato direttamente.
RETURN_CODE security_result.summary Mappato direttamente. La logica viene applicata per derivare security_result.action e security_result.description.
RETURNCODE security_result.summary Mappato direttamente. La logica viene applicata per derivare security_result.action e security_result.description.
RLS_INFO additional.fields[rls_info_label].value.string_value Mappato direttamente con il tasto RLS_INFO.
SCHEMA additional.fields[schema_label].value.string_value Mappato direttamente con il tasto schema.
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value Mappato direttamente con il tasto SESSIONCPU.
SESSIONID network.session_id Mappato direttamente.
SESID network.session_id Mappato direttamente.
SQL_TEXT target.process.command_line Mappato direttamente.
SQLTEXT target.process.command_line Mappato direttamente.
STATEMENT target.resource.attribute.labels[statement_label].value Mappato direttamente con il tasto STATEMENT.
STATUS security_result.summary Mappato direttamente. La logica viene applicata per derivare security_result.action e security_result.description.
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value Mappato direttamente con il tasto SYSTEM_PRIVILEGE_USED.
TARGET_USER additional.fields[target_user_label].value.string_value Mappato direttamente con il tasto TARGET_USER.
TERMINAL additional.fields[CLIENT_TERMINAL_label].value Mappato direttamente con il tasto CLIENT_TERMINAL.
TYPE additional.fields[type_label].value.string_value Mappato direttamente con il tasto type.
USERHOST principal.hostname, principal.administrative_domain Il nome host e il dominio vengono estratti utilizzando i pattern grok.
USERID principal.user.userid Mappato direttamente.
device_host_name target.hostname Mappato direttamente.
event_name metadata.product_event_type Mappato direttamente dopo la conversione in maiuscolo.
file_name target.file.full_path Mappato direttamente.
hostname principal.hostname Mappato direttamente.
length additional.fields[length_label].value.string_value Mappato direttamente con il tasto length.
log_source_name principal.application Mappato direttamente.
message Varie Utilizzato per l'analisi Grok per estrarre diversi campi.
returncode RETURNCODE Mappato direttamente.
src_ip principal.ip Mappato direttamente.
t_hostname target.hostname Mappato direttamente.
(Parser Logic) metadata.vendor_name Codificato in modo permanente su Oracle.
(Parser Logic) metadata.product_name Codificato in modo permanente su Oracle DB.
(Parser Logic) metadata.event_type Determinato in base ai valori di ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name, database_name. Se non viene soddisfatta alcuna condizione specifica, il valore predefinito è USER_RESOURCE_ACCESS.
(Parser Logic) metadata.product_event_type Determinato in base ai valori di ACTION, ACTION_NUMBER, source_event, p_event_type, ACTION_NAME.
(Parser Logic) metadata.log_type Codificato in modo permanente su ORACLE_DB.
(Parser Logic) extensions.auth.mechanism Impostato su USERNAME_PASSWORD in determinate condizioni in base a ACTION, ACTION_NUMBER, source_event e OSUSERID.
(Parser Logic) extensions.auth.type Impostato su AUTHTYPE_UNSPECIFIED in determinate condizioni in base a ACTION, ACTION_NUMBER e AUTHENTICATION_TYPE.
(Parser Logic) security_result.description Derivato da RETURNCODE o STATUS.
(Parser Logic) security_result.action Derivato da RETURNCODE o STATUS.
(Parser Logic) target.resource.attribute.labels Vengono aggiunte diverse etichette in base alla presenza e ai valori di vari campi dei log.
(Parser Logic) additional.fields Vengono aggiunti diversi campi come coppie chiave-valore in base alla presenza e ai valori di vari campi di log.
(Parser Logic) intermediary Creato e compilato in base alla presenza e ai valori di DBPROXY_USERRNAME e CLIENT_ADDRESS.
(Parser Logic) network.ip_protocol Derivato da protocol estratto da CLIENT_ADDRESS utilizzando un file di inclusione parse_ip_protocol.include.

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