Freitag, 04.05.2018

18c: Unified Auditing in SYSLOG und Windows Event Viewer

Die Überwachung spezieller Aktivitäten in IT-Systemen wie Netzwerken, Datenbanken und Betriebssystemen gehört zu den wichtigsten Sicherheitsmaßnahmen in der IT-Sicherheit. Hierbei geht es im Wesentlichen immer um den Nachweis darüber, wer was wann wo und womit innerhalb der IT-Infrastruktur gemacht hat. Die meisten aktiven Komponenten einer IT-Infrastruktur sind in der Lage, bei richtiger Konfiguration, Aktivitäten in den von ihnen zur Verfügung gestellten Diensten zu protokollieren. Die Herausforderung ist dabei, die Aktivitätsprotokolle aus diesen unterschiedlichen IT-Komponenten zu konsolidieren, um sie miteinander korrelieren zu können.

Eine dieser IT-Komponenten ist die Oracle Datenbank. Sie war schon immer in der Lage, Aktivitäten zu protokollieren. Dabei wurden die durch das Oracle Auditing generierten Daten in Tabellen und Betriebssystemdateien geschrieben. Es besteht auch die Möglichkeit, Datenbank-Protokolldaten in das Unix-SYSLOG beziehungsweise Microsoft Event Viewer zu schreiben. Das funktioniert noch bis heute. Zumindest für das traditionelle Oracle Datenbank Auditing. Mit der Oracle Datenbank 12c wurde ein neues Auditing eingeführt, das Oracle Unified Auditing. Oracle Unified Auditing ist ein Datenbank-Auditing neben dem traditionellen (alten) Oracle Auditing. Oracle Unified Auditing ist moderner, flexibler und sicherer als das klassische Oracle Datenbank Auditing. Hierzu existiert bereits der Tipp - Unified Auditing - Das neue Auditing in Oracle Database 12c - , der das Thema genauer darstellt. Das, was Oracle Unified Auditing bisher nicht konnte war, die Auditdaten in das Unix-SYSLOG beziehungsweise Microsoft Event Viewer zu schreiben.

Diese fehlende Integration führte teilweise dazu, Oracle Unified Auditing nicht zu verwenden, obwohl es wesentlich besser zu kontrollieren ist. Ein Grund dafür ist, dass viele Kunden Werkzeuge zur Überwachung von Aktivitäten - sogenannte System Information and Event Management Tools (SIEM) - einsetzen, welche die Protokolldaten sämtlicher IT-Komponenten und Services zentral aus dem Unix-SYSLOG beziehungsweise Microsoft Event Viewer sammeln, Oracle Unified Auditing aber dort die Daten nicht speichern konnte. Diese sinnvolle Integration ist nun ab der Oracle Datenbank 18c für Unified Auditing möglich.

Einen kleinen Wermutstropfen gibt es: nicht alle Informationen die mit Unified Auditing gesammelt werden, werden auch ins SYSLOG / Event Viewer geschrieben.

Folgende Informationen stehen im SYSLOG / Event Viewer zur Verfügung:

SYSLOG/EVENT Viewer Name Spalten im UNIFIED_AUDIT_TRAIL Beschreibung
TYPE AUDIT_TYPE Audit-Typ (Standard, RMAN, ..)
DBID DBID Datenbank ID
SESID SESSION_ID Session ID
CLIENTID CLIENT_IDENTIFIER Identifikation des Session-Clients
ENTRYID ENTRY_ID Laufende Audit ID pro Session
STMTID STATEMENT_ID Laufende Statement ID pro Session
DBUSER DB_USERNAME Datenbankbenutzer, dessen Aktionen überwacht wurden
CURUSER CURRENT_USERNAME Effektiver Benutzer
ACTION ACTION Action Code (Statement Typ)
RETCODE RETURN_CODE ORA-Fehlercode
SCHEMA OBJECT_SCHEMA Name des Objekt-Schemas
OBJNAME OBJECT_NAME Name des betroffenen Objektes

Tabelle 1: Spalten Mapping zwischen SYSLOG und Unified Audit Trail

Um die Daten des Unified Auditing in den SYSLOG oder MS Event Viewer übertragen zu bekommen, sind lediglich zwei Konfigurationen notwendig. Eine Konfiguration wird in der Oracle Datenbank durchgeführt und eine im Betriebssystem.

Zunächst wird die Datenbank vorbereitet. Der ab Oracle DB 18c verfügbare Parameter UNIFIED_AUDIT_SYSTEMLOG wird je nach Ziel (SYSLOG oder MS Event Viewer) wie folgt eingestellt:

  • SYSLOG: Auswahl der SYSLOG-Facility „user: user-level messages“ oder „local[0-7]“, sowie SYSLOG Severity level (NOTICE, INFO, DEBUG, WARNING, ERR, CRIT, ALERT, und EMERG)
  • MW Event Viewer: TRUE (statt dem Default FALSE)

Im folgenden Beispiel (ein UNIX-System) wird der Parameter UNIFIED_AUDIT_SYSTEMLOG“ auf „LOCAL6.NOTICE“ gesetzt:

[oracle@tde]$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 Production on Mon Apr 16 07:50:19 2018
Version 18.1.0.0.0

Copyright (c) 1982, 2017, Oracle.  All rights reserved.


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.1.0.0.0

SQL> show parameter audit

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest 		     string	 /u01/app/oracle/admin/cdb1/adu
						 mp
audit_sys_operations		     boolean	 TRUE
audit_syslog_level		     string
audit_trail			     string	 DB
unified_audit_sga_queue_size	     integer	 1048576
unified_audit_systemlog 	     string

SQL> alter system set UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL6.NOTICE' scope=spfile;

System altered.

Ist das erledigt, muss der System-Administrator (Root) die Konfiguration des SYSLOGs durchführen. In meinem Beispiel verwende ich die Einstellung „local6.notice“ und kopple sie mit der LOG-Datei „/var/log/audit_oracle.log“. Dies wird in der Konfigurationsdatei „/etc/rsyslog.conf“ beziehungsweise „/etc/syslog.conf“ eingetragen. Nach der Änderung nur noch den SYSLOG-Deamon durchstarten und fertig ist die Konfiguration im Betriebssystem.

[root@tde]# vi /etc/rsyslog.conf 

.........
# Everybody gets emergency messages
*.emerg                                                 *

#ORACLE UNIFIED AUDITING
local6.notice                                            /var/log/audit_oracle.log

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
.........


[root@tde]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
[root@tde]#

Zum Schluss die Datenbank durchstarten und Einstellungen überprüfen.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 2113926528 bytes
Fixed Size		    8897920 bytes
Variable Size		  603979776 bytes
Database Buffers	 1493172224 bytes
Redo Buffers		    7876608 bytes
Database mounted.
Database opened.
SQL> show parameter audit

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest 		     string	 /u01/app/oracle/admin/cdb1/adu
						 mp
audit_sys_operations		     boolean	 TRUE
audit_syslog_level		     string
audit_trail			     string	 DB
unified_audit_sga_queue_size	     integer	 1048576
unified_audit_systemlog 	     string	 LOCAL6.NOTICE
SQL> 

Nun sollte auch die entsprechende Auditdatei „/var/log/audit_oracle.log“ vorhanden sein.

[root@tde]# ls -la /var/log/audit_oracle.log 
-rw------- 1 root root 0 Apr 16 08:03 /var/log/audit_oracle.log

Ab sofort werden die oben beschriebenen Auditinformationen, neben der Speicherung im Unified Audit Trail, auch ins SYSLOG geschrieben.

SQL> alter pluggable database pdb1 close;

Pluggable database altered.

Das Ergebnis lässt sich durch einen privilegierten Betriebssystembenutzer (Root) überprüfen.

[root@tde]# vi /var/log/audit_oracle.log

Apr 16 08:10:03 tde Oracle Unified Audit[26869]: LENGTH: '157' TYPE:"4" DBID:"946366664" SESID:"1095071156" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1"
Apr 16 08:20:01 tde Oracle Unified Audit[29337]: LENGTH: '157' TYPE:"4" DBID:"946366664" SESID:"3301646103" CLIENTID:"" ENTRYID:"1" STMTID:"7" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1"

In einer Oracle Multitenant Umgebung muss bei Bedarf der Parameter „UNIFIED_AUDIT_SYSTEMLOG“ in jeder Pluggable-Database gesetzt werden. Hier besteht auch die Möglichkeit, unterschiedliche Syslog-Einstellungen zu verwenden. Ich verwende hier dieselben, wie bei der Container-Datenbank..

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> 
SQL> alter session set container=pdb1;

Session altered.
SQL> show parameter audit

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest 		     string	 /u01/app/oracle/admin/cdb1/adu
						 mp
audit_sys_operations		     boolean	 TRUE
audit_syslog_level		     string
audit_trail			     string	 DB
unified_audit_sga_queue_size	     integer	 1048576
unified_audit_systemlog 	     string

SQL> alter system set UNIFIED_AUDIT_SYSTEMLOG = 'LOCAL6.NOTICE' scope=spfile;

System altered.

SQL> alter pluggable database pdb1 close;

Pluggable database altered.

SQL> alter pluggable database pdb1 open;

Pluggable database altered.

SQL> show parameter audit

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest 		     string	 /u01/app/oracle/admin/cdb1/adu
						 mp
audit_sys_operations		     boolean	 TRUE
audit_syslog_level		     string
audit_trail			     string	 DB
unified_audit_sga_queue_size	     integer	 1048576
unified_audit_systemlog 	     string	 LOCAL6.NOTICE

In meinem Beispiel schreiben jetzt beide Datenbanken (CDB und PDB1) in dieselbe Auditdatei.

[root@tde]# tail -f /var/log/audit_oracle.log
Apr 16 08:10:03 tde Oracle Unified Audit[26869]: LENGTH: '157' TYPE:"4" DBID:"946366664" SESID:"1095071156" CLIENTID:"" ENTRYID:"1" STMTID:"8" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1" 
Apr 16 08:20:01 tde Oracle Unified Audit[29337]: LENGTH: '157' TYPE:"4" DBID:"946366664" SESID:"3301646103" CLIENTID:"" ENTRYID:"1" STMTID:"7" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1" 
Apr 16 08:26:15 tde Oracle Unified Audit[29337]: LENGTH: '158' TYPE:"4" DBID:"2646849021" SESID:"3207252084" CLIENTID:"" ENTRYID:"1" STMTID:"4" DBUSER:"SYS" CURUSER:"SYS" ACTION:"227" RETCODE:"0" SCHEMA:"" OBJNAME:"PDB1" 

Wie bereits erwähnt, werden nur bestimmte Informationen ins SYSLOG geschrieben. Diese Informationen reichen aber aus, um den gesamten Auditeintrag zu identifizieren. Möchte man zum Beispiel wissen, welche ausgeführte Aktion sich hinter dem Action-Code 227 verbirgt, kann das über die Datenbank-View „audit_actions“ abfragen.

SQL> select * from audit_actions where action=227;

    ACTION NAME
---------- ----------------------------
       227 ALTER PLUGGABLE DATABASE
SQL> 

Detaillierte Informationen über die protokollierte Aktivität, lassen sich aus dem Unified Audit Trail der entsprechenden Datenbank auslesen.

Apr 16 09:06:50 tde Oracle Unified Audit[11188]: LENGTH: '156' TYPE:"4" DBID:"946366664" SESID:"2439550631" CLIENTID:"" ENTRYID:"1" STMTID:"1" DBUSER:"SYS" CURUSER:"SYS" ACTION:"100" RETCODE:"1017" SCHEMA:"" OBJNAME:""

Der Action-Code ACTION:"100" verrät uns bereits, dass es sich hier um ein Anmeldeversuch (LOGON) handelte. Der Return-Code RETCODE:"1017" zeigt, dass es ein missglückter Anmeldeversuch war. Um nun alle Informationen dieser Aktivität zu erhalten, benötigen wir dazu die Session-ID SESID:"2439550631" und die Statement-ID STMTID:"1". Mit diesen Werten, können wir den Unified Audit Trail der Datenbank abfragen.

SQL> COLUMN OS_USERNAME FORMAT A25
SQL> COLUMN DBUSERNAME FORMAT A25
SQL> COLUMN CLIENT_PROGRAM_NAME FORMAT A25
SQL> COLUMN AUDIT_TYPE FORMAT A25
SQL> set linesize 1000

SQL> select OS_USERNAME,DBUSERNAME,CLIENT_PROGRAM_NAME,AUDIT_TYPE from unified_audit_trail where sessionid=2439550631 and statement_id=1;

OS_USERNAME		  DBUSERNAME		    CLIENT_PROGRAM_NAME       AUDIT_TYPE
------------------------- ------------------------- ------------------------- -------------------------
oracle			  SYS			    sqlplus@tde (TNS V1-V3)   Standard

SQL> 

Fazit

Mit dieser Unified Auditing SYSLOG Integration wurde eine Lücke geschlossen, die so manchen davon abgehalten hat, Unified Auditing einzusetzen. Es ist zu vermuten, dass es dem einen oder anderen noch zu wenig Audit-Informationen sind, die so ins SYSLOG geschrieben werden (z.B. SQL_TEXT). Auch aus diesem Grund, ist und bleibt es unumgänglich, die gesamten Informationen aus den Unified Audit Trails der Datenbanken zentral einzusammeln. Eine gute Lösung hierzu ist die Verwendung von Oracle Audit Vault und Database Firewall. Im Übrigen besitzt Oracle Audit Vault und Database Firewall eine hervorragende SYSLOG Integration, welche sich über ein Regelwerk gut steuern lässt.

Lizenzhinweis

Dieses Feature steht in allen Editionen ab Oracle Datenbank 18c ohne zusätzliche Lizenzen zur Verfügung.

 
Verfügbarkeit und Download

Weitere Informationen

 

Zurück zur Community-Seite
 

Visit the Oracle Blog

 

Contact Us

Oracle

Integrated Cloud Applications & Platform Services