SQL Injection (SQLi)
Was ist eine SQL Injection (SQLi)?
Eine SQL Injection (SQLi) ist eine Technik, mit der sich Angreifer unbefugten Zugriff auf die Datenbank einer Webanwendung verschaffen, indem sie einer Datenbankabfrage eine Zeichenfolge mit bösartigem Code hinzufügen.
Eine SQL Injection manipuliert den SQL-Code, um Zugang zu geschützten Ressourcen, beispielsweise zu sensiblen Daten, zu erhalten oder bösartige SQL-Anweisungen auszuführen. Bei der Ausführung einer SQL Injection können geistiges Eigentum, Kundendaten oder die administrativen Anmeldeinformationen eines Unternehmens offengelegt werden.
SQL-Injection-Angriffe können auf jede Anwendung abzielen, die eine SQL-Datenbank verwendet, wobei Websites die häufigste Zielscheibe sind. Zu den gängigen SQL-Datenbanken gehören MySQL, Oracle und Microsoft SQL Server.
Wie funktioniert ein SQL-Injection-Angriff?
Eine SQL-Abfrage ist eine Aufforderung zur Durchführung einer Aktion in einer Anwendungsdatenbank. Abfragen können auch verwendet werden, um Systembefehle auszuführen. Jede Abfrage enthält eine Reihe von Parametern, die sicherstellen, dass nur die gewünschten Datensätze zurückgegeben werden, wenn ein Benutzer die Abfrage ausführt. Bei einer SQL Injection nutzen Angreifer dies aus, indem sie bösartigen Code in das Eingabeformular der Abfrage einschleusen.
Der erste Schritt eines SQL-Injection-Angriffs besteht darin, zu untersuchen, wie die angegriffene Datenbank funktioniert. Dazu wird eine Reihe zufälliger Werte in die Abfrage eingegeben, um zu beobachten, wie der Server antwortet.
Angreifer nutzen dann das, was sie über die Datenbank erfahren haben, um eine Abfrage zu erstellen, die der Server interpretiert und dann als SQL-Befehl ausführt. So kann eine Datenbank beispielsweise Informationen über Kunden, die einen Kauf getätigt haben, mit Kunden-ID-Nummern speichern. Anstatt nach einer bestimmten Kunden-ID zu suchen, kann ein Angreifer „CustomerID = 1000 OR 1=1“ in das Eingabefeld einfügen. Da die Anweisung „1=1“ immer wahr ist, würde die SQL-Abfrage alle verfügbaren Kunden-IDs und alle entsprechenden Daten zurückgeben. Auf diese Weise kann der Angreifer die Authentifizierung umgehen und sich Zugang auf Administratorebene verschaffen.
SQL-Angriffe können nicht nur unberechtigte Informationen zurückgeben, sondern auch dazu dienen, eine ganze Datenbank zu löschen, die Notwendigkeit von Zugangsdaten zu umgehen, Datensätze zu entfernen oder unerwünschte Daten hinzuzufügen.
Die verschiedenen Arten von SQL-Injection-Angriffen
Es gibt einige verschiedene Typen von SQL-Injection-Angriffen.
In-Band SQLi
In-Band SQLi, auch bekannt als klassisches SQLi, liegt vor, wenn Hacker den gleichen Kanal - oder das gleiche Band - verwenden, um Datenbankfehler zu starten und die Ergebnisse eines Angriffs zu sammeln. In-Band SQLi wird in der Regel durch zwei Methoden erreicht:
- Fehlerbasierte Injektionstechniken zwingen die Datenbank dazu, Fehlermeldungen zu erzeugen, die Informationen über die Struktur der Datenbank preisgeben.
- Union-basierte Angriffe verwenden vorbereitete Anweisungen, die die SQL-Union-Funktion ausnutzen, die die Ergebnisse mehrerer Abfragen zu einem einzigen Ergebnis zusammenfasst.
Inferential SQLi
Auch bekannt als blindes SQLi, ist eine Inferential SQL Injection, wenn Hacker Daten-Payloads an einen Datenbankserver senden, um seine Reaktion und sein Verhalten zu beobachten, ohne dass sie sehen können, was in der Datenbank vor sich geht. Die Antwort des Servers liefert den Angreifern Hinweise, die sie zur Anpassung ihrer Angriffsstrategie nutzen können.
Inferential SQLi kann entweder auf boolescher oder auf zeitlicher Basis erfolgen. Boolesches SQLi verwendet wahre oder falsche Aussagen, um eine Antwort anzufordern, während zeitbasiertes SQLi einen bestimmten Antwortzeitraum festlegt.
Out-of-Band SQLi
Out-of-band SQLi liegt vor, wenn Angreifer DNS- oder HTTP-Anfragen ausnutzen, um Daten abzurufen. Out-of-Band SQLi wird in der Regel nur angewendet, wenn ein Webserver zu langsam ist oder wenn In-Band SQLi nicht ausgeführt werden kann.

Wie kann ein Angriff mit SQL Injection erkannt und verhindert werden?
Wenn ein SQL-Injection-Angriff erfolgreich durchgeführt wird, kann er großen Schaden anrichten, indem sensible Daten preisgegeben und das Vertrauen der Kunden beeinträchtigt werden. Deshalb ist es wichtig, diese Art von Angriff rechtzeitig zu erkennen.
Web Application Firewalls (WAFs) sind das am häufigsten eingesetzte Instrument zum Herausfiltern von SQLi-Angriffen. WAFs basieren auf einer Bibliothek mit aktualisierten Angriffssignaturen und können so konfiguriert werden, dass sie bösartige SQL-Abfragen in Webanwendungen erkennen.
Um einen SQL-Injection-Angriff zu verhindern, können Unternehmen die folgenden Methoden anwenden:
- Schulung der Mitarbeiter zu Präventionsmethoden. Es ist wichtig, dass IT-Teams - einschließlich DevOps, Systemadministratoren und Softwareentwicklung - eine angemessene Sicherheitsschulung erhalten, um zu verstehen, wie SQLi-Angriffe erfolgen und wie sie in Webanwendungen verhindert werden können.
- Benutzereingaben sind nicht vertrauenswürdig. Jede Benutzereingabe, die in eine SQL-Abfrage eingegeben wird, erhöht die Wahrscheinlichkeit einer erfolgreichen SQL Injection. Der beste Weg, diese Art von Risiko zu mindern, besteht darin, die Benutzereingabe mit Sicherheitsmaßnahmen zu umgeben.
- Verwenden Sie eine Erlaubnisliste (Allowlist) anstelle einer Blockliste. Die Validierung und Filterung von Benutzereingaben über eine Allowlist im Gegensatz zu einer Blockierliste wird empfohlen, da Cyberkriminelle eine Blockierliste in der Regel umgehen können. Das liegt daran, dass eine Blockliste eine Liste aller Anwendungen oder ausführbaren Dateien enthält, die eine Bedrohung für das Netzwerk darstellen könnten. Daher kann alles im Netzwerk funktionieren, was nicht auf der Blockliste steht. Leider werden jeden Tag Tausende von neuen Malware- und Virenmustern erstellt, und es ist für Administratoren unmöglich, die Blocklisten mit neueren Angriffsvarianten und Zero-Day-Schwachstellen auf dem neuesten Stand zu halten, so dass ein Sicherheitsverstoß durchaus möglich ist, bevor die Liste aktualisiert wird.
- Führen Sie Routing-Updates durch, und verwenden Sie die neueste Version von Anwendungen. Eine der häufigsten Schwachstellen bei der SQL Injection ist veraltete Software. Es ist nicht nur unwahrscheinlich, dass ältere Technologie über einen eingebauten SQLi-Schutz verfügt, sondern ungepatchte Software ist auch oft leichter zu manipulieren. Das gilt auch für Programmiersprachen. Ältere Sprachen und Syntax sind anfälliger.
- Verwenden Sie validierte Präventionsmethoden. Von Grund auf neu geschriebene Abfragezeichenfolgen bieten keinen ausreichenden Schutz vor SQLi. Der beste Weg, Webanwendungen zu schützen, ist die Eingabevalidierung, vorbereitete Anweisungen und parametrisierte Abfragen.
- Führen Sie regelmäßig Sicherheitsscans durch. Regelmäßiges Scannen von Webanwendungen fängt potenzielle Schwachstellen auf und behebt sie, bevor sie ernsthaften Schaden anrichten.
Einige Datenbankadministratoren sind der Meinung, dass eine Stored-Procedure-Anweisung häufig zur Verhinderung von SQL-Injection-Angriffen beitragen kann, indem sie die Arten von Anweisungen einschränkt, die an ihre Parameter übergeben werden können. Dies verhindert jedoch nicht alle Angriffe, da es zahlreiche Umgehungsmöglichkeiten und raffinierte Anweisungen gibt, die an Stored Procedures übermittelt werden können.
Die Auswirkungen von SQL-Injection-Angriffen auf Unternehmen
SQL-Injection-Angriffe können einem Unternehmen oder einer Organisation ernsthaften Schaden zufügen. Zu den negativen Auswirkungen könnten die folgenden gehören:
- Cyberkriminelle könnten sich unerwünschten oder administrativen Zugang zu vertraulichen Informationen und Ressourcen verschaffen.
- Potenzielle Datendiebstähle können durch den unbefugten Zugriff auf Ressourcen entstehen.
- Die Daten können verändert oder ganze Datenbanktabellen von Cyberkriminellen gelöscht werden.
- Die Infiltration von Datenbanken kann Bedrohungsakteure in die Lage versetzen, in ganze Netzwerke oder Systeme einzudringen.
- Kunden können das Vertrauen in das Unternehmen verlieren, was letztlich zu Umsatzeinbußen führen kann.
- Es kann Zeit und Ressourcen kosten, sich von dem Angriff zu erholen und neue Sicherheitsmaßnahmen zu implementieren, um zukünftige Vorfälle zu verhindern.
- Während die unmittelbaren Auswirkungen eines erfolgreichen SQL Injection-Angriffs schwer zu beziffern sind, kann der langfristige Schaden durch Rufschädigung, Rechtskosten und entgangene Geschäftsmöglichkeiten weitreichende Folgen haben.
Beispiele für SQL-Injection-Angriffe
Es gibt zahlreiche SQL-Injection-Schwachstellen, -Angriffe und -Strategien, die in einer Vielzahl von Umgebungen auftreten können.
Im Folgenden finden Sie einige gängige Beispiele für SQL Injections:
- Ändern der SQL-Abfrage. Um versteckte Daten abzurufen, kann eine SQL-Abfrage von Cyberkriminellen geändert werden, um zusätzliche Informationen preiszugeben.
- Umgehung der Anmeldung. Um die Authentifizierung zu umgehen und auf das Programm oder die Website zuzugreifen, kann ein Hacker einen SQL-Befehl in ein Anmeldeformular einfügen.
- Unterminierung der Anwendungslogik. In diesem Fall ändert ein Cyberkrimineller eine Abfrage, um die Logik der Anwendung zu untergraben.
- Union-Angriffe. Diese Angriffe ermöglichen den Abruf von Daten aus mehreren Datenbanktabellen.
- Datenbankanalyse. Hier analysieren die Cyberkriminellen die Datenbank, um Informationen über deren Version und Struktur zu erhalten.
- Blinde SQL Injection. Bei einer blinden SQL Injection werden keine Fehlermeldungen von der Datenbank empfangen.
- Verteilte Denial-of-Service-Angriffe (DDoS). Bei diesem Angriff injiziert ein Angreifer eine SQL-Anweisung, um einen DoS- oder DDoS-Angriff zu generieren und ein System zu überwältigen.
Die Geschichte der SQL Injections
SQL-Injection-Angriffe gibt es seit über zwei Jahrzehnten, seit sie 1998 erstmals von dem Cybersecurity-Forscher und Hacker Jeff Forristal dokumentiert wurden. Allerdings wurde ihnen bis 2002 nicht viel Aufmerksamkeit zuteil.
SQL Injections gelten als eine der häufigsten Sicherheitslücken, wie ihre Präsenz auf der Liste der zehn größten Bedrohungen für die Sicherheit von Webanwendungen des Open Web Application Security Project (OWASP) beweist. Das Risiko von SQLi-Exploits und der Schaden, den sie anrichten können, sind mit der Verfügbarkeit von automatisierten Tools zur Ausführung von SQL Injections gestiegen. In der Vergangenheit war die Wahrscheinlichkeit, dass ein Unternehmen mit einer SQL Injection angegriffen wurde, eher gering, da die Angreifer diese Angriffe manuell durchführen mussten.
Diese Angriffe gehören inzwischen zu den häufigsten und am häufigsten bewerteten Sicherheitslücken in der Geschichte der Datenbanksoftware. Es gab eine Reihe von öffentlichkeitswirksamen Angriffen auf große Unternehmen, bei denen eine veraltete Datenbank der Hauptgrund für den Einbruch war.
Erfolgreiche SQL-Injection-Angriffe ermöglichen es Angreifern, Datenbankinformationen zu ändern, auf sensible Daten zuzugreifen, administrative Aktivitäten in der Datenbank durchzuführen und Dateien aus der Datenbank wiederherzustellen.