Wie sicher sind Ihre Daten in der DB? Sven Vetter Technology Manager Principal Consultant, Partner DOAG Konferenz Nürnberg, 16.11.2010 Basel Bern Lausanne Zürich Düsseldorf Frankfurt/M. Freiburg i. Br. Hamburg München Stuttgart Wien
Einleitung Oracle bietet innerhalb der Datenbank diverse Features, um die Datensicherheit zu gewährleisten ú VPD, RLS, ASO, TDE, DBV, AV,... J Ein Teil ist nur in der Enterprise Edition vorhanden, ein Teil zusätzlich lizenzpflichtig Ausserdem gibt es von Oracle noch weitere, externe Produkte Und natürlich auch Dritthersteller... Für was brauche ich was? Dies soll an einem Beispiel gezeigt werden Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 2
Ziel (1) Folgende Tabelle im Schema BANK existiert: DESC accounts Name Null? Type ---------------- -------- ---------------- ACC_NR VARCHAR2(4) MANDANT VARCHAR2(2) ACC_NAME VARCHAR2(20) ACC_BALANCE VARCHAR2(10) SELECT * FROM accounts; ACC_ MA ACC_NAME ACC_BALANC ---- -- -------------------- ---------- 1000 10 Mr. Rich 1000000000 1001 20 Mr. VeryRich 9999999999 Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 3
Ziel (2) Folgende Tabelle im Schema BANK existiert: SELECT * FROM accounts; ACC_ MA ACC_NAME ACC_BALANC ---- -- -------------------- ---------- 1000 10 Mr. Rich 1000000000 1001 20 Mr. VeryRich 9999999999 Smith Adams Hr. Smith soll Mandant 10, Hr. Adams soll Mandant 20 lesen dürfen Ansonsten soll niemand diese Daten lesen dürfen innerhalb und ausserhalb der Datenbank Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 4
Vorgehen Und nun? Wie könnte sich Zugriff auf diese Tabelle geschaffen werden? Kleines Brainstorming J Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 5
Owner Problem: ú Schemaowner hat immer Zugriff auf seine Tabellen Lösung: ú Meist wird der Schemaowner für Releaseprozesse benötigt ú Kann deshalb nicht gesperrt werden ú In einem securitykritischem Umfeld sollte dann mit dem 4-Augen- Prinzip gearbeitet werden ú Eine Organisation (DBAs) setzt eine Hälfte des Passworts, eine weitere Organisation (Datenowner) setzt die andere Hälfte ú Nur gemeinsam können sie sich dann anmelden und sich gegenseitig überwachen Alternativen: ú Proxyuser, Database Vault, Auditing Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 6
Direkte Grants Problem: ú Benutzer mit direkten Grants können die Daten sehen Lösung: ú Kontrollieren und regelmässig überwachen: SELECT p.grantee, p.privilege, p.grantable FROM dba_tab_privs p, dba_users u WHERE owner='bank' AND table_name='accounts' AND u.username=p.grantee; GRANTEE PRIVILEGE GRA -------------- -------------------------- --- ADAMS SELECT NO SMITH SELECT NO ú Wäre hier ok, da ADAMS und SMITH die Daten lesen dürfen, aber es sollte mit einem Rollenkonzept gearbeitet werden Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 7
Grants über Rollen (1) Problem: ú Grants können nicht nur direkt an die Benutzer erteilt werden Lösung: ú Kontrollieren und regelmässig überwachen: SELECT p.grantee, p.privilege, p.grantable FROM dba_tab_privs p, dba_roles r WHERE owner='bank' AND table_name='accounts' AND r.role=p.grantee; GRANTEE PRIVILEGE GRA ----------- ---------------------------------------- --- RO_ACCOUNTS SELECT NO ú OK, wer ist aber in der Rolle RO_ACCOUNTS? Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 8
Grants über Rollen (2) Problem: ú Wenn ich die Rollen kenne, muss ich auch die Benutzer wissen Lösung: ú Kontrollieren und regelmässig überwachen: SELECT p.grantee, p.granted_role, p.admin_option FROM dba_role_privs p, dba_users u WHERE p.granted_role='ro_accounts' AND u.username=p.grantee; GRANTEE GRANTED_ROLE ADM --------------- ------------------------------ --- SYS RO_ACCOUNTS YES MILLER RO_ACCOUNTS NO ú Frau Miller sollte die Daten aber nicht lesen! ú Und was ist mit SYS? Muss auch weg! Sonst Probleme mit Database Vault! Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 9
Grants über Rollen (3) Problem: ú Es gibt auch geschachtelte Rollen (beliebig tief...) Lösung: ú (Rekursiv) kontrollieren und regelmässig überwachen: SELECT p.grantee, p.granted_role, p.admin_option FROM dba_role_privs p, dba_roles r WHERE p.granted_role='ro_accounts' AND r.role=p.grantee; GRANTEE GRANTED_ROLE ADM -------------- ------------------------------ --- RO_ACCOUNTS1 RO_ACCOUNTS NO ú Jetzt muss kontrolliert werden, wer in der Rolle RO_ACCOUNTS1 ist (Benutzer) und eventuell auch weitere Rollen Gibt es noch etwas anderes als Benutzer und Rollen? Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 10
Grants an PUBLIC (1) Problem: ú PUBLIC ist nicht eine richtige Rolle (steht nicht in dba_roles) Lösung: ú Kontrollieren und regelmässig überwachen: SELECT p.grantee, p.privilege, p.grantable FROM dba_tab_privs p WHERE owner='bank' AND table_name='accounts' AND p.grantee NOT IN (SELECT username FROM dba_users UNION ALL SELECT role FROM dba_roles); GRANTEE PRIVILEGE GRA ----------- --------------------------- --- PUBLIC SELECT NO ú Ganz schlimm! Jeder darf unsere Tabelle lesen! REVOKE SELECT ON accounts FROM PUBLIC; Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 11
Grants an PUBLIC (2) Problem: ú Auch eine Rolle kann an PUBLIC erteilt werden Lösung: ú (Rekursiv) kontrollieren und regelmässig überwachen: SELECT p.grantee, p.granted_role, p.admin_option FROM dba_role_privs p WHERE p.granted_role='ro_accounts' AND p.grantee NOT IN (SELECT username FROM dba_users UNION ALL SELECT role FROM dba_roles); GRANTEE GRANTED_ROLE ADM ----------- -------------- --- PUBLIC RO_ACCOUNTS NO ú Ganz schlimm! Jeder darf unsere Tabelle lesen! REVOKE ro_accounts FROM PUBLIC; Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 12
Grants über Views Problem: ú Benutzer kann Tabelle nicht lesen, aber dafür eine View Lösung: ú Kontrollieren der anhängigen Objekte und regelmässig überwachen: SELECT owner, name, type FROM dba_dependencies WHERE referenced_owner='bank' AND referenced_name='accounts'; OWNER NAME TYPE --------------- ---------------------- ------------------ BANK V_ACCOUNTS VIEW ú Hier sind dann auch PL/SQL-Programme (einschliesslich Trigger), Object Types,... zu finden ú "Gehe zurück auf LOS" à für diese Objekte ist wieder der gesamte bisherige Check zu machen Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 13
Grants über PL/SQL mit dynamischem SQL (1) Problem: ú Benutzer kann Daten über ein PL/SQL-Programm lesen, obwohl dieses nicht in dba_dependencies aufgeführt ist: exec bank.read_accounts 1000 Mr. Rich 1000000000 ú Beispiel: CREATE OR REPLACE PROCEDURE READ_ACCOUNTS AS vno VARCHAR2(10); vname VARCHAR2(10); vbalance VARCHAR2(10); BEGIN EXECUTE immediate 'select acc_nr, acc_name, acc_balance from accounts where acc_nr=:1' INTO vno, vname, vbalance USING '1000'; dbms_output.put_line(vno ' ' vname ' ' vbalance); END READ_ACCOUNTS; Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 14
Grants über PL/SQL mit dynamischem SQL (2) Lösung: ú Diese Art von PL/SQL kann nur der Schemaowner erstellen oder jemand, der direkte Grants hat (bzw. jeder, wenn es an PUBLIC erteilt wurde) ú Diese Benutzer müssen (manuell) kontrolliert werden ú Eine Full-Text-Suche auf "ACCOUNTS" in dba_source reicht nicht! ú Bsp.:... vdummy:='unts'; EXECUTE immediate 'select acc_nr, acc_name, acc_balance from acco' vdummy ' where acc_nr=:1'... ú Dieser Code sollte aber bei einem einfachen Codereview gefunden werden, da hier kein dynamisches SQL notwenig ist Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 15
Virtual private database (1) Problem: ú ADAMS und SMITH dürfen zwar die Daten lesen, aber nicht alle Zeilen (nur ihren Mandant) Lösung: ú Virtual private database (VPD) ú Nur in Enterprise Edition enthalten ú Auch genannt Row Level Security (RLS) ú Auch genannt Security Policies ú Eine PL/SQL-Funktion erzeugt eine Zeichenkette, welche automatisch als WHERE-Bedingung an jeden Befehl gehangen wird Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 16
Virtual private database (2) Policy Funktion: CREATE OR REPLACE FUNCTION acc_restrict( schema IN VARCHAR2, tab IN VARCHAR2) RETURN VARCHAR2 AS BEGIN IF sys_context('userenv','session_user')='smith' THEN RETURN 'mandant=10'; ELSIF sys_context('userenv','session_user')='adams' THEN RETURN 'mandant=20'; ELSE RETURN '1=2'; END IF; END acc_restrict; Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 17
Virtual private database (3) Binden an Tabelle: BEGIN dbms_rls.add_policy ( object_schema =>'BANK', object_name =>'ACCOUNTS', policy_name =>'ACC_POLICY', function_schema=>'bank', policy_function=>'acc_restrict' ); END; / COMMIT; Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 18
Virtual private database (4) Test: connect smith SELECT * FROM bank.accounts; ACC_ MA ACC_NAME ACC_BALANC ---- -- -------------------- ---------- 1000 10 Mr. Rich 1000000000 connect adams SELECT * FROM bank.accounts; ACC_ MA ACC_NAME ACC_BALANC ---- -- -------------------- ---------- 1001 20 Mr. VeryRich 9999999999 connect system SELECT * FROM bank.accounts; no rows selected Cool gilt auch für DBAs Oder? Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 19
Virtual private database (5) Test mit DBA: GRANT exempt access policy TO system; Grant succeeded. SQL> SELECT * FROM bank.accounts; ACC_ MA ACC_NAME ACC_BALANC ---- -- -------------------- ---------- 1000 10 Mr. Rich 1000000000 1001 20 Mr. VeryRich 9999999999 Alternativen: ú Mandantenfähige Views ú Zugriff über PL/SQL-API ú Für DBAs: Database Vault Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 20
Daten im Datenfile Problem: ú In den Datenfiles sind die Daten im Klartext ú Ein Benutzer mit Berechtigungen auf dem Server kann sie lesen Lösung: ú Verschlüsselung auf Spaltenebene oder (ab Oracle 11g) auf Tablespace-Ebene (Transparent Data Encryption - TDE) ú Benötigt Advanced Security Option (und damit Enterprise Edition) ú Benötigt Rechenleistung ú Wallet Management muss geklärt sein Alternativen: ú Verschlüsselung in der Applikation ú Verschlüsselung per Appliance im Netzwerk Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 21
Daten im Backup Problem: ú Sind die Datenfiles nicht verschlüsselt, ist auch das Backup unverschlüsselt ú Ein Benutzer mit Berechtigungen auf dem Backupsystem kann sie lesen Lösung: ú Backupverschlüsselung ú Benötigt Advanced Security Option (und damit Enterprise Edition) ú Direktes verschlüsseltes Backup auf Tape à Oracle Secure Backup ú Benötigt Rechenleistung Alternativen: ú Verschlüsselung in der Applikation ú Verschlüsselung der Datenfiles ú Verschlüsselung per Backupsystem Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 22
Daten im Netzwerk Problem: ú Im Netzwerk sind die Daten im Klartext ú Ein Benutzer mit Berechtigungen im Netzwerk kann sie lesen Lösung: ú Netzwerkverschlüsslung (symmetrisch oder SSL) ú Benötigt Advanced Security Option (und damit Enterprise Edition) ú Benötigt Rechenleistung Alternativen: ú Verschlüsselung in der Applikation Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 23
Schutz vor dem DBA (1) Problem: ú Ein Datenbankadministrator (oder natürlich auch OS-Admin) kann sich Zugang zu den Daten verschaffen Lösung: ú Einsatz von Oracle Database Vault ú Lizenzpflichtige Option, geht also nur mit Enterprise Edition Umsetzung: ú Neue Rolle für Accountmanagement (damit DBA keine Passwörter ändern kann) ú Neue Schutzart "Realms", um die ANY-Privilegien des DBAs einzuschränken ú (Möglicher) Schutz vor SYSDBAs, aber mit diversen Nachteilen (z.b. braucht RMAN SYSDBA-Connects) Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 24
Schutz vor dem DBA Database Vault - Umsetzung Realm anlegen und Objekte zuweisen BEGIN dbms_macadm.create_realm( realm_name => 'Protect Banking Accounts', description => 'Realm for accounts table', enabled => 'Y', audit_options => 1); END; / BEGIN dbms_macadm.add_object_to_realm( realm_name => 'Protect Banking Accounts', object_owner => 'BANK', object_name => 'ACCOUNTS', object_type => 'TABLE'); END; / Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 25
Schutz vor dem DBA Database Vault - Test Zugriff als SYSTEM connect system SELECT * from bank.accounts; SELECT * from bank.accounts * ERROR at line 1: ORA-01031: insufficient privileges Im Database Vault Monitor: Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 26
Schutz vor dem DBA Database Vault Beachten! Segregation of duties unbedingt notwendig! Task Betrieb der DB und der Instanz (Erzeugen, Parametrisieren, Instanztuning, Patching, Updates, Tablespace-Management, ) Security Management Anlegen von Realms, Definition der zu schützenden Objekte Zuteilen der Benutzer zu Realms Anlegen von applikatorischen Rollen Zuordnen von Objektprivilegien zu Rollen/Benutzern Verantwortlich Account Management + Zuweisen von Rollen Anlegen von technischen Rollen, Initiales zuordnen von Systemprivilegien zu Rollen (nicht applikatorische Rollen!) Überwachung (Auditing) TechEvent: Compliance im Oracle Umfeld 27
Schutz vor dem DBA Alternativen ú Verschlüsselung der Daten vor der Datenbank In der Applikation Per Network Device (z.b. SafeNet Database Encryption) ú Datenbank Firewalls Secerno (neuester Zukauf von Oracle) Imperva Database Firewall Oder aber der Entscheid, dass man dem DBA den Zugriff nicht verbieten will, diesen aber überwachen will ú Oracle Standard Auditing (Auditing SYS Operations einschalten!) ú Oracle Audit Vault ú Sentrigo Hedgehog Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 28
Auditing (1) Problem ú Datenbank Administrator kann Daten manipulieren Lösung ú Zentrales Auditing, z.b. per Audit Vault ú Externes Produkt, eigene DB (DWH Schema), Agents Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 29
Auditing (2) Problem ú Im Auditprotokoll steht sehr oft als Oraclebenutzer SYS und als OS- Benutzer oracle ú Es ist nicht zu erkennen, wer bestimmte Operationen wirklich durchgeführt hat Lösung ú Es ist mit persönlichen Benutzern zu arbeiten ú Die Anmeldung am OS als Benutzer oracle ist zu sperren ú Befehle mit den Privilegien von oracle (z.b. Softwareinstallationen) sind per SUDO durchzuführen und aufzuzeichnen ú Auch an der Datenbank muss sich per persönlichen Benutzer angemeldet werden (nicht "/ as sysdba" aber durchaus, wenn notwendig mit "username/password as sysdba") Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 30
Auditing (3) Problem ú Bei Oracles Standardauditing sind keine Wildcards und negierenden Bedingungen möglich (z.b. alle Tabellen, die mit ACC% starten, aber nicht, wenn ADAMS und SMITH darauf zugreifen) ú D.h. es muss pro Benutzer und pro Objekt das Auditing definiert werden à sehr schwierig bei vielen Benutzern und vielen Objekten Lösung ú Tools von Fremdherstellern, z.b. Sentrigo Hedgehog Leicht zu installieren und zu konfigurieren Durch SQL-ähnliche Bedingungen (like, not in,...) sehr flexibel Gute Auswertungsmöglichkeiten Kann noch mehr als Auditing Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 31
Auditing Sentrigo Hedgehog (1) Definition der Regeln Actions und Datenbanken Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 32
Auditing Sentrigo Hedgehog (2) Auswertungen Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 33
Fazit Es gibt viel Produkte/Optionen/Befehle, die den Zugriff auf sensitive Daten limitieren oder auditieren Eins davon allein reicht im Normalfall nicht aus Deswegen muss nach einer Risikoanalyse die richtige Kombination gefunden werden Das ist nicht immer leicht... Und bis jetzt haben wir nur die Datenbank betrachtet, nicht Application Server, Applikationen ("Export to Excel"),... Aber wir unterstützen Sie gern J Trivadis AG: Wie sicher sind Ihre Daten in der Datenbank? 34
Vielen Dank!? www.trivadis.com Basel Bern Lausanne Zürich Düsseldorf Frankfurt/M. Freiburg i. Br. Hamburg München Stuttgart Wien