Oracle DB-Logs erfassen
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
systemdNetzwerkverbindung 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
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Collection Agents auf.
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
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie die SIEM-Einstellungen > Profile auf.
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
- Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
Führen Sie dazu diesen Befehl aus:
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quietWarten Sie, bis die Installation abgeschlossen ist.
Ü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
- Öffnen Sie ein Terminal mit Root- oder Sudo-Berechtigungen.
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.shWarten Sie, bis die Installation abgeschlossen ist.
Ü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.json
– Windows: 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.com
– Europa: europe-malachiteingestion-pa.googleapis.com
– Asien: 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, dannEnterund dannCtrl+X. - Windows: Klicken Sie auf Datei > Speichern.
- Linux: Drücken Sie
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- Prüfen Sie, ob der Dienst ausgeführt wird:
sudo systemctl status observiq-otel-collector- Logs auf Fehler prüfen:
sudo journalctl -u observiq-otel-collector -fWä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:
- Drücken Sie
Win+R, geben Sieservices.mscein und drücken Sie die Eingabetaste. - Suchen Sie nach observIQ OpenTelemetry Collector.
- Klicken Sie mit der rechten Maustaste und wählen Sie Neu starten aus.
- Drücken Sie
- Prüfen Sie, ob der Dienst ausgeführt wird:
sc query observiq-otel-collector- 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).
- Stellen Sie als Betriebssystemnutzer
oracleeine Verbindung zum Oracle-Datenbankhost her. Fahren Sie die Oracle-Instanz und den Listener herunter:
sqlplus / as sysdba <<EOF shutdown immediate; exit EOF lsnrctl stopVerknü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 ioracleStarten Sie den Listener und die Oracle-Instanz:
lsnrctl start sqlplus / as sysdba <<EOF startup; exit EOFWenn 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 omsPrü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.
- Stellen Sie mit SQLplus als SYSDBA eine Verbindung zur Oracle-Datenbank her.
Legen Sie den Parameter
UNIFIED_AUDIT_SYSTEMLOGfest:- 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
TRUEfest, um in die Windows-Ereignisanzeige zu schreiben:
ALTER SYSTEM SET UNIFIED_AUDIT_SYSTEMLOG = TRUE SCOPE=SPFILE;- Legen Sie auf UNIX-/Linux-Systemen den Parameter auf einen
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_SYSTEMLOGfest:ALTER SYSTEM SET UNIFIED_AUDIT_COMMON_SYSTEMLOG = TRUE SCOPE=SPFILE;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.
- Melden Sie sich als
rootbeim Oracle-Datenbankhost an. Ö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.confFügen Sie eine Weiterleitungsregel hinzu, die mit der Einrichtung und Priorität übereinstimmt, die Sie in
UNIFIED_AUDIT_SYSTEMLOGkonfiguriert haben. Wenn Sie beispielsweiseLOCAL7.INFOfestlegen:- 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- So leiten Sie über UDP weiter (passender BindPlane-
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`.
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.logSpeichern 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
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;Prüfen Sie die BindPlane-Agentenlogs auf eingehende Syslog-Nachrichten:
sudo journalctl -u observiq-otel-collector -fPrüfen Sie, ob die Syslog-Meldung das Tag
Oracle Unified Auditmit Schlüssel/Wert-Paaren wieTYPE,DBID,SESID,DBUSER,ACTIONundRETCODEenthä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