Vortrags-Download

Werbung
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
Herunterladen