WordPress absichern

Publiziert im Januar 2013

Content-Management-Systeme (CMS) als Angriffsziel


WordPress-Logo
Content-Management-Systeme wie WordPress sind beliebte Angriffsziele für dunkle Zeitgenossen. Hacker, Cracker, Script-Kiddies und anderes Gesindel versucht immer wieder, derartige Installationen zu kapern. Ihr Ziel ist es, in den Administrationsbereich einzudringen, dort zu wildern, Benutzer anzulegen oder zu löschen, Daten auszulesen oder zu verändern und Schadcode zu deponieren. Ehe man sich versieht, wird der eigene Blog oder die eigene Webpage zur Virenschleuder oder Teil eines Bot-Netzwerks.
Immer wieder gelingt das, weil der Administrator es den Angreifern nur zu leicht macht.

Nun möchte ich meine nachfolgende Beschreibungen nicht als das einzig Wahre bezeichnen, aber vieles in den diversen Foren ist mitunter unzureichend, unvollständig oder nicht zu Ende gedacht.

Seitenübersicht

  1. Absichern #1 – Sicheren Benutzernamen nachträglich einrichten
  2. Absichern #2 – Die Login-Datei “wp-login.php” umbenennen
  3. Absichern #3 – Login-Versuche beschränken
  4. Ultimativ: #2 und #3 kombinieren!
  5. Absichern #4 – Spamkommentare ausfiltern
  6. Absichern #5 – unliebsame Besucher aussperren mit .htaccess

In eigener Sache

  1. Kleines Feedback: Artikel bewerten
  2. Kommentar hinterlassen oder Frage stellen

Zwei offensichtliche Schwachstellen in WordPress

Der wohl wichtigste Punkt betrifft die Sicherheit der WordPress-Installation. Und die fängt am Eingang zum Administrationsbereich an: Die Loginseite mit dem Anmeldeformular.


„admin“ – äußerst leichtsinnig!

  1. Den Dateinamen „wp-login.php“ für die Loginseite gibt WordPress während seiner Installation auf dem Server vor. Über das dortige Anmeldeformular gelangt man in den Administrationsbereich.
  2. Viele Nutzer übernehmen während der WordPress-Installation entweder unbewußt, unüberlegt oder nachlässig das dort angebotene „admin“ als Benutzernamen, anstatt sich bei dieser Gelegenheit kurz die Zeit zu nehmen, um sich einen ungewöhnlichen Benutzernamen und ein kryptisches Passwort einfallen zu lassen.

Damit haben Angreifer schon mal die richtige Web-Adresse und mit dem „admin“-Benutzernamen auch noch eine von zwei Eingabefeldern richtig ausgefüllt! Dabei ist es wie im Folgenden beschrieben ein Leichtes, einen sicheren Benutzername nachträglich einzurichten und den unsicheren zu löschen.

#1 – Sicheren Benutzernamen nachträglich einrichten

Legen Sie im Admin-Bereich unter „Benutzer/Hinzufügen“ einen neuen Benutzer mit einem ungewöhnlichen Namen an, der auch in keinem Lexikon zu finden ist. Der Name „Administrator“ ist in diesem Zusammenhang ebenfalls zu vermeiden!
Vergeben Sie für den neuen Benutzernamen ein kryptisches Passwort – möglichst mit Sonderzeichen! Für ein „E“ kann z.B. das Euro-Zeichen „€“ verwendet werden.
Bei der Option „Rolle“ versehen Sie den neuen Benutzer noch mit Administratorrechten und schließen die Eingabe durch klick auf „Neuen Benutzer hinzufügen“ ab.
Testen Sie, ob die Anmeldung mit dem neuen Benutzernamen funktioniert und löschen anschließend unter „Benutzer/Alle Benutzer“ den Benutzer mit dem unsicheren Admin-Namen.

#2: Die Login-Datei “wp-login.php” umbenennen

Notwendige Software

  1. Voraussetzung ist ein FTP-Programm, um auf die Dateien auf dem Server zugreifen zu können. FileZilla ist ein kostenloser Vertreter dieser Gattung: www.heise.de/download/filezilla.html
  2. Um PHP-Dateien zu editieren, ist ein Quelltext-Editor notwendig. Ein Textverarbeitungsprogramm wie z.B Microsoft Word ist dafür absolut ungeeignet! Notepad dagegen, der kleine Texteditor, der unter Windows seine Dienste anbietet, ist für diese Zwecke vollkommen ausreichend.
    Eine komfortable Freeware ist Notepad++: www.heise.de/download/notepad.html

Durchführung

Folgendes habe ich in den WordPress-Versionen 3.3.1., 3.5 und 3.9.1 getestet und funktioniert dort tadellos.
In anderen WordPress-Versionen wird das sicherlich auch funktionieren.

  1. Die Datei wp-login.php im Wurzelverzeichnis beliebig umbenennen.
    (z.B. hier-komm-ich.php)
  2. In der jetzt umbenannten Datei hier-komm-ich.php alle Zeichenfolgen wp-login.php durch hier-komm-ich.php ersetzen (13 Ersetzungen).
  3. In der Datei wp-includes/general-template.php ebenfalls alle Zeichenfolgen wp-login.php durch hier-komm-ich.php ersetzen.
    Wird das versäumt, kann man sich nicht mehr aus dem Admin-Bereich abmelden.
In der WordPress-Version 4.3.1 war ich damit ebenfalls erfolgreich.

  1. Die Datei wp-login.php im Wurzelverzeichnis beliebig umbenennen.
    (z.B. hier-komm-ich.php)
  2. In der jetzt umbenannten Datei hier-komm-ich.php alle Zeichenfolgen wp-login.php durch hier-komm-ich.php ersetzen (12 Ersetzungen).
  3. In der Datei wp-includes/general-template.php ebenfalls alle Zeichenfolgen wp-login.php durch hier-komm-ich.php ersetzen (5 Ersetzungen).
  4. In der Datei wp-includes/post.php ebenfalls alle Zeichenfolgen wp-login.php durch hier-komm-ich.php ersetzen (1 Ersetzung).

Werden die letzten beiden Punkte versäumt, kommt es beim Abmelden aus dem Admin-Bereich zu einer Fehlermeldung und die Anmeldung bleibt bestehen.

Am einfachsten ist es, die Datei mit einem FTP-Programm vom Server auf die Festplatte zu kopieren. Zur Sicherheit legt man gleich eine Kopie dieser Datei an! In einem Quell-Editor werden dann die Ersetzungen vorgenommen. Anschließend die Datei umbenennen und mit dem FTP-Programm auf den Server laden.
Nicht vergessen: Die Original-Datei „wp-login.php“ per FTP-Programm auf dem Server löschen!

Auf die ersten beiden Schritte wird in diversen Quellen mehr oder weniger umständlich hingewiesen. Der dritte Schritt stammt aus meiner Feder, habe ihn bisher zumindest nirgendwo finden können. Ohne den ist eine erfolgreiche Abmeldung aus dem Admin-Bereich nicht möglich, denn beim Log-Out wird weiterhin auf die nun nicht mehr vorhandene Datei „wp-login.php“ verlinkt. Ist der Rechner auch für andere Personen zugänglich, haben die unter Umständen vollen Zugriff auf die WordPress-Installation auf dem Server.
Hinweis: In einer Vielzahl anderer WordPress-Dateien findet sich ebenfalls der Verweis zur nun nicht mehr vorhandenen Datei „wp-login.php“. Diese Dateien habe ich unverändert lassen, über den Zeitraum mehrerer Wochen intensiver WordPress-Nutzung allerdings auch kein nachteiliges Verhalten entdecken können.

Kleine Spielerei: Angreifer zählen mit einer dafür angepaßten „wp-login.php“


Fehler 401 – Zugang verweigert!
Seit Februar 2013 gibts auf on2r.eu wieder eine „wp-login.php“. Wie oben beschrieben, wird ein „normaler“ Besucher diese Seite kaum aufrufen.
Um mein eigenes Interesse zu befriedigen, in welchem Ausmaß und von welchen Standorten meine WordPress-Installation von dem kriminellen Gesocks da draußen heimgesucht wird, habe ich darin aber lediglich ein Stück eigenen php-Code untergebracht. Der registriert die unautorisierten Aufrufe und schreibt die Anzahl in eine Textdatei. Außerdem wird der Angreifer mit seinem Hostnamen und seiner IP-Adresse konfrontiert mit dem Hinweis, daß er zukünftig blockiert wird. Allerdings sind diese Angaben für einen Sachkundigen nicht wirklich erschütternd und bei einem automatisierten Script-Angriff nicht von Belang.
Evtl. werde ich bei Gelegenheit den Code erweitern, um IP-Adressen von Angreifern automatisch zu blockieren.

Zählung seit Juni 2012:
  • 22591Geblockte Zugriffe:
  • 18009Geblockte Spammer:  
  • 2.582Geblockte Spamposts:

Wie vielleicht schon bemerkt, ist in der rechten Sidebar auf on2r.eu eine Statistik untergebracht. Dort würden sich unter anderem auch diese unautorisierten Zugriffe und Vorfälle anzeigen lassen.

#3: Login-Versuche beschränken

Leider blockiert WordPress die Login-Versuche von ein und derselben IP-Adresse nicht selbstständig nach einer bestimmten Anzahl von Fehlversuchen. Das freut einen potentiellen Angreifer natürlich. Kann der so in aller Ruhe per automatischem Script, das auf ein Wörterbuch, einer Liste mit Vor- und Kosenamen oder einem Lexikon als Datengrundlage zugreifen kann, alle möglichen Passwörter austesten, bis er schließlich den Zugang zum Administrationsbereich und damit sein Ziel erlangt.
Das Plugin „Limit Login Attempts“ registriert sämtliche Anmeldeversuche über das Anmeldeformular. Der eigentliche Vorteil des Plugins liegt aber darin, die Anzahl ungültiger Anmeldeversuche von einer IP-Adresse zu beschränken. In den Optionen lassen sich sehr bequem diverse Einstellungen vornehmen, wie das Plugin bei fehlerhaften Logins reagieren soll. Unter anderem lassen sich die maximal erlaubten Anmeldeversuche einstellen, sowie eine Sperrzeit.
Auf meiner damals noch nicht umbenannten Login-Seite hatte das Plugin bis zu 20 tägliche Anmeldeversuche von Unbefugten festgestellt. Ich erlaube deshalb nur zwei Anmeldeversuche. Sind die ausgeschöpft, wird die IP-Adresse des Angreifers automatisch für 8760 Stunden gesperrt, was einem ganzen Jahr entspricht. Brute-Force-Attacken läßt sich damit recht gut entgegenwirken.
Im Dashboard des Admin-Bereichs wird die Anzahl geblockter IP-Adressen angezeigt, in den Plugin-Einstellungen auch die IP-Adresse, über die die Anmeldeversuche stattfanden.
Das Plugin austricksen: Da eine IP-Adresse dynamisch an einen Internet-Nutzer vergeben wird, kommt man mit einer IP-Sperre nicht sehr weit, wenn ein und derselbe Angreifer immer wieder mit einer anderen IP-Adresse daherkommt. Die Login-Versuche nehmen dadurch zwar ab, werden aber nicht verhindert. Ein beinahe aussichtsloses Unterfangen also.

Ultimativ: #2 und #3 kombinieren!


Wird die Datei „wp-login.php“ wie oben beschrieben umbenannt, die entsprechenden Ersetzungen in den beiden Dateien vorgenommen und zusätzlich das Plugin „Limit Login Attempts“ installiert und konfiguriert, hat man für mein Dafürhalten einen mehr als ausreichenden Schutz gegen unbefugte Logins.

#4 – Spamkommentare ausfiltern

Das Plugin „Antispam Bee“ analysiert Pings oder den Inhalt von Kommentaren und verhindert, daß der überflüssige Müll von Spammer auf der Homepage, im Gästebuch oder im Blog erscheint.
Im Dashboard des Admin-Bereichs wird die Anzahl geblockter Spams angezeigt. In den Plugin-Einstellungen lassen sich einige individuelle Anpassungen per Mausklick vornehmen.

#5 – unliebsame Besucher aussperren mit .htaccess


Fehler 403 – Der Gesperrte schaut in die Röhre!
Mit .htaccess-Dateien kann man nicht nur Daten mit Passwörtern schützen. Damit lassen sich auch ganze Benutzerkreise oder alle bis auf ausgewählte aussperren – ganz vollautomatisch anhand ihrer vom Provider zugewiesenen IP-Adresse. Ein Ausgesperrter erhält beim URL-Aufruf nur noch nebenstehende Fehlermeldung.
Dieses Vorgehen ist z.B. anzuraten, wenn Angreifer versuchen über eine nicht umbenannte Login-Seite in den Administrationsbereich zu gelangen.
Aber auch Spammer, die eine Kommentar-Funktion mißbrauchen, werden erfolgreich abgewehrt. Dieses Lumpenpack (bzw. deren automatische Spamscripts) war auch auf on2r.eu umtriebig, hauptsächlich um Reklamelinks allerlei Couleur zu hinterlassen. Das unter „Absichern #4“ empfohlene Plugin „Antispam Bee“ fängt derartige Einträge zwar äußerst zuverlässig ab, unterbinden kann es die mißbräuchliche Nutzung der Kommentar-Funktion aber nicht.
Eine zeitlang hatte ich versucht, zusätzlich per Captcha-Eingabe einen Riegel vorzuschieben. Leider sind die Spamscripts aber mittlerweile soweit fortgeschritten, daß das keine große Hürde mehr darstellt. Auch ein per JavaScript zeitgesteuert freigegebener Absende-Button war erfolglos. Eine entsprechende .htaccess-Datei sorgt aber seit einiger Zeit für angenehme Ruhe.

Wer auf .htaccess zurückgreifen möchte, muß sich ein wenig einlesen. Diese beiden Links können dabei sehr hilfreich sein:
peter.liscovius.de/tech/htaccess/
www.perun.net/2012/03/05/wordpress-spam-ip-per-htaccess-sperren


Zur Beachtung:
Ich verweise auf Programme, stelle diese jedoch nicht selbst her oder zur Verfügung. Ich übernehme keinerlei Verantwortung für deren Fehlerfreiheit und eventuelle Schäden, die durch die Nutzung auftreten könnten. Der Benutzer erklärt sich einverstanden, diese Programme auf eigene Gefahr hin zu nutzen.
Alle Angaben wurden mit Sorgfalt und nach bestem Wissen angefertigt, erheben jedoch keinerlei Anspruch auf Richtigkeit oder Vollständigkeit. Ich übernehme keinerlei Verantwortung für die Fehlerfreiheit obiger Angaben und eventuelle Schäden oder Kosten, die durch die Nutzung auftreten könnten. Der Benutzer erklärt sich einverstanden, die Angaben auf eigene Gefahr hin zu nutzen.

Sei bitte fair und schreib mir, was nicht gefällt!Sei bitte fair und schreib mir, was nicht gefällt!Geht so...Gefällt mir gut!Gefällt mir sehr gut! (4 votes, average: 4,00 out of 5)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


7 + 6 =