Oracle DB-Logs erfassen

Unterstützt in:

In diesem Dokument wird beschrieben, wie Sie Oracle DB-Logs mit Bindplane in Google Security Operations aufnehmen. Der Parser extrahiert Felder aus SYSLOG-Nachrichten und verarbeitet mehrere Formate mithilfe von Grok-Mustern und Schlüssel/Wert-Parsing. Anschließend werden diese extrahierten Felder dem Unified Data Model (UDM) zugeordnet und die Daten werden mit statischen Metadaten wie Anbieter- und Produktnamen angereichert. Außerdem werden Ereignistypen dynamisch auf Grundlage bestimmter Feldwerte wie ACTION und USERID festgelegt. Der Parser führt auch verschiedene Datenbereinigungsoperationen aus, z. B. das Ersetzen von Zeichen und das Konvertieren von Datentypen.

Hinweise

Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:

  • Google SecOps-Instanz
  • Windows 2016 oder höher oder ein Linux-Host mit systemd
  • Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewallports geöffnet.
  • Berechtigter Zugriff (AUDIT_SYSTEM-Rolle) auf die Oracle-Datenbank

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie SIEM-Einstellungen > Collection Agents auf.
  3. Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.

Google SecOps-Kundennummer abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die SIEM-Einstellungen > „Profil“ auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Fenstereinbau

  1. Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
  2. Führen Sie dazu diesen Befehl aus:

    msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
    

Linux-Installation

  1. Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
  2. Führen Sie dazu diesen Befehl aus:

    sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
    

Zusätzliche Installationsressourcen

Weitere Installationsoptionen finden Sie im Installationsleitfaden.

BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren

  1. Rufen Sie die Konfigurationsdatei auf:
    • Suchen Sie die Datei config.yaml. Normalerweise befindet es sich unter Linux im Verzeichnis /etc/bindplane-agent/ oder unter Windows im Installationsverzeichnis.
    • Öffnen Sie die Datei mit einem Texteditor (z. B. nano, vi oder Notepad).
  2. Bearbeiten Sie die Datei config.yamlso:

    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. Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.

  4. Ersetzen Sie <customer_id> durch die tatsächliche Kunden-ID.

  5. Aktualisieren Sie /path/to/ingestion-authentication-file.json auf den Pfad, in dem die Authentifizierungsdatei im Abschnitt Google SecOps-Aufnahmeauthentifizierungsdatei abrufen gespeichert wurde.

Bindplane-Agent neu starten, um die Änderungen zu übernehmen

  • Führen Sie den folgenden Befehl aus, um den Bindplane-Agent unter Linux neu zu starten:

    sudo systemctl restart bindplane-agent
    
  • Wenn Sie den Bindplane-Agent unter Windows neu starten möchten, können Sie entweder die Konsole Services verwenden oder den folgenden Befehl eingeben:

    net stop BindPlaneAgent && net start BindPlaneAgent
    

Prüfung für Oracle-Datenbank aktivieren

  1. Stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her.
  2. Fahren Sie die Datenbank mit dem folgenden Befehl herunter:

    shutdown immediate
    
  3. Stoppen Sie den Oracle-Listener-Dienst, indem Sie den folgenden Befehl eingeben:

    lsnrctl stop
    
  4. Optional: Stoppen Sie Enterprise Manager mit den folgenden Befehlen, falls zutreffend:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl stop oms
    
  5. Verknüpfen Sie die Oracle-Datenbank mit der Option uniaud mit den folgenden Befehlen:

    cd $ORACLE_HOME/rdbms/lib
    
    make -f ins_rdbms.mk uniaud_on ioracle
    
  6. Stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her.

  7. Starten Sie die Datenbank mit dem folgenden Befehl neu:

    startup
    
  8. Starten Sie den Oracle-Listenerdienst mit dem folgenden Befehl neu:

    lsnrctl start
    
  9. Optional: Starten Sie den Enterprise Manager nur bei Bedarf mit den folgenden Befehlen neu:

    cd /u01/app/oracle/product/middleware/oms
    
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    
    $OMS_HOME/bin/emctl start oms
    
  10. Prüfen Sie, ob die einheitliche Überwachung aktiviert ist, stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her und geben Sie dann den folgenden Befehl ein:

    select * from v$option where PARAMETER = 'Unified Auditing';
    
  11. Prüfen Sie, ob der Befehl eine Zeile mit dem VALUE „TRUE“ zurückgibt.

Syslog für die Oracle-Datenbank konfigurieren

  1. Melden Sie sich bei der Oracle-Instanz an.
  2. Öffnen Sie die folgende Datei mit vi:

    vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
    
  3. Geben Sie die folgenden Befehle für die Syslog-Konfiguration ein:

    *.audit_trail='os'
    *.audit_syslog_level='local0.info'
    
  4. Prüfen Sie, ob der Syslog-Daemon auf dem Oracle-Host so konfiguriert ist, dass das Audit-Log weitergeleitet wird.

  5. Öffnen Sie unter Red Hat Enterprise die folgende Datei /etc/syslog.conf mit vi und geben Sie die folgende Zeile ein:

    local0.info @ <bindplane-ip>:514
    
  6. Speichern und schließen Sie die Datei:

    :wq
    
  7. Geben Sie unter Red Hat Enterprise den folgenden Befehl ein, um die Syslog-Konfiguration neu zu laden:

    kill -HUP /var/run/syslogd.pid
    
  8. Stellen Sie eine Verbindung zu SQLplus her und melden Sie sich als sysdba an, um den Neustart auszuführen:

    sys as sysdba
    
  9. Fahren Sie die Datenbank mit dem folgenden Befehl herunter:

    shutdown immediate
    
  10. Starten Sie die Datenbank mit dem folgenden Befehl neu:

    startup
    

UDM-Zuordnungstabelle

Logfeld UDM-Zuordnung Logik
ACTION security_result.action_details Der Wert von ACTION aus dem Rohlog wird direkt diesem UDM-Feld zugeordnet. Es wird zusätzliche Logik angewendet, um security_result.action und security_result.description basierend auf dem Wert von ACTION zu bestimmen (z.B. 100 wird ALLOW und „Erfolgreich“ zugeordnet.
ACTION_NAME metadata.product_event_type Direkt zugeordnet.
ACTION_NUMBER additional.fields[action_number].value.string_value Direkt mit dem Schlüssel Source Event zugeordnet. Wird auch in Kombination mit anderen Feldern verwendet, um metadata.event_type und metadata.product_event_type abzuleiten.
APPLICATION_CONTEXTS additional.fields[application_contexts_label].value.string_value Direkt mit dem Schlüssel APPLICATION_CONTEXTS zugeordnet.
AUDIT_POLICY additional.fields[audit_policy_label].value.string_value oder additional.fields[AUDIT_POLICY_#].value.string_value Wenn AUDIT_POLICY ein Komma enthält, wird es in mehrere Labels mit Schlüsseln wie AUDIT_POLICY_0, AUDIT_POLICY_1 usw. aufgeteilt. Andernfalls wird es direkt mit dem Schlüssel AUDIT_POLICY zugeordnet.
AUDIT_TYPE additional.fields[audit_type_label].value.string_value Direkt mit dem Schlüssel AUDIT_TYPE zugeordnet.
AUTHENTICATION_TYPE metadata.event_type, extensions.auth.type Wird verwendet, um metadata.event_type als USER_LOGIN abzuleiten, wenn auth_type (aus AUTHENTICATION_TYPE extrahiert) nicht leer ist und andere Bedingungen erfüllt sind. extensions.auth.type ist auf AUTHTYPE_UNSPECIFIED festgelegt.
CLIENT_ADDRESS principal.ip, principal.port, network.ip_protocol, intermediary[host].user.userid IP, Port und Protokoll werden mit Grok-Mustern extrahiert. Wenn im Feld CLIENT_ADDRESS ein Nutzername vorhanden ist, wird er intermediary[host].user.userid zugeordnet.
CLIENT_ID target.user.userid Direkt zugeordnet.
CLIENT_PROGRAM_NAME additional.fields[client_program_name_label].value.string_value Direkt mit dem Schlüssel CLIENT_PROGRAM_NAME zugeordnet.
CLIENT_TERMINAL additional.fields[CLIENT_TERMINAL_label].value Direkt mit dem Schlüssel CLIENT_TERMINAL zugeordnet.
CLIENT_USER target.user.user_display_name Direkt zugeordnet.
COMMENT$TEXT additional.fields[comment_text_label].value.string_value Direkt mit dem Schlüssel comment_text zugeordnet, nachdem „+“ durch „:“ ersetzt wurde.
CURRENT_USER additional.fields[current_user_label].value.string_value Direkt mit dem Schlüssel current_user zugeordnet.
CURUSER additional.fields[current_user_label].value.string_value Direkt mit dem Schlüssel current_user zugeordnet.
DATABASE_USER principal.user.user_display_name Direkt zugeordnet, wenn nicht leer oder /.
DBID metadata.product_log_id Direkt zugeordnet nach dem Entfernen der einfachen Anführungszeichen.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Legt resource_type auf DATABASE, resource_subtype auf Oracle Database fest und ordnet DBNAME name zu.
DBPROXY_USERRNAME intermediary[dbproxy].user.userid Direkt zugeordnet.
DBUSERNAME target.user.user_display_name Direkt zugeordnet.
ENTRYID target.resource.attribute.labels[entry_id_label].value Direkt mit dem Schlüssel Entry Id zugeordnet.
EXTERNAL_USERID additional.fields[external_userid_label].value.string_value Direkt mit dem Schlüssel EXTERNAL_USERID zugeordnet.
LENGTH additional.fields[length_label].value.string_value Direkt mit dem Schlüssel length zugeordnet.
LOGOFF$DEAD target.resource.attribute.labels[LOGOFFDEAD_label].value Direkt mit dem Schlüssel LOGOFFDEAD zugeordnet.
LOGOFF$LREAD target.resource.attribute.labels[LOGOFFLREAD_label].value Direkt mit dem Schlüssel LOGOFFLREAD zugeordnet.
LOGOFF$LWRITE target.resource.attribute.labels[LOGOFFLWRITE_label].value Direkt mit dem Schlüssel LOGOFFLWRITE zugeordnet.
LOGOFF$PREAD target.resource.attribute.labels[LOGOFFPREAD_label].value Direkt mit dem Schlüssel LOGOFFPREAD zugeordnet.
NTIMESTAMP# metadata.event_timestamp Geparsed und in das RFC 3339- oder ISO8601-Format konvertiert.
OBJCREATOR target.resource.attribute.labels[obj_creator_label].value Direkt mit dem Schlüssel OBJ Creator zugeordnet.
OBJNAME target.resource.attribute.labels[obj_name_label].value Direkt mit dem Schlüssel OBJ Name zugeordnet.
OS_USERNAME principal.user.user_display_name Direkt zugeordnet.
OSUSERID target.user.userid Direkt zugeordnet.
PDB_GUID principal.resource.product_object_id Direkt zugeordnet.
PRIV$USED additional.fields[privused_label].value.string_value Direkt mit dem Schlüssel privused zugeordnet.
PRIVILEGE principal.user.attribute.permissions.name Direkt zugeordnet.
RETURN_CODE security_result.summary Direkt zugeordnet. Es wird Logik angewendet, um security_result.action und security_result.description abzuleiten.
RETURNCODE security_result.summary Direkt zugeordnet. Es wird Logik angewendet, um security_result.action und security_result.description abzuleiten.
RLS_INFO additional.fields[rls_info_label].value.string_value Direkt mit dem Schlüssel RLS_INFO zugeordnet.
SCHEMA additional.fields[schema_label].value.string_value Direkt mit dem Schlüssel schema zugeordnet.
SESSIONCPU target.resource.attribute.labels[SESSIONCPU_label].value Direkt mit dem Schlüssel SESSIONCPU zugeordnet.
SESSIONID network.session_id Direkt zugeordnet.
SESID network.session_id Direkt zugeordnet.
SQL_TEXT target.process.command_line Direkt zugeordnet.
SQLTEXT target.process.command_line Direkt zugeordnet.
STATEMENT target.resource.attribute.labels[statement_label].value Direkt mit dem Schlüssel STATEMENT zugeordnet.
STATUS security_result.summary Direkt zugeordnet. Es wird Logik angewendet, um security_result.action und security_result.description abzuleiten.
SYSTEM_PRIVILEGE_USED additional.fields[system_privilege_used_label].value.string_value Direkt mit dem Schlüssel SYSTEM_PRIVILEGE_USED zugeordnet.
TARGET_USER additional.fields[target_user_label].value.string_value Direkt mit dem Schlüssel TARGET_USER zugeordnet.
TERMINAL additional.fields[CLIENT_TERMINAL_label].value Direkt mit dem Schlüssel CLIENT_TERMINAL zugeordnet.
TYPE additional.fields[type_label].value.string_value Direkt mit dem Schlüssel type zugeordnet.
USERHOST principal.hostname, principal.administrative_domain Hostname und Domain werden mithilfe von Grok-Mustern extrahiert.
USERID principal.user.userid Direkt zugeordnet.
device_host_name target.hostname Direkt zugeordnet.
event_name metadata.product_event_type Direkt zugeordnet nach der Umwandlung in Großbuchstaben.
file_name target.file.full_path Direkt zugeordnet.
hostname principal.hostname Direkt zugeordnet.
length additional.fields[length_label].value.string_value Direkt mit dem Schlüssel length zugeordnet.
log_source_name principal.application Direkt zugeordnet.
message Verschiedene Wird für das Grok-Parsing verwendet, um mehrere Felder zu extrahieren.
returncode RETURNCODE Direkt zugeordnet.
src_ip principal.ip Direkt zugeordnet.
t_hostname target.hostname Direkt zugeordnet.
(Parserlogik) metadata.vendor_name Hartcodiert auf Oracle.
(Parserlogik) metadata.product_name Hartcodiert auf Oracle DB.
(Parserlogik) metadata.event_type Wird anhand der Werte von ACTION, ACTION_NUMBER, source_event, OSUSERID, USERID, SQLTEXT, AUTHENTICATION_TYPE, DBUSERNAME, device_host_name, database_name bestimmt. Der Standardwert ist USER_RESOURCE_ACCESS, wenn keine bestimmte Bedingung erfüllt ist.
(Parserlogik) metadata.product_event_type Wird anhand der Werte von ACTION, ACTION_NUMBER, source_event, p_event_type, ACTION_NAME bestimmt.
(Parserlogik) metadata.log_type Hartcodiert auf ORACLE_DB.
(Parserlogik) extensions.auth.mechanism Wird unter bestimmten Bedingungen basierend auf ACTION, ACTION_NUMBER, source_event und OSUSERID auf USERNAME_PASSWORD gesetzt.
(Parserlogik) extensions.auth.type Wird unter bestimmten Bedingungen basierend auf ACTION, ACTION_NUMBER und AUTHENTICATION_TYPE auf AUTHTYPE_UNSPECIFIED gesetzt.
(Parserlogik) security_result.description Abgeleitet von RETURNCODE oder STATUS.
(Parserlogik) security_result.action Abgeleitet von RETURNCODE oder STATUS.
(Parserlogik) target.resource.attribute.labels Basierend auf dem Vorhandensein und den Werten verschiedener Logfelder werden mehrere Labels hinzugefügt.
(Parserlogik) additional.fields Mehrere Felder werden als Schlüssel/Wert-Paare basierend auf dem Vorhandensein und den Werten verschiedener Logfelder hinzugefügt.
(Parserlogik) intermediary Wird basierend auf dem Vorhandensein und den Werten von DBPROXY_USERRNAME und CLIENT_ADDRESS erstellt und ausgefüllt.
(Parserlogik) network.ip_protocol Abgeleitet von protocol, extrahiert aus CLIENT_ADDRESS mit der Include-Datei parse_ip_protocol.include.

Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten