SQL-Injection: Ein Leitfaden für WordPress

Am 13. Juli 2021 wurde mal wieder ein kritisches Update für WordPress veröffentlicht. In den Versionen 3.3 bis 5.5 des WooCommerce-Plugins, sowie den Versionen 2.5 bis 5.5 des Plugins WooCommerce Blocks war demnach eine schwerwiegende Sicherheitslücke vorhanden. Über eine sogenannte SQL-Injection konnten sich Angreifer Zugriff auf die WordPress-Seite verschaffen. Aber was ist eine SQL-Injection? Wer es mit der Sicherheit von WordPress-Seiten ernst meint, sollte sich dringend mit SQL-Injections beschäftigen.

Der Begriff SQL-Injection (auch SQLi genannt) bezieht sich auf eine Art von Cyberangriffstechnik, die eine gängige Methode für Hacker ist, Websites aller Art zu kompromittieren, einschließlich Websites, die WordPress als Content-Management-System verwenden. In diesem Beitrag erkläre ich im Detail, wie ein SQL-Injection-Angriff aussieht und welche Schritte Du genau unternehmen solltest, um einen solchen zu vermeiden.

SQL Definition

Structured Query Language, oder „SQL“ ist ein relationales Datenbankmanagementsystem. Es wurde 1974 erfunden und war die erste einfache Möglichkeit, viele Arten von Daten auf Computersystemen zu speichern und abzurufen.

Seitdem hat die Datenbank-Sprache einen rasanten Aufschwung erlebt und wird auch heute noch in vielen Content-Management-Systemen (CMS) wie WordPress verwendet. Kurz nachdem die Sprache in der wissenschaftlichen Forschungsgemeinschaft populär wurde, tauchte das Problem der inzwischen berüchtigten SQL-Injection auf.

In Systemen wie WordPress werden bei vielen Operationen SQL-Abfragen verwendet, um Daten abzurufen und zu speichern. Diese SQL-Abfragen werden von Entwicklern geschrieben und sind nicht darauf ausgelegt, formbar zu sein.

Leider sind SQL-Injection-Angriffe seit den Anfängen von SQL ein ständiges Problem für Systeme, die diese Art von Datenbank verwenden, wie z. B. die WordPress-Datenbank. Die Verwendung eines hochwertigen WordPress-Sicherheits-Plugins kann sicherlich dazu beitragen, das Risiko eines verheerenden Angriffs oder einer Sicherheitsverletzung zu mindern.

Was ist eine SQL-Injection (SQLi)?

Kurz gesagt ist eine SQL-Injection (SQLi) ein Angriff, der es einem Hacker ermöglicht, eine verwundbare SQL-Abfrage auszunutzen, um seine eigene Abfrage auszuführen. SQL-Injektionen treten auf, wenn ein Angreifer in der Lage ist, sein eigenes SQL auf einem Server auszuführen.

Sie werden feststellen, dass SQL-Injektionen in technischen Publikationen oft als „SQLI“ oder „SQLi“ bezeichnet werden. Denken Sie daran, dass diese Angriffe auf jedes System erfolgen können, das SQL oder ein Derivat von SQL zur Verwaltung von Daten verwendet. Insbesondere WordPress-SQL-Injections sind aufgrund der schieren Menge an Websites, die auf der WordPress-Plattform laufen, so gut erforscht und dokumentiert.

Werfen wir einen Blick auf den eher technischen Aufwand, aus dem diese Angriffe bestehen.

SQL-Einschleusung Definition

Per Definition ist die Absicht einer SQL-Injection immer böswillig und zielt typischerweise darauf ab, eines oder mehrere dieser drei Ziele zu erreichen:

  1. Unerlaubter Datenabruf: In SQL wird der SELECT-Befehl zum Abgreifen von Daten verwendet. Wenn ein Angreifer eine SELECT-basierte Abfrage erfolgreich manipulieren kann, ist er in der Lage, den Inhalt einer Datenbank zu „dumpen“. Aus diesem Grund ist es wichtig, alle Datenbanken mit Informationen, die nicht öffentlich bekannt gemacht werden sollen, zu verschlüsseln.
  2. Änderung von Daten: In anderen Fällen kann das Ziel einer WordPress-SQL-Injection sein, Einträge in Datenbanken zu ändern. Dies geschieht in der Regel, um einem bestimmten Konto oder einer Gruppe von Konten Berechtigungen zuzuweisen, die sie normalerweise nicht haben würden.
  3. Denial of Service (DoS): Ein DoS-Angriff liegt vor, wenn ein böswilliger Benutzer den Zugriff auf Ihre Website oder Dienste für legitime Benutzer erschwert. Ein gängiger Befehl in SQL zum Löschen von Daten ist einfach DELETE. Angreifer löschen oft massenhaft den Inhalt von Datenbanken, um Zielseiten unerreichbar oder unbrauchbar zu machen.

Schneller Tipp: Sichern Sie Ihre Website regelmäßig!

Viele erfahrene Entwickler bewahren Off-Server-Kopien aller SQL-Daten auf, die sie für ihre WordPress-Seiten geschrieben haben. In Form von .sql-Dateien können diese in Verbindung mit einem WordPress-Backup-Plugin verwendet werden, um sicherzustellen, dass selbst wenn ein Angreifer Ihre Sicherheit durchkreuzen kann, Sie sich in kürzester Zeit wiederherstellen können. Ein WordPress-Backup-Plugin wie BackupBuddy* sichert Ihre gesamte WordPress-Datenbank und alle anderen Dateien in Ihrer WordPress-Installation.

SQL-Injection-Angriffsarten erklärt

Nachdem wir nun einige der Schäden untersucht haben, die SQL-basierte Angriffe verursachen können, ist es an der Zeit, die eher technische Seite der Injektionen zu untersuchen. Es gibt ein paar wichtige Untergruppen von Injektionsarten, die Sie kennen sollten.

Was ist eine klassische SQL-Injektion (SQLi)?

Blog Commenting

Die häufigste Art der Injektion, die klassische Version ist, wenn der Angreifer den SQL-Code im Voraus kennt. Dies ist auch die Art der Injektion, die bei WordPress am häufigsten verwendet wird. Da WordPress Open Source ist, hat die Allgemeinheit Zugang zu allen Komponenten, einschließlich der SQL-Abfragen.

Bei dieser Form der Injektion manipulieren Angreifer oft Abfragen, um den ersten Teil einer Abfrage „aufzuheben“. Sie können dann eine benutzerdefinierte Abfrage einfügen, die der Server so ausführt, als ob der ursprüngliche Entwickler sie geschrieben hätte.

Was ist eine blinde SQL-Injektion (SQLi)?

Blog Commenting

Im Gegensatz zur klassischen Version treten blinde SQL-Injektionen auf, wenn der Angreifer keinen Zugriff auf den SQL-Code hat und einfach nur eine Vermutung anstellen muss. Außerdem erfordert diese Art weitaus mehr Geschick als herkömmliches SQLi, da die Ergebnisse eines erfolgreichen Angriffs dem Angreifer nicht angezeigt werden.
Trotzdem gibt es viele Programme, die böswilligen Anwendern dabei helfen, ihre Ergebnisse Bit für Bit automatisch abzugreifen.

Was ist eine zusammengesetzte SLQ-Injektion (SQLi)?

Blog Commenting

Bei dieser Form des Angriffs wird ein separater Angriff mit SQLi kombiniert, um das gewünschte Ergebnis zu erzielen. Bei der anspruchsvollsten der drei Untergruppen muss der Angreifer einen Exploit ausführen, der es ihm ermöglicht, SQLi auszuführen, das von alleine nicht funktionieren würde. Die Exploits, die SQLi in diesem Angriffsgenre am häufigsten begleiten, sind Authentifizierungsverletzungen, DDoS-Angriffe (Distributed Denial of Service), DNS-Hijacking und Cross-Site-Scripting-Angriffe.

Warum sind WordPress-Websites anfällig für SQL-Injections?

Blog Commenting

WordPress ist anfällig für bestimmte SQL-Injektionen, da es so weit verbreitet ist (mittlerweile werden 40% aller Websites damit betrieben!) und schon eine Weile existiert (seit 2003). WordPress basiert auf PHP, einer serverseitigen Programmiersprache, die für eine einfache Integration mit MySQL ausgelegt ist.

WordPress verwendet SQL-Datenbanken, um so ziemlich alles zu speichern, von Kommentaren über Beiträge bis hin zu Konten und E-Commerce-Informationen. Die überwiegende Mehrheit der WordPress-SQL-Injektionsversuche erfolgt über Formulare, die Daten an ein PHP-Skript übermitteln, das die SQL-Abfrage enthält, die der Angreifer ausnutzen möchte.

Dies ist kein Designfehler, sondern eher ein Nebeneffekt der Art und Weise, wie WordPress entworfen wurde. Denk daran, dass so ziemlich alles, was vor und bis zur „Dot-Com-Ära“ begann, nicht mit Blick auf die Sicherheit entwickelt wurde.

Obwohl die anfänglichen SQLi-Exploits bei einem modernen CMS wie WordPress fast nie funktionieren, sind die Angreifer im Laufe der Jahre immer gewiefter geworden. Sehen wir uns ein einfaches Beispiel dafür an, wie SQLi auf einer völlig ungeschützten Website aussehen könnte. Anschließend zeige ich bestehende Exploits für verschiedene WordPress-Versionen.

Wichtige Warnungen in Bezug auf SQL-Injections

In fast allen entwickelten Ländern und Staaten ist sogar der Versuch, eine WordPress-Website zu nutzen, die Dir nicht gehört, illegal. Die Strafen können sehr hoch sein und in einigen Fällen sogar zu Haftstrafen führen! Es steht Dir zwar frei, unsere Beispiele auf Ihrer eigenen Hardware auszuprobieren, aber versuche niemals, dies ohne ausdrückliche Genehmigung auf anderen Seiten zu tun.

Eine der besten Schutzmaßnahmen gegen SQLi-Exploits (wie auch gegen viele andere Hacks) ist es, eine WordPress-Version auf dem neuesten Stand zu halten. Selbst wenn es bedeutet, dass Sie vorübergehend ein paar Plugins zerstören müssen, ist es das für die Sicherheit Ihrer Website wert.Ihre WordPress-Version auf dem neuesten Stand zu halten, ist eine der besten Verteidigungsmaßnahmen gegen SQLi-Exploits. Selbst wenn es bedeutet, dass Du vorübergehend auf ein paar Plugins verzichten muss, ist es das für die Sicherheit Deiner Website wert.

Beispiel für eine SQL-Injection

Nachdem wir nun diese Haftungsausschlüsse aus dem Weg geräumt haben, lass uns einen Blick auf SQLi-Beispiele werfen. Um diese zu verstehen, müssen wir ein wenig SQL-Jargon kennen. SQL verwendet Befehle wie SELECT, um Daten zu erfassen, DROP TABLE, um eine Tabelle innerhalb einer Datenbank vollständig zu löschen, DELETE, um Zeilen aus einer Tabelle zu entfernen, und mehr. Außerdem bedeutet das ‚*‘-Zeichen in SQL „alle“.

Die grundlegendste Abfrage in SQL ist: SELECT * FROM TABELLEN_NAME. Dies besagt, dass im Wesentlichen alle Daten aus einer Tabelle namens „TABLE_NAME“ ausgeben werden sollen. Gibt man Daten in ein Anmeldeformular ein, werden diese durch ein PHP-Skript geleitet, das die Anmeldedaten mit einer Tabelle von Benutzern abgleicht. In unserem Beispiel nehmen wir an, dass wir sehr schlecht in Sachen Cybersicherheit sind und eine völlig unverschlüsselte Klartexttabelle mit Spalten namens USER und PASS haben.

Vorbereiten der Abfrage

In unserer sehr schlecht gesicherten Datenbank heißt unsere Tabelle mit Benutzernamen und Passwörtern SCHLECHTE_TABELLE. Die Abfrage zur Authentifizierung eines sich anmeldenden Benutzers ist einfach:

SELECT * FROM SCHLECHTE_TABELLE WHERE USER = '[Benutzername aus Formular]' AND PASS = '[Passwort aus Formular]'.

Wie Du sehen kannst, sagen wir, dass die „Liste“ der Benutzer, die nur eine sein sollte, wenn der Benutzername und das Kennwort, die in das Formular eingegeben werden, übereinstimmen, erfasst werden soll. SQL erlaubt es auch, das Schlüsselwort OR in bedingten Anweisungen zu verwenden, wie das AND, das Du in unserer Abfrage sehen kannst.

Unsere ungeschützte SQL-Abfrage ausnutzen

Unsere Abfrage ist so eingerichtet, dass sie den Benutzer zurückgibt, wenn unser Benutzername und unser Passwort übereinstimmen. Da ein einfaches Anführungszeichen eine Zeichenkette beendet, können wir „Nutzer123“ als Benutzernamen eingeben und dann ‚ OR ‚1‘=’1.

Wir machen uns die Tatsache zunutze, dass unsere Abfrage dynamisch gebildet wird und die Eingabe vor der Ausführung nicht „bereinigt“ wird. Im Wesentlichen sagen wir, dass, wenn die Zahl „1“ gleich der Zahl „1“ ist (überraschenderweise ist das der Fall!), alles aus der Tabelle gelöscht wird, unabhängig davon, ob die eingegebenen Anmeldedaten korrekt sind.

Im Jahr 1998 hätte dies noch funktioniert. Im Allgemeinen sind weitaus mehr Kenntnisse in SQL und SQLi erforderlich, um funktionierende Exploits für WordPress zu erstellen.

SQL-Injections und WordPress-Websites

Unser vorheriges Beispiel würde auf modernen WordPress-Websites nicht funktionieren, es sei denn, ein Site-Administrator würde alle Sicherheitsmaßnahmen deaktivieren (was auf einem shared oder managed Hosting gar nicht möglich sein sollte). Nach dem gleichen Prinzip erstellen und verkaufen Hacker jedoch immer noch SQLi-Exploits an andere böswillige Benutzer.

Da WordPress Open Source ist und eine große Entwicklergemeinschaft dahinter steht, finden viele Sicherheitsforscher diese Exploits oft, bevor es ein Hacker tut. Diese melden sie dann an das WordPress-Team, und der Exploit wird gepatcht. In einigen unglücklichen Fällen findet ein Hacker den Exploit zuerst und macht ihn öffentlich, so dass das WordPress-Team gezwungen ist, so schnell wie möglich einen Fix zu erstellen und als Update zu veröffentlichen.

Schutz vor SQL-Injektion

Du wirst Dich jetzt vielleicht fragen, wie Du sicherstellen kannst, dass Deine WordPress-Seite nicht das nächste Opfer eines SQLi-Angriffs wird. Die gute Nachricht ist, dass Du kein Sicherheitsprofi sein musst, um Dich vor SQLi-Angriffen zu schützen!

Sei sehr vorsichtig mit allen PHP-Dateien, insbesondere WordPress-Plugins. Alles, was es braucht, ist ein schwach entwickeltes PHP-Skript, das die Benutzereingaben nicht bereinigt, um Deine WordPress-Site zu ruinieren.

Verwenden Sie ein bekanntes WordPress Sicherheits Plugin, z.B. iThemes Security Pro*, um Dich zu benachrichtigen, falls jemand versucht, diesen Angriff gegen Deine Seite zu begehen, damit Du ihn vorher blockieren kannst.

Am wichtigsten ist es, dass Du Deine WordPress Webseite immer auf die neueste Version aktualisierst. Viele Website-Besitzer zögern die Aktualisierung aus dem einen oder anderen Grund hinaus, und dies ist der Grund für die überwiegende Mehrheit der Datenverletzungen.

Halten Sie Ihre WordPress-Plugins und Themes auf dem neuesten Stand. Wir können es nicht oft genug sagen. Anfällige Themes und Plugins sind der Hauptgrund dafür, dass WordPress-Seiten gehackt werden.

5 Schritte zur Verhinderung von WordPress-SQL-Injections

1. Passendes WordPress Sicherheits Plugin herunterladen und installieren

Um mit der Sicherung und dem Schutz Ihrer Seite zu beginnen, lade Security Plugin herunter und installieren es. Im folgenden Artikel habe ich die besten Sicherheits Plugins für WordPress und ihre Funktionen vorgestellt. Einen guten Schutz vor einer SQL Injection bieten beispielsweise iThemes Security Pro* und Sucuri*.

2. Aktiviere die Versionsverwaltung, um WordPress Core, Plugins und Themes aktuell zu halten

Einfach ausgedrückt: Du setzt Deine Webseite dem Risiko eines Angriffs aus, wenn Du veraltete Versionen von WordPress, Plugins und Themes auf Deiner Website verwendest. Versions-Updates enthalten oft Patches für Sicherheitsprobleme im Code, einschließlich SQL-Injections und RCE-Schwachstellen (Remote Code Execution). Daher ist es wichtig, immer die neuesten Versionen auf Deiner WordPress-Website einzusetzen.

Updates werden im WordPress-Dashboard angezeigt, sobald sie verfügbar sind. Mach es Dir zur Gewohnheit, jedes Mal, wenn Du Dich bei WordPress-Website anmeldest, ein Backup zu erstellen und dann alle verfügbaren Updates auszuführen. Obwohl die Aufgabe, Updates auszuführen, lästig oder ermüdend erscheinen mag, ist sie eine wichtige Best Practice für die WordPress-Sicherheit.

Es ist schwierig, den Überblick über alle bekannt gewordenen WordPress-Schwachstellen zu behalten und diese Liste mit den Versionen der Plugins und Themes zu vergleichen, die Du auf Deiner Website installiert hast. Das hält WordPress-Hacker jedoch nicht davon ab, Plugins und Themes mit bekannten Sicherheitslücken ins Visier zu nehmen. Die Installation von Software mit bekannten Sicherheitslücken auf Deiner Website gibt Hackern die Blaupausen, die sie benötigen, um Deine Website zu übernehmen.

Die Versionsverwaltungsfunktion im iThemes Security Pro* Plugin ermöglicht es Dir, WordPress, Plugins und Themes automatisch zu aktualisieren. Darüber hinaus bietet die Versionsverwaltung auch Optionen, um Ihre Website zu härten, wenn Sie veraltete Software einsetzen, und nach alten Websites zu scannen.

Alternativ kannst Du auch ein managed Hosting für WordPress verwenden. Bei Raidboxes* kannst Du im managed Plan ebenfalls automatische Updates konfigurieren.

3. Scannen Sie Ihre Website auf anfällige Plugins und Themes

Der iThemes Security Pro* Site Scanner ist eine weitere Möglichkeit, Deine WordPress-Website zu sichern und vor der Hauptursache aller Software-Hacks zu schützen: veraltete Plugins und Themes mit bekannten Sicherheitslücken.  Der Site Scanner prüft Deine Website auf bekannte Sicherheitslücken und wendet automatisch einen Patch an, wenn ein solcher verfügbar ist. Du kannst natürlich auch den kostenlosen Malware Scanner von starterblog.de nutzen.

4. Erkennung von Dateiänderungen aktivieren

Der Schlüssel zum schnellen Erkennen eines Sicherheitsverstoßes ist die Überwachung von Dateiänderungen auf Deiner Website.

Es gibt mehrere legitime Gründe, warum Sie neue Datei-Änderungsaktivitäten in Ihren Protokollen sehen, aber wenn die vorgenommenen Änderungen unerwartet waren, sollten Sie sich die Zeit nehmen, um sicherzustellen, dass die Änderungen nicht bösartig waren. Wenn Sie z. B. eine Änderung an einem Plugin sehen, die an demselben Datum und zu derselben Uhrzeit vorgenommen wurde, an dem Sie das Plugin aktualisiert haben, gibt es keinen Grund, das zu untersuchen.

5. Schütze den Admin Login

Um Deinen Login zu schützen solltest Du einige wichtige Regeln beachten. Ich selbst nutze bei jedem meiner WordPress Projekte das Plugin Limit Login Attempts Reloaded*. Damit hat man immer den Überblick wie stark eine Webseite im Moment angegriffen wird. Wird eine Webseite dann häufiger angegriffen verschärfe ich die Sicherheitsmaßnahmen. Ein weiterer Schritt ist dann die Zwei-Faktor-Authentifizierung.

Die Zwei-Faktor-Authentifizierung ist ein Verfahren zur Überprüfung der Identität einer Person, bei dem zwei getrennte Methoden zur Überprüfung erforderlich sind. Google teilte in seinem Blog mit, dass die Verwendung der Zwei-Faktor-Authentifizierung 100 % der automatisierten Bot-Angriffe stoppen kann. Keine schlechten Aussichten!

Mit dem iThemes Security* Plugin kannst Du die Zwei-Faktor-Authentifizierung für Deine WordPress-Site aktivieren, so dass Benutzer einen zweiten Code eingeben müssen, um sich anzumelden.

Fazit

Zunächst einmal sollte man sich, auch wenn es viele Gründe gibt, warum WordPress Webseiten so häufig angegriffen werden, nicht zu viele Sorgen machen. Die Wahrheit ist, dass die Bedrohungen vielfältig sind, aber die Lösungen können einfach sein.

Ich hoffe, dass dieser Artikel Dir geholfen hat, das Risiko von SQL-Injection-Angriffen auf Deiner WordPress-Website zu verstehen. Durch die Implementierung einiger bewährter WordPress-Sicherheitspraktiken, zusammen mit den 5 oben genannten Schritten, verfügst Du über einen guten Schutz.

Share on facebook
Share on twitter
Share on linkedin
Share on xing
Share on whatsapp
Share on email

This website uses cookies. By continuing to use this site, you accept our use of cookies.