Oracle DB-Logs erfassen
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
- Melden Sie sich in der Google SecOps-Konsole an.
- Rufen Sie 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 > „Profil“ auf.
- Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
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" /quiet
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.sh
Zusätzliche Installationsressourcen
Weitere Installationsoptionen finden Sie im Installationsleitfaden.
BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren
- 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).
- Suchen Sie die Datei
Bearbeiten Sie die Datei
config.yaml
so: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
Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.
Ersetzen Sie
<customer_id>
durch die tatsächliche Kunden-ID.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
- Stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her.
Fahren Sie die Datenbank mit dem folgenden Befehl herunter:
shutdown immediate
Stoppen Sie den Oracle-Listener-Dienst, indem Sie den folgenden Befehl eingeben:
lsnrctl stop
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
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
Stellen Sie mit SQLplus eine Verbindung zur Oracle-Datenbank her.
Starten Sie die Datenbank mit dem folgenden Befehl neu:
startup
Starten Sie den Oracle-Listenerdienst mit dem folgenden Befehl neu:
lsnrctl start
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
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';
Prüfen Sie, ob der Befehl eine Zeile mit dem VALUE „TRUE“ zurückgibt.
Syslog für die Oracle-Datenbank konfigurieren
- Melden Sie sich bei der Oracle-Instanz an.
Öffnen Sie die folgende Datei mit
vi
:vi ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
Geben Sie die folgenden Befehle für die Syslog-Konfiguration ein:
*.audit_trail='os' *.audit_syslog_level='local0.info'
Prüfen Sie, ob der Syslog-Daemon auf dem Oracle-Host so konfiguriert ist, dass das Audit-Log weitergeleitet wird.
Öffnen Sie unter Red Hat Enterprise die folgende Datei
/etc/syslog.conf
mitvi
und geben Sie die folgende Zeile ein:local0.info @ <bindplane-ip>:514
Speichern und schließen Sie die Datei:
:wq
Geben Sie unter Red Hat Enterprise den folgenden Befehl ein, um die Syslog-Konfiguration neu zu laden:
kill -HUP /var/run/syslogd.pid
Stellen Sie eine Verbindung zu SQLplus her und melden Sie sich als sysdba an, um den Neustart auszuführen:
sys as sysdba
Fahren Sie die Datenbank mit dem folgenden Befehl herunter:
shutdown immediate
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