Sicherheit beginnt bei der Datenbank

Schutz vor SQL-Injections

| Autor / Redakteur: Jan Schulze* / Ulrike Ostler

Mithilfe von Maxscale von MariaDB bekommt die Datenbank eine Schutzschicht.
Mithilfe von Maxscale von MariaDB bekommt die Datenbank eine Schutzschicht. (Bild: © K.- P. Adler - Fotolia)

Ein weit verbreitetes und altes Mittel, um Unternehmen online anzugreifen, sind SQL-Injections: Das Einschleusen von bösartigen Befehlen in Datenbankabfragen im Internet. Der Schutz davor ist komplex und muss auf Datenbankebene erfolgen. Mit dem Datenbank-Proxy „MariaDB Maxscale“ können Unternehmen und Anwender eine zusätzliche Sicherheitsschicht einfügen.

Cyber-Crime kommt die Unternehmen weltweit teuer zu stehen. Alleine in Deutschland verursachten Cyber-Kriminelle im Jahr 2014 laut einer Studie des amerikanischen Ponemon Institut einen durchschnittlichen Schaden von 6,1 Millionen Euro. 1,34 Angriffe verzeichneten demnach deutsche Unternehmen im Durchschnitt. 20 Prozent der durch Cyber-Attacken entstandenen Kosten entfielen laut der Studie auf Phishing und Social Engineering, dicht gefolgt von Web-basierenden Angriffen wie SQL-Injections.

SQL-Injections basieren darauf, dass heute fast jede noch so kleine Web-Site auf einer Datenbank aufbaut. Alle Content-Management-Systeme (CMS) nutzen mindestens eine Datenbank, in der der Content in Form von Bildern, Texten und sehr häufig auch Teile der Kundendaten abgelegt sind. Gelingt es einem Angreifer, in die Kommunikation zwischen Web-Server und Datenbank einzugreifen, kann er die gespeicherten Informationen auslesen. Dass eine Web-Anwendung auf eine Datenbank zugreift, erkennt man recht zuverlässig an dem Fragezeichen in der Adresszeile des Browsers:

http://app.com/show.php?cid=1234

Daraus wird von der Web-Anwendung eine einfache SQL-Query generiert und an die Datenbank geschickt:

SELECT * FROM Customers WHERE customer_id = 1234

Ergänzendes zum Thema
 
Über MariaDB Maxscale

Bei diesem Beispiel handelt es sich um die Abfrage der Kundennummer 1234, die Datenbank liefert als Ergebnis einen Kundendatensatz zurück. Wird die Anfrage an die Datenbank – also der Teil hinter dem Fragezeichen – nicht entsprechend auf gültige Werte geprüft, kann ein Angreifer auf sehr einfachem Weg sich Zugang zu allen Kundendaten verschaffen. Er muss die Abfrage nur geringfügig manipulieren:

http://app.com/show.php?cid=1234 OR 1=1

Aufwändiger Schutz der Datenbanken

Es gibt einfache Ansätze, um die Gefahr eines Datenlecks zu reduzieren. So kann der Administrator etwa festlegen, dass nur ein Datensatz angezeigt werden darf. Dazu definiert er die SQL-Query, die durch die Web-Anwendung erzeugt wird, als

SELECT * FROM Customers WHERE customer_id = ? LIMIT 1

Sicher ist dieser Ansatz nicht. Die Datenbank-Sprache SQL (Structured Query Language) verfügt über sehr vielfältige Möglichkeiten, mit Datenbanken zu arbeiten, was auch den Cyber-Kriminellen bekannt ist. Das Limit auf einen Datensatz lässt sich etwa so umgehen:

http://app.com/show.php?cid=1234 OR 1=1 –

Daraus entsteht als Query

SELECT * FROM Customers WHERE customer_id = 1234 -- LIMIT 1

Die beiden einfachen Striche werden also mit den anderen Parametern an die Datenbank übergeben mit der Folge, dass die LIMIT-Funktion nun als Kommentar markiert ist und damit nicht ausgeführt wird.

SQL-Injections sind also nicht besonders kompliziert. Wie komplex die Absicherung dagegen ist, zeigt sich mit einer gewissen Regelmäßigkeit an den Sicherheitslücken der bekannten CMS-Lösungen wie WordPress oder Drupal. So waren Anfang dieses Jahres über eine Million WordPress-Sites für SQL-Injections anfällig. Der Fehler steckte in einem kleinen Analyse-Plugin. Vergangenen Herbst erwischte es Drupal, hier lag der Fehler im Core-System. Auch große Unternehmen sind nicht davor gefeit, über diesen Vektor angegriffen zu werden. So hatten sich zum Beispiel im Oktober 2014 Hacker auf diesem Weg Zugriff auf die Kundendaten des Playstation-Netzwerks von Sony verschafft.

Inhalt des Artikels:

Was meinen Sie zu diesem Thema?
definiert der Datenbank-Administrator eine Regel, die den Befehl OR abweist, wenn danach ein...  lesen
posted am 17.07.2015 um 09:51 von Unregistriert


Mitdiskutieren
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 43499711 / Software)