SQL Injection (SQL-Injektion)
SQL Injection (deutsch: SQL-Injektion) bezeichnet eine Schwachstelle in der Verarbeitung von Datenbankabfragen. Nicht vertrauenswürdige Eingaben werden dabei so in einen SQL-Befehl übernommen, dass sie dessen vorgesehene Struktur verändern können. Angreifer versuchen auf diese Weise, Daten unbefugt auszulesen, abzuändern oder zu löschen. Welche Eingriffe möglich sind, hängt von der fehlerhaften Anwendung, dem Datenbanksystem und den Berechtigungen des verwendeten Datenbankkontos ab.
Betroffen sein können Onlineshops, interne Verwaltungsanwendungen, Kundenportale, APIs und selbst entwickelte Tools. Die bloße Verwendung einer SQL-Datenbank begründet noch keine Sicherheitslücke. Die Ursache liegt in einer unsicheren Verbindung zwischen Datenwerten und ausführbarer Abfragesyntax. Für die Bewertung eines Vorfalls muss daher zwischen einer nachweislich angreifbaren Funktion und einer tatsächlich erfolgten Datenveränderung oder Offenlegung unterschieden werden.
Wie funktioniert eine SQL Injection?
Eine Anwendung fragt beispielsweise einen bestimmten Kundendatensatz ab. Dazu übermittelt der Browser eine Kennung, die der Server für eine SQL-Abfrage verarbeitet. Wird die Eingabe direkt als Teil eines Befehls zusammengesetzt, können Zeichenfolgen nicht mehr als reine Daten behandelt werden. Sie beeinflussen dann unter Umständen die Bedingungen oder die weitere Verarbeitung der Abfrage.
Bei einer sicheren Implementierung wird der SQL-Befehl dagegen in seiner Struktur festgelegt und der übergebene Datenwert über die Datenbankschnittstelle separat gebunden. Die Datenbank behandelt ihn dann als Wert und nicht als zusätzliche Anweisung. Dieses Verfahren wird als parametrisierte Abfrage oder Prepared Statement bezeichnet.
Eine unsichere Eingabe muss nicht unmittelbar aus einem sichtbaren Webformular stammen. API-Parameter, importierte Dateien, Daten aus einem anderen Dienst oder zuvor gespeicherte Inhalte können ebenfalls in spätere Abfragen gelangen. Deshalb sind auch interne Datenverarbeitung und vermeintlich vertrauenswürdige Schnittstellen zu untersuchen.
Welche Formen von SQL Injection gibt es?
Fehlerbasierte SQL Injection
Bei einer fehlerbasierten Angriffskonstellation liefern Datenbankfehler Informationen darüber, wie eine Anwendung ihre Abfragen verarbeitet. Technische Fehlermeldungen können etwa einen Hinweis auf einen unsicheren Abfrageaufbau geben. Nicht jede angezeigte Fehlermeldung bedeutet allerdings, dass ein Angriff praktisch durchführbar ist. Ein korrekt behandelter Fehler ohne Einfluss auf die SQL-Syntax ist davon zu unterscheiden.
Union-basierte und andere In-Band-Verfahren
Bei bestimmten fehlerhaften Abfragen können zusätzliche Ergebnisteile über die reguläre Anwendungsantwort zurückgegeben werden. Ob solche Informationen sichtbar werden, hängt davon ab, welche Spalten, Berechtigungen und Ausgabefunktionen die betroffene Anwendung bereitstellt. Eine erfolgreiche Änderung der Abfrage kann sich deshalb in einem ungewöhnlich umfangreichen Suchergebnis oder einer falschen Datenauswahl zeigen.
Blind SQL Injection
Bei Blind SQL Injection zeigt die Anwendung die zusätzlichen Datenbankergebnisse nicht direkt an. Rückschlüsse können unter bestimmten Voraussetzungen aus unterschiedlichen Antwortinhalten, Antwortstatus oder Laufzeiten entstehen. Ein ungewöhnlich langsamer Seitenaufruf beweist jedoch keine Blind SQL Injection. Serverlast, Netzwerklatenz und reguläre Datenbankabfragen können denselben äußeren Effekt haben.
Second-Order SQL Injection
Von einer Second-Order SQL Injection spricht man, wenn eine Eingabe zunächst gespeichert und erst bei einer späteren Verarbeitung unsicher als Bestandteil eines SQL-Befehls verwendet wird. Ein Import oder ein administrativer Datenabgleich kann diesen Fall auslösen. Die zunächst unauffällige Speicherung ist deshalb kein Nachweis dafür, dass die weitere Verarbeitung sicher erfolgt.
Welche Daten und Systeme können betroffen sein?
SQL Injection kann auf Kundendatenbanken, Bestelltabellen, Mitarbeiterverzeichnisse oder interne Verwaltungsdaten wirken. Ein Angreifer könnte beispielsweise versuchen, Informationen auszulesen, fremde Buchungen zu verändern oder Datensätze unbemerkt zu löschen. Bei Anwendungen mit übermäßig weitreichenden Datenbankrechten kann der Schaden größer sein, weil dieselbe technische Verbindung auch sensible Tabellen bearbeiten darf.
Die Aussage, eine SQL Injection führe immer zum vollständigen Datenbankzugriff, wäre falsch. Oft sind nur einzelne Funktionen erreichbar. Auch gespeicherte Passwörter sind nicht automatisch im Klartext lesbar; ihr tatsächlicher Schutz hängt unter anderem von der verwendeten Speicherung und den Zugriffsmöglichkeiten ab.
Für Unternehmen können aus einem bestätigten Vorfall der Ausfall geschäftlicher Abläufe, Korrekturen von Bestellungen, Datenschutzprüfungen und eine gezielte Information betroffener Kunden folgen. Werden Kundendaten für betrügerische Nachrichten missbraucht, kann der Reputationsschaden über das eigentliche Datenbanksystem hinausreichen. Ein zeitlicher Zusammenhang zwischen einer Phishing-Welle und einer Website-Störung reicht allein aber nicht aus, um die Herkunft der Daten zu belegen.
Ein fiktives Beispiel aus einem Kundenportal
Ein mittelständischer Großhändler betreibt ein selbst entwickeltes Portal zur Abfrage von Lieferungen. Nach einem Update registriert das Team ungewöhnliche Datenbankfehler bei einer Suchfunktion. Die Entwickler prüfen den betreffenden Code und erkennen, dass ein Parameter ungeprüft in einen SQL-Befehl übernommen wird. Damit ist eine technische Schwachstelle festgestellt. Ob sie bereits von Dritten missbraucht wurde, ist zu diesem Zeitpunkt offen.
Im nächsten Schritt werden verfügbare Anwendungsprotokolle, Zugriffe auf das betroffene Portal und Änderungen an relevanten Datensätzen miteinander abgeglichen. Zugleich wird untersucht, ob das Datenbankkonto fremde Tabellen lesen oder verändern durfte. Erst nach dieser Trennung von Schwachstellenprüfung und Vorfallsanalyse kann das Unternehmen den möglichen Umfang eines unbefugten Zugriffs einschätzen.
Welche Anzeichen können auf einen Angriff hindeuten?
Serverprotokolle können zahlreiche fehlerhafte Anfragen an denselben Endpunkt, ungewöhnliche Antwortzeiten oder wiederkehrende Datenbankfehler zeigen. Ebenso können ungeplante Änderungen an Bestellständen oder Benutzerkonten Anlass zur Untersuchung geben. Die Aussagekraft steigt, wenn mehrere unabhängige Informationen auf denselben Vorgang hinweisen.
- Anwendungsprotokolle: Welche Endpunkte, Sitzungen und Zeitpunkte gehören zu den verdächtigen Ereignissen?
- Datenbankaktivitäten: Welche Befehle wurden ausgeführt, und gab es Abfragen auf Tabellen außerhalb des vorgesehenen Funktionsumfangs?
- Änderungsnachweise: Sind Datensätze unberechtigt verändert worden, oder erklärt ein regulärer Import die Abweichung?
- Berechtigungsmodell: Mit welchen Rechten arbeitete die Anwendung zum Zeitpunkt der Auffälligkeit?
- Versionsverlauf: Gab es kurz zuvor eine Codeänderung, neue Erweiterungen oder veränderte Datenbankkonfigurationen?
Ein automatischer Scanner kann eine mögliche Schwachstelle melden, ohne ihre Ausnutzbarkeit zuverlässig nachzuweisen. Falschpositive Ergebnisse sind möglich. Belastbare Aussagen erfordern daher einen kontrollierten Test im berechtigten Rahmen und gegebenenfalls eine Codeprüfung. Ungeplante Experimente auf einem Produktivsystem können Daten beschädigen oder vertrauliche Informationen offenlegen.
Wie verhindert man SQL Injection?
Nach dem OWASP SQL Injection Prevention Cheat Sheet sind parametrisierte Abfragen der wichtigste technische Schutz, wenn Datenwerte in SQL verarbeitet werden. Der SQL-Befehl erhält eine festgelegte Struktur; Nutzerwerte werden separat gebunden. Ein korrekt eingesetztes Prepared Statement verhindert, dass diese Werte als zusätzlicher SQL-Code interpretiert werden.
Allerdings lassen sich Tabellen- oder Spaltennamen und bestimmte Sortieranweisungen nicht wie gewöhnliche Datenwerte parametrisieren. Muss eine Anwendung zwischen solchen Strukturelementen wählen, sollte sie eine feste interne Zuordnung erlaubter Varianten verwenden. Eine frei übergebene Zeichenfolge darf nicht bestimmen, welche Tabellen oder Datenbankbefehle ausgeführt werden.
- Abfrageaufbau überprüfen: Dynamisch zusammengesetzte SQL-Anweisungen durch parametrisierte Varianten ersetzen.
- Stored Procedures bewerten: Eine gespeicherte Prozedur ist nicht automatisch sicher, wenn sie selbst dynamisches SQL aus ungeprüften Werten erzeugt.
- Datenbankberechtigungen begrenzen: Unterschiedliche Anwendungsteile erhalten nur die Tabellen- und Änderungsrechte, die sie tatsächlich benötigen.
- Fehlerausgaben kontrollieren: Interne Datenbankdetails gehören in geschützte Protokolle und nicht in öffentliche Fehlermeldungen.
- Automatisierte Tests und Codeprüfungen: Veränderungen an Suchfunktionen, API-Endpunkten und Datenimporten regelmäßig untersuchen.
- Wiederherstellung vorbereiten: Gesicherte Backups, Prüfungen ihrer Integrität und dokumentierte Wiederanlaufverfahren bereitstellen.
Eine Web Application Firewall kann bestimmte verdächtige Anfragen blockieren. Sie behebt den unsicheren SQL-Aufbau jedoch nicht. Ebenso genügt es nicht, Sonderzeichen zu entfernen oder Daten ausschließlich nach Länge und Format zu prüfen. Solche Kontrollen können die Verarbeitung absichern, ersetzen aber nicht die Trennung von SQL-Syntax und Datenwerten.
Was ist bei einer bestätigten Ausnutzung zu tun?
Der betroffene Zugang sollte kontrolliert eingeschränkt und die fehlerhafte Funktion korrigiert werden. Vor umfangreichen Löschungen oder Wiederherstellungen sind relevante Protokolle und Datenbankstände zu sichern. Das Unternehmen muss feststellen, welche Befehle tatsächlich ausgeführt wurden, ob unbefugte Konten erstellt wurden und ob Daten kopiert oder verändert worden sind.
Bei Datenveränderungen kann es notwendig werden, einzelne Datensätze aus einer überprüften Sicherung wiederherzustellen. Eine vollständige Rücksetzung ohne Prüfung kann legitime Bestellungen oder nachträgliche Korrekturen löschen. Je nach Befund kommen ergänzende Maßnahmen wie die Rotation von Zugangsdaten und die Trennung betroffener Systeme infrage.
Rechtliche Einordnung von SQL Injection
Die technische Bezeichnung SQL Injection ist keine eigenständige Strafnorm. Wenn jemand unter Überwindung einer besonderen Zugangssicherung unbefugt auf fremde Daten zugreift, kann § 202a StGB einschlägig sein. Werden Daten rechtswidrig gelöscht oder verändert, ist § 303a StGB zu prüfen. Bei erheblichen Störungen bestimmter Datenverarbeitungen kann unter weiteren Voraussetzungen § 303b StGB in Betracht kommen.
Ein unberechtigter Zugriff auf personenbezogene Kundendaten kann eine Verletzung des Schutzes personenbezogener Daten darstellen. Nach Art. 33 DSGVO ist gegebenenfalls die zuständige Aufsichtsbehörde unverzüglich und möglichst binnen 72 Stunden ab Bekanntwerden zu informieren, sofern die gesetzlichen Voraussetzungen erfüllt sind. Unter den Anforderungen des Art. 34 kann eine Benachrichtigung betroffener Personen erforderlich werden. Nicht jede gefundene Schwachstelle löst diese Pflichten aus.
Für eine Schadensdarstellung sollten tatsächliche Belege über betroffene Daten, Verarbeitungsfehler oder Kosten vorliegen. Aus einer auffälligen Abfrage lässt sich weder automatisch ein strafbarer Vorgang noch ein bestimmter finanzieller Schaden ableiten.
SQL Injection von XSS und anderen Angriffen unterscheiden
Cross-Site Scripting betrifft die Verarbeitung von nicht vertrauenswürdigen Inhalten im Browser. SQL Injection betrifft die Struktur einer Datenbankanweisung. File Upload Abuse beginnt wiederum bei der Übermittlung und weiteren Verarbeitung einer Datei. Mehrere Schwachstellen können in einem Vorfall zusammen auftreten, erfordern aber jeweils eigene Belege und Gegenmaßnahmen.
Häufige Fragen zu SQL Injection
Kann auch eine moderne Website von SQL Injection betroffen sein?
Ja. Auch moderne Anwendungen können unsichere Eigenentwicklungen, Datenzugriffsschichten oder dynamische Datenbankabfragen enthalten. Entscheidend ist die konkrete Programmierung.
Verhindert die Prüfung von Eingaben den Angriff?
Eine Prüfung auf zulässige Werte hilft bei der Datenqualität und bei der Beschränkung bestimmter Abfrageoptionen. Der vorrangige Schutz gegen die Veränderung von SQL-Syntax bleibt die Parametrisierung.
Beweist eine Datenbankfehlermeldung einen Angriff?
Nein. Fehler können durch Programmierfehler, Berechtigungen oder überlastete Systeme entstehen. Zur Bewertung sind Code, Anfragen und Datenbankvorgänge gemeinsam zu untersuchen.
Ist eine SQL Injection gleichbedeutend mit einem Datenschutzvorfall?
Nein. Eine technische Schwachstelle kann ohne nachgewiesene Verletzung personenbezogener Daten bestehen. Die rechtliche Bewertung richtet sich nach dem tatsächlichen Ereignis und dessen Folgen.
Wo können betroffene Unternehmen Hilfe erhalten?
Wer eine SQL-Injection-Schwachstelle oder einen möglichen Datenbankzugriff feststellt, sollte die zuständige IT-Abteilung und gegebenenfalls den Hostinganbieter einschalten. Für die Beurteilung eines Datenschutzvorfalls können zusätzlich Datenschutzbeauftragte und rechtliche Beratung erforderlich sein. BRANDPROTECTIONNOW begleitet Unternehmen bei der strukturierten Analyse des Angriffsbildes, der Sicherung digitaler Spuren und der Abstimmung von Sofortmaßnahmen mit spezialisierten Security-Partnern. Nach einem bestätigten Vorfall können der Wiederaufbau betroffener Webpräsenzen, die Beobachtung missbräuchlicher Domain- oder Suchergebnisse und der Schutz der Unternehmensreputation hinzukommen. Weitere Informationen: BRANDPROTECTIONNOW bei Blackhat- und Website-Angriffen.
Fachquellen
- OWASP – SQL Injection Prevention Cheat Sheet: Prepared Statements, dynamische SQL-Strukturen, Berechtigungen und Grenzen von Escaping.
- OWASP Web Security Testing Guide: Prüfung von Injection-Schwachstellen in Webanwendungen.
- § 202a StGB, § 303a StGB und § 303b StGB: mögliche strafrechtliche Tatbestände.
- EU-Datenschutz-Grundverordnung: Art. 33 und 34 bei Verletzungen des Schutzes personenbezogener Daten.
Bei Verdacht auf manipulierte Kundendaten oder kompromittierte Website-Funktionen sind die Vorfallsanalyse und die anschließende Absicherung dem Leistungsfeld Blackhat-Angriffe von BRANDPROTECTIONNOW zugeordnet.
