Oracle DB-Logs erfassen

Unterstützt in:

In diesem Leitfaden wird beschrieben, wie Sie Oracle DB-Logs mit dem Bindplane-Agent in Google Security Operations aufnehmen können.

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, um die Daten mit statischen Metadaten wie Anbieter- und Produktnamen anzureichern. Außerdem werden Ereignistypen dynamisch auf Grundlage bestimmter Feldwerte wie ACTION und USERID festgelegt.

Hinweise

  • Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:

  • Eine Google SecOps-Instanz

  • Windows Server 2016 oder höher oder Linux-Host mit systemd

  • Netzwerkverbindung zwischen dem Bindplane-Agent und dem Oracle-Datenbankhost

  • Wenn Sie den Agent hinter einem Proxy ausführen, müssen die Firewallports gemäß den Anforderungen des Bindplane-Agents geöffnet sein.

  • Privilegierter Zugriff auf die Oracle-Datenbankinstanz (Rolle „SYSDBA“ oder „AUDIT_ADMIN“)

  • Oracle Database 19c oder höher mit aktiviertem Unified Auditing (oder gemischter Auditmodus in Oracle 12c–18c)

Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen

  1. Melden Sie sich in der Google SecOps-Konsole an.
  2. Rufen Sie die 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 > Profile auf.
  3. Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.

BindPlane-Agent installieren

Installieren Sie den Bindplane-Agent auf Ihrem Windows- oder Linux-Betriebssystem gemäß der folgenden Anleitung.

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
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sc query observiq-otel-collector
    

Der Dienst sollte als RUNNING (Wird ausgeführt) angezeigt werden.

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
    
  3. Warten Sie, bis die Installation abgeschlossen ist.

  4. Überprüfen Sie die Installation mit folgendem Befehl:

    sudo systemctl status observiq-otel-collector
    

Der Dienst sollte als aktiv (wird ausgeführt) angezeigt werden.

Zusätzliche Installationsressourcen

Weitere Installationsoptionen und Informationen zur Fehlerbehebung finden Sie in der Installationsanleitung für den Bindplane-Agent.

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

Konfigurationsdatei suchen

Linux:

```bash
sudo nano /etc/bindplane-agent/config.yaml
```

Windows:

```cmd
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
```

Konfigurationsdatei bearbeiten

Ersetzen Sie den gesamten Inhalt von config.yaml durch die folgende Konfiguration:

```yaml
receivers:
    udplog:
        listen_address: "0.0.0.0:514"

exporters:
    chronicle/oracle_db:
        compression: gzip
        creds_file_path: '/path/to/ingestion-authentication-file.json'
        customer_id: '<customer_id>'
        endpoint: malachiteingestion-pa.googleapis.com
        log_type: ORACLE_DB
        raw_log_field: body
        ingestion_labels:
            log_type: 'ORACLE_DB'

service:
    pipelines:
        logs/oracle_to_chronicle:
            receivers:
                - udplog
            exporters:
                - chronicle/oracle_db
```

Konfigurationsparameter

  • Ersetzen Sie die folgenden Platzhalter:

Empfängerkonfiguration: * listen_address: Die IP-Adresse und der Port, die überwacht werden sollen: – Ersetzen Sie 0.0.0.0 durch eine bestimmte IP-Adresse, um eine Schnittstelle zu überwachen, oder lassen Sie 0.0.0.0 unverändert, um alle Schnittstellen zu überwachen (empfohlen). – Ersetzen Sie 514 durch die Portnummer, die der Oracle-Konfiguration für die Syslog-Weiterleitung entspricht.

Exporter-Konfiguration: * creds_file_path: Vollständiger Pfad zur Datei für die Aufnahmeauthentifizierung: – Linux: /etc/bindplane-agent/ingestion-auth.jsonWindows: C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json * customer_id: Kunden-ID, die im Abschnitt Google SecOps-Kunden-ID abrufen kopiert wurde * endpoint: Regionale Endpunkt-URL: – USA: malachiteingestion-pa.googleapis.comEuropa: europe-malachiteingestion-pa.googleapis.comAsien: asia-southeast1-malachiteingestion-pa.googleapis.com – Eine vollständige Liste finden Sie unter Regionale Endpunkte.

Konfigurationsdatei speichern

  • Speichern Sie die Datei nach der Bearbeitung:
    • Linux: Drücken Sie Ctrl+O, dann Enter und dann Ctrl+X.
    • Windows: Klicken Sie auf Datei > Speichern.

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 observiq-otel-collector
    
    1. Prüfen Sie, ob der Dienst ausgeführt wird:
    sudo systemctl status observiq-otel-collector
    
    1. Logs auf Fehler prüfen:
    sudo journalctl -u observiq-otel-collector -f
    
  • Wählen Sie eine der folgenden Optionen aus, um den Bindplane-Agent unter Windows neu zu starten:

    • Eingabeaufforderung oder PowerShell als Administrator:
    net stop observiq-otel-collector && net start observiq-otel-collector
    
    • Services Console:
      1. Drücken Sie Win+R, geben Sie services.msc ein und drücken Sie die Eingabetaste.
      2. Suchen Sie nach observIQ OpenTelemetry Collector.
      3. Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
    1. Prüfen Sie, ob der Dienst ausgeführt wird:
    sc query observiq-otel-collector
    
    1. Logs auf Fehler prüfen:
    type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
    

Unified-Auditing-Feature in Oracle-Datenbanken und Syslog-Weiterleitung konfigurieren

Einheitliches Auditing aktivieren

Wenn das einheitliche Auditing noch nicht aktiviert ist, verknüpfen Sie die Oracle-Binärdateien mit der Option uniaud_on neu. Dazu müssen alle Oracle-Prozesse heruntergefahren werden, die über das Oracle-Home ausgeführt werden (Datenbankinstanz und Listener).

  1. Stellen Sie als Betriebssystemnutzer oracle eine Verbindung zum Oracle-Datenbankhost her.
  2. Fahren Sie die Oracle-Instanz und den Listener herunter:

    sqlplus / as sysdba <<EOF
    shutdown immediate;
    exit
    EOF
    lsnrctl stop
    
  3. Verknüpfen Sie die Oracle-Binärdateien neu, wenn das einheitliche Auditing aktiviert ist:

    cd $ORACLE_HOME/rdbms/lib
    make -f ins_rdbms.mk uniaud_on ioracle
    
  4. Starten Sie den Listener und die Oracle-Instanz:

    lsnrctl start
    sqlplus / as sysdba <<EOF
    startup;
    exit
    EOF
    
  5. Wenn Oracle Enterprise Manager Cloud Control auf demselben Host ausgeführt wird, starten Sie es neu:

    cd /u01/app/oracle/product/middleware/oms
    export OMS_HOME=/u01/app/oracle/product/middleware/oms
    $OMS_HOME/bin/emctl start oms
    
  6. Prüfen Sie, ob das einheitliche Auditing aktiviert ist. Stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her:

    SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
    

Prüfen Sie, ob der Befehl eine Zeile mit VALUE gleich TRUE zurückgibt.

Syslog-Ausgabe für einheitliches Auditing konfigurieren

Legen Sie den Initialisierungsparameter UNIFIED_AUDIT_SYSTEMLOG fest, um Unified-Audit-Datensätze in Syslog zu schreiben. Dieser Parameter wurde in Oracle 19c eingeführt und ersetzt den veralteten Parameter AUDIT_SYSLOG_LEVEL, der nur für die herkömmliche Überwachung gilt.

  1. Stellen Sie mit SQLplus als SYSDBA eine Verbindung zur Oracle-Datenbank her.
  2. Legen Sie den Parameter UNIFIED_AUDIT_SYSTEMLOG fest:

    • Legen Sie auf UNIX-/Linux-Systemen den Parameter auf einen facility.priority-Wert fest:
    ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL7.INFO' SCOPE=SPFILE;
    
    • Legen Sie auf Windows-Systemen den Parameter auf TRUE fest, um in die Windows-Ereignisanzeige zu schreiben:
    ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = TRUE SCOPE=SPFILE;
    
  3. Optional: Wenn Sie allgemeine Unified Audit Policy-Datensätze aus einem CDB-Root-Container in syslog auf UNIX-/Linux-Systemen schreiben möchten, legen Sie den Parameter UNIFIED_AUDIT_COMMON_SYSTEMLOG fest:

    ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;
    
  4. Starten Sie die Oracle Database-Instanz neu, damit die Parameteränderungen wirksam werden:

    SHUTDOWN IMMEDIATE;
    STARTUP;
    

Syslog-Daemon auf dem Oracle-Host konfigurieren

Konfigurieren Sie auf dem Oracle-Datenbankhost den Syslog-Daemon so, dass er Audit-Logeinträge an den BindPlane-Agenten weiterleitet.

  1. Melden Sie sich als root beim Oracle-Datenbankhost an.
  2. Öffnen Sie die Syslog-Konfigurationsdatei:

    • Unter RHEL/CentOS/Oracle Linux mit rsyslog:
    sudo vi /etc/rsyslog.conf
    
    • Auf älteren Systemen mit Syslog:
    sudo vi /etc/syslog.conf
    
  3. Fügen Sie eine Weiterleitungsregel hinzu, die mit der Einrichtung und Priorität übereinstimmt, die Sie in UNIFIED_AUDIT_SYSTEMLOG konfiguriert haben. Wenn Sie beispielsweise LOCAL7.INFO festlegen:

    • So leiten Sie über UDP weiter (passender BindPlane-udplog-Empfänger):
    local7.info @<BINDPLANE_HOST_IP>:514
    
    • So leiten Sie über TCP weiter (wenn Bindplane den tcplog-Empfänger verwendet):
    local7.info @@<BINDPLANE_HOST_IP>:514
    

Ersetzen Sie <BINDPLANE_HOST_IP> durch die IP-Adresse oder den Hostnamen des Systems, auf dem der Bindplane-Agent ausgeführt wird.

Note: A single `@` prefix indicates UDP forwarding. A double `@@` prefix indicates TCP forwarding. Ensure this matches the receiver type in the Bindplane `config.yaml`.
  1. Optional: Wenn Sie auch eine lokale Kopie der Audit-Logs behalten möchten, fügen Sie die folgende Zeile hinzu:

    local7.info /var/log/oracle_audit.log
    
  2. Speichern Sie die Datei und starten Sie den Syslog-Daemon neu:

    • Unter RHEL/CentOS/Oracle Linux mit rsyslog:
    sudo systemctl restart rsyslog
    
    • Auf älteren Systemen mit Syslog:
    sudo service syslog restart
    

Weiterleitung von Audit-Logs prüfen

  1. Generieren Sie ein Test-Audit-Ereignis, indem Sie eine prüffähige Aktion in der Oracle-Datenbank ausführen. Stellen Sie beispielsweise als Nutzer eine Verbindung her und führen Sie Folgendes aus:

    SELECT * FROM DBA_USERS WHERE ROWNUM = 1;
    
  2. Prüfen Sie die BindPlane-Agentenlogs auf eingehende Syslog-Nachrichten:

    sudo journalctl -u observiq-otel-collector -f
    
  3. Prüfen Sie, ob die Syslog-Meldung das Tag Oracle Unified Audit mit Schlüssel/Wert-Paaren wie TYPE, DBID, SESID, DBUSER, ACTION und RETCODE enthält.

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 anhand des Werts von ACTION zu bestimmen (z. B. wird 100 ALLOW und Success 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 gesetzt.
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 von einfachen Anführungszeichen.
DBNAME target.resource.resource_type, target.resource.resource_subtype, target.resource.name Legt resource_type auf DATABASE und 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. Wenn keine bestimmte Bedingung erfüllt wird, ist der Standardwert USER_RESOURCE_ACCESS.
(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 festgelegt.
(Parserlogik) extensions.auth.type Wird unter bestimmten Bedingungen basierend auf ACTION, ACTION_NUMBER und AUTHENTICATION_TYPE auf AUTHTYPE_UNSPECIFIED festgelegt.
(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 vom Protokoll, das aus CLIENT_ADDRESS mit der Include-Datei parse_ip_protocol.include extrahiert wurde.

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