Wie viele Programmiersprachen ist auch die strukturierte Abfragesprache (Structured Query Language, SQL) anfällig für Manipulation und Missbrauch durch Hacker. In der Regel wird sie mittels einer Anwendung für das Abfragen, Betreiben und Verwalten von Datenbanken eingesetzt. Anwendungen können etwa über einen Browser aufgerufen werden wie eine Webseite, einen Kommentar- oder Foren-Bereich oder eine API. Wenn bei einer Anwendung eine SQL-Injection vorliegt, können Hacker die SQL-Abfragen des Browsers modifizieren und Aktionen durchführen, die vom Zweck der Anwendung abweichen und eine Sicherheitsverletzung oder einen Datenverlust zur Folge haben. Natürlich verfügen die Anwendungsentwickler über Methoden, um sich vor dieser speziellen Bedrohung zu schützen.
In diesem Artikel wird erläutert, was ein SQL-Injection-Angriff ist, wie er funktioniert und wie sich Entwickler und Administratoren vor dieser ernstzunehmenden Bedrohung schützen können.
Bei SQL-Injection-Angriffen versuchen Hacker die SQL-Abfragen zu vergiften, um auf diese Weise die Backend-Datenbank einer Webanwendung zu kompromittieren. Es ist wichtig zu wissen, dass die Schwachstelle hierbei bei der Anwendung und nicht bei der Datenbank liegt. Demzufolge sind es die Anwendungsentwickler, die entsprechende Maßnahmen zum Schutz vor dieser Bedrohung ergreifen müssen, damit Schwachstellen erkannt werden, bevor sie Schaden anrichten können.
SQL-Injection-Angriffe rangieren auf Platz 3 der OWASP 2021 Top 10 und sind erfolgreich, sobald ein Hacker über eine Webanwendung bösartigen Code in den Textkörper einer Abfrage einfügt. Ein unsicherer Umgang mit Code führt dann dazu, dass die Serverseite der Anwendung dazu verleitet wird, die injizierte Abfrage an die Datenbank weiterzuleiten, obwohl sie das eigentlich nicht sollte. Sobald die bösartige Abfrage ihren Weg in die Datenbank gefunden hat, wird sie ohne Einschränkung ausgeführt. Da die Aufgabe der Datenbank darin besteht, Abfragen auszuführen, wird sie Befehle bedenkenlos befolgen. Damit kann enormer Schaden angerichtet werden, der möglicherweise schwer zu beheben ist. Die injizierte Abfrage kann Fähigkeiten haben, die über die vorgesehenen Funktionen der Anwendung hinausgehen. Sie kann veranlassen, dass Daten durchsickern oder gelöscht werden, oder wertvolle Hinweise über die Beschaffenheit der Backend-Datenbank liefern und welcher Art die darin verborgenen Inhalte sind.
Wie bereits erwähnt, erfolgt die SQL-Injection in der Anwendung selbst, um Zugriff auf ansonsten unzugängliche Daten in der Backend-Datenbank zu erhalten. Der Hacker kann so eine Schwachstelle der Anwendung (nicht der Datenbank) nutzen, um den Angriff auszuführen.
Ein SQL-Exploit kann für folgendes verwendet werden:
Umgehen der Authentifizierungs- oder Autorisierungsprotokolle der Website, damit der Angreifer sensible Datensätze in der Datenbank einsehen kann (Kreditkarten, persönliche Informationen usw.)
Abrufen, Hinzufügen, Ändern oder Löschen von Inhalten in der Backend-Datenbank
Kontrolle über den gesamten Server durch Zugriff auf das Betriebssystem erlangen
Ausführungen administrativer Operationen
Alle SQL-Injection-Angriffe basieren darauf, dass mit von Angreifern eingegebenen Daten die SQL-Anweisungen von Webanwendungen modifiziert werden – aber es gibt verschiedene Wege bei der Umsetzung. Solange die Zielanwendung keine strenge Validierung der Eingabedaten vornimmt, bleibt sie für alle Arten dieser Angriffe anfällig.
Hierbei handelt es sich um eine sehr einfache SQL-Injection, bei der ein Angreifer die Unterschiede in den Fehlermeldungen bemerkt, die er erhält. Durch das Untersuchen der Fehlermeldungen kann der Hacker viele Dinge über die Datenbank erschließen, wie unter anderem die Art der darin gespeicherten Daten und wie Tabellen und Spalten aufgebaut sind.
Dieser Angriff erfolgt, wenn der Hacker einen SQL-Injection-Fehler in einer Anwendung findet und die Ergebnisse der Abfrage mit den Antworten der Anwendung zurückgegeben werden. Das UNION-Schlüsselwort kann für das Abrufen von Daten aus anderen Tabellen in der Datenbank verwendet werden.
Eine blinde SQL-Injection tritt dann auf, wenn eine Anwendung für SQL-Injection anfällig ist, ihre HTTP-Antworten aber weder die Ergebnisse der entsprechenden SQL-Abfrage noch Einzelheiten möglicher Datenbankfehler enthalten. Es gibt zwei Variationen eines blinden Angriffs:
Boolean: Der Angreifer stellt eine Reihe von Ja-oder-Nein-Fragen, um stückweise Informationen über die Datenbank zu sammeln
Zeitbasiert: Der Angreifer fordert die Datenbank auf, sich mit der Antwort mehr Zeit zu lassen. Die Datenbank wird dadurch gezwungen, die Dauer für die Ausführung einer Abfrage zu ändern, was sie durcheinander bringt und dazu führen kann, dass sie sensible Daten preisgibt.
Die Interaktion der Anwendung mit der Datenbank muss vom Entwickler sorgfältig geplant und gepflegt werden. Ein Entwickler sollte den Lebenszyklus einer Anwendung bedenken und von Anfang an Sicherheitsvorkehrungen einbauen.
Dabei handelt es sich um vorgefertigte Abfragen, bei denen der Entwickler die Benutzerdaten in die Abfrage einfügt, wenn diese ausgeführt wird. Da die Datenbank vorab gewarnt wird, was die Abfrage bewirken soll, ist es für einen Hacker unmöglich, diese Funktion zu manipulieren.
Starten Sie jetzt
Erfahren Sie, wie Ping Sie dabei unterstützen kann, sichere Mitarbeiter- und Kundenerlebnisse in einer sich schnell entwickelnden digitalen Welt zu schaffen.
Kostenlose Demo anfordern