Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:oracle_dbsat

Die Oracle Datenbank mit DBSAT analysieren - Personenbezogene Daten über das DD aufspüren

DBSAT ist ein Database Security Scanner für die Oracle Datenbanken ( ab der DB Version 10.2.0.5) und steht als Kommando Zeilen Werkzeug zur Verfügung.

Das Tool sammelt Security relevanten Informationen aus einer Datenbank Umgebung und prüft die Einstellungen der DB gegen über einem programmiert hinterlegten Regelwerk und bewertet im Anschluss die Ergebnisse der Tests.

Die Abfragen basieren auf Best Practise und Security Tips von Oracle, komplette Liste wie CIS werden aber nicht abgedeckt.

Mit Hilfe dieser Tests können dann Empfehlungen ausgesprochen werden mit denen Sicherheitsprobleme proaktiv behoben, bzw. erkannt/bewertet, werden können.

Neu in der Version 2 ist auch das Erkennen von sensitiven/sensiblen Daten, wie Daten, die unter die GDPR fallen, aus Datenstrukturen über das Data Dictionary (DD). Als Basis dient ein erweiterbares Patternfile auf Basis regulärer Ausdrücke, d.h. es werden nur Definitionen im DD angeschaut, Daten ansich werden nicht anaylsiert!

Die gesammelten Daten liegen im JSON Format vor und können dann in „hübschen“ Berichten Management tauglich aufgearbeitet werden.

Was kann das Tool überprüfen und bewerten:

  • Datenbank Parameter
  • Listener Setup (nur Linux)
  • Audit Einstellung der DB
  • DB Schemas (Benutzerkonten), deren Berechtigungen und zugeordnete Rollen
  • Berechtigungs- und Zugriffssteuerung
  • Datei-Berechtigungen (nur Linux)
  • Datenverschlüsselung
  • Potentiele Sensitive Daten über Spaltennamen im DD suchen erkennen

Siehe auch ⇒ http://www.oracle.com/technetwork/database/security/dbsat/overview/index.html

Die Komponenten von DBSAT

Collector (für OS Abfragen muss das Tool local auf dem DB Server gestartet werden, SQL*Plus Script)

  • DB mit SQL Abfragen auf das DD testen, OS analysieren
  • Die gelesenen Daten in eine JSON Datei schreiben

Reporter (muss nicht auf dem DB Server laufen, Python ab 2.6)

  • Die eingesammelten Daten auf Basis eines Regelwerks auswerten
  • Ergebnisse in verschiedenen Formaten ausgeben, wie HTML, Excel, JSON und Text

Discoverer (muss nicht auf dem DB Server laufen, ab Java 1.6)

  • Mit Hilfe eines Regelwerks mit SQL Abfragen auf das Data Dictionary sensitive Daten suchen
  • Bericht mit Informationen an “Sensitive Data” in HTML oder CSV Format erzeugen

Unterstütze Betriebsysteme:

  • Solaris x64/Sparc64
  • Linux
  • HP UX
  • Windows ( keine OS Abfragen)

Installation

Der Scanner steht kostenlos für alle Oracle Kunden mit Zugang zum Oracle Support Portal unter der Support Node Oracle Database Security Assessment Tool (DBSAT) (Doc ID 2138254.1) zur Verfügung.

Um auch das Betriebssystem der DB Umgebung in Betracht ziehe zu können, muss der Scanner auf der Datenbank Maschine installiert werden (Nur Linux/Unix).

Voraussetzungen für den vollständigen Funktionsumfang sicherstellen
  • Installation von Python Version 2 (>= 2.6 ) für die Reporter Komponente
  • Ein Java Runtime Environment (JRE) ab 1.6 für die Discoverer Komponente
  • zip Kommando (Unter Windows einfach die mit der DB gelieferten Version unter $ORACLE_HOME/bin verwenden, wird mit gesetzten Oracle Home automatisch erkannt)
  • unzip Kommando (Unter Windows einfach die mit der DB gelieferten Version unter $ORACLE_HOME/bin verwenden,wird mit gesetzten Oracle Home automatisch erkannt)
Software bereitstellen
  • Zip File von Support Portal herunterladen
  • In ein passendes Verzeichnis entpacken wie „C:\oracle\product\dbsat“
    mkdir C:\oracle\product\dbsat
    $ORACLE_HOME\bin\unzip dbsat.zip –d C:\oracle\product\dbsat
  • Sicherstellen, dass niemand diese Verzeichnis einfach manipulieren kann, dies ist ein weiterer guter Ort um Schadcode in einer Oracle Umgebung zu hinterlegen .-) ,
    • Dazu Windows Rechte nützen und Konfiguration auf Read Only setzen etc.
DB User für die Analyse bereitstellen

In einer realen Umgebung wird selten eine SYS User Account so einfach zur Verfügung stehen.

Ein eigenständiger Account, zum Beispiel sehr sinnvoll, wenn der Scan regelmäßig erfolgen soll, benötigt die folgenden Rechte:

sqlplus / AS sysdba
 
CREATE USER SECDBA IDENTIFIED BY "<this_is_a_real_secret_pasword_like_secdba>";
 
GRANT CREATE SESSION TO SECDBA ;
 
-- only read rights
GRANT select_catalog_role TO SECDBA ;
GRANT SELECT ON sys.registry$history TO SECDBA ;
 
-- 11g 
GRANT SELECT ON sys.dba_users_with_defpwd TO SECDBA ;
 
-- 12c only
GRANT SELECT  ON audsys.aud$unified TO SECDBA ;
GRANT audit_viewer      TO SECDBA ;
GRANT capture_admin     TO SECDBA ;
 
-- Data Vault
GRANT DV_SECANALYST     TO SECDBA ;

Einsatz

In drei Schritten erfolgt der Einsatz des Werkzeuges

  • Collect - Einsammeln der Informationen des Zielsystems
  • Report - Bericht über die Ergebnisse
  • Discover - Sensible Daten finden

siehe auch in der Dokumentation ⇒ https://docs.oracle.com/cd/E93129_01/SATUG/toc.htm#SATUG-GUID-999F5696-F368-4E54-86DB-DEFC593B2042

Collect

Daten aus dem Zielsystem sammeln

Aufruf mit .\dbsat collect <db_connection> <ausgabedatei>, wie:

# Zuvor ORACLE_HOME Variable setzen!
# Dann wird auch zip/unzip gefunden!
 
cd C:\oracle\products\dbsat
 
.\dbsat collect secdba@oragpi collect_25_05_2018_db_gpi
 
 
Connecting to the target Oracle database...
 
...
 
Enter password:
....
 
Setup complete.
SQL queries complete.
OS Commands Skipped.
 
BEGIN
*
ERROR at line 1:
ORA-20002: Complete without OS Commands.
ORA-06512: at line 4
 
 
....
 
DBSAT Collector completed successfully.
 
Calling c:\oracle\products\12.2.0.1\dbhome_1\bin\zip.exe to encrypt collect_28_05_2018_db_gpi.json...
 
Enter password:
Verify password:
  adding: collect_28_05_2018_db_gpi.json (200 bytes security) (deflated 90%)
zip completed successfully.

Dieser Befehl erzeugt einen json Datei, diese wird ( wenn nicht der Schalter -n angegben wird), password geschützt gezipt , diese Daten können nun im Anschluss ausgewertet werden.

Die Fehlermeldung „ORA-20002: Complete without OS Commands.“ ist etwas seltsam, evtl. unter Windows nur DB???

Nach Analyse des Codes ist schnell klar das nur Linux unterstützt wird (siehe Datei sat_collector.sql Zeile 908)

Wie ist das ganze umgesetzt?

Die Report Komponente besteht aus einem SQL File „sat_collector.sql“, wird das Batch Programm dbstat aufgerufen, wird im Hintergrund SQL*Plus gestartet und die SQL Datei wird abgearbeitet. Erkennt das Skript, das es sich um eine Linux Umgebung handelt wird mit dem SQL*Plus Host Befehl und perl die Umgebung abgefragt.

Das heißt aber im Umkehrschluss das eigene Regeln oder Katalog von Regeln wie der CIS Katalog komplett per SQL abgebildet dort hinterlegt werden müssen.


Report

Aufruf mit .\dbsat report <ausgabedatei>

dbsat report collect_25_05_2018_db_gpi.html

Error: Python version 2.6 or later is required.

echo $ENV:PATH
 
# add the missing path
 
set-item -path env:PATH -value "$ENV:PATH;C:\Python27"
 
python -V
Python 2.7.11

Nun erneut starten, Python wird nun erkannt:

# Zuvor ORACLE_HOME Variable setzen!
# Dann wird auch zip/unzip gefunden!
 
.\dbsat report .\collect_28_05_2018_db_gpi

Es werden html,txt, xlsx Ausgabeformate mit dem Ergebnissen erzeugt.

Wie ist das ganze umgesetzt?

Mit Hilfe des Python Scripts „sat_reporter.py“ wird im ersten Schritt erzeugte JSON Datei ausgelesen und ausgewertet, die Regeln dazu sind im Code hinterlegt, d.h. eigene Regeln lassen sich nur schwer umsetzen.



Discover - Personenbezogene / sensible Daten aufspüren ( DBSAT Version 2)

Mit der Discover Option lassen sich personenbezogene Daten in der DB aufspüren bzw. „erahnen“.

Die Annahme dahinter ist, das sich personenbezogene Daten auch in Spalten befinden, deren Name etwas mit dem Inhalt der Spalte zu tun hat.

Das klappt aber nur gut, wenn sich der Entwickler sprechende Name für die Spalten hat einfallen lassen. Ist das Modell aber nur sehr abstrakt definiert, wird es schwierig mit diesem Ansatz.

Architektur:

 Der Oracle DBSAT Security Scanner

Ablauf:

 Ablauf Einsatz des DBSAT Security Scanners

Vorbereiten

Konfigurationsdatei bearbeiten

Oracle liefert ein Template mit aus, auf Basis diese Templates kann eine eigene Konfiguration erstellt werden.

Konfigurieren der DB Verbindung in dbsat.config unter DBSAT_HOME/Discover/conf:

cd C:\oracle\products\dbsat\Discover\conf
 
cp sample_dbsat.config dbsat.config
 
vi dbsat.config
  # in der DB Section die DB Connection Daten eintragen
Patterndatei konfigurieren

Mit Hilfe dieser Pattern wird versucht sensitive Daten in der DB über Spaltenname und Kommentare zu finden.

Oracle lieft bereits recht umfangreiche Patten (in Englisch mit), diese Datei kann dann auf eigene Anforderungen erweitert werden.

Ein Beispiel Eintrag

# Example
[FULL_ADDRESS]
COL_NAME_PATTERN = ^(?!IP|MAC|EMAIL).*ADDRESS$|^ADDRESS$  
COL_COMMENT_PATTERN = ^(?!IP|MAC|EMAIL).*ADDRESS$
SENSITIVE_CATEGORY = PII - Address

Wie können wir das auf unsere Anforderungen anpassen?

Die Pattern basieren auf Regulären Ausdrücken (mehr dazu z.B. unter Reguläre Ausdrücke in der Oracle Datenbank in SQL verwenden , die möglichen Regel für die Pattern finden sich in der Online Hilfe von DBSAT unter https://docs.oracle.com/cd/E93129_01/SATUG/toc.htm#SATUG-GUID-66685BC1-1306-417B-82C4-D28EDC895FF3

Die Pattern sind nach folgenden Muster aufgebaut:

  • Name des Pattern in [] Klammern
  • Pattern für Spalten COL_NAME_PATTERN
  • Pattern für Kommentare auf Tabellen Spalten COL_NAME_PATTERN
  • Zuordnung des Pattern in eine Kategorie

Pattern Namen müssen eindeutig über die ganze Datei sein!

Die Risiko Einschätzung für die Kategorie erfolgt wieder in der zentralen Konfigurationsdatei dbsat.conf:

##########################################################
 
#Sensitive Categories groups related sensitive data and assigns risk levels.
 
#Risk_Levels:
#High Risk
#Medium Risk
#Low Risk
 
#Assign Risk_Level to each Sensitive Category:
#Following are examples of the Sensitive Category = Risk_Level assignment:
 
[Sensitive Categories]
	PII = High Risk
	PII - Address = High Risk
	PII - IDs = High Risk
	PII - IT Data = High Risk
	PII-Linked = Medium Risk
	PII-Linked - Birth Details = Medium Risk
	Job Data = Medium Risk
	Financial Data - PCI = High Risk
	Financial Data - Banking = Medium Risk
	Health Data = Medium Risk

PIIPersonally Identifiable Information

Je nach Kategorie wird dann später im Bericht eine andere Farbe verwandt.

Tabellen wie die "TOAD_PLAN_TABLE" herausfiltern

Tabellen mit Spalten wie „POSITON“ werden auch gefunden wenn diese Spalte nichts mit sensitiven Daten zu tun hat, soll zum Beispiel die „TOAD_PLAN_TABLE“ komplett ignoriert werden, kann dies über die Datei dbsat.config konfiguriert werden.

Dateinamen der Exclude Liste in der dbsat.config hinterlegen:

EXCLUSION_LIST_FILE = ignore_tables.ini

Datei anlegen, Schema Name ist leider Pflicht? (Laut Doku im Netz sollte auch ein Tabellenname ohne Schema erkannt werden, allerdings ist das in der Erklärung in der Konfig Datei anders beschrieben).

ignore_tables.ini

EXCLUSION_LIST_FILE contains schemas, tables and columns to be excluded from the scan
#This file contains one entry per line.
#An entry is presented as SchemaName OR 
#                         SchemaName.TableName OR
#                         SchemaName.TableName.ColumnName
#To exclude all tables in that schema include SchemaName
#To exclude all columns in that table include SchemaName.TableName
#To exclude a specific column from scan, list SchemaName.TableName.ColumnName
 
GPI.TOAD_PLAN_TABLE
GPI.HTMLDB_PLAN_TABLE
HR.TOAD_PLAN_TABLE
Aufrufen

Aufruf mit .\dbsat discover –c <konfig datei> <ausgabe>

 set-item -path env:JAVA_HOME -value "C:\Program Files\Java\jre1.8.0_144"
 
.\dbsat discover -c .\Discover\conf\dbsat.config discover_gpi_db_28_05_2018
 
..
 
 
Enter username: secdba
Enter password:
DBSAT Discover ran successfully.
.
Calling c:\oracle\products\12.2.0.1\dbhome_1\bin\zip.exe to encrypt the generated reports
.
Enter password:
Verify password:
  adding: discover_gpi_db_28_05_2018_discover.html (200 bytes security) (deflated 82%)
  adding: discover_gpi_db_28_05_2018_discover.csv (200 bytes security) (deflated 79%)
zip completed successfully.

Mit dem Schalter „-n“ kann auf das zippen mit Verschlüsselung verzichtet werden.

Problem: Error: Environment variable JAVA_HOME is NOT set.

Zuvor setzen mit z.B. „set-item -path env:JAVA_HOME -value „C:\Program Files\Java\jre1.8.0_144“!

Bericht auswerten

Der Bericht enthält dann folgende Informationen:

Zusammenfassung:

 Oracle DBSAT report for sensitive data inside the DB Summary

Übersicht über die Schemas mit sensitiven Daten:

 Oracle DBSAT report for sensitive data inside the DB

Die Anzahl der Datensätze wird wohl aus der Statistik auf den Tabellen ermittelt, ein select count(*) würde sonst wohl sehr lange dauern können.

Details dazu:

 Oracle DBSAT report for sensitive data inside the DB details



Fazit

Ein interesantes Werkzeug um Datenbanken im Unternehmen auf einen gewissen Standard zu heben.

Besonders Kunden ohne Enterprise Manager und entsprechende Wartungspacks können das Werkzeug gut nützen, ist der EM im Einsatz sollte dieser auch für diese Aufgaben genützt werden, dort ist das deutlich mächtiger implementiert.

Pro:

  • Einfach und komfortabel im Einsatz ohne Installationsaufwand
  • Kostenlos für Kunden mit gültigen Oracle Support Vertrag
  • Einheitlich alle Datenbanken überwachen , übersichtliches Reporting mit den wichtigsten Grundvoraussetzungen
  • Analyse des DD mit regulären Ausdrücken erweiterbar

Con:

  • Standard Sicherheitsregeln nicht als Pattern hinterlegt, nicht einfach selber zu erweitern

Alernative Scanner, wie der von Herr Kornbrust (RepSCAN) sind zwar noch sehr viel mächtiger, aber dafür auch kostenpflichtig!

Gerade für das Suchen nach Spalten mit evlt. persönlichen Daten in einzelnen Datenbanken ist das Tool in der Praxis gut nutzbar.



Quellen

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
"Autor: Gunther Pipperr"
dba/oracle_dbsat.txt · Zuletzt geändert: 2018/06/25 22:46 von Gunther Pippèrr