Immer wieder landen große Datensätze an Kundendaten im Darknet und werden zum Verkauf angeboten. Betroffen sind sowohl kleinere Unternehmen, Mittelständler, aber auch Global Player wie beispielsweise Sony zeigten sich schon anfällig. Meist gelangen Hacker durch SQL-Injections an die sensiblen Daten. Eine SQL-Injection nutzt eine Sicherheitslücke, die bei fehlerhafter Konfiguration der Verbindung zwischen Webanwendung und Datenbank entsteht.
Auf der Datenbank gespeicherte Datensätze lassen sich so abgreifen. Deshalb listet das gemeinnützige „Open Web Application Security Project“ Injections als Top-Sicherheitsrisiko von Webanwendungen. Wir erklären die Funktionsweise von SQL-Injections und wie man sich schützen kann.
Nach welchem Prinzip funktionieren SQL-Injections?
Bei einer SQL-Injection wird die Kommunikation der Webanwendung mit der Datenbank manipuliert. Dazu werden zusätzliche Befehle in Datenbankabfragen injiziert und so die Logik der Abfrage verändert. SQL ist die Sprache, die verwendet wird, um mit der Datenbank zu kommunizieren. Sie wird (in leicht abgewandelter Form) bei verschiedenen relationalen Datenbanksystemen verwendet (z.B. MySQL oder MariaDB).
Genutzt werden für die Injektion Eingabemöglichkeiten für Benutzer auf der Webseite, zum Beispiel ein Such- oder Login-Feld. Anstatt der vorgesehenen Eingabe wird ein SQL-Befehl eingeben. Wie dies in der Praxis aussieht und funktioniert, verdeutlicht das folgende vereinfachte Beispiel:
Durch die Benutzereingabe eines Login-Feldes wird folgender SQL-Befehl ausgeführt:
SELECT ID FROM nutzer WHERE login = ‘Benutzername’ AND pwd = ‘Passwort’
Die grün markierten Stellen sind die Eingaben, die der Benutzer in das Login-Formular eingibt, wenn er es wie vorgesehen nutzt. Ein Login wird genehmigt, wenn Benutzername und Passwort übereinstimmen. Der Angreifer erweitert nun seine Eingabe durch den rot markierten Code:
SELECT ID FROM nutzer WHERE login = ‘Benutzername’ OR 1=1;’ AND pwd = ‘Passwort’
Durch die Erweiterung wird die Logik der Datenbankabfrage verändert. Mit dem Hochkomma beendet er die Bedingung und fügt einen neuen Befehl an. Die Bedingung 1=1 ist immer wahr, ein Login wird also genehmigt.
Welche Schäden lassen sich durch eine SQL-Injection anrichten?
Mit SQL-Injections lässt sich nicht nur die Authentifizierung eines Logins umgehen. Die Möglichkeiten können sehr umfassend sein. Durch geschickte Injektionen lassen sich sämtliche Inhalte der Datenbank auslesen und kopieren, weshalb ein großer Teil der Datenleaks der letzten Jahre auf erfolgreichen SQL-Injections basiert. Indem Daten aus der Datenbank gelöscht werden, lässt sich auch der Betrieb von Anwendungen lahmlegen. Hat der Betreiber der Datenbank kein Backup angelegt, ist zudem ein Datenverlust zu beklagen.
Es besteht darüber hinaus die Möglichkeit, eigenen Code in die Datenbank einzuschleusen und auf diesem Weg das angegriffene System zum Beispiel für die Verbreitung von Schadcode zu missbrauchen. In einigen Fällen sind über SQL-Injections sogar Zugriffe auf die Shell des Servers möglich, sodass die gesamte Kontrolle über den Server übernommen werden kann.
Wer ist gefährdet?
Ein großer Teil der heutigen Angriffe via SQL-Injection findet nicht manuell statt, sondern wird vollkommen automatisiert ausgeführt. Bot-Netze durchkämmen das gesamte Internet, um Webseiten mit Standard-Attacken anzugreifen. Daher ist jede Webseite, die relationale Datenbanksysteme im Einsatz hat, potenziell für SQL-Injections gefährdet. Die Größe des beispielsweise hinter der Webseite stehenden Unternehmens ist irrelevant.
Wie kann man sich vor SQL-Injections schützen?
Zum Glück gibt es effektive Methoden, die eigenen Webanwendungen vor SQL-Injections effektiv abzusichern. Der erste Schritt lautet, den Daten der Benutzereingaben nicht bedingungslos zu vertrauen und stattdessen die Eingabedaten auf erwartete Werte zu überprüfen. Spezielle Sonderzeichen sollten aus Benutzereingaben herausgefiltert oder maskiert werden.
Grundsätzlich vor SQL-Attacken absichern lassen sich Webseiten, indem man die Benutzereingaben vom SQL-Interpreter fernhält. Ermöglicht wird der Schutzmechanismus durch den Einsatz von Prepared Statements. Dabei handelt es sich um eine spezielle Form von Templates für Datenbankabfragen, die durch variable Parameter angepasst werden. Zusätzlich zum Sicherheitsbonus erhöht dies auch die Performance der Datenbank.
Darüber hinaus lassen sich auch auf Seite der Datenbank Sicherheitsmaßnahmen ergreifen. Sollte ein Einbruch doch von Erfolg gekrönt sein, lässt sich so verhindern, dass größere Schäden angerichtet werden können. Hier ist insbesondere die Einschränkung von Benutzer-Privilegien zu nennen. Lese-, Ausführungs- und Löschberechtigungen sollten immer möglichst sparsam vergeben werden.
Wie lässt sich herausfinden, ob die eigene Webseite für SQL-Injections anfällig ist?
SQL-Injections sind seit langer Zeit ein Klassiker erfolgreicher Hackerattacken, die Gegenmaßnahmen bekannt und Standard in der Webentwicklung. Dennoch sind immer wieder Webseiten, auch großer Unternehmen und Institutionen anfällig für den Angriffsvektor.
Denn das Wissen über SQL-Injection allein schützt nicht vor der Attacke. Durch Unachtsamkeiten im Entwicklungsprozess, Anpassungen und Programmierfehler können stetig neue Schwachstellen entstehen. Regelmäßige Checks auf die Anfälligkeit für SQL-Injections ermöglichen, die Schwachstellen schnell aufzudecken und beheben, bevor sie von Hackern ausgenutzt werden.
Mehr im Blog
- Kurz & Knackig: SQL-Injection, Session Prediction und Cross-Site-Tracing erklärt
- Hackerattacken nutzen Fehler im kleinen Einmaleins der IT-Sicherheit
Wie Sie mit Enginsight SQL-Injections verteidigen
Deshalb haben wir bei Enginsight SQL-Injection in die Attacken unserer Softwarekomponente Hacktor integriert, mit der sich automatisierte Penetrationstest u.a. auf Webseiten durchführen lassen.
Mit einer kostenlosen Demoversion können Sie noch heute Ihre Webseite auf Schwachstellen testen und prüfen, ob Ihre Webseite für SQL-Injections anfällig ist.