Fachbereich Medizintechnik und Technomathematik Sicherheit von Datenbanksystemen Seminararbeit im Studiengang „Scientific Programming“ vorgelegt von Paul Voth 1. Betreuer: Prof. Dr. Volker Sander 2. Betreuer: Frank Ferber Aachen, Dezember 2011 Abstract Das Problem der Datensicherheit ist alltäglich, denn nicht alle Unternehmen nehmen dieses Thema ernst und dadurch kann es leider zu Datendiebstahl kommen. Die Diebe profitieren von ihrem Erfolg und die Firmen tragen den Schaden, weil sie so ihre Kunden verlieren. Die sensiblen Daten werden oft unzureichend vor fremdem Zugang geschützt, sei es durch falsch konfigurierte Firewalls oder triviale LoginDaten. Ein erfahrener Hacker kennt die Schwachstellen der Systeme und kann sich mithilfe von Passworttabellen Zugang dazu verschaffen. Diese Arbeit soll auf die häufigsten Sicherheitslücken rund um Datenbanksysteme eingehen und aufzeigen, wie diese Lücken schon bei der Installation der Systeme beseitigt werden können und Hackern damit ein Eindringen in die Datenbank und auch in das zugrundeliegende Betriebssystem fast unmöglich machen. Inhaltsverzeichnis 1. Einleitung ....................................................................................................................... 4 2. Allgemeine Sicherheit des Datenbanksystems ............................................................... 6 2.1 Standort des Servers............................................................................................... 6 2.2 Wahl des Betriebssystems ...................................................................................... 7 2.2.1 Windows .......................................................................................................... 8 2.2.1.1 Firewall ......................................................................................................... 8 2.2.1.2 Virenschutz ................................................................................................... 8 2.2.1.3 Updates ........................................................................................................ 9 2.2.1.4 Benutzer und Passwort ................................................................................10 2.2.1.5 Verzicht auf Anwendungen / Deaktivierung von Diensten ............................11 2.2.2 Linux ...............................................................................................................12 2.2.2.1 Root .............................................................................................................12 2.2.2.2 Firewall ........................................................................................................12 3. Bedrohungen für die Datenbanksicherheit und effektive Schutzmechanismen ..............14 3.1 Externe Bedrohungen ............................................................................................15 3.1.1 SQL Injection...................................................................................................15 3.1.2 Cross-Site-Scripting (XSS) ..............................................................................16 3.1.3 Denial-of-Service (DoS) ..................................................................................17 3.2 Interne Bedrohungen..............................................................................................18 3.2.1 Missbrauch von Zugriffsrechten ......................................................................18 3.2.2 Fehlerhafte Datenbankkonfiguration ................................................................20 3.3 Allgemeine Schutzmechanismen (Ergänzung) .......................................................21 3.3.1 Mandatory Auditing .........................................................................................22 3.3.2 SYS Auditing ...................................................................................................22 3.3.3 Standard Auditing ............................................................................................22 3.3.4 Fine Grained Auditing (FGA) ...........................................................................23 3.3.5 Verschlüsselung von Daten .............................................................................23 Literaturverzeichnis ..............................................................................................................24 1. Einleitung Der Schutz von Informationen ist eines der wichtigsten Themen, mit dem sich heutzutage große IT-Unternehmen und Banken beschäftigen müssen. In der Anfangsphase des Computers war dieses Denken noch nicht so ausgeprägt, denn damals wurde unter dem Begriff „Sicherheit“ nur die „Sicherstellung der korrekten Funktionalität von Hardware […] und Software“1 verstanden. Diese Definition hat sich mit der Zeit stark verändert, denn es kommt heute nicht nur darauf an, dass ein System dauerhaft läuft, sondern mehr darauf, dass die dort gespeicherten Daten sicher vor dem Zugriff von Unbefugten sind. Nicht selten kommt es vor, dass Angreifer versuchen, mithilfe von Viren oder Trojanern auf die persönlichen Daten zuzugreifen oder diese auszuspionieren und für kriminelle Zwecke zu missbrauchen. Für Privatpersonen gilt die Regel, dass sie sich auf jeden Fall durch eine Firewall absichern müssen und ein Antivirenprogramm auf ihrem Rechner installieren sollten. Dadurch ist der Zugriff auf den eigenen Rechner für Angreifer schon schwieriger, jedoch nicht unmöglich. Schließlich tauchen täglich neue Sicherheitslücken in häufig genutzten Programmen auf, mit deren Hilfe sich Kriminelle leicht Zugang zum Rechner verschaffen können. Es besteht für Privatpersonen jedoch kaum Grund zur Besorgnis, da es für die Angreifer zum Teil überhaupt nicht möglich ist, auf den privaten PC zuzugreifen, es sei denn dieser hat eine statische IP-Adresse, mit der er sich in das Internet einloggt. Doch da ein privater Nutzer sich bei einem Internetdienstleister anmelden muss, besteht dahingehend auch weniger Gefahr, da die Provider sich täglich ändernde IPAdressen für ihre Kunden benutzen. In großen Firmen ist es im Gegensatz dazu etwas anders, denn diese haben oft eine eigene IP-Adresse und sind auch in den meisten Fällen Opfer von Cyberangriffen. An negativen Beispielen wie Sonys „Playstation Network“, bei dem sich Hacker Zugang zu Kundendaten verschafft haben, die auch Kreditkarteninformationen enthielten, wird deutlich, wie leichtsinnig manche Firmen mit den ihnen anvertrauten Daten umgehen und wie unausgereift dort das Sicherheitskonzept ist. 1 http://de.wikipedia.org/wiki/Informationssicherheit, „Bedeutung von Informationssicherheit“, 18.10.2011 4 Die Aufgabe von Firmen, die Bankdaten ihrer Kunden speichern, sollte sein, einer Person zu gewährleisten, dass dessen private Daten unter keinen Umständen an die Öffentlichkeit gelangen. Auf der anderen Seite sollte eine Person, die im Internet unterwegs ist, gut darauf achten, welche Webseite sie besucht, welche Daten sie in Formulare eingibt und welche Folgen das haben kann. Sie sollte sich immer darüber informieren, in welcher Form diese Daten abgespeichert werden und ob sie möglicherweise von anderen einsehbar sind. Die privaten Informationen werden inzwischen nicht mehr in Excel-Tabellen oder Word-Dokumenten gespeichert, stattdessen werden Datenbanken benutzt. Mit ihrer Hilfe lassen sich Informationen viel einfacher verwalten und Redundanzen ausschließen. Dabei ist die Datensicherheit ein zentraler Aspekt, um welchen sich das zuständige Unternehmen bemühen muss. Mit dem Datenbankmanagementsystem, welches in jedem Datenbanksystem zusammen mit der Datenbank existiert, lässt sich bereits ein Teil der Sicherheit herstellen. Doch es sind noch einige weitere Aspekte zu beachten, die wichtig für die Sicherheit der Daten sind. Zunächst ist die Wahl des Datenbanksystems entscheidend, denn es existieren unzählige Systeme und diese unterscheiden sich bezüglich Funktionalität und Sicherheit teilweise stark voneinander. Schon beim Design der Datenbank muss sich der zuständige Administrator Gedanken darüber machen, welche Benutzer er anlegt und mit welchen Rechten er diese ausstattet. Weiterhin spielt natürlich die Verschlüsselung von Daten eine sehr wichtige Rolle, da Passwörter besonders gerne von Hackern ausgespäht werden und diese deshalb zusätzlichen Schutz benötigen. Falls bereits häufiger in Systeme der gleichen Art bei anderen Firmen eingebrochen wurde, sollte sich der Administrator darum kümmern, in seinem System nach möglichen Sicherheitslücken zu suchen und diese zu beheben. Dabei ist auch darauf zu achten, dass Updates des Datenbanksystems eine große Hilfe sein können. Auch über die Erreichbarkeit der Datenbank sollten Überlegungen angestellt werden, denn es ist oft sinnvoll, sie in einem privaten Netz zu haben und nur wenigen Personen oder Rechnern einen Zugriff darauf zu gewähren. Die Arbeit wird die genannten Aspekte vertiefen und aufzeigen, welche Relevanz sie für das Thema „Sicherheit“ in Datenbanksystemen haben. 5 2. Allgemeine Sicherheit des Datenbanksystems Zunächst soll untersucht werden, welche Sicherheitsmaßnahmen getroffen werden müssen, um ein Datenbanksystem vor Angriffen von außerhalb des Unternehmens zu schützen. Es muss dabei darauf geachtet werden, dass die Benutzer nicht unnötig in ihrer Arbeit mit der Datenbank eingeschränkt werden. Für diese wichtige Aufgabe werden Systemadministratoren benötigt, die das nötige Wissen über das Netzwerk und das eingesetzte Betriebssystem haben. Darüber hinaus ist der Standort des Rechners, auf dem das System läuft, zu berücksichtigen und die Benutzer, die es pflegen, sollten ebenso sorgfältig ausgesucht werden. 2.1 Standort des Servers Server sind am besten in Rechenzentren aufgehoben, da sie dort nicht nur sicher vor Witterungseinflüssen sind, sondern auch vor unbefugten Zugriffen. Die Gebäude sind meist mit etlichen Rauchmeldern und Überwachungskameras ausgestattet und werden somit 24 Stunden lang überwacht. Zu dem eigentlichen Raum, in dem die Server stehen, haben außerdem nur einige wenige Leute Zugang, weshalb diese Räume mit Safes gleichgesetzt werden können. Auch die Temperatur spielt eine wichtige Rolle. Da hohe Temperaturen den Servern schaden können, was die Performance und Datensicherheit angeht, ist eine Klimaanlage Pflicht. Somit wird in den Rechenzentren die optimale Umgebung geschaffen, damit ein Server seine Arbeit effizient verrichten kann. Falls diese Möglichkeit nicht gegeben ist, sollte ein gut belüfteter und mit einer leistungsfähigen Klimaanlage ausgerüsteter Raum im Firmengebäude ausgewählt werden, um die maximale Leistungsfähigkeit des Servers zu jedem Zeitpunkt zu gewährleisten. Dieser Raum sollte ein eigenes unabhängiges Schloss haben und nur von Administratoren aufgeschlossen werden können, um damit den direkten Zugriff für Mitarbeiter zu verbieten. Schließlich sind auch sie potenziell dazu in der Lage, Daten zu stehlen, und somit stellen sie eine unkalkulierbare Gefahr da. Zu beachten ist dabei auch, dass der Server nicht direkt gesteuert werden darf, also dass eine Tastatur, inklusive Maus und Monitor, nicht angeschlossen sein dürfen, weil das den Mitarbeitern einen freien Zugriff erlaubt. 6 Ein weiterer Sicherheitsaspekt ist die Verbindung des Datenbanksystems zum Internet. Dazu ist zu sagen, dass es nicht direkt an das Internet angeschlossen sein sollte, was dabei hilft den Zugriff von außen sehr genau zu steuern. Die Anfertigung von Sicherungskopien ist eine der wichtigsten Aufgaben, die der Betreiber eines Servers zu erfüllen hat, da im Falle von Datenverlust eine schnelle Rekonstruktion der Daten erfolgen muss. Die angefertigten Backups sind im Idealfall an einem separaten Ort außerhalb des Unternehmens aufzubewahren, wie beispielsweise auf Backup-Servern von Rechenzentren oder zur Not auch auf externen Festplatten. Wenn diese Kriterien beachtet werden, dann ist es für die Angreifer fast unmöglich, direkt an die Maschinen zu kommen um dort Schaden anzurichten. Dafür werden in den meisten Fällen Sicherheitslücken im Betriebssystem, im Netzwerk oder auch in der Verwaltungssoftware des Datenbanksystems ausgenutzt. 2.2 Wahl des Betriebssystems Nachdem der Server sich an einer sicheren Position befindet und ein erster Schutz vor Angreifern gegeben ist, stellt sich die Frage nach der Wahl des zugrundeliegenden Betriebssystems. Zur Auswahl stehen, in den häufigsten Fällen, das kostenpflichtige Betriebssystem „Windows“ oder das Open-Source-Projekt „Linux“ (Unix). Es kommt beim Thema Sicherheit jedoch nicht zwangsläufig auf den Preis an, denn auch kostenlose Systeme haben ihre Vorteile gegenüber kostenpflichtigen Systemen. Die Herstellung der Sicherheit rund um das Datenbanksystem ist entscheidend und der benötigte Aufwand darf den daraus resultierenden Nutzen nicht übertreffen. Es sollte eine Ausgewogenheit zwischen der Sicherheit und Performance hergestellt werden, damit der Benutzer nicht darunter leidet. Die wichtigsten Merkmale, mit dem Schwerpunkt Sicherheit, sollen im Folgenden näher erläutert werden. Sie beziehen sich auf zwei reale Systeme, die in einem Unternehmen installiert sind. Auf einem Windows-Server läuft eine Datenbank, die für die Verteilung von Software an alle internen Rechner verantwortlich ist. Ein LinuxSystem hat einen Webserver, inklusive MySQL-Datenbank, im Betrieb. 7 2.2.1 Windows 2.2.1.1 Firewall Jedes Windows Betriebssystem hat eine Firewall installiert, die meist standardmäßig eingeschaltet ist. Dennoch sollte kontrolliert werden, ob diese richtig konfiguriert ist. Sie dient hauptsächlich dem Schutz vor Angriffen im lokalen Netzwerk, ist aber keinesfalls ein Ersatz für die großen Firewalls der Rechenzentren. Auf das lokale Netzwerk haben diese Firewalls keinen Einfluss und verhindern somit auch nicht die Verbreitung von Schädlingen. In den Einstellungen der Firewall können unterschiedliche Regeln für jegliche Art von Netzwerk (privates, öffentliches oder Firmen-Netzwerk) aufgestellt werden. Ein Administrator sollte diese Einstellungen zusätzlich überprüfen und gegebenenfalls Anpassungen vornehmen, sodass sie den Anforderungen des Systems entsprechend umgesetzt sind. Eine zusätzliche Software von einem Drittanbieter zu installieren ist nicht empfehlenswert, da es wahrscheinlich ist, dass sie selbst Sicherheitslücken enthält und damit eine unnötige Gefahr für die Sicherheit der Daten darstellt, außerdem bietet die Windows-Firewall einen ausreichenden Schutz und benötigt deswegen keinen Ersatz. 2.2.1.2 Virenschutz Einen richtigen Schutz bietet die installierte Software, mit dem Namen „Microsoft Tool zum Entfernen bösartiger Software“2, nicht. Sie kann, laut Microsoft, nur „aktive Schadsoftware entfernen und nicht deren Einnistung ins System verhindern“3 und ist somit kein Ersatz für ein Antivirenprogramm. Die Software entfernt die bekanntesten Viren vom Rechner und auch nur, wenn sie sich an sensiblen Stellen im System befinden. Außerdem muss der Schädling im System aktiv werden, damit die Software ihn erkennt und Maßnahmen einleiten kann, um ihn zu entfernen. Es ist dringend zu empfehlen, ein externes Antivirenprogramm zu installieren. Dieses muss tägliche Updates erhalten und damit immer auf dem neuesten Stand sein. Ein weiteres Kriterium für die Auswahl der richtigen Antivirensoftware ist die Belastung des Systems, wenn die Software läuft. Sie darf den Rechner nicht merklich verlangsamen, denn ein Benutzer sollte weiterhin ungestört seiner Arbeit nachgehen 2 http://de.wikipedia.org/wiki/Microsoft_Tool_zum_Entfernen_bösartiger_Software, „Microsoft Tool zum Entfernen bösartiger Software“, 21.10.2011 3 s.o., „Funktion“, 21.10.2011 8 können. Insbesondere bei Servern ist die Geschwindigkeit entscheidend, deshalb sollte die Software so wenige Ressourcen wie möglich verbrauchen. Außerdem ist das Preis-Leistungsverhältnis zu beachten, denn eine gute Antivirensoftware sollte auch zu geringen Preisen erhältlich sein und trotzdem den nötigen Schutz bieten. Die Software sollte auf jeden Fall eine gute Erkennungsrate für Schädlinge haben, aber auch die Heuristik des Programms ist ein ausschlaggebendes Kriterium für die Wahl der Antivirensoftware. Das heißt sie sollte nicht nur bekannte Viren und Trojaner erkennen, sondern auch bei denjenigen mit ähnlichen Mustern Alarm schlagen. Es kommt häufig vor, dass Antivirenprogramme nicht-schädliche Programme als Viren o.ä. deklarieren. Hierbei sollte darauf geachtet werden, dass das ausgewählte Programm ein solches Verhalten möglichst nicht zeigt. Zu guter Letzt ist die Benutzerfreundlichkeit für manche Menschen ein großes Auswahlkriterium, denn die Software sollte keine unnötigen Einstellungen enthalten, an denen ein eher unerfahrener Benutzer herumbasteln kann und womöglich die Sicherheit des eigenen Rechners aufs Spiel setzt. Ein Expertenmodus sollte daher vorhanden sein, aber nicht zwingend benutzt werden müssen, um den Schutz des Rechners zu nicht gefährden. 2.2.1.3 Updates Der „Windows Server Update Service“ (kurz: WSUS) ist einer der wichtigsten Bestandteile des Server-Betriebssystems, denn er aktualisiert nicht nur die Funktionalität des Systems, sondern sorgt auch dafür, dass die sicherheitskritischen Lücken des Betriebssystems geschlossen werden. Die benötigten Updates werden dann direkt von der Microsoft Update-Website heruntergeladen. Er bringt außerdem die häufig benutzten Programme, wie Office und unter anderem auch den SQL-Server, auf den neuesten Stand. Darüber hinaus ist es sogar möglich, Software von anderen Herstellern mit diesem Service zu aktualisieren (z.B. Grafiktreiber). Daher ist im Anschluss an die Installation des Betriebssystems dafür zu sorgen, dass die wichtigsten Updates mit WSUS heruntergeladen und installiert werden. Bei Servern sind Updates besonders kritisch, da ein fehlerhaftes Update 9 katastrophale Auswirkungen haben kann. Aus diesem Grund sind automatische Updates nicht empfehlenswert und die Auswahl der zu installierenden Updates muss dem Administrator vorbehalten sein. Er kann dafür auch Regeln erstellen, die sich die Arbeit erleichtern. Da jedoch nicht nur Microsoft-Produkte Sicherheitslücken enthalten können, sondern auch, wie schon angesprochen, Software von anderen Anbietern und diese mit WSUS oft nicht abgedeckt werden, sollte dafür gesorgt werden, dass auch alle anderen nachinstallierten Programme auf dem neuesten Stand sind und die wichtigsten Sicherheitsupdates auch für sie installiert werden. Die nachhaltige Pflege der Programme ist dabei sehr wichtig und sollte ständig durchgeführt werden. 2.2.1.4 Benutzer und Passwort Mit dem Begriff „Benutzer“ sind diejenigen Benutzer gemeint, die ein Konto auf dem Server besitzen und die benötigten Rechte, um in kritischen Bereichen auf dem Server arbeiten zu können. Es muss sichergestellt werden, dass sich ausschließlich Administratoren am Server anmelden können, damit von vorneherein ausgeschlossen ist, dass nicht autorisierte Änderungen vorgenommen werden. Es sollte aber auch die Möglichkeit geschaffen werden, sich mit einem Benutzer einzuloggen, der eingeschränkte Rechte besitzt, damit dieser nur Änderungen an einem bestimmten Programm vornehmen kann. Dieser Benutzer ist beispielsweise der Administrator der SQL Datenbank und hat keine Befugnis, Änderungen am System vorzunehmen. Am einfachsten ist die Verwaltung des Servers über eine Remotedesktopverbindung, die mit Hilfe des RDP (Remote Desktop Protocol) realisiert wird. Der Administrator sollte auf dem Server daher eine eigene Gruppe für Remotedesktopbenutzer einrichten. Diese Benutzer müssen mit den oben genannten Rechten ausgestattet werden. Somit ist sichergestellt, dass sich Standardbenutzer nicht am Server anmelden können (Ausnahme s.o.). In jedem Fall müssen die Benutzer authentifiziert werden können, das bedeutet, sie müssen einen Benutzernamen und ein Passwort besitzen, um sich in das System einloggen zu können. Das Passwort des Benutzers muss einigen minimalen, aber trotzdem erforderlichen Anforderungen entsprechen, um als „sicher“ eingestuft zu 10 werden. Das Erste, was beachtet werden muss, ist, dass das Passwort keinen Teil des Benutzernamen oder des Namen enthalten darf, im dem zwei aufeinanderfolgende Buchstaben gleich sind. Das Zweite, worauf geachtet werden sollte ist, dass das Passwort mindestens sechs Zeichen lang sein und Zeichen aus drei der vier folgenden Kategorien enthalten muss: 1. Großbuchstaben (A bis Z) 2. Kleinbuchstaben (a bis z) 3. Zahlen (0 bis 9) 4. Nicht-alphabetische Zeichen (z.B. !, $, #) Sind diese Kriterien erfüllt, so kann sich getrost auf andere Sicherheitsaspekte konzentriert werden. 2.2.1.5 Verzicht auf Anwendungen / Deaktivierung von Diensten Auf unnötige oder sicherheitskritische Programme kann verzichtet werden, da sie die Sicherheit des Systems gefährden, obwohl sie nicht direkt benutzt werden. Die Tatsache jedoch, dass sie überhaupt installiert sind reicht aus, um Hackern die Möglichkeit zu geben, deren Sicherheitslücken auszunutzen. Ebenso sind Programme, die eine Internetverbindung nutzen, zu deinstallieren (z.B. Google Chrome), da diese möglicherweise, im Hintergrund und ohne dass es der Benutzer merkt, Daten an Server von Firmen weitergeben und somit auch eine potenzielle Gefahr darstellen. Zur Liste der verzichtbaren Anwendungen können außerdem alle Programme hinzugefügt werden, die nicht zum Betrieb des Servers bzw. der darauf laufenden Datenbank benötigt werden. Diese sollten, nach gründlicher Überprüfung ihrer Notwendigkeit, ebenso deinstalliert werden. Es existieren einige Dienste, die unbedingt deaktiviert werden sollten, falls sie nicht benötigt werden. Als einer der gefährlichsten Dienste gilt Telnet4, denn sollte dieser aktiviert und dessen benutzter Port (22) geöffnet sein, so ist es für einen Hacker ohne weitere Probleme möglich, Zugriff auf den Rechner zu erhalten und Daten auszuspähen. Deshalb ist es wichtig sicherzustellen, dass dieser Dienst deaktiviert ist und der verwendete Port nur für den SSH-Zugriff freigegeben wird. 4 Telecommunication Network: Zeichenorientierter Fernzugriff über eine TCP-Verbindung 11 Es ist jedoch Vorsicht geboten beim Deaktivieren von Diensten, denn es können Fehler im System auftreten. Daher ist darauf zu achten, dass wirklich nur die Dienste, die nicht benötigt werden, deaktiviert sind. Die Einstellungen sind je nach Einsatzgebiet des SQL Servers entsprechend zu konfigurieren, doch häufig sind die Einstellungen bereits vom Betriebssystem optimal gewählt worden und benötigen keine weitere Aufmerksamkeit. 2.2.2 Linux 2.2.2.1 Root Nach einer Installation des Linux-Servers, sollte zunächst das Passwort für den Benutzer root geändert werden. Dabei ist darauf zu achten, dass ein sehr sicheres Kennwort verwendet wird und kein Standardkennwort (wie z.B. 12345). Dieses Passwort muss streng geheim gehalten werden und darf deshalb nirgendwo notiert sein. Außerdem ist es von Vorteil, die Rechte zum Ausführen des Kommandos su nur für bestimmte Benutzer zuzulassen, damit das Risiko von Missbrauch eingegrenzt wird. Weiterhin ist empfohlen, auf gar keinen Fall als root an einem Linux-Rechner zu arbeiten, da dieser User ausschließlich zur Administration verwendet werden sollte. Um sicherzustellen, dass sich ein User nicht mit root per SSH auf dem Rechner einloggen kann, sollte in der Datei /etc/ssh/sshd_conf die Zeile PermitRootLogin von YES auf NO geändert werden. 2.2.2.2 Firewall Je nachdem, wo sich der Server in einem Netzwerk befindet, macht es Sinn die Firewall einzuschalten. Ein anderer Grund zum Einschalten der Firewall ergibt sich aus dem Zugriff auf diesen Rechner innerhalb des Netzes. Im folgenden Bild wird der strukturelle Aufbau der Firewalls von der RWTH Aachen bis hin zu den einzelnen Diensten auf den Servern innerhalb eines Netzwerks dargestellt. Das ausgewählte Institut soll dabei als Beispiel dafür dienen, wie die Herangehensweise bei der Konfiguration der Firewall ist. 12 Abbildung 1 - Firewalls und Dienste Die RWTH verschließt eingehende Verbindungen in einer Liste für gesperrte Dienste. Durch bestimmte Firewallregeln können ausgewählte Dienste freigeschaltet und an die entsprechenden Server innerhalb des RWTH-Netzes weitergeleitet werden. Dabei gilt nur einer der Grundsätze: „Was nicht explizit erlaubt ist, ist verboten“ oder „Was nicht explizit verboten ist, ist erlaubt“. Deshalb wird am Ende der Firewallkonfiguration alles verboten, so kann nichts durchgehen, was einem eventuell entgangen ist. Die Firewallregeln werden strikt in der Reihenfolge, in der sie aufgestellt wurden, abgearbeitet. Das bedeutet, dass sich der Verantwortliche genau im Klaren sein muss, welche Regeln zuerst aufgestellt werden und welche eine niedrigere Priorität erhalten. Über den SSH-Zugang ist es schließlich möglich, sich mehr oder weniger frei innerhalb des RWTH-Netzes zu bewegen. Der Benutzer muss auf dem jeweiligen Rechner, auf den er zugreifen möchte, lediglich einen Account haben. 13 Der TCP-Wrapper bildet eine weitere Sicherheitsschicht zwischen dem InternetDämon inetd und dem jeweiligen Dienst. Statt dem Start des Dienstes, reicht inetd die Anfrage des Clients an den tcpd weiter. Dieser prüft die Zugangsberechtigung des Users in der Datei /etc/hosts.allow. Falls der Benutzer dort eingetragen ist, wird der Dienst sofort gestartet. Andernfalls wird in der Datei /etc/hosts.deny nach einem Eintrag für den Client gesucht und falls dieser vorhanden ist, wird die Ausführung des Dienstes verweigert. In allen anderen Fällen wird der Dienst ausgeführt. Aus diesem Grund sollte am Ende der Datei /etc/hosts.deny der Eintrag ALL: ALL stehen, der die Ausführung aller Dienste verhindert, falls es nicht explizit erlaubt wurde. Auf der untersten Ebene steht die Konfiguration der zur Verfügung gestellten Serverdienste. Hierzu zählen beispielsweise Einstellungen für eine SQL-Datenbank (Kap. 3). Es sollte darauf geachtet werden, dass sich die dort vorgenommenen Einstellungen auch in Richtung Verschlüsselung (Kap. 3.3.5) bewegen und die Zugriffe, soweit es geht, beschränkt werden. Damit wird eine sichere Grundlage für alle Benutzer geschaffen. 3. Bedrohungen für die Datenbanksicherheit und effektive Schutzmechanismen Nachdem die Wahl des geeigneten Betriebssystems getroffen ist, soll in diesem Kapitel aufgezeigt werden, welche Bedrohungen für eine Datenbank existieren. Es wird dabei sowohl auf Bedrohungen aus dem Internet als auch aus dem direkten Umfeld eingegangen. Das größte Risiko ist eine SQL-Datenbank, die im Hintergrund einer Webseite läuft, denn so haben die Menschen aus dem Internet indirekten Zugriff auf die in der Datenbank befindlichen Daten. Es können sich mehrere Situationen ergeben, in denen sich eine unbefugte Person Zugang zu privaten Daten in dieser Datenbank verschafft. Zum einen gibt es Menschen, die mit Gewalt und illegalen Mitteln versuchen, die geheimen Daten in der Datenbank auszuspähen, und zum anderen 14 gibt es diejenigen Menschen, die versuchen, mit den verfügbaren Rechten an geheime Daten im Unternehmen zu gelangen und sie für private oder kommerzielle Zwecke zu missbrauchen. In diesem Sinn lassen sich die Bedrohungen in zwei Kategorien einordnen. Zum einen in externe Bedrohungen, also von außen verursachte Manipulationen des Quelltextes. Zum anderen in interne Bedrohungen, wie durch unachtsame Datenbankbenutzer verursachte Änderungen, die die Datensicherheit gefährden. 3.1 Externe Bedrohungen 3.1.1 SQL Injection Als SQL Injection werden Angriffe bezeichnet, bei denen handelsübliche Formularfelder (z.B. Input-Felder mit dem Typ „text“) zweckentfremdet werden und statt der geforderten Eingabe ein SQL-Statement eingefügt wird. Mit diesem kann sich der Benutzer Zugang zur gesamten Datenbank verschaffen. Über 90 Prozent5 der Ursachen für Datendiebstahl gehen auf das Konto von SQL Injection bzw. auf eine unzureichende Absicherung von SQL-Anfragen, bevor diese an den Server gesendet werden. Die SQL-Befehle können dabei, je nachdem wie das Feld ausgewertet wird, direkt in der URL ergänzt oder in ein Textfeld eingegeben werden. Eine typische SQL-Anweisung in PHP, ohne Validierung, sieht folgendermaßen aus: $query = “SELECT * FROM ‘adressen‘ WHERE ‘haus_nr‘ LIKE ‘“.$_GET[‘nummer‘].“‘“; Dieses Statement wird, so wie es dort steht, an die Datenbank weitergeleitet und theoretisch kann für die Variable „nummer“ jeder Wert, also auch ein SQL-Befehl, eingesetzt werden. Falls eine Person mit SQL-Kenntnissen nun statt einer Zahl einen String in das Feld „nummer“ eingibt, wie beispielsweise: 1‘; DROP TABLE ‘adressen‘;-Dann sieht die Abfrage folgendermaßen aus: 5 http://cwe.mitre.org/top25/index.html#Listing, 24.10.2011 15 $query = “SELECT * FROM ‘adressen‘ WHERE ‘haus_nr‘ LIKE ‘1‘; DROP TABLE ‘adressen‘;--“; Die Ausführung dieses Befehls hat zur Folge, dass die komplette Tabelle „adressen“ gelöscht wird. Auf diesem Weg lassen sich auch sensible Daten, wie Passwörter, EMail-Adressen oder Bankverbindungen, ausspähen und neue Benutzer anlegen, die über Administratorrechte verfügen. Schutzmaßnahmen: Der grundlegende Schutz vor SQL Injection ist die Prüfung der Eingabedaten auf ihre Korrektheit. Das bedeutet, dass kontrolliert werden muss, ob auch wirklich nur die Werte eingegeben wurden, die erwartet werden (Zahlen in Zahlenfelder und Texte in Textfelder). Eine weitere Methode zur Sicherung der Abfrage ist die PHP-Funktion: mysql_real_escape_string(). Mit ihr werden alle Zeichen maskiert, mit denen die Möglichkeit besteht, die SQL-Abfrage zu verlassen. Sie bietet einen ausreichenden Schutz vor SQL Injection, doch sie ist nicht die sicherste Möglichkeit. Einen hinreichenden Schutz bieten in PHP nur Prepared Statements. Sie sind in den Klassen „PHP Data Object“ (kurz „PDO“) und „PDOStatement“ enthalten. Hierbei wird ein SQL-Statement mit Platzhaltern erzeugt und schon vorab, mit dem Befehl prepareStatement($query), an den Server gesendet und somit „vorbereitet“. Das bedeutet, dass die Abfrage an sich nicht mehr verändert werden kann, sondern nur noch die freien Paramater darin, mittels bindParam(“:name“, $name), durch konkrete Werte ersetzt werden können. 3.1.2 Cross-Site-Scripting (XSS) Beim Cross-Site-Scripting geht es darum, JavaScript-Code in Formularfelder einzufügen, um zu schauen, ob diese Felder auf ihren Inhalt überprüft werden. Falls ein Feld nicht genügend validiert ist, so ist es möglich, durch einen einfachen Befehl wie: <script type="text/javascript">alert("XSS")</script>, der in dieses Feld eingefügt wurde, JavaScript auszuführen. Die Gefahr besteht darin, dass ein Angreifer durch diese Methode an die privaten Login-Daten anderer Benutzer gelangen kann. Durch Benutzung komplizierterer Befehle kann er sich Cookies oder 16 Bestandteile einer Session dieser Benutzer zu Eigen machen, sie manipulieren und dann noch mehr Schaden mit den erhaltenen Daten anrichten. Üblicherweise wird XSS auf die GET-Parameter in der URL angewendet und ausgeführt. Das ist eine einfache und doch sehr effektive Methode, um an private Daten zu kommen. Schutzmaßnahmen: Es ist auf jeden Fall erforderlich, so wie bei SQL Injection, alle Felder, die in eine Datenbank eingetragen werden, zu validieren und auf XSS-Code zu überprüfen. Dabei sollten sowohl die GET- als auch die POST-Parameter untersucht werden. In PHP existieren mehrere Funktionen, mit denen die Ausführung von JavaScript-Code verhindert werden kann. Die nützlichsten dieser Funktionen sind: htmlspecialchars() und htmlentities(). Sie bearbeiten die Eingabe so, dass dort enthaltene HTML-Tags nicht interpretiert werden, sondern umgewandelt und als Text ausgegeben werden. Ist die Eingabe von HTML-Tags jedoch erwünscht, wie es beispielsweise in Foren der Fall ist, so ist der Schutz vor Cross-Site-Scripting schwieriger, denn es müssen eigene Funktionen geschrieben werden, die JavaScript-Code filtern. Dabei besteht die Gefahr, dass nicht alle Möglichkeiten in Erwägung gezogen werden und somit die Erfolgschancen von Angreifern erhöht werden, an Daten zu kommen. 3.1.3 Denial-of-Service (DoS) Bei dieser Art von Angriff wird der Datenbankserver mit einer hohen Anzahl von Anfragen belastet, dadurch kann ein bestimmter Dienst, z.B. der HTTP-Dienst, keine weiteren Anfragen verarbeiten und der Server ist somit außer Gefecht gesetzt. Eine andere Möglichkeit ist die Ausnutzung von Programmierfehlern in der Serversoftware, um diese zum Absturz zu bringen. Vor einiger Zeit wurden namhafte Dienstleister im Internet wie „MasterCard“, „Visa“ und „PayPal“ durch sogenannte Botnetze angegriffen und mussten ihren regulären Betrieb kurzzeitig einstellen. Diese DDos-Angriffe (Distributed Denial of Service) werden von unzähligen Rechnern gleichzeitig auf einen Server konzentriert und meistens hat dieser keine Chance, ihnen standzuhalten. 17 In den schlimmsten Fällen kann mit dieser Angriffsart die IP-Adresse des Servers geändert und der Server unerreichbar für alle anderen gemacht werden. Schutzmaßnahmen: Einen soliden Schutz bieten Sperrlisten, in denen die IP-Adresse des Angreifers notiert ist und die ankommenden Pakete dieser IP-Adresse schlicht verworfen werden. Die Firewall kann auch so eingestellt werden, dass nur eine begrenzte Anzahl an Paketen von einer Quell-IP durchgelassen werden. Dadurch verliert ein DoS-Angriff an Effektivität, da viele Pakete bereits vor der Verarbeitung durch die Serverdienste verworfen werden. 3.2 Interne Bedrohungen 3.2.1 Missbrauch von Zugriffsrechten Die größte Gefahr für die Datensicherheit in einem Unternehmen geht vom Mitarbeiter aus, der seine Zugriffsrechte für eine Datenbank mit sensiblen Daten missbraucht. Besitzt er z.B. das Recht, kundenbezogene Daten auszulesen, so kann er sie kopieren und für viel Geld an Konkurrenzfirmen weiterverkaufen. Eine Überschreitung des Zuständigkeitsbereichs stellt ein hohes Risiko für Unternehmen da und sollte genau durchdacht werden. Ein fast genauso schlimmes Szenario ist ein weniger erfahrener Datenbankbenutzer, der Daten abfragt, diese lokal speichert und somit einer Vielzahl von Gefahren aussetzt, wie Trojanern oder Viren, die seinen Rechner infizieren könnten. In diesem Zusammenhang ist auch der Missbrauch von überproportional vielen Zugriffsrechten zu betrachten. Hierbei kann es leicht zu Fällen kommen, in denen die Rechte dazu verwendet werden, um Daten zu manipulieren. Häufig taucht dieses Problem bei Administratoren von Datenbanken auf, die meist uneingeschränkten Zugriff auf das Datenbanksystem haben. Andererseits treten auch Fälle auf, in denen der Administrator einen neuen Benutzer, sei es aus Zeitgründen oder mangels näherer Informationen der Personalverwaltung, mit zu vielen Zugriffsrechten ausstattet und ihm dadurch freies Gewähren in für ihn sonst unzugängliche Bereiche verleiht. Dies ist besonders gefährlich bei kürzlich 18 eingestellten Mitarbeitern, zu denen noch keine ausreichende Vertrauensbasis geschaffen wurde, oder bei Mitarbeitern, die kurz vor der Entlassung stehen. Schutzmaßnahmen: Die Rechte sollten für jeden Benutzer so eingeschränkt werden, dass er nur Zugriff auf Daten erhält, die in seinem Zuständigkeitsbereich liegen. Weiterhin sollte durch Logdateien überprüft werden, welche Datenbestände ausgelesen wurden und wie oft das geschehen ist. Schließlich ist eine überdurchschnittlich häufige Zugriffszahl auf einen Datenbestand äußerst verdächtig. Weiterhin muss das Verhalten der Benutzer beobachtet und bei ungewöhnlichen Vorkommnissen genauer unter die Lupe genommen werden, welche Daten dieser Benutzer verwendet. Ein Datenbankadministrator sollte für jeden Mitarbeiter einen Benutzer in der Datenbank anlegen. Es ist außerdem erforderlich, jedem Benutzer ein anderes Passwort zu geben und die Tabellen, auf die er zugreifen darf von Anfang an einzugrenzen. Ein Benutzer wird unter MySQL wie folgt erstellt: CREATE USER <benutzername> IDENTIFIED BY <passwort>; Die Rechtevergabe wird in allen Datenbanksystemen mit dem Befehl grant realisiert. Um einem Benutzer die Rechte zum Lesen, Einfügen, Updaten und Löschen zu geben, kann folgender Befehl verwendet werden: GRANT SELECT, INSERT, UPDATE, DELETE ON <tabellenname> TO <benutzername> [ WITH GRANT OPTION ]; Die letzte Zeile ist optional und regelt nur, ob der Benutzer Rechte an weitere Personen verteilen kann oder nicht. Auf eine ähnliche Art werden die Rechte wieder entzogen: REVOKE DELETE ON <tabellenname> FROM <benutzername> [ CASCADE CONSTRAINTS ]; 19 Dadurch verliert der Benutzer das Recht zum Löschen von Datensätzen in der angegebenen Tabelle. Falls er dieses Recht noch an andere weitergegeben hat, so wir diesen Personen, mit der letzten Zeile, ebenso das Recht entzogen. Der Datenbankadministrator hat ebenso die Möglichkeit, sogenannte „Views“ für die Benutzer einzurichten. Diese haben den Vorteil, dass der Benutzer nur die Daten zu sehen bekommt, für die er autorisiert ist. CREATE OR REPLACE VIEW <name> AS SELECT t1.spalte1, t2.spalte1, t2.spalte2 FROM testable1 t1 JOIN testtable2 t2 USING (id) WHERE t1.typ != ‘Chef’ AND t2.typ != ‘Chef’ Damit wird eine Sicht erstellt, die die Inhalte von zwei Tabellen kombiniert und nur die Daten anzeigt, die nicht vom Typ „Chef“ sind, womit die sensiblen Daten geschützt werden und ein eingeschränkter Zugriff ermöglicht wird. Der Benutzer braucht jetzt nur noch die Rechte, um auf dieser Sicht zu arbeiten und es ist sichergestellt, dass keine Informationen unkontrolliert weitergegeben werden. 3.2.2 Fehlerhafte Datenbankkonfiguration Viele Datenbanksysteme laufen über Jahre problemlos und ohne Angriffe von Hackern, doch das ist noch lange keine Garantie dafür, dass es auch weiterhin so bleibt. Mit der Zeit könnten einige Sicherheitslücken aufgedeckt sein und inzwischen aktiv von Angreifern genutzt werden, um an den Inhalt dieser, eventuell sicherheitskritischen, Datenbanken zu gelangen. Es kommt auch häufig vor, dass die Datenbank nach dem Erstellen nicht weiter konfiguriert wurde und somit noch Standardwerte für Benutzer und Passwörter enthält, womit die Eindringlinge leichtes Spiel haben, an die Daten zu kommen. Schutzmaßnahmen: Es sollte unbedingt darauf geachtet werden, dass die aktuellsten Sicherheitsupdates und Patches so schnell wie möglich für die Datenbank installiert werden, denn eine 20 Sicherheitslücke ist, solange sie nicht behandelt wird, ein Risiko für alle in der Datenbank enthaltenen Daten. Der Patch sollte daraufhin untersucht werden, welche Systemänderungen er nach sich zieht und ob diese Änderungen für den Administrator sinnvoll erscheinen. Der Datenbankadministrator muss sich darum kümmern, dass eine möglichst sichere Konfiguration der Datenbank vorliegt und wenig Spielraum für Angriffe lässt. Dazu gehört, dass der Zugriff außerhalb des Firmennetzes untersagt wird, außerdem ist ein verschlüsselter Zugang innerhalb des Netzes unbedingt erforderlich. Ein Zugriff auf die Datenbank sollte, wenn möglich, nur über localhost geschehen. Damit wird sichergestellt, dass kein anderer Rechner sich mit der Datenbank verbinden kann. Zusätzlich muss das Passwort für den Benutzer root und eventuell auch dessen Benutzername umgehend geändert werden, da dies der Standardbenutzer mit allen Privilegien ist und ein Angreifer nur noch das Passwort erraten müsste, um Zugriff zur Datenbank zu bekommen. Es sollte im Anschluss dafür gesorgt werden, dass nur der root-Benutzer alle Privilegien zur Manipulation der Datenbank hat und sonst kein anderer. Wie diese Rechte verteilt und entzogen werden, wird in Kapitel 3.2.1 erläutert. Da die Konfigurationsdatei /etc/my.cnf einer MySQL-Datenbank eine globale Datei ist und wichtige Einstellungen der Datenbank Eigentümerrechte mit dem Unix-Befehl chown root enthält, sollten die /etc/my.cnf an den Benutzer root übergeben werden, doch da diese Datei von anderen Programmen lesbar sein muss, muss mit dem Befehl chmod 644 /etc/my.cnf ein Modifizierungsrecht an den Besitzer und das Leserecht an alle anderen Benutzer erteilen. 3.3 Allgemeine Schutzmechanismen (Ergänzung) Es existieren drei Grundarten von Sicherheitsaspekten, durch die die Datenbanksicherheit definiert ist. Hinzu kommt die Verschlüsselung von Daten in der Datenbank als ebenso wichtiger Bestandteil eines Datenbankmanagementsystems. Die drei Arten lauten Authentifizierung, Autorisierung und Auditing. Zu den ersten beiden Methoden wurden bereits in den vorherigen Kapiteln einige Beispiele und 21 Erläuterungen dargelegt und nun sollen auch der letzte Punkt sowie die Verschlüsselung beschrieben werden. Unter Auditing ist das Protokollieren von Benutzern und deren Aktionen zu verstehen. Dadurch kann leicht nachvollzogen werden, welcher Benutzer zu welcher Uhrzeit, auf welche Daten zugegriffen hat und somit hat der Administrator einen Nachweis für unbefugte Zugriffe auf die Datenbank. Dieses Sicherheitskonzept ist eines der wichtigsten Werkzeuge für Datenbankadministratoren, da es eine sehr gute Übersicht über alle Datenbankzugriff und –änderungen gibt. Anhand des Auditing, wie es in einer Oracle-Datenbank zur Ausführung kommt, sollen im Folgenden die wichtigsten Arten des Auditing aufgezeigt werden. 3.3.1 Mandatory Auditing Das Mandatory Auditing wird automatisch gestartet und kann vom Administrator nicht beeinflusst werden. Es werden alle Start- und Stop-Operationen, die von Benutzern mit hohen Datenbankprivilegien (SYSDBA- oder SYSOPER-Rechte) auf die Datenbank ausgeführt wurden, mitprotokolliert. 3.3.2 SYS Auditing Mit dieser Auditing-Art werden sämtliche Aktionen vom Benutzer SYS und von anderen Benutzern mit SYSDBA- oder SYSOPER-Rechten, mitgeschrieben. Es kann dabei schnell passieren, dass der Speicherplatz auf der Festplatte nicht mehr ausreicht, um weitere Daten zu speichern. Die Aufgabe des Systemadministrators ist, dass die Daten an einen Daemonprozess weitergeleitet werden und somit dieser die Übersicht über den nicht-verfügbaren Speicher besitzt. 3.3.3 Standard Auditing Beim Standard Auditing werden Systemprivilegien mitgeschrieben, darüber hinaus werden SELECT, GRANT, REVOKE auf TABLES, VIEWS, SEQUENCES, STORED PROCEDURES, sowie FUNCTIONS und PACKAGES protokolliert, außerdem werden 22 DDL- und DML-Statements mitgeschrieben. 3.3.4 Fine Grained Auditing (FGA) Das FGA ermöglicht es, eigens angefertigte Policies an Datenbankobjekte anzuhängen. Sie werden bei der Ausführung von DDL- und DML-Statements überprüft und u.U. mitgeloggt. Es bietet die optimale Möglichkeit, um nur die relevanten Aktionen mitzuloggen und somit die Auswertung der Log-Dateien zu erleichtern. Der große Nachteil bei dieser Methode besteht darin, dass ein Objekt ohne Policy nicht in den Log-Dateien auftaucht und damit nicht ausgewertet werden kann. Ein weiterer Nachteil besteht darin, dass die Wartung der Policies in großen Datenbanksystemen aufwendig ist und viel Zeit in Anspruch nimmt und somit kaum zu realisieren ist. 3.3.5 Verschlüsselung von Daten Am häufigsten wird in diesem Zusammenhang das Passwort von Benutzern der Datenbank verschlüsselt und gespeichert. Hierbei wird eine Einwegfunktion verwendet, damit niemand so einfach das Passwort im Klartext wiederherstellen und lesen kann. Die Verschlüsselung alleine reicht jedoch oft nicht aus, denn bei zu unsicheren oder trivialen Passwörtern hilft selbst der beste Verschlüsselungsalgorithmus nicht weiter. Wie ein sicheres Passwort zu erstellen ist, wird in Kap. 2.2.1.3 beschrieben. Desweiteren sollten alle sensiblen Daten, wie Kreditkarteninformationen, ausschließlich verschlüsselt abgespeichert werden, um einen grundlegenden Schutz für die Daten zu gewährleisten. Für das Verschlüsseln der Daten stehen mehrere Funktionen in einer Datenbank, hier MySQL, zur Verfügung. Die am häufigsten verwendeten Funktionen sind PASSWORD, MD5 und SHA1, welche meistens dazu verwendet werden, um Passwörter zu verschlüsseln, wobei die letzten beiden Funktion kürzere Hashes ergeben als die erste Funktion. Somit ist PASSWORD die sicherste der zur Verfügung stehenden Funktionen und erschwert es Dieben von Datenbeständen, das Passwort zu rekonstruieren. 23 Literaturverzeichnis Auditing. 20. 09 2010. http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Auditing (Zugriff am 26. 10 2011). Boddenberg, Ulrich B. Galileo Computing - Windows Server 2008 R2 - 14 "Innere Sicherheit". Galileo Press GmbH. http://openbook.galileocomputing.de/windows_server_2008/windows_server_2008_kap_14_ 001.htm (Zugriff am 21. 10 2011). —. Galileo Computing - Windows Server 2008 R2 - 19.4 Benutzerzugriff. http://openbook.galileocomputing.de/windows_server_2008/windows_server_2008_kap_19_ 004.htm (Zugriff am 21. 10 2011). Denial of Service. http://de.wikipedia.org/wiki/Denial_of_Service (Zugriff am 25. 10 2011). Eilers, Carsten. About Security #14: Cross-Site Scripting. 14. 07 2005. http://entwickler.de/zonen/portale/psecom,id,126,news,22893,p,0.html (Zugriff am 24. 10 2011). —. About Security #15: Cross-Site Scripting verhindern. 21. 07 2005. http://entwickler.de/zonen/portale/psecom,id,126,news,22996,p,0.html (Zugriff am 25. 10 2011). Haberl, Christian. Sicherheit mit Windows Bordmitteln und Gratistools – Die Grundregeln. 20. 02 2011. http://blog.this.at/post/2011/02/20/Sicherheit-mit-Windows-Bordmitteln-und-demkostenlosen-Microsoft-Security-Essentials-20.aspx (Zugriff am 21. 10 2011). jesser. Top-Datenbankbedrohungen. 14. 08 2011. http://www.itexperts.edilog.de/2011/09/14/top-datenbankbedrohungen/ (Zugriff am 25. 10 2011). Kishore, Aseem. thebackroomtech. 2010. http://thebackroomtech.com/2008/03/10/windowsserver-2008-password-complexity-requirements/ (Zugriff am 21. 10 2011). 24 25