SQL-Injection: Alte Sicherheitslücke gefährdet Datenbanken

Fachbeitrag

1998 wurde die Angriffsmethode „SQL-Injection“ (SQLi) erstmals entdeckt. Seitdem bedienen sich Angreifer jedoch noch immer diesem gängigen Einfallstor. Wir erläutern, wie der Angriff funktioniert und wie man bekannte Schwachstellen schließt.

Was ist eine SQL-Datenbank? 

„Structured Query Language“ ist eine Datenbanksprache, die zum Bearbeiten und Abfragen von darauf basierenden Datenbeständen verwendet wird. Bei Webshops können diese Datenbestände z.B. eine Liste aller Produkte sein. Doch die meisten Datenbanken erhalten deutlich mehr Informationen. Nicht selten beinhalten sie auch Angaben über Anmeldedaten oder vergangene Bestellung von registrierten Nutzern. Gerade solche sensiblen Nutzerdaten sollten natürlich gehashed und nicht im Klartext abgespeichert sein.

Was versteht man unter SQL-Injection?

Um Datenbanken zu verwalten, gibt es eine Vielzahl von Befehlen. Diese werden jedoch nicht nur von den Besitzern der Website für ihr Backend genutzt. Bei einem SQL-Injection-Angriff nutzen Unbefugte dieselben SQL-Befehle, um die Datenbank zu manipulieren. Diese Funktionszeichen wie z.B. ein doppelter Bindestrich, ein Semikolon oder Anführungszeichen stellen Sonderfunktionen für den SQL-Interpreter dar. Hiermit wird eine externe Beeinflussung der Datenbank ermöglicht.

Um die Befehle an die Datenbank zu senden, verwenden die Angreifer die Anmeldemaske für registrierte Nutzer oder auch die Suchfunktion der Website. Wenn dort die oben genannten Befehle, statt der eigentlichen Nutzerdaten oder Suchanfragen eingegeben werden und diese ungefiltert zur Datenbank gelangen, hat dies schwerwiegende Folgen. Angreifer könnten, mit nur wenigen Befehlen, die Datenbank und deren Inhalt auslesen, verändern oder gar löschen.

Welche Arten von SQL-Injection gibt es?

Aufgrund der vergleichsweisen simplen Vorgehensweise der Angreifer, die in der einfachsten Form keiner weiteren Software bedarf, stellt diese Methode seit Jahren ein beliebtes und weiterhin erfolgreiches Angriffsmuster dar.

Eine Unterart dieses Angriffs ist die sog. Blind SQL-Injection. Sie wird verwendet, um das Antworten- und Verhaltensmuster des Servers preiszugeben und somit mehr über seine Struktur zu erfahren. Des Weiteren beschränken sich SQL-Injection-Angriffe mittlerweile nicht mehr nur auf das bloße Eingeben von Befehlen. Angreifer können Cookies verändern, um schadhaften Code bzw. SQL-Befehle an die Backend-Datenbank zu übertragen. Wenn die Web-Anwendung dann versucht, die vom Cookie gesammelten Daten zu verarbeiten, werden die Befehle eingeschleust. Der fremde Code kann nicht nur die Datenbank manipulieren, sondern im Extremfall den gesamten Server kompromittieren. Das Schadenspotential einer ungesicherten Datenbank liegt auf der Hand.

Wie sich zeigt, gibt es eine Vielzahl von Methoden einen SQL-Injection-Angriff mit mehr oder weniger aufwendigen Schritten durchzuführen. Doch wie aufwendig gestaltet sich der Schutz vor diesen Angriffen?

Welche Gegenmaßnahmen sollten getroffen werden?

Auf den ersten Blick sind die wichtigsten Maßnahmen einfach zu identifizieren.

  • Es empfiehlt sich, eine ausgereifte Filterung der Eingaben zu erstellen. Beispielsweise sollten Sonderzeichen aus der Suchanfrage oder der Anmeldemaske ignoriert anstatt verarbeitet werden.
  • Kritische Befehle mit großen Auswirkungen sollten grundsätzlich blockiert werden. Bei der Filterung ist es ratsam, die Eingaben zu kontextualisieren, sodass bspw. in einem Feld für Telefonnummern nur Ziffern erlaubt sind.
  • Es sollten keine externen Fehlermeldungen nach einer Anfrage ausgegeben werden. Jegliche Ausgaben können dem Angreifer Informationen liefern, welche gegen die Website verwendet werden könnten.
  • Es empfiehlt sich, die Zugriffsrechte auf ein Minimum zu reduzieren. Auch WAF-Lösungen (Web Application Firewall) helfen mit vordefinierten Regeln dabei den Datenaustausch zu überwachen.

Um die Schwachstellen im Quellcode zu finden, gibt es verschiedene Scan-Tools, die automatisch nach Schlupflöchern suchen. Auf der anderen Seite nutzen Angreifer ebenfalls Skripte, um die unterschiedlichen Anfragen automatisiert laufen zu lassen.

Neben den genannten Sicherheitsmaßen ist es außerdem sinnvoll, die Fehlermeldungen und Logdateien der Datenbank sorgfältig zu überwachen. Denn in den meisten Fällen generiert die Eingabe vieler verschiedener Befehle bei einem SQL-Injection-Angriff eine Vielzahl von Fehler- oder Ereignismeldungen.

Forensische Analyse der Ereignisse

Diese Meldungen werden u.a. im „General Query Log“ gespeichert. Hier können Verbindungsinformationen und alle abgesetzten Statements nachvollzogen werden. Es muss beachtet werden, dass diese Logfiles nicht per Default aktiviert sind, sondern eigenhändig eingestellt werden müssen. Auch aus dem „Binary Log“ lassen sich Schlüsse ziehen, welche Daten modifiziert wurden. Beispielsweise kann aus den „Transaction Logs“ entnommen werden, welcher Nutzer zu welchem Zeitpunkt z.B. einen „Drop Table“ Befehl ausgeführt und somit eine gesamte Tabelle aus einer Datenbank gelöscht hat.

Fazit

SQL-Injection bleiben auch Jahre nach der ersten Entdeckung eine einfache Methode für Angreifer, Datenbanken über die Eingabefelder auf einer Website zu manipulieren. Doch ist es ebenso möglich, mit einer Filterung der Eingaben, Angreifer zu verlangsamen und Vorfälle zu verhindern.

intersoft consulting services AG

Als Experten für Datenschutz, IT-Sicherheit und IT-Forensik beraten wir deutschlandweit Unternehmen. Informieren Sie sich hier über unser Leistungsspektrum:

IT-Sicherheit Beratung

Hinterlassen Sie einen Kommentar

Die von Ihnen verfassten Kommentare erscheinen nicht sofort, sondern erst nach Prüfung und Freigabe durch unseren Administrator. Bitte beachten Sie auch unsere Nutzungsbedingungen und unsere Datenschutzerklärung.