Beitrag wurde zuletzt am aktualisiert

Admin-Bereich von WordPress schützen

Wordpress-Login absichernWordpress-Login absichern

Ein Anmeldeformular ist bei den meisten Anwendungen im Internet komplett unge­schützt und lädt u.U. interessierte Hacker regelrecht zum Überwinden dieser Hürden ein. Ein paar Zeilen Shell-Script (oder welche Programmiersprache man favorisiert) und schon kann eine Brute-Force-Attacke starten. Hierbei wird einfach immer wieder probiert ob eine Passwort-Nutzername-Kombination funktioniert.

Ist, wie bei vielen WordPress-Installationen noch immer üblich, der User-Account admin im Einsatz, hat der Hacker schon mal den Benutzernamen und 1 von 2 Eingabefeldern sind somit korrekt ausgefüllt. Oft genug steht der Anmeldename sogar irgendwo im Artikel (oder kommt euch dieser Satz nicht irgendwie bekannt vor?):

Der Artikel „Den Admin-Bereich von WordPress schützen“ wurde am 27. Juni durch den Benutzer admin veröffentlicht.

In diesem Artikel möchte ich zwei wirklich einfache, aber dennoch effektive Methoden vorstellen, die zumindest eine Brute-Force-Attacke verhindern können. Zum einen durch eine zusätzliche serverseitige Passwortabfrage und zum anderen durch das WordPress-Plugin Limit Login Attempts. Das Brute-Force-Problem ist auf praktisch alle Content Management Systeme, Foren, Blogs usw. übertragbar und sicherlich sind diese ebenso einfach abzusichern.

Das Passwort knacken

Kurz zurück zum Hacker-Script: Nun geht es an die Suche nach dem richtigen Passwort. Ein Wörterbuch, eine Liste mit Vor- und Kosenamen oder ein Lexikon als Datengrundlage und das bereits erwähnte Script, welches immer und immer wieder versucht mit Begriffen aus der Datenvorlage den Loginbereich zu überwinden, reichen oftmals aus.
Das Script hat Zeit! Und wenn es mit entsprechenden Pausenzeiten versehen ist, wird auch der Server auf dem der Blog läuft, nicht weiter belastet. Es fällt somit niemanden auf und auch unser Hacker muss nicht vor dem Bildschirm sitzen bleiben – er lässt sich einfach eine E-Mail generieren, wenn der Login erfolgreich verläuft.

Das zeigt natürlich auch wie wichtig es ist, unterschiedliche und sichere Passwörter zu verwenden. Etwas, was im Duden steht, geht überhaupt nicht. Wer „koethen123“ als Passwort verwendet, sollte doch wenigstens ein „Ko€th€n!23“ daraus machen. Ist genauso leicht zu merken, aber doch ganz schön kryptisch… Wird sicher demnächst Thema eines weiteren Artikels zum Thema Passwortschutz.

Serverseitiger Passwortschutz per htaccess-Datei

Es ist eigentlich kein großer Aufwand von Nöten, um nicht jedem daher gelaufenen Hacker mit bösen Absichten oder einem Script-Kiddy den Zugriff auf das WordPress-Login, und somit ein mögliches Eindringen in den Administrationsbereich, zu erschweren. Ein einfacher htaccess-Verzeichnisschutz kann hier dem Angreifer bereits die Lust nehmen, es weiter zu probieren.

Hierfür einfach die .htaccess-Datei beziehungsweise den vhost-Eintrag durch den folgendem Inhalt erweitern:

<Files wp-login.php>
    AuthType Basic
    AuthName "Verzeichnisschutz"
    AuthUserFile /pfad/zur/.htpasswd
    Require valid-user
</Files>

Im Artikel Einrichtung eines Verzeichnisschutz per htaccess-Datei ist ausführlich beschrieben, wie man die Passwort- und htaccess-Datei anlegt und was es zu beachten gibt. Fehlerhafte Logins lassen sich serverseitig sehr gut loggen und ggf. weiter verarbeiten. So zum Beispiel das Sperren der Angreifer-IP.

WordPress-Plugun: Limit Login Attempts

Mit dem WordPress-Plugin Limit Login Attempts lassen sich Einstellungen vornehmen, die nach einer konfigurierbaren Anzahl fehlgeschlagener Login-Versuche den wp-admin Bereich für eine ebenfalls konfigurierbare Zeit sperren. Die Sperre bezieht sich hierbei auf die IP-Adresse des potentiellen Angreifers.

Limit Login Attempts Einstellungen

Limit Login Attempts Einstellungen

Selbst ausgesperrt! Was nun?

Sperrt man sich selbst aus dem eigenen Blog, dann hilft es:

  • die eingestellte Zeit abzuwarten
  • das Ändern der eigenen IP-Adresse (wenn man die Möglichkeit hat)
  • über einen Proxy-Server (und somit von einer anderen IP) zuzugreifen
  • in der Datenbank den entsprechenden Eintrag zu löschen; per phpMyAdmin oder mit diesem SQL-Befehl
    UPDATE wp_options SET option_value = "" WHERE option_name = "limit_login_lockouts";
    
  • Umbenennen der Datei /wp-content/plugins/limit-login-attempts/limit-login-attempts.php und somit Deaktivieren des Plugins
Limit Login Attempts - Ungültiger Benutzername oder Passwort

Limit Login Attempts - Ungültiger Benutzername oder Passwort

Ein kleines unauffälliges Plugin, das ein Austesten des WordPress-Zugangs praktisch unmöglich macht und so das eigene System sichert.

403 Error nach fehlerhaftem Login

Bei einem fehlerhaften Login bekommt ein menschlicher Besucher von WordPress signalisiert, dass Benutzername und/ oder Passwort nicht korrekt waren und er darf es erneut probieren. Bei einem Bot sieht das ähnlich aus. Login fehlerhaft, Server-Status 200 (Anfrage erfolgreich) und ein neuer Versuch – oftmals im Sekundentakt. Das Spiel geht solange, bis letztendlich der Login erfolgreich war oder das Programm des Bots abgearbeitet ist (z.B. alle hinterlegten Passwort-Kombinationen erfolglos probiert wurden).

Crawler, Spam-Bots, Spider und andere auf Brute-Force-Attacken spezialisierte Anwendungen, die vollautomatisch versuchen sich in WordPress-Installationen einzuloggen, bekommen mit diesem Code-Schnipsel von Sergej Müller den Server-Status 403 (Error 403 / Forbidden) im Header zurück geliefert. Da sie diese Antwort nicht erwarten, verschwinden sie wieder und versuchen nicht durch ein Dauer-Bombardement die Zugangsdaten doch noch heraus zu bekommen.
Für einen menschlichen Besucher, der sich vertippt hat, gibt es keinen Unterschied zu sehen.

Sergej hat dies in seinem Google+-Post wie folgt beschrieben:

Es ist ein Kommen und Gehen. Aber nie ein Kommen, Bombardieren und Gehen.

Code-Snippet für die functions.php

<?php
add_action (
   'wp_login_failed',
   create_function(
   '$u',
   "status_header(403);"
   )
);
?>

Hier findet ihr weitere Ausführungen zum Thema WordPress Login, dessen Schutz und was ihr machen könnt, wenn das Passwort bzw. die URL dorthin mal vergessen wird. Habt ihr noch weitere Tipps zum Absichern des WordPress-Logins? Schreibt es in die Kommentare oder lasst uns darüber diskutieren.

10 Kommentare zu "Admin-Bereich von WordPress schützen"

  1. Hallo, vielen Dank fuer den tollen Artikel. Nur funktioniert die .htaccess Absicherung nicht fuer regulaere Benutzer die eine Login Aufforderung bekommen fuer einen Nutzernamen und Passwort das sie fuer den Ordner nicht haben. Dies passiert nachdem sie das Passwort neu anfordern und den Link in der Email klicken. Also habe ich das .htaccess File wieder geloescht. Ich weiss nicht ob es hierfuer eine Loesung gibt ? Hoffe jedoch fuer das Beste ;-)

  2. Hallo Christian,
    Auch ich habe das Problem mit der . htaccess abfrage
    Wen ein User sein Passwort ändern will.
    Leider kann mir im auch keiner sagen wie ich das Problem lösen kann^^

  3. Hallo Willi,
    das scheint mir ein Problem von WP zu sein. Ich weiss nicht ob dies im naechsten Update 3.4 behandlet wird. Naja, Mal kuchen. Hier habe ich was fuer Dein Classified Theme:
    Kannste vielleicht brauchen ;-)

  4. Hallo Christian ,
    danke für den link du hast mir damit sehr weiter geholfen :)
    Ich überlege mir grade ob ich die Plugins:
    wordfence und WP Lockup benutze

  5. Hi Willi, danke fuer die Sicherheits Plugin Hinweise ;-)

  6. hallo Christian,
    hoffentlich benutzt du die 7.0.9.6 ,da ich in der 7.0.9.4-5 ein großen Sicherheit Fehler gefunden habe ! (den werde ich hier aber nicht posten ) weiteres kann ich dir per Mail schreiben .

    @ Daniel Weihmann
    Danke für den Seher guten Artikel

  7. Ist das korrekt, dass man das ganze Verzeichnis absichern sollte, oder doch eher nur die wp-admin.php wie beispielsweise hier http://www.sirmark.de/wordpress/wordpress-absichern-10-tipps-fuer-ein-sicheres-wp-tipp-6-10-1481.html beschrieben? Gibt es keine Probleme mit der Stabilität von WP, wenn ich das gesamte Vereichnis schütze?

    • Stimmt @Matthias. Als ich damals diesen Artikel geschrieben hatte, bin ich jeweils so vorgegangen, wie beschrieben.
      Heute sichere ich nur noch wp-login.php ab, wobei ältere Projekte noch immer das komplette /wp-admin-Verzeichnis mit einer Authentifizierung absichern. Auf Probleme stieß ich bislang nur bei der Verwendung einiger Plugins, die auf Funktionalitäten aus dem /wp-admin-Verzeichnis zugreifen (irgendwelche AJAX-Anwendungen zum Beispiel).

      Werde ich oben im Artikel abändern. Danke für die Info.

  8. Wäre es nicht sinnvoll die Anmeldeseite umzubenennen, z.B. von /wp-admin/index.php zu …/meinanmelder.php
    So kann sie nicht von jedermann gefunden werden.
    Gibt es evtl. Komplikationen? Wie ist Ihre Meinung?

Hinterlasse einen Kommentar

E-Mail Adresse wird nicht veröffentlicht.