Was sind SQL Injections und wie kann man sich schützen?
Seit 2017 hat sich die Zahl der Cyberangriffe weltweit dramatisch erhöht - allein von 2019 auf 2020 verzeichnete das Internet Crime Complaint Center des US-amerikanischen FBI einen Anstieg von zuvor rund 465.000 auf beinahe 800.000 pro Jahr. Ein bereits älteres und gut bekanntes, jedoch nach wie vor sehr weit verbreitetes und oft erfolgreiches Angriffsmuster stellen die sogenannten SQL Injections dar. Obwohl diese mittlerweile gut bekannt sind und zu einer der verbreitetsten Bedrohungen zählen, nutzen sie kriminelle Hacker nach wie vor für unterschiedliche Ziele wie Distributed Denial of Service (DDoS Attacken), Erpressung, Datendiebstahl, Betrug oder das Eindringen in fremde IT-Infrastruktur.
Inhalt:
Was ist SQL und welche Bedeutung hat es für einen Webserver?
Wie funktionieren SQL Injections?
Welche Angriffe lassen sich durch SQL Injections durchführen?
Wie sehen SQL Injections in der Praxis aus?
Wie lassen sich SQL Injections auf einem Server verhindern?
Was ist SQL und welche Bedeutung hat es für einen Webserver?
Um die Funktionsweise von SQL Injections zu verstehen, ist es erforderlich, ein grundlegendes Wissen über Datenbanken, ihren Aufbau und die Arbeit eines Webservers zu besitzen. Hinter dem Begriff SQL verbirgt sich eine Abkürzung für Strukturierte Abfrage-Sprache (Structured Query Language) und es handelt sich um eine technische Sprache, mit der Informationen in einer Datenbank erstellt, gelesen, manipuliert und gelöscht werden können. Sie definiert spezielle Befehle und die Syntax, mit der diese angeordnet und durch zusätzlichen Parameter wie Daten ergänzt werden.
Die Datenbank enthält bei dynamischen Webseiten alle temporären Informationen wie zum Beispiel Texte oder Links und zusätzlich systemkritische Inhalte - etwa Nutzernamen und Passwörter. Den Abruf übernimmt der PHP Interpreter aufgrund von Anweisungen in zahlreichen Skripten und Zugriffsrechten wie einer Authentifizierung über Log-ins für spezielle Datenbanken. Für diese Aufgabe muss er mit externen Programmen wie dem Datenbank- und Webserver kommunizieren und systemweit auf diese zugreifen können. Bei einer sauberen Absicherung der Software, bspw. des PHP-Frameworks Symfony und des PHP-Codes stellen diese Voraussetzungen kein Problem dar - sie kann jedoch ebenfalls missbraucht werden.
Wie funktionieren SQL Injections?
Das Prinzip von SQL Injections besteht darin, über eine öffentliche Schnittstelle wie einen Seitenaufruf oder einen unmittelbaren Zugang zu einem Datenbankserver zusätzliche Befehle einzuschleusen, der eigentlich nicht zugängige Informationen abruft oder sogar das direkte Ausführen von Code ermöglicht. Ursache dafür ist in der Regel ein Programmierfehler, der Parameter nicht ausreichend von Befehlen isoliert und dazu führt, dass sich gefährliche Funktionen oder Kommandos in den Datenbankserver "injizieren" lassen. Entsprechende Schwachstellen verbergen sich meist in den mehreren Tausenden Zeilen Quellcode eines Content Management Systems (CMS) oder in Ausnahmen in der Arbeitsweise des PHP Interpreters oder Datenbankservers.
Da sich die Ursache für SQL Injections in dem Quellcode selbst verbergen, können sich selbst in einem sicheren System stetig neue Sicherheitslücken einschleusen. Weil die Entwickler von populären CMS mittlerweile umfangreiche Maßnahmen gegen solche Schwachstellen ergriffen haben, droht heute das höchste Risiko durch alte oder schlecht programmierte Plug-ins, die nicht selten von einzelnen und teilweise unerfahrenen Programmierern stammen. Problematisch zeigen sich zudem Erweiterungen, deren Entwicklung aufgrund von Zeitmangel oder fehlendem Interesse nicht aktiv betreut wird, und die somit keine regelmäßigen Aktualisierungen etwa nach der Veröffentlichung neuer Sicherheitslücken erfahren.
Welche Angriffe lassen sich durch SQL Injections durchführen?
Die Möglichkeiten von SQL Injections sind vielfältig, weil es sich bei dem Webserver, PHP Interpreter und dem Datenbankserver um Systemprozesse handelt, die entsprechende globale Zugriffsrechte besitzen. Darüber hinaus verwaltet der Datenbankserver alle entscheidenden Inhalte inklusive der Webseite sowie sensiblen Daten wie Logins, Passwörtern und persönlichen Informationen. Entsprechend groß sind die Gefahren, die von einem solchen Angriff ausgehen und zahlreiche kritische Szenarien beinhalten:
- Erlangung von sensiblen Informationen
- Veränderung von Inhalten einer Webseite (Defacing)
- Infiltration eines Servers und Ausweitung der individuellen Zugriffsrechte
- DDoS Attacken zur Störung eines produktiven Systems
- Erpressung anhand gestohlener Daten oder durch Einschleusen von Ransomware
- Anlegen von Hintertüren (Backdoors) für das spätere Eindringen in das System
- Missbrauch von Ressourcen wie Rechenleistung
- Einschleusen von Schadcode, Trojanern oder gefälschten E-Mails
Ihre Vielseitigkeit und weite Verbreitung stellen zwei der entscheidenden Gründe dafür dar, warum viele Cyberkriminelle seit mehr als einem Jahrzehnt bevorzugt SQL Injections verwenden, um einen Server anzugreifen. Dabei gehen nahezu ausschließlich professionelle Gruppen gezielt gegen ein bestimmtes Ziel vor - viele einzelne Hacker oder rein profitorientierte Banden suchen hingegen willkürlich nach potenziellen Opfern, indem sie große Teile des Internets nach existierenden Sicherheitslücken scannen und diese bei einem Fund ausnutzen.
Wie sehen SQL Injections in der Praxis aus?
Um eigentlich nicht genehmigte Funktionen und Abfragen durchführen zu können, verändert ein krimineller Hacker die ursprünglich automatisch erzeugte URL und übergibt Parameter, die ein unerwünschtes Verhalten hervorrufen. So ist es zum Beispiel möglich, durch das in SQL verwendete Trennzeichen Semikolon zwischen zwei Befehlen an eine legitime Anfrage - zum Beispiel einer Suche - eine zusätzliche Aktion anzuhängen. Dafür genügt es im einfachsten Fall, an eine Adresse wie
https://example.com/search?query=abc
manuell um einen weiteren Textabschnitt anzuhängen, um zum Beispiel das Passwort oder die Zugriffsrechte für einen bestimmten Nutzer inklusive des Administrators zu ändern.
Ein anderes Vorgehen besteht darin, eine Anfrage so zu verfälschen, dass eine bestimmte Bedingung in jedem Fall wahr ist. So konnte in der Vergangenheit beispielsweise ein schlecht programmierter Log-in von einem böswilligen Hacker ausgehebelt werden, indem durch Nutzername oder Passwort schlicht der vorhergehende Parameter abgeschlossen und eine weitere Bedingung eingefügt wurde. Da es sich um eine Verknüpfung mit Oder handelt, interpretiert ein Datenbankserver das Resultat immer als Wahr und gibt dementsprechend einen Erfolg zurück.
Ein drittes Verfahren besteht darin, eine legitime Abfrage durch eine weitere zu ergänzen, die auf eigentlich vertrauliche und geschützte Daten zugreift. Dazu diente die Erweiterung UNION, mit der sich mehrere Auskünfte aus unterschiedlichen Tabellen verknüpfen lassen. Dies schafft die Möglichkeit, versteckte Informationen inklusive Listen von E-Mails, Nutzernamen oder Passwörtern und weitere sensible Details wie die Struktur der Datenbank in Erfahrung zu bringen.
Die mit Abstand schwerwiegendste Variante von SQL Injections ermöglichen es sogar, einen Code direkt auszuführen oder auf das Dateisystem zuzugreifen. So ist es beispielsweise möglich, ein häufig verwendetes Standardprogramm durch einen Schadcode oder einer mit einem Trojaner infizierten Version zu überschreiben, um einen vollständigen Zugriff auf das komplette System zu erhalten.
Nicht zuletzt lassen sich SQL Injections ebenfalls für DDoS Attacken nutzen, indem der Angreifer den Datenbankserver mit rechenintensiven Aufgaben flutet, um alle Ressourcen auf einem virtuellen oder dedizierten Server in Anspruch zu nehmen. Eine einfache Möglichkeit dazu liegt er in der Ausführung von mehrfachen, parallel durchgeführten Benchmarks oder der Berechnung von kryptografischen Algorithmen, die eine hohe Rechenlast erzeugen. Dies kann dazu führen, dass gewöhnliche Anfragen blockiert werden und der Webserver auf eingehende Verbindungen mit Fehlermeldungen wie dem HTTP Error 500 Internal Server Error oder dem Statuscode 504 Gateway Timeout reagiert.
Wie lassen sich SQL Injections auf einem Server verhindern?
Die Grundlage von SQL Injections liegt wie bei ähnlichen Sicherheitslücken - zum Beispiel einem Speicherüberlauf von Variablen (Buffer Overflow) - in einem Programmierfehler. Bei professionellen Entwicklerteams besteht inzwischen ein hohes Bewusstsein für die beiden Gefahren, weshalb sie den Quellcode kontinuierlich auf diese Schwachstellen überprüfen. Den sichersten Schutz vor SQL Injections stellen deshalb einige einfache Maßnahmen dar, die bei allen mit dem Internet verbundenen Servern berücksichtigt und umgesetzt werden sollten:
- Regelmäßige Aktualisierung von Software wie CMS und Systemprogrammen
- Verzicht auf Plug-ins, Templates und anderen Erweiterungen aus inoffiziellen Quellen
- Automatisches Monitoring der Logs auf ungewöhnliche Aktivitäten
- Einfache und minimale Systeme zur Vermeidung potenzieller Schwachstellen
- Strikte Vergabe von Rechten für Zugriffe auf das Dateisystem
- Verwendung von speziellen Usern statt Root für Datenbank und Webserver
Der entscheidende Faktor für eine maximale Sicherheit gegen SQL Injections liegt allerdings auf der Ebene der verwendeten Software und insbesondere der benutzten Routinen in den PHP Skripten. Sind diese nicht ausreichend gegen diese Variante von Angriffen geschützt, greifen keine alternativen Maßnahmen. Diese können lediglich den Schaden eingrenzen beziehungsweise erfolgte Attacken frühzeitig entdecken, um rasch auf sie reagieren zu können.
Foto: TheDigitalWay auf Pixabay
Schreibe einen Kommentar
- Security
- Datenbanken
Tags zu diesem Artikel
Weitere Webhoster
Weitere interessante Artikel
Die besten Tipps für sichere Passwörter
Um die eigenen Daten im Internet zu schützen, ist die Vergabe eines sicheren Passworts zwingend notwendig. Hier finden S...
MySQL Version prüfen - so einfach geht es
Auch die MySQL Version sollte nicht veraltert sein. Wir zeigen euch, wie ihr diese einsehen könnt.
Im Jahr 2006 riefen wir hosttest ins Leben, um den Webhosting Markt im DACH-Raum transparenter zu machen. Mit derzeit über 400 Webhostern und über 10.000 Angeboten bieten wir dir die beste Grundlage, den für dich passenden Anbieter für Hosting-Leistungen zu finden.
Seit 2015 küren wir zudem alljährlich unsere Webhoster des Jahres und würden uns in Zukunft auch über deine Stimme freuen.
Mehr über uns...