Bei einer SQL Injection handelt es sich um eine Technik, bei der vollständige oder teilweise SQL-Befehle in vom Nutzer bereitgestellte Datenfelder von Webanwendungen eingefügt und zur Ausführung an den Datenbankserver übermittelt werden.
Einfacher ausgedrückt: Eine SQL Injection liegt vor, wenn ein Angreifer aufgrund von mangelhaftem Code in der Anwendung in der Lage ist, bösartigen Code in diese einzuschleusen.
Wie funktioniert ein SQL-Injection-Angriff?
Unternehmen nutzen Elemente wie Kontaktformulare, Feedbackformulare, Bestellformulare und Suchleisten, um mit den Nutzern ihrer Website zu interagieren. Über diese Felder können Nutzer auf rechtmäßige Weise Informationen in die Datenbank des Unternehmens eingeben und Informationen daraus abrufen. Diese „offene Verbindung“ zwischen Nutzer und Datenbank ist anfällig für SQL Injection.
Wenn das Feld falsch programmiert ist, kann ein Angreifer es nutzen, um bösartige SQL-Befehle einzufügen. Der injizierte Code kann die Datenbank dazu bringen, die Befehle des Angreifers auszuführen, die in der Lage sind, private Informationen zu extrahieren und Datenbanktabellen zu modifizieren oder zu zerstören. Sowohl dynamische Inhalte als auch Felder sind anfällig für SQL Injection.
Welche Schritte unternimmt ein Angreifer bei einem SQL-Injection-Angriff?
Der Angreifer gibt einen manipulierten SQL-Befehl im Formularfeld ein
Eine unsichere Datenbank betrachtet diese Query als gültig
Der Angreifer erhält eine Antwort aus einer Datenbank mit sensiblen Informationen
Der Angreifer erhält Informationen (wie den Tabellennamen), um die Struktur der Datenbank zu verstehen
Der Angreifer verändert Daten in der Datenbank auf bösartige Weise
Arten von SQL-Injektionen
Es gibt drei Kategorien von SQL Injections:
Inferenzielle (blinde) SQL Injection
Bei einem blinden SQL-Angriff sendet der Angreifer Daten an den Server und beobachtet dessen Verhalten als Antwort. Der Angreifer kann Informationen basierend auf den Antworten der Datenbank auf die Anfragen des Angreifers sammeln und kritische Informationen über die Datenbank ableiten. Durch ausreichende Beobachtung kann sich der Angreifer ein Bild von der Datenbank und ihrem Aufbau machen, was ihm Aufschluss darüber gibt, wie er sie am besten instrumentalisieren kann. Diese Art der Injection wird als blinde Injection bezeichnet, da der Angreifer keinen tatsächlichen Einblick in die Datenbank erhält.
In-Band-SQL-Injection
Auch bekannt als klassische SQL Injection, bei einem In-Band-SQL-Injection-Angriff erhält der Angreifer sein Ergebnis in demselben „Kanal“, in dem er seinen Angriff gestartet hat. Nehmen wir beispielsweise an, ein Angreifer führt eine SQL Injection in einem Webbrowser durch. Die Ergebnisse dieses Angriffs erhält der Angreifer an demselben Standort (im Webbrowser).
Out-of-Band-SQL-Injection
Bei einem Out-of-Band-SQL-Injection-Angriff erhält der Angreifer sein Ergebnis (Antwort) nicht von der angegriffenen Anwendung auf demselben „Kanal“ wie bei seinem Angriff. Der Angriff zwingt die Anwendung stattdessen, Daten an einen Remote-Endpunkt zu senden. Dieser Endpunkt wird vom Angreifer kontrolliert, wodurch dieser Zugriff auf die Antwort der Anwendung erhält.
Beispiel für SQL Injection
Wenn ein Nutzer auf einer Log-in-Seite seine Anmeldedaten eingibt, verwendet die Webanwendung diese in einer SQL-Query, die zur Ausführung an die Datenbank gesendet wird. Wenn der übermittelte Benutzername und das Passwort gültig sind, erhält der Nutzer Zugriff. Angenommen, der Benutzername lautet „user1“ und das Passwort „pass123“, sendet die Webanwendung zur Überprüfung die folgende SQL-Query an die Datenbank:
SELECT * FROM Users WHERE name = 'user1' AND password = 'pass123'
Anstatt eines gültigen Benutzernamens gibt der Angreifer „test“ ODER „1 = 1–“ als Benutzernamen und ein beliebiges Passwort an. Diese willkürliche SQL-Query gibt einen wahren Wert zurück. Die willkürliche Query sieht so aus:
SELECT * FROM Users WHERE name = 'test' OR 1 = 1 --' AND password = 'xxxxx'
Nach der Eingabe der Query erhält der Hacker ohne Passwort Zugriff auf eine angemeldete Sitzung. Anschließend stiehlt der Hacker Daten oder manipuliert Website-Datenbanken.
So verhindern Sie SQL-Angriffe
Ein Angreifer, der sich durch eine SQL Injection Administratorzugriff auf eine Datenbank verschafft, stellt eine extreme Sicherheitsverletzung dar. Durch diese Art von Angriff kann ein Hacker Teile der gesamten Datenbank ändern oder löschen. Der Angreifer kann auch Angriffe von einem kompromittierten Server aus starten und auf vertrauliche Informationen zugreifen, die in der Datenbank gespeichert sind. Diese große Sicherheitsbedrohung lässt sich verhindern, indem Felder korrekt codiert und die Serversoftware mit den neuesten Patches aktualisiert wird.
Tools wie die Next-Gen WAF von Fastly mit ihrer proprietären Erkennungs-Engine SmartParse treffen sofortige Entscheidungen, um festzustellen, ob schädliche oder anomale Payloads vorhanden sind. SmartParse macht Regex und manuelles Tuning überflüssig.
Mehr über die Verhinderung von SQL-Injection-Angriffen und anderen OWASP Top 10-Angriffen mit Fastly erfahren Sie hier.