Unter SQL-Injection versteht man das Einfügen von SQL-Code in eine Webseite, um auf dahinter liegende SQL-Datenbanken zuzugreifen. So können Daten ausgelesen, aber auch verändert oder gelöscht werden. Da diese Form des Angriffs sehr einfach durchzuführen ist, ist sie weit verbreitet.
Aktuelle Internetauftritte und webbasierte Dienste verwenden in der Regel eine zweistufige Architektur: Im Vordergrund steht die Website mit dem Server, der mit dem Endgerät des Nutzers kommuniziert und die Darstellung übernimmt. Im Hintergrund arbeiten meist ein oder mehrere Server mit Datenbanken, die verschiedene Zusatzinformationen speichern und weitere Dienste zur Verfügung stellen.
Dieses zweistufige Modell soll eigentlich sicherstellen, dass sensible Daten im Hintergrund vor Angriffen geschützt sind. Durch Fehler in der Webprogrammierung kann diese Trennung jedoch manchmal leicht umgangen werden. Da insbesondere Datenbanken viel mehr Informationen enthalten, als auf der Website angezeigt werden, sind sie für Angreifer sehr interessant.
SQL-Injection gehört zu den gängigsten Cyber-Angriffen
Eine beliebte Methode für solche Angriffe wird als „Injection“ bezeichnet. Durch das Einfügen von speziellen Codes, Befehlen und Zeichen in Anmeldefelder oder in die an den Browser übermittelte URL kann eine Webseite dazu gebracht werden, Dinge zu tun, die sie eigentlich nicht tun sollte. Entsprechende Kontrollen auf dem Webserver sollten dies eigentlich verhindern. Doch allzu oft werden die notwendigen Vorkehrungen und Kontrollen bei der Eingabe von Benutzerdaten vergessen. Unter den Top 10 der Sicherheitslücken auf Webseiten im Jahr 2021 nimmt die „Injection“-Schwachstelle daher den dritten Platz ein. [1]
Es gibt verschiedene Angriffsvektoren, die mit dem Einfügen von zusätzlichen Befehlen arbeiten. So kann beispielsweise versucht werden, über das Login-Fenster einer Webseite Schadcode einzuschleusen. Dabei wird versucht, das zugrundeliegende LDAP-Protokoll (Lightweight Directory Access Protocol) auszunutzen (LDAP-Injection). Mit entsprechenden Befehlen können so auf ungeschützten Systemen die Rechte eines Benutzers erhöht, Daten verändert oder auch neue Accounts angelegt werden. Zum Schutz von Webseiten und Formularen sollten daher die Eingaben in Benutzereingabefeldern kontrolliert werden, indem beispielsweise bestimmte Zeichen von der Abfrage ausgeschlossen werden.
Die weltweite gemeinnützige Organisation OWASP (Open Web Application Security Project) hat konkrete Empfehlungen veröffentlicht, wie Anmeldeprozesse mit LDAP sicherer gestaltet werden können. [2]
Angriffe auf Authentifizierung und Nutzerdaten
Für Cyberkriminelle ist es oft interessant, direkt in der Datenbank „herumzuschnüffeln“. Viele Systeme verwenden die standardisierte Abfragesprache SQL, die von vielen Datenbanken verstanden wird. Gelingt es einem Angreifer nun durch Ausnutzung einer oder mehrerer Programm- und Sicherheitslücken, solche Befehle im Hintergrund direkt an das System weiterzuleiten, sind unvorhergesehene Auswirkungen möglich. [3] Vom Auslesen ganzer Datenbestände bis hin zum Einschleusen und Manipulieren von Informationen ist vieles denkbar. Daher ist es entscheidend, sich vor diesen Angriffen zu schützen, indem bereits präventiv robuste Sicherheitsmaßnahmen implementiert werden. Dies hilft, sensible Anwendungen und Daten vor möglichen Angriffen zu schützen. [4]
Generell ist das Einschleusen von Schadcode bei jeder Benutzereingabe möglich. Insbesondere SQL-Injection kommt bei PHP- und ASP-Anwendungen aufgrund der weit verbreiteten älteren funktionalen Schnittstellen häufig vor. Andere Plattformen können aufgrund neuerer Entwicklungen etwas robuster sein. Aber auch andere Systeme können betroffen sein: Bei XML-Datenbanken können ähnliche Probleme auftreten (z.B. XPath- und XQuery-Injection). Auch für diese Datenbanken gelten die grundlegenden Sicherheitsmaßnahmen. Die Gefährdung der eigenen Systeme kann auch durch aktive Sicherheitstests von Webseiten oder Formularen ermittelt werden. Dabei versuchen Expert*innen, typische Probleme bei Benutzereingaben und dem Aufrufen von weiteren Subseiten vorab zu identifizieren.
Wichtige Gegenmaßnahmen gegen SQL-Injection
Die beste Vorkehrung besteht darin, die Anwendungen selbst, die auf die zugrundeliegenden Datenbanken zugreifen, von vornherein sicher und restriktiv zu gestalten. Der Fokus liegt auf der Verbesserung der Sicherheit von Webservices. OWASP bietet dazu viele frei verfügbare Informationen, um Sicherheitslücken und Risiken in Webanwendungen zu identifizieren und zu beheben. Im „Cheat Sheet“ für die Vermeidung von „Injection“ werden die drei folgenden Methoden empfohlen:
- Verwenden Sie nur vorbereitete Anweisungen für Datenbankabfragen.
- Verwendung Sie nur ordnungsgemäße Prozeduren mit stark eingeschränkten Parametern.
- Führen Sie immer eine möglichst genaue Eingabevalidierung der Nutzerdaten durch.
Beachten Sie auch das wichtige Grundprinzip, nur die Sichtbarkeiten und Zugriffsrechte auf Daten zu gewähren, die tatsächlich benötigt werden.
An erster Stelle sollte jedoch der Fokus auf sichere Entwicklung und regelmäßige Schwachstellentests stehen. Webapplikationen sollen nur minimal nötige Rechte und Sichtbarkeiten von Daten für die jeweilige Erfüllung der Aufgabe besitzen. Denn oft wird in der Entwicklung einer Anwendung mit Admin-Rechten begonnen und dann im Produktivsystem keine sicherheitsorientierte Anpassung mehr umgesetzt. Auch die sichere Implementierung und Konfiguration der Datenbank im Hintergrund darf nicht vernachlässigt werden und muss regelmäßig überprüft werden.
Das könnte Sie auch interessieren:
10 Tipps für eine verbesserte Website-Sicherheit
Malware Intrusion: 5 Schritte, wenn die eigene Website gehackt wurde
Infostealer erkennen, verstehen und abwehren
Data Loss Prevention planen und umsetzen
Links:
[1] https://www.heise.de/hintergrund/Sicherheitsbedrohungen-im-Web-Die-groessten-Risiken-laut-OWASP-Top-Ten-2021-6271591.html
[2] https://owasp.org/www-community/attacks/LDAP_Injection
[3] https://www.w3schools.com/sql/sql_injection.asp
[4] https://owasp.org/www-community/attacks/SQL_Injection