Wenn es eine Sache gibt, die Cyberkriminelle lieben, dann sind es Daten. Gestohlene Daten sind auf illegalen Marktplätzen sehr wertvoll, und der Zugriff auf private Datenbanken kann eine großartige Möglichkeit für böswillige Akteure sein, von ihren Unternehmungen zu profitieren. Eine Möglichkeit, auf private Daten zuzugreifen, ist über eine SQL-Injection. Doch was genau ist eine SQL-Injection, wie funktioniert sie und kann ein solcher Angriff verhindert werden?
Was ist eine SQL-Injection?
Softwareprogramme sind auf Code angewiesen, um zu funktionieren. Code ist auch die Sprache, die Maschinen verwenden, um Operationen auszuführen, und kann in vielen Formen vorliegen (Python, JavaScript, C++ usw.). Cyberkriminelle können Opfer oft über Code angreifen, und SQL-Injections (oder SQLis) sind nicht anders. Diese ermöglichen es böswilligen Akteuren, schädlichen Code in eine SQL-Anweisung zu „injizieren“.
Sehen wir uns zunächst an, was SQL bedeutet.
SQL steht für Structured Query Language. Dies ist eine andere Art von Programmiersprache speziell beim Umgang mit Datenbanken verwendet. SQL wurde in den 1970er Jahren von IBM entwickelt und kann Datenbankinformationen bearbeiten, speichern und abrufen. Viele Datenbank-Kommunikationssysteme auf der ganzen Welt verwenden SQL, daher ist es nicht verwunderlich, dass Bedrohungsakteure Möglichkeiten entwickelt haben, es zu missbrauchen, um Datenbanken anzugreifen.
SQL-Anweisungen bilden einen wichtigen Bestandteil der Datenbankkommunikation. Eine SQL-Anweisung ist ein Befehl das kommt in vielen verschiedenen Formen vor. Einige ändern Daten, andere rufen sie ab oder löschen sie, und wieder andere können die Struktur der Datenbank selbst ändern. Bei einer SQL-Injection wird der bösartige Code in eine SQL-Anweisung eingeschleust.
Natürlich muss eine Website oder Anwendung die SQL-Programmiersprache verwenden, damit eine SQL-Injection möglich ist. Aber wie funktioniert dieser Angriffsvektor?
Angenommen, Sie haben eine reguläre Codezeile, die von einer Anwendung verwendet wird. Wenn ein Cyberkrimineller eine böswillige SQL-Injektion einfügt, wird eine Codezeile hinzugefügt, die die Abfragen beeinträchtigen kann, die die Anwendung selbst an ihre Datenbank sendet. Auf diese Weise kann die Datenbank so ausgenutzt werden, dass der Angreifer Daten einsehen kann, auf die er sonst keinen Zugriff hätte.
Von hier aus könnte der Cyberkriminelle Daten stehlen, um sie direkt auszunutzen oder verkaufen Sie es im Dark Web oder anderswo. Sie könnten auch Daten aus der Zieldatenbank ändern, hinzufügen oder löschen. Je nach Grad des SQL-Injection-Angriffs kann viel Schaden angerichtet werden. Wenn Zahlungsdetails, Sozialversicherungsnummern oder andere Arten von privaten Daten abgerufen werden, könnten viele Menschen der Gefahr ausgesetzt sein, ausgenutzt zu werden.
Gelingt es dem Angreifer andererseits, die Datenbank erheblich zu verändern, könnten große Datenmengen dauerhaft verloren gehen. Alles in allem können SQL-Injections ganze Datenbanken durch nur einen Angriff zerstören. Obwohl es sie seit 1998 gibt, sind sie auch in unserer heutigen Zeit immer noch relevant und gefährlich.
Wie von der gefunden Open Web Application Security Project (OWASP)wurden 274.000 Instanzen von SQL-Injections identifiziert, als Anwendungen im Jahr 2021 auf das Vorhandensein eines solchen Angriffs getestet wurden.
Die Arten der SQL-Injection
Es gibt einige verschiedene Arten von SQL-Injections, wobei die drei wichtigsten Blind-, In-Band- und Out-of-Band-Injections sind.
Eine blinde (oder schlussfolgernde) SQL-Einschleusung tritt auf, wenn die Anwendung oder Site von der angegriffen wird Injektion, aber die bereitgestellten HTTP-Antworten (Hypertext Transfer Protocol) enthalten nicht das Ergebnis der SQL-Abfrage. Mit anderen Worten, es werden keine Daten aus der angegriffenen Datenbank an den Cyberkriminellen weitergegeben. Also, was ist der Sinn davon?
Mithilfe einer blinden SQL-Injektion sendet ein Angreifer Daten an den Zielserver und kann dann bestimmte Dinge über eine Datenbank anhand der Art der HTTP-Antwort selbst erkennen. Darüber hinaus können Faktoren im Zusammenhang mit der HTTP-Antwort dem Angreifer helfen, eine weitere, effektivere SQL-Injection für den Zugriff auf die Datenbank zu erstellen.
Es gibt zwei Haupttypen der blinden SQL-Injektion, bekannt als zeitbasiert und boolesch. Diese beiden Varianten sind in ihrer Natur ziemlich ähnlich. Sowohl eine boolesche als auch eine zeitbasierte SQL-Injection sendet eine Reihe von Ja- oder Nein-Antwortfragen, obwohl letztere erfordern, dass die Datenbank eine kurze Weile wartet, bevor sie auf die Abfragen antwortet.
Als nächstes gibt es In-Band-SQL-Injections. Inband-SQL-Injections ermöglichen es dem Operator, den Angriff auszuführen und das gewünschte Ergebnis über denselben Kanal zu erhalten. Inband-SQL-Injections werden am häufigsten verwendet, einfach weil sie aufgrund der Tatsache, dass sie nur einen Kanal benötigen, am einfachsten durchzuführen sind.
Schließlich haben Sie eine Out-of-Band-SQL-Injektion. Dies ist im Wesentlichen die alternative Version einer In-Band-SQL-Injection, bei der der Angreifer den Angriff nicht vollständig über einen einzigen Kanal ausführen kann. Alternativ muss ein Angriff möglicherweise auf eine Out-of-Band-SQL-Injektion zurückgreifen, wenn der Zielserver einfach nicht schnell genug ist, um Ergebnisse zu liefern.
Diese Faktoren machen den Prozess etwas schwieriger, was bedeutet, dass er sich auf bestimmte Funktionen verlassen muss, um auf der Zieldatenbank aktiv zu sein, um erfolgreich zu sein. Beispielsweise muss die angegriffene Plattform keine Eingabebereinigung aufweisen. Aus diesem Grund sind In-Band-SQL-Injections weitaus häufiger als Out-of-Band-SQL-Injections. Aber sie kommen immer noch vor.
Können SQL-Injections vermieden werden?
SQL-Injections sind eher ein Problem für Unternehmen und Organisationen als für normale Einzelpersonen. Aber es gibt Dinge, die diese potenziellen Ziele tun können, um die Wahrscheinlichkeit zu verringern, von einem solchen Angriff getroffen zu werden.
Die Bereinigung von Eingaben ist die wichtigste gängige Praxis zur Vermeidung von SQL-Injektionen. Dies ist ein Filterprozess, der die Eingabe von gefährlichen Zeichen scannt und bereinigt. Wenn SQL-Code verarbeitet wird, bevor er bereinigt wird, erhöht sich natürlich die Wahrscheinlichkeit einer SQL-Injektion.
Darüber hinaus können Ihnen parametrisierte Abfragen dabei helfen, SQL-Injektionen zu vermeiden. Dies sind Abfragen, die mindestens einen Parameter zur Ausführung benötigen. Das Anwenden von Parametern erschwert es Cyberkriminellen, erfolgreich einen SQL-Injection-Angriff durchzuführen.
Aber es gibt keinen sicheren Weg, um eine SQL-Injection zu verhindern. Wie bei vielen Cyberattacken, ist es so gut wie unmöglich, Ihre Geräte und Systeme absolut luftdicht zu halten. Wenn es um SQL-Injections geht, ist das Beste, was Sie tun können, alle Eingaben zu bereinigen und parametrisierte Abfragen einzurichten.
SQL-Injections sind veraltet, aber immer noch eine Bedrohung
Obwohl SQL-Injections schon seit über 20 Jahren existieren, stellen sie immer noch ein Risiko für viele Websites und Anwendungen dar. Es ist daher eine gute Idee, diese Form des Angriffs im Hinterkopf zu behalten und die notwendigen Schritte zu unternehmen, um sie zu verhindern, da sie irgendwann in der Zukunft eine Bedrohung für Ihre Datenbanken darstellen könnte.