www.syntegris.de DATA REDACTION live © SYNTEGRIS INFORMATION SOLUTIONS GMBH PROJEKTBERICHT Oracle Data Redaction in einem produktiven Datenbanksystem Tobias Bräutigam – Security, Netzwerk & Oracle Mike Schliephorst – Java EE & Oracle Entwicklung © SYNTEGRIS INFORMATION SOLUTIONS GMBH AGENDA Von der Vision zum Wirkbetrieb • Typische Herausforderungen • Überraschende Lösungen • Implementierung von Data Redaction in einem Produktiv-System © SYNTEGRIS INFORMATION SOLUTIONS GMBH ANFORDERUNGEN • Mandantenfähigkeit und Datenmaskierung für NearshoreNutzer • Sensible Daten dürfen die Datenbank nicht verlassen • Katalogisierung sensibler Daten • Keine Änderung an bestehender Geschäftslogik und der Prozesse • Buzzwort: Data Leakage Prevention © SYNTEGRIS INFORMATION SOLUTIONS GMBH ANFORDERUNGEN - ZIELSYSTEM © SYNTEGRIS INFORMATION SOLUTIONS GMBH BESTANDS-SYSTEM • • • • • Drei physikalische Oracle 12c EE Datenbankserver Microsoft ASP-Frontend mit IIS ˜ 900 Prozeduren ˜ 250 Datenbankpackages ˜ 500.000 PL/SQL LOC © SYNTEGRIS INFORMATION SOLUTIONS GMBH PROOF OF CONCEPT Beistellung der Test- und Entwicklungsumgebung • Drei Oracle 12c EE Instanzen • Mit Testdaten betankt • Vollzugriff für Entwickler (System: root, DB: sysdba) © SYNTEGRIS INFORMATION SOLUTIONS GMBH PROOF OF CONCEPT System- und Code-Analyse • Semantik der Schnittstellen? • Katalog der sensiblen Kundendaten semantische Analyse Typanalyse Score-basiert • Code-Analyse CRUD-Matrix (TOAD) Zirkelbezüge Bulk Operation wie INSERT AS SELECT Maskierte Daten in GROUP BY-Klausel Aggregate Functions Views • Lösung für direkten SQL-Zugriff? © SYNTEGRIS INFORMATION SOLUTIONS GMBH PROOF OF CONCEPT • Analyse der Webapplikation Seiteneffekte wie unbeabsichtigtes Schreiben maskierter Inhalte? • Logische Konsistenz von Daten und Prozessen Werden maskierte Spalten als Schlüssel verwendet? • Ist Pseudonymisierung statt Maskierung erforderlich? • Performance: Ausführungspläne, Speicher, Latenzen © SYNTEGRIS INFORMATION SOLUTIONS GMBH PROOF OF CONCEPT Implementierung eines Use Cases • • • • Ein Anwendungsfall, wenige Frontend-Seiten Nur Lesezugriffe Funktionsfähiger Prototyp Präsentation des Lösungskonzeptes beim Kunden © SYNTEGRIS INFORMATION SOLUTIONS GMBH ORACLE DATA REDACTION • Geeignet zur Anpassung von Applikationen ohne direkten DB-Zugriff für den Anwender • Definition zu maskierender Daten über das Oracle Data Dictionary • Oracle Advanced Security: ab 11gR2 EE • Transparenz für Backup- und Export-Funktionen • Ausführung im Datenbankkernel zur Laufzeit © SYNTEGRIS INFORMATION SOLUTIONS GMBH ORACLE DATA REDACTION • Deklaration der Policies im Data Dictionary der DB • Aktivierung der Policies z.B. durch Kontext, User Environment, Rollen • Maskieren sensitiver Daten in Tables und Views Full Partial 30.06.1975 01.01.2001 123-456-789 xxx-xxx-789 Regex [email protected] [hidden]@syntegris.de Random "geheim" "6zt5%a" • Unterstützte Datentypen VARCHAR, CHAR, NUMBER, DATE, CLOB Spezielle Typen teilweise Default-Maskierung für Full Redaction anpassen © SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO 1 – CREATE POLICY BEGIN DBMS_REDACT.ADD_POLICY ( object_schema => 'SCOTT', object_name => 'EMP', policy_name => 'HIDE_SAL', column_name => 'SAL', function_type => expression => '1=1', enable => TRUE DBMS_REDACT.FULL, ); END; / © SYNTEGRIS INFORMATION SOLUTIONS GMBH DEMO 1 – ITERATIVE INFERENZ CREATE OR REPLACE PROCEDURE inferenz IS buf VARCHAR(40); t CHAR; x NUMBER; i NUMBER; c NUMBER; BEGIN i := 0; c := 1; WHILE c<17 LOOP SELECT COUNT(*) INTO x FROM scott.redactiontest WHERE SUBSTR(cc,c,1)= TO_CHAR(i); IF x > 0 THEN c := c+1; buf := buf||TO_CHAR(i); i := 0; ELSE i := i+1; END IF ; END LOOP; dbms_output.put_line('CC: ' || buf); END; --Credits to David Lichfield © SYNTEGRIS INFORMATION SOLUTIONS GMBH SICHERHEIT • Verständnis der Grundkonzepte • Datenlecks durch Inferenz • Geeignet für auf Oracle aufsetzende Applikationen • Zusätzliche Maßnahmen bei anderen Szenarien • Redaction Policies per default deaktiviert für die User SYS SYSTEM EXPORT • Privileg: EXEMPT REDACTION POLICY © SYNTEGRIS INFORMATION SOLUTIONS GMBH SICHERHEIT - BUG OR FEATURE • Problem: INSERT INTO table2 (col1, col2) SELECT col1, redact_col2 FROM table1; --> ORA-28081 • Umgehung (Bug!): INSERT INTO table2(col1, SELECT redact_col2 FROM table1 t1a WHERE t1a.rowid = t1b.rowid) select col1 FROM table1 t1b; • Lösung: Auslagerung von Code in Wrapper mit EXEMPT REDACTION POLICY und in neuem Schema BYPASS • ORA-28081 tritt auch auf, wenn ein User, für den die Policy nicht gilt, ein INSERT AS SELECT auf redaktionierte Spalten absetzt http://www.oracle.com/technetwork/database/options/advanced-security/advanced-security-wp-12c-1896139.pdf https://docs.oracle.com/database/121/ASOAG/redaction_guidelines.htm#ASOAG10535 © SYNTEGRIS INFORMATION SOLUTIONS GMBH SICHERHEIT – GRENZEN • • • • Kein Schreibschutz Bei komplexem Code nicht unmittelbar einsetzbar Z.B. dynamisches SQL aka EXECUTE IMMEDIATE() Als eigenständiges Sicherheitskonzept ungenügend • Kein Schutz gegen fortgeschrittene Angriffe Privilege Escalation SQL Injection Brute Force © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - TECHNOLOGIEN Oracle Data Redaction • Datenmaskierung • Queries Row Level Security Daten schützen Oracle Data Redaction Daten maskieren Fine Grained Auditing Zugriffe protokollieren RLS Row Level Security • Schreibzugriffe erkennen • INSERT/UPDATE/DELETE Statements FGA Fine grained auditing • Statements detailliert loggen • Analyse, Debugging © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - ROW LEVEL SECURITY Problem: Komplexe Geschäftslogik in verketteten Stored Procedures kann unbeabsichtigtes Schreiben maskierter Werte auslösen. Lösung: • RLS unterbindet Schreibzugriff auf redaktionierte Spalten selektiv Fängt fehlerhafte Validierung im Frontend ab Vermeidung vollständiger Codeanalyse © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - KOMPONENTEN <<component>> Administration Nearshore Constraints create grant administer Facade-Schema Redactions Policies <<component>> SQL Access RLS Policies Privileges <<component>> Web Access Policies Priviliges <<component>> Facade-Schema Synonyme Views Tables Views Procedures © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - VORTEILE • Datenmodell bleibt unverändert • Trennung von Implementierung und Metadaten Zentrale Speicherung von SCD-Katalog, Berechtigungen, Redaktionstyp Einheitliche Pflege der Objekte für Frontend- und SQLZugriff • Der User FACADE_ADMIN generiert Views, Synonyme, Grants, Redaction- und RLS- Policies © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - FASSADENARCHITEKTUR DBA DBA FACADE_ADMIN NEARSHORE <<use>> {PRIVS & POLICY Administration} {SELECT on Synonyms} Admin Scripts <<role>> FACADE_ROLE_ADMIN <<role>> FACADE FACADE_META Nearshore-Facade FACADE +LOG_ADMIN_JOB +POLICY_ADMINISTRATION +PRIV_ADMINISTRATION +RLS_FUNCTIONS +APP_PARAMS +FACADE_PRIVS +REDACTIONS_POLICIES +REDACTION_COLUMNS +REDACTION_TYPES +RLS_WHITE_LIST +All Views + All Tables {policy_adminiistration} Base Database Layer {priv_administration} +DBMS_FGA +DBMS_REDACT +DBMS_RLS +DBMS_SESSION +FGA_POLICIES +REDACTIONS_POLICIES +REDACTION_COLUMNS +RLS_POLICIES +TABLES +VIEWS +PROCEDURES <<web>> FACADE_WEB Redaction / RLS / FGA © SYNTEGRIS INFORMATION SOLUTIONS GMBH LÖSUNG - FRONTEND • Nearshore-User werden über ihre Windows-Gruppe identifiziert • Für die Nearshore-AD-Gruppe wird ein eigener Connection Pool verwendet, dadurch sind die OO4O* Caches für Onsite- und Nearshore-Benutzer getrennt • Separate technische Datenbank-User pro Pool • Für das entsprechende Schema FACADE_WEB ist die Maskierung aktiv: … expression =>'SYS_CONTEXT (''USERENV'',''SESSION_USER'')= ''FACADE_WEB''‚ … *Oracle Objects for OLE © SYNTEGRIS INFORMATION SOLUTIONS GMBH FLASHBACK • Sicherung der gesamten Datenbank in Sekunden mit CREATE RESTORE POINT GUARANTEE FLASHBACK DATABASE • Delta der gesamten Datenbank mit der SELECT AS OF clause • Überraschung: die Flashback Restore Points mit unserer Testdaten-Baseline überlebten ein Datenbank-Patchupdate nicht © SYNTEGRIS INFORMATION SOLUTIONS GMBH FLASHBACK BEISPIEL SET serveroutput ON; DECLARE cnt pls_integer; rowcnt pls_integer; sqlstring VARCHAR2(2000); fails pls_integer :=0; BEGIN FOR TAB IN ( SELECT SYS.DBA_ALL_TABLES.TABLE_NAME AS TNAME, SYS.DBA_ALL_TABLES.OWNER AS TOWNER FROM SYS.DBA_ALL_TABLES WHERE OWNER IN 'HR‘‚ LOOP BEGIN sqlstring:='SELECT count(*) FROM '||TAB.TOWNER||'.'||TAB.TNAME; EXECUTE IMMEDIATE sqlstring INTO rowcnt; dbms_output.put_line('ROW COUNT: '||rowcnt||' Name: '|| TAB.TOWNER||'.'||TAB.TNAME); IF rowcnt<500000 THEN sqlstring := 'SELECT COUNT(*) FROM (SELECT * FROM ' ||TAB.TOWNER||'.'||TAB.TNAME|| ' MINUS SELECT * FROM ' ||TAB.TOWNER||'.'||TAB.TNAME|| ' AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL ''30'' MINUTE)))'; EXECUTE IMMEDIATE sqlstring INTO cnt; dbms_output.put_line('DIFFERENT LINES: '||cnt); dbms_output.put_line(''); END IF; EXCEPTION WHEN OTHERS THEN BEGIN insert into HR.TRACE_FLASH values (TAB.TOWNER||'.'||TAB.TNAME,rowcnt ); fails:=fails+1; END; END; END LOOP; COMMIT; dbms_output.put_line('FAILS: '||fails); END; © SYNTEGRIS INFORMATION SOLUTIONS GMBH FAZIT • • • • • • Fachlichkeit radikal eingrenzen Testdaten frühzeitig einfordern Design lange flexibel halten Sicherheit durch komplementäre Testverfahren Entwicklungsumgebung beim Kunden nutzen Projektentscheidungen dokumentieren © SYNTEGRIS INFORMATION SOLUTIONS GMBH Danke SYNTEGRIS INFORMATION SOLUTIONS GMBH HERMANNSTRASSE 54-56 63263 NEU-ISENBURG FON (06102) 29 86 68 FAX (06102) 55 88 06 [email protected] SYNTEGRIS.DE