Zum Hauptinhalt springen

SQL-Injection-Angriffe sind eine der ältesten Schwachstellen in Webanwendungen – sie werden bereits seit den späten 1990er Jahren diskutiert – aber sie sind auch heute noch aktuell. In diesem Artikel erfahren Sie, was sie sind, wie sie funktionieren und wie Sie sie verhindern können.

SQL-Injection – Bedeutung und Definition

Eine SQL-Injection, manchmal abgekürzt als SQLi, ist eine Art von Sicherheitslücke, bei der ein Angreifer einen Teil des SQL-Codes (Structured Query Language) verwendet, um eine Datenbank zu manipulieren und Zugriff auf potenziell wertvolle Informationen zu erhalten. Dies ist eine der häufigsten und bedrohlichsten Angriffsarten, da sie potenziell gegen jede Webanwendung oder Webseite eingesetzt werden kann, die eine SQL-basierte Datenbank verwendet (was bei den meisten der Fall ist).

Wie funktionieren SQL-Injection-Angriffe?

Um SQL-Injection zu verstehen, ist es wichtig zu wissen, was eine strukturierte Abfragesprache (SQL) ist. SQL ist eine Abfragesprache, die in der Programmierung verwendet wird, um auf in relationalen Datenbanken gespeicherte Daten zuzugreifen, sie zu ändern und zu löschen. Da die überwiegende Mehrheit der Webseiten und Webanwendungen auf SQL-Datenbanken basiert, kann ein SQL-Injection-Angriff ernste Folgen für Organisationen haben.

Eine SQL-Abfrage ist eine Anfrage, die an eine Datenbank gesendet wird, um eine bestimmte Aktivität oder Funktion wie die Abfrage von Daten oder die Ausführung von SQL-Code auszuführen. Ein Beispiel dafür ist die Übermittlung von Anmeldeinformationen über ein Webformular, um einem Benutzer den Zugang zu einer Webseite zu ermöglichen. Diese Art von Webformularen ist in der Regel so konzipiert, dass sie nur bestimmte Arten von Daten akzeptieren, z. B. einen Namen und/oder ein Passwort. Wenn diese Informationen hinzugefügt werden, werden sie gegen eine Datenbank geprüft, und wenn sie übereinstimmen, wird dem Benutzer der Zugang gewährt. Andernfalls wird ihnen der Zugang verweigert.

Mögliche Probleme entstehen, weil die meisten Webformulare keine Möglichkeit haben, die Eingabe zusätzlicher Informationen über die Formulare zu stoppen. Angreifer können diese Schwäche ausnutzen und Eingabefelder im Formular verwenden, um eigene Anfragen an die Datenbank zu senden. Auf diese Weise könnten sie eine Reihe böswilliger Aktivitäten ausführen, vom Diebstahl sensibler Daten bis zur Manipulation der Informationen in der Datenbank für ihre eigenen Zwecke.

Aufgrund der weiten Verbreitung von Webseiten und Servern, die Datenbanken verwenden, sind SQL-Injection-Schwachstellen eine der ältesten und am weitesten verbreiteten Arten von Cyberangriffen. Mehrere Entwicklungen in der Hacker-Community haben das Risiko dieser Art von Angriffen erhöht, vor allem das Aufkommen von Tools zur Erkennung und Ausnutzung von SQL-Injection. Diese von Open-Source-Entwicklern frei erhältlichen Tools ermöglichen es Cyberkriminellen, in nur wenigen Minuten automatisch Angriffe durchzuführen, indem sie mit nur einem Klick und einem Angriffsprozess auf jede Tabelle oder jede Spalte in der Datenbank zugreifen können.

Symptome von SQLi

Ein erfolgreicher SQL-Injection-Angriff zeigt möglicherweise keinerlei Symptome. Manchmal gibt es jedoch auch äußere Anzeichen, wie zum Beispiel:

  • Erhalt einer übermäßigen Anzahl von Anfragen innerhalb eines kurzen Zeitraums. Sie können zum Beispiel zahlreiche E-Mails von Ihrem Kontaktformular auf Ihrer Webseite erhalten.
  • Werbung, die auf verdächtige Webseiten umleitet.
  • Merkwürdige Popups und Fehlermeldungen. 

Arten der SQL-Injection

Je nachdem, wie sie sich Zugang zu Backend-Daten verschaffen und wie groß der potenzielle Schaden ist, den sie verursachen, lassen sich SQL-Injections in drei Kategorien einteilen:

In-band SQLi: 

Diese Art von SQLi-Angriff ist für Angreifer sehr einfach, da sie denselben Kommunikationskanal verwenden, um Angriffe zu starten und Ergebnisse zu sammeln. Diese Art von SQLi-Angriff hat zwei Untervarianten:

  • Fehlerbasierte SQLi: Die Datenbank erzeugt aufgrund der Aktionen des Angreifers eine Fehlermeldung. Anhand der von diesen Fehlermeldungen generierten Daten sammelt der Angreifer Informationen über die Datenbankinfrastruktur.
  • Union-basierte SQLi: Der Angreifer verwendet den UNION-SQL-Operator, um die gewünschten Daten zu erhalten, indem er mehrere Select-Anweisungen in einer einzigen HTTP-Antwort zusammenfasst.

Inferentielle SQLi (auch bekannt als Blind SQL Injection): 

Bei dieser Art von SQLi nutzen Angreifer die Antwort- und Verhaltensmuster des Servers nach dem Senden von Daten-Nutzdaten, um mehr über seine Struktur zu erfahren. Die Daten werden nicht von der Datenbank der Webseite an den Angreifer übertragen, so dass der Angreifer die Informationen über den In-Band-Angriff nicht sieht (daher der Begriff "blinde SQLi"). Inferentielle SQLi kann in zwei Untertypen unterteilt werden:

  • Zeitbasierte SQLi: Angreifer senden eine SQL-Abfrage an die Datenbank und lassen die Datenbank einige Sekunden warten, bevor sie die Abfrage als wahr oder falsch beantwortet.
  • Boolean SQLi: Angreifer senden eine SQL-Abfrage an die Datenbank und lassen die Anwendung daraufhin entweder ein wahres oder ein falsches Ergebnis erzeugen.Out-of-band SQLi: 

Diese Art von SQL-Angriff findet in zwei Szenarien statt:

  • Wenn die Angreifer nicht in der Lage sind, denselben Kanal zu nutzen, um den Angriff zu starten und Informationen zu sammeln; oder,
  • Wenn ein Server entweder zu langsam oder instabil ist, um diese Aktionen auszuführen.
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

Auswirkungen von SQL-Injection-Angriffen

Ein erfolgreicher SQL-Injection-Angriff kann schwerwiegende Folgen für ein Unternehmen haben. Dies liegt daran, dass ein SQL-Injection-Angriff Folgendes bewirken kann:

  • Sensible Daten preisgeben. Angreifer können Daten abrufen, wodurch die Gefahr besteht, dass auf dem SQL-Server gespeicherte sensible Daten preisgegeben werden.
  • Beeinträchtigung der Datenintegrität. Angreifer können Informationen auf Ihrem System verändern oder löschen.
  • Beeinträchtigung der Privatsphäre von Nutzern. Je nach den auf dem SQL-Server gespeicherten Daten kann ein Angriff sensible Benutzerinformationen wie Adressen, Telefonnummern und Kreditkartendaten offenlegen.
  • Einem Angreifer Administrator-Zugriff auf Ihr System geben. Wenn ein Datenbankbenutzer über administrative Rechte verfügt, kann sich ein Angreifer mit bösartigem Code Zugang zum System verschaffen.
  • Einem Angreifer allgemeinen Zugang zu Ihrem System gewähren. Wenn Sie schwache SQL-Befehle zur Überprüfung von Benutzernamen und Kennwörtern verwenden, könnte ein Angreifer Zugang zu Ihrem System erhalten, ohne die Anmeldedaten eines Benutzers zu kennen. Von dort aus kann ein Angreifer Schaden anrichten, indem er auf sensible Informationen zugreift und diese manipuliert.

Die Kosten eines SQL-Injection-Angriffs sind nicht nur finanzieller Art: Sie können auch den Verlust des Kundenvertrauens und eine Schädigung des Rufs bedeuten, wenn persönliche Informationen wie Namen, Adressen, Telefonnummern und Kreditkartendaten gestohlen werden. Wenn das Vertrauen der Kunden erst einmal gebrochen ist, kann es sehr schwierig sein, es wiederherzustellen.

SQL-Injection-Beispiele

Im Laufe der Jahre sind viele Organisationen Opfer von SQLi geworden. Einige bekannte Beispiele sind:

Fortnite, 2019

Fortnite ist ein Online-Spiel mit über 350 Millionen Nutzern. Im Jahr 2019 wurde eine SQL-Injection-Schwachstelle entdeckt, über die Angreifer auf Benutzerkonten zugreifen können. Die Sicherheitslücke wurde behoben.

Cisco, 2018

Eine SQL-Injection-Schwachstelle wurde 2018 in Cisco Prime License Manager gefunden. Die Sicherheitslücke ermöglichte es Angreifern, Shell-Zugriff auf Systeme zu erhalten, auf denen der Lizenzmanager installiert war. Cisco hat die Sicherheitslücke inzwischen mit einem Patch geschlossen.

Tesla, 2014

Im Jahr 2014 gaben Sicherheitsforscher bekannt, dass es ihnen gelungen war, mit Hilfe von SQL-Injection in die Webseite von Tesla einzudringen, administrative Rechte zu erlangen und dabei Benutzerdaten zu stehlen.

FAQs über SQL-Injection-Angriffe

Häufig gestellte Fragen zu SQLi sind u. a.:

Was ist ein SQL-Injection-Angriff?

Bei einem SQL-Injection-Angriff wird bösartiger SQL-Code zur Manipulation von Backend-Datenbanken verwendet, um an private Informationen zu gelangen. Diese Informationen können sensible Unternehmensdaten, Benutzerlisten oder Kundendaten umfassen. SQL steht für „structured query language“ (strukturierte Abfragesprache) und SQL-Injection wird manchmal mit SQLi abgekürzt.

Was bewirkt die SQL-Injection?

SQL-Injection-Angriffe ermöglichen es Angreifern, die Identität zu fälschen, vorhandene Daten zu verändern, Daten auf dem System offenzulegen, Daten zu zerstören oder anderweitig unzugänglich zu machen und sich als Administrator des Datenbankservers einzuschleusen. SQL-Injection-Angriffe können Unternehmen ernsthaften Schaden zufügen, einschließlich des Verlusts des Kundenvertrauens, wenn vertrauliche Benutzerdaten verletzt werden.

Wie häufig kommen SQL-Injection-Angriffe vor?

Da sie relativ einfach zu implementieren sind und die potenzielle Belohnung groß ist, sind SQL-Injection-Angriffe keine Seltenheit. Die Statistiken variieren, aber es wird geschätzt, dass SQL-Injection-Angriffe den Großteil der Angriffe auf Softwareanwendungen ausmachen. Laut dem Open Web Application Security Project waren Injection-Angriffe, zu denen auch SQL-Injections gehören, das drittgrößte Sicherheitsrisiko für Webanwendungen im Jahr 2021.

Wie man SQL-Injection-Angriffe verhindert

Für Unternehmen, die sich mit der Verhinderung von SQL-Injections befassen, sind die wichtigsten Grundsätze zum Schutz von Webseiten und Webanwendungen zu nennen:

Mitarbeiterschulung:Sensibilisieren Sie das Team, das für Ihre Webanwendung verantwortlich ist, für die SQLi-basierten Risiken und schulen Sie alle Benutzer entsprechend ihrer Rolle.

Kontrollieren Sie die Benutzereingaben:Jede Benutzereingabe in einer SQL-Abfrage stellt ein Risiko dar. Behandeln Sie Eingaben von authentifizierten und/oder internen Benutzern auf eine Weise wie öffentliche Eingaben, bis sie verifiziert sind. Geben Sie Konten, die eine Verbindung zur SQL-Datenbank herstellen, nur die erforderlichen Mindestberechtigungen. Verwenden Sie standardmäßig Allow-Listen anstelle von Deny-Listen, um Benutzereingaben zu überprüfen und zu filtern.

Verwenden Sie die neuesten Versionen:Es ist wichtig, die neueste Version der Entwicklungsumgebung zu verwenden, um den Schutz zu maximieren, da älteren Versionen möglicherweise aktuelle Sicherheitsfunktionen fehlen. Achten Sie darauf, die neueste Software und Sicherheitsupdates zu installieren, wenn diese verfügbar sind.

Scannen Sie kontinuierlich Webanwendungen:

Verwenden Sie umfassende Tools zur Verwaltung der Anwendungsleistung. Durch regelmäßiges Scannen von Webanwendungen können Sie potenzielle Schwachstellen erkennen und beheben, bevor sie ernsthaften Schaden anrichten können.

Verwenden Sie eine Firewall:Eine Webanwendungs-Firewall (WAF) wird häufig eingesetzt, um SQLi und andere Online-Bedrohungen herauszufiltern. Eine WAF stützt sich auf eine umfangreiche und häufig aktualisierte Liste von Signaturen, mit denen sie bösartige SQL-Abfragen herausfiltern kann. Normalerweise enthält die Liste Signaturen für bestimmte Angriffsvektoren und wird regelmäßig als Reaktion auf neu entdeckte Sicherheitslücken aktualisiert.

Verwandte Produkte:

Weiterführende Informationen:

Was ist SQL-Injection? Definition und Erläuterung

SQL-Injection ermöglicht es Angreifern, sich unbefugten Zugang zu Datenbanken zu verschaffen und Unternehmen zu schädigen. Erfahren Sie mehr darüber, wie SQL-Injection funktioniert.
Kaspersky Logo