1 In diesem Abschnitt wollen wir uns näher mit dem Thema Datenschutz und Datensicherheit auseinander setzen. Zum Einen sind hier natürlich die gesetzlichen Regelungen und Bestimmungen wichtig. Zum Anderen ist es auch wichtig mit den technischen Möglichkeiten wie Authentifizierung und Autorisierung vertraut zu machen. Ein weiterer wichtiger Aspekt ist auch die Nachvollziehbarkeit von Änderungen einer Datenbank. Hierzu ist es notwendig, sich mit den Protokollierungs- und Audit- Möglichkeiten der Datenbanksystem zu beschäftigen. 2 Zunächst wollen wir klären, was unter Datenschutz zu verstehen ist. Im allgemeinen wird hier die Schutzwürdigkeit von personenbezogenen Daten verstanden. Hierunter fallen folgende Aspekte: • Die Speicherung von personenbezogenen Daten • Die Auswertung und Verarbeitung der personenbezogenen Daten • Die Weitergabe und Nutzung von personenbezogenen Daten Zunächst ist nun zu klären, was dies genau bedeutet. 3 Um einen Missbrauch der personenbezogenen Daten bzgl. • Der Speicherung • Der Auswertung und Verarbeitung • Der Weitergabe und Nutzung zu verhindern sind folgende Fragen zu klären: 1. Wer hat / darf überhaupt Zugriff auf die Daten haben? 2. Was sind die personenbezogenen Daten genau? Um welche Daten geht es also? Um diese Fragen zu klären, schauen wir uns zunächst die gesetzlichen Regelungen und Bestimmungen an. 4 Die gesetzlichen Regelungen und Bestimmungen sind in dem Bundesdatenschutz-Gesetzt (BSDG) festgelegt. Erstmalig wurde das Gesetzt 1990 verabschiedet. Darüber hinaus gilt auch das europäische Gesetz EG 195196. Auf der Webseite des Bundesministeriums der Justiz und Verbraucherschutz (link siehe unten) finden Sie die entsprechenden gesetzlichen Bestimmungen. Als nächstes wollen wir nun klären, für wen die gesetzlichen Bestimmungen wichtig sind. Siehe auch: • http://www.gesetze-im-internet.de/bdsg_1990/index.html 5 Die gesetzlichen Regelungen sind zum einen wichtig für alle öffentlichen Einrichtungen und Behörden. Die gesetzlichen Regelungen gelten aber auch für private Einrichtungen bzw. Nicht-öffentlichen Einrichtungen wie zum Beispiel Firmen. Also alle, die Umgang mit personenbezogenen Daten haben. 6 Im Fokus des Datenschutzes sind also die schutzwürdigen Belange. Welche technischen Maßnahmen möglich sind, um diese schutzwürdigen Belange (Datenschutz) einzuhalten, fallen unter das Thema Datensicherheit. Daher gilt es nun zu klären, was genau mit Datensicherheit im Kontext der Datenbanken gemeint ist bzw. was Datensicherheit mit Datenbanken zu tun hat. 7 Um zu klären, was Datenbanken mit Datensicherheit zu tun hat, schauen wir uns zunächst an, welche Art von Daten in der Datenbank abgelegt werden. In vielen Datenbanken werden zum Beispiel folgende Arten von Daten gespeichert: • Allgemeine Informationen über Personen, wie Adresse, Alter, E-Mail Adressen etc. • Finanzdaten wie zum Beispiel Gehälter, Kontonummern, Kreditdaten etc. • Gesundheitsdaten wie zum Beispiel Rezepte, Therapien, Krankheiten etc. Dies sind nur einige wenige Beispiel, die zeigen, das in einer Datenbank sehr oft personenbezogene Daten abgelegt und auch verarbeitet werden. Somit ist aus Sicht der Datensicherheit zu klären, welche Maßnahmen es gibt, um sich gegen einen unerlaubten Zugriff und einen Missbrauch der Daten, die in einer Datenbank gelegt sind, zu schützen. 8 Schauen wir uns daher nun die Maßnahmen genauer an. Man kann die Maßnahmen in drei große Themenbereiche einteilen. Physikalische Maßnahmen Unter den physikalischen Maßnahmen fallen alle Regelungen, die den physikalischen Zugang und das Abhören von Daten verhindern sollen. IT-Schutzmaßnahmen Hierunter fallen alle allgemeine Maßnahmen, die unerlaubte Nutzung der Daten verhindern soll. Dazu gehören auch Maßnahmen, die festlegen, dass sich jeder, einer Identifikationskontrolle unterzieht. Auch Maßnahmen, die getroffen werden, um nachvollziehen zu können, wer, wann, welche Daten verwendet hat (Aufzeichnung). Kryptographische Maßnahmen Hierunter fallen Maßnahmen wie: • Verschlüsselung der Daten, damit Unbefugte die Daten nicht auswerten können • Protokolle, um Daten sicher übertragen zu können • Digitale Signaturen 9 • das Verhindern, dass Daten anonym verarbeitet werden können • Aber auch Maßnahmen, die garantieren, dass Daten anonym verarbeitet werden können Somit stellt sich nun die Frage, welche Maßnahmen im Zusammenhang mit der Datenbank wichtig sind. Dieser Frage wollen wir als nächstes nachgehen. 9 Aus Sicht der Datenbanken, sind die, in der Abbildung blau gekennzeichneten Punkte von Bedeutung. Da sind zum einen die IT-Schutzmaßnahmen wie: • Erlaubnis zur Nutzung Autorisierung • Identifikationskontrolle Authentifizierung • Aufzeichnungen Logging und Auditing Darüber hinaus sind auch kryptographische Maßnahmen wichtig, um eine sichere Datenübertragung zu gewährleisten. Hierbei sind die Protokolle wichtig, um auf Datenbanken zugreifen zu können, die sich auf einem anderen Rechner innerhalb eines Netzwerkes befinden. Welche Maßnahmen dies nun im einzelnen sind, wollen wir uns als nächstes ansehen. 10 Wie bei der vorherigen Abbildung bereits beschrieben, handelt es sich bei den IT-Schutzmaßnahmen im einzelnen um: • Autorisierung .. Wer darf auf welche Daten innerhalb der Datenbank zugreifen • Authentifizierung .. Ist die Person auch genau die Person , als die sie sich ausgibt • Auditing .. Aufzeichnen, wer welche Änderungen in der Datenbank vorgenommen hat 11 Bei den kryptographischen Maßnahmen handelt es sich in der Praxis um Datenübertragungsprotokolle, um gesichert auf Datenbanken zugreifen zu können. Das Wichtigste dabei ist, dass die Daten nicht von Dritten mitgelesen werden können. In der Praxis wird daher bei der Kommunikation mit einer Datenbank innerhalb eines Netzwerkes auf die Kommunikation via Secure Socket Layer (SSL) zurückgegriffen. Als nächstes wollen wir uns mit den einzelnen Themenbereichen näher beschäftigen. 12 Die Authentifizierung bei den Datenbanken erfolgt in der Regel mittels UserName und Password. Hierzu bieten die Datenbanksysteme ein eigenes Authentifizierungsverfahren an. Wie wir im Abschnitt SQL-DCL bereits gesehen haben, bietet SQL die Möglichkeit einzelne User via CREATE USER anzulegen und auch wieder zu löschen. Zusätzlich bieten Datenbanksysteme wie zum Beispiel Microsoft SQL-Server auch die Möglichkeit eines sogenannten Single-Sign-On (SSO) Verfahrens. Dies bedeutet, dass sich ein User nur einmal authentifizieren muss, und hat dann Zugang zu einer Menge von Anwendungen ( hier eben die Datenbank). Siehe auch: • Was ist SSO : http://searchsecurity.techtarget.com/definition/single-sign-on 13 Schauen wir uns zur Verdeutlichung einmal ein typisches AuthentifizierungsSzenario an. Bei diesem Szenario gehen wir davon aus, dass ein Anwender sich auf einem System einloggt und dort einen SQL-Interpreter ( z.B. SQL Server sql_cmd) startet. Schritt1: Ein Anwender meldet sich an einem System an ( Login) mit dem Namen X und einem Password. Schritt 2: Der Anwender startet den SQL-Interpreter. Hierbei gibt er an, mit welcher Datenbank er sich verbinden möchte. Zusätzlich muss er auch angeben, mit welchem Benutzer er sich anmelden möchte. In unserem Beispiel ist der UserName Y. Der User Name für das Anmelden bei dem Datenbanksystem ist also nicht der gleiche Name, mit dem sich der Anwender in das System eingeloggt hat. Schritt 3: Der SQL-Interpreter meldet sich bei dem Datenbanksystem an und übergibt den 14 Benutzernamen Y und das entsprechende Passwort. Schritt 4: Das Datenbanksystem überprüft nun, ob der Benutzer mit dem Namen Y auf das Datenbanksystem zugreifen darf, und das Passwort auch korrekt ist. Ist dies der Fall, kann der Anwender nun SQL-Anweisungen via SQL-Interpreter an die Datenbank senden. 14 In dieser Abbildung sehen Sie ein weiteres Authentifizierungs-Szenario. Diesmal unter Verwendung von Single Sign ON (SSO). Bei diesem Szenario gehen wir wieder davon aus, dass ein Anwender sich auf einem System einloggt und dort einen SQL-Interpreter ( z.B. SQL Server sql_cmd) startet. Schritt1: Ein Anwender meldet sich an einem System an ( Login) mit dem Namen X und einem Password. Schritt 2: Der Anwender startet den SQL-Interpreter. Hierbei gibt er an, mit welcher Datenbank er sich verbinden möchte. Zusätzlich gibt er in einer speziellen Option an, dass er eine sogenannte „Trusted connection“ aufbauen möchte. Mit anderen Worten: Er möchte das SSO Verfahren nutzen. Im Falle eines SQL-Servers, bedeutet dies, dass man die Option –E beim Aufruf des SQL-Interpreters sqlcmd( ehemals osql) angeben muss. 15 Schritt 3: Der SQL-Interpreter meldet sich bei dem Datenbanksystem an und gibt zu erkennen, dass das SSO verfahren verwendet werden soll. Schritt 4: Das Datenbanksystem überprüft nun mittels eines Authentication Servers, ob der Benutzer, der den SQL-Interpreter-Prozess gestartet hat, auch die entsprechende Erlaubnis hat, auf die Datenbank zugreifen zu dürfen. Siehe auch: • Verstehe SSO: https://msdn.microsoft.com/en-us/library/aa745042(v=bts.10).aspx 15 In dieser Abbildung sehen Sie ein weiteres Authentifizierungs-Szenario unter Verwendung von Single Sign ON (SSO). Das Szenario ist diesmal etwas anders. Es wird davon ausgegangen, dass beim Starten eines System ein Dienst gestartet wird, welcher in JAVA geschrieben ist und die Schnittstelle JDBC verwendet und auf eine Datenbank Zugriff benötigt. In diesem Fall muss in der entsprechenden URL zum Verbindungsaufbau via JDBC-Drivers, das entsprechende Authorisierungsverfahren angegeben werden. Dies ist entweder • Angabe von User und Password • Angabe SSO-verwenden. Der genaue Aufbau der URL muss bei den einzelnen DBMS Herstellern nachgeschlagen werden. Siehe auch: • JDBC Connection String Überblick: http://alvinalexander.com/java/jdbcconnection-string-mysql-postgresql-sqlserver 16 • Microsoft SQL Server JDBC URL : https://msdn.microsoft.com/dede/library/ms378428(v=sql.110).aspx • Microsoft JDBC Verbindungseigenschaften: https://msdn.microsoft.com/dede/library/ms378988(v=sql.110).aspx 16 Nachdem wir uns einen Überblick verschafft haben, über die Maßnahmen bzgl. Identifikation, wenden wir uns nun den Maßnahmen bzgl. der Zugriffsrechte zu. Es geht also um die Möglichkeiten der Autorisierung. Wie in dem Abschnitt SQL-DCL bereits beschrieben, bieten die Datenbanksystem die Möglichkeit, den Zugriff auf die Daten einzuschränken. Mit anderen Worten: Man kann Privilegien für einzelne Benutzer vergeben. Bei den Privilegien kann zum einen festgelegt werden, WER Zugriff hat ( linke Seite der Abbildung) und AUF_WAS darf zugegriffen werden (rechte Seite in der Abbildung). Wie in der Abbildung ebenfalls ersichtlich ist, unterscheidet man zwischen: • Zugriff auf Datenbank die Datenbank Objekte wie Tabellen, Stored Procedures etc. • Operationen, die ausgeführt werden dürfen. Unter Operationen versteht man CREATE, READ, UPDATE, DELETE, EXECUTE Operationen. 17 Da in der Praxis sehr viele Benutzer auf eine Datenbank zugreifen können, sollen und es sich um sehr viele Daten-Objekte (i.a. Tabellen)n) handelt, wäre der Administrationsaufwand sehr hoch, wenn man für jeden einzelnen Benutzer die Rechte individuell verwalten wollte. Um den Administrationsaufwand für das Verwalten der Privilegien in Grenzen zu halten, wurde in dem SQL-Standard SQL-99 das Konzept der Rollen eingeführt. Diese Konzept erlaubt die Definition von Rollen. Eine Rolle definiert einen Satz von Zugriffsrechten. Wobei Zugriffsrechte sein können: • Tabellen anlegen, löschen etc. • Views anlegen, löschen, ändern • CRUD Operation auf Tabellen festlegen etc. • Usw. Somit kann man einem Benutzer oder einer Benutzergruppe eine Rolle zuweisen. Dies bedeutet, dass dann diesem Benutzer bzw. alle Mitglieder der Gruppe die Rechte hat, die sich aus der Rolle ergeben. 18 Siehe auch: • Microsoft SQL Server Roles verstehen: http://www.databasejournal.com/features/mssql/article.php/1441261/UnderstandingSQL-Server-Roles.htm • ORACLE. https://docs.oracle.com/cd/B19306_01/network.102/b14266/authoriz.htm#DBSEG5000 18 Eine weitere Sicherheitsmaßname ist das Auditing. Hierbei geht es um den Nachweis, WER hat WANN auf WELCHE Daten zugegriffen. Die Implementation ist dabei von Hersteller zu Hersteller unterschiedlich. Die wichtigsten Unterscheidungsmerkmale sind dabei: • Granularität der Daten • Konfigurationsparameter • Aufbau und Umfang der Auditdaten Meist wird unterschieden zwischen: • Server Audit • Database Audit Siehe auch: • Microsoft SQL Server Auditing: https://msdn.microsoft.com/dede/library/cc280386.aspx • ORACLE Auditing: 19 https://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm#BABCFIHB Was nun typischerweise bei den Auditdaten erfasst wird, schauen wir uns in der nächsten Abbildung etwas genauer an. 19 Diese Abbildung gibt Ihnen einen Überblick über die Informationen, die von den meisten Herstellern beim Einschalten des Audit-Dienstes protokolliert werden: • Änderungen an Passwörtern • Änderungen an der Audit-Konfiguration selbst • SQL-DCL Anweisungen wie GRANT und REVOKE • Änderungen am Datenbankschema selbst Schauen wir uns nun abschließend zum Audit auf der nächsten Abbildung ein Beispiel vom Oracle an. 20 In dieser Abbildung sehen Sie Beispiele für Einträge in ein Oracle AUDIT File. Quelle: https://docs.oracle.com/cd/B19306_01/network.102/b14266/cfgaudit.htm#i10096 42 21 Ein Aspekt der Datensicherheit sind die Datenübertragungsprotokolle zwischen der Applikation und dem Datenbanksystem. Die Herausforderungen hierbei stellt sich wie folgt dar. In der Praxis kommen meist mehrstufige Software Architekturen zum Einsatz. Hierbei werden die Datenbanksysteme auf einem eigenen Rechner installiert und betrieben. Dies bedeutet, dass eine Netzwerkverbindung benötigt wird, um die Daten zwischen den Anwendungen und dem Datenbanksystem austauschen zu können. Die Risiken sind dabei: • Das unerlaubte Kopieren von Daten • Dass die Daten verfälscht werden können • Daten zerstört / gelöscht werden können • etc. 22 In dieser Abbildung ist eine Konfiguration dargestellt, bei der die Anwendungen und das Datenbankmanagementsystem (DBMS) auf demselben Rechner installiert ist. Die Kommunikation findet daher rein lokal auf dem Rechner statt. In vielen Fällen findet hierbei der Datenaustausch unverschlüsselt statt. In diesen Fällen muss jedoch sichergestellt werden, dass keine unerlaubte Software auf dem Rechner installiert werden kann, um einen Missbrauch auszuschließen. 23 In den meisten Fällen befinden sich jedoch die Anwendungen und das DBMS auf getrennten Rechnern. In diesen Fällen sind (wie bereits erwähnt) verschlüsselte Verbindungen via SSL notwendig. Wie aus der Abbildung ersichtlich wird, ist hier ein spezielle Situation dargestellt. Die Abbildung zeigt eine vereinfachtes Szenario, bei der eine Anwendung über das Internet auf einen Datenbank-Dienst zugreift. In der Praxis handelt es sich bei den Apps um eine Browser Anwendung z.B. in JavaScript, die über eine Schnittstelle mit dem Backend ( hier ein DatenbankService ) Daten austauscht. Hierbei sind folgende Sicherheitsaspekte (Angriffspunkte) zu beachten: • Verschlüsselung aller Daten muss gegeben sein • Ein Man-in-the-Middle Attack muss erkannt werden ( darf nicht möglich sein) • SQL-Injection darf nicht möglich sein. Was genau unter Man-in-the-Middle Attack und SQL-Injection zu verstehen ist, schauen wir uns als nächstes an. 24 Bei Man-in-the-Middle Attack handelt es sich (wie der Name schon ausdrückt) um ein Szenario, bei dem sich eine Dritte Instanz zwischen die Anwendung und Datenbanksystem „einklinkt“. Gegenüber der Anwendung gibt diese Instanz vor das DBMS zu sein. Gegenüber dem DBMS gibt die Instanz vor das DBMS zu sein. Um dies zu verhindern, werden beim Aufbau der Verbindung zwischen Anwendung und DBMS sogenannte Zertifikate ausgetauscht, die den Nachweis erbringen, das der Kommunikationspartner wirklich der ist, für den er sich ausgibt. Sie auch: • Microsoft SQL Server: https://technet.microsoft.com/dede/library/ms189067(v=sql.105).aspx 25 Unter SQL-Injection versteht man eine spezielle Form von Attacke. Bei dieser Form zielt der Angreifer darauf ab, dass z.B. in Web-Formularen die Eingaben des Anwenders als Teil eines SQL-Befehles unverändert eingetragen werden. Ist dies der Fall, so kann der Hacker die Eingabe so gestallten, dass eine „verfälschtes“ SQL-Anweisung entsteht, welche Schaden anrichten kann. In diesem Fall spricht man davon, dass die SQL-Anweisung verfälscht wurde durch „Injection“. Schauen wir uns hierzu als nächstes ein Beispiel an. Siehe auch: • Definition: http://searchsoftwarequality.techtarget.com/definition/SQLinjection 26 Die Abbildung zeigt zwei Möglichkeiten von SQL Injection. In der linken Spalte der Tabelle steht die Original SQL-Anweisung wie sie ursprünglich gedacht wurde. In der rechten Spalte der Tabelle sehen Sie jeweils die verfälschte SQLAnweisung. Die eingefügten SQL Fragmente (injected code) sind entsprechend farblich gegenzeichnet. 27 Die Grundlage für das Verfälschen von SQL-Anweisungen ist das Herausfinden, ob die Benutzereingaben wirklich unverändert in eine SQL-Anweisung übernommen wird. Hierbei gehen Hacker meist wie folgt vor: 1. Schritt : Eingaben so manipulieren, um einen Fehler zu erzeugen und prüfen wie das System auf Fehler reagiert 2. Schritt: Die Eingabe solange manipulieren, bis eine Fehlermeldung kommt, die auf einen Datenbankfehler hinweist. 3. Schritt. Die Eingabe nun so abändern, bis die Eingabe als gültiger Datenbankbefehl interpretiert wird. Siehe auch: • Beispiel: www.programmerinterview.com/index.php/database-sql/sqlinjection-example 28 Zum Abschluss des Themas SQL-Injection ein Beispiel: An der Benutzeroberfläche kann ein Anwender in ein Web-Formular einen Benutzer-Namen angeben. Ein Hacker hat bereits herausgefunden, dass Eingaben nicht geprüft werden. Wird diese Eingabe dann unverändert in einen SQL Befehl wie SELECT * from users where name = ´user_eingabe´ Übernommen, so funktioniert dies gut, solange die user_eingabe ein Name eines Benutzer ist. Bei einer SQL-Injection würde ein Hacker folgenden User-Namen verwenden: Y´ ; drop table users Wird nun diese Eingabe unverändert in die Datenbank-SELECT Anweisung übernommen, so ergibt sich folgende Anweisung: 29 SELECT * from users where name = ´Y´ ; drop table users Es bleibt nun Ihnen überlassen sich zu überlegen, welche Konsequenzen /Ergebnis diese SQL-Anweisung mit sich bringen würde. 29 Um das Thema Datenschutz und Datensicherheit in Bezug auf Datenbank abzuschließen, finden Sie in dieser und in den nächsten Abbildungen eine Zusammenfassung der wichtigsten Punkte: Aus Sicht der Anwendungsprogrammierung, sind folgende Punkte wichtig: • Anwendung so gestallten, dass SQL-Injection ausgeschlossen ist • Datenbankverbindungen mit unterschiedlichen Benutzerrechten verwenden Aus Sicht der Datenbank-Administration sind folgende Punkte wichtig: • Achte auf die Security-Einstellungen der Datenbank • Erlaube nur SSL Verbindungen • Achte immer darauf, dass die DBSM immer auf dem aktuellen Patch-Level ist Quellen: 30 http://www.isaca.org/chapters1/BatonRouge/newsandannouncements/Documents/Barnes%20ISACA%20Presentation.pdf 30 Hier sehen Sie DB-Admin Tipps für den Gebrauch von Passwörtern. 31 Hier sehen Sie DB-Admin Tipps für den Einsatz bzgl. Patches. 32 Hier sehen Sie DB-Admin Tipps bzgl. der Einstellung von Konfigurationsdaten. 33 Hier sehen Sie DB-Admin Tipps bzgl. Einstellung von User-Rechten. 34 Hier sehen Sie DB-Admin Tipps für den Gebrauch von Auditing 35 Hier sehen Sie DB-Admin Tipps für Umgang mit Datenbank-Backups. 36 Hier sehen Sie Tipps für die Anwendungsprogrammierung für den Gebrach von SSL-Verbindungen Quellen: SQL Server: • https://msdn.microsoft.com/de-de/library/bb879949(v=sql.110).aspx Oracle: • http://www.oracle.com/technetwork/topics/wp-oracle-jdbc-thin-ssl130128.pdf • https://docs.oracle.com/cd/B19306_01/java.102/b14355/sslthin.htm#B ABHFBJD MySQL: • https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-referenceconfiguration-properties.html 37 38 39