Froh war ich, dass ich direkten Zugriff auf den Server hatte in diesem Moment und nicht nur Kunde bei einem 0815 Webhoster bin, denn so fand ich schnell heraus, was die Auslieferung der Seiten so stark verzögerte. Ein Blick in das das access.log meiner Seiten verriet es mir. Massive anfragen auf die wp-login.php blockierten den Server. Und wenn ich massiv sage, dann meine ich nicht nur die üblichen 5 – 6 am Tag, sondern die Anfragen rauschten in einer Geschwindigkeit an mir vorüber, dass ich nicht mal in der Lage war auch nur eine IP zu erkennen. Es waren also tausende.

Auszug aus dem access.logIm ersten  Moment wird man da schon etwas nervös. Ist das der Versuch gehacked zu werden? Hat man sich irgendwo eine Sicherheitslücke eingesammelt, ist der Angreifer eventuell schon auf der Seite? Ok, die letzte Frage konnte ich mit NEIN beantworten, denn dann würde der Versuch sich einzuloggen nicht mehr stattfinden.

Doch was tut man nun dagegen?

Als erstes, Ruhe bewaren!
Nun hat man mehrere Möglichkeiten. Wenn man Zugriff auf den Server selbst hat, wie in meinem Fall, direkt erst mal den Apache beenden. Damit hat der Angreifer keinen Zugriff mehr auf die Datei und bekommt auch sonst erst mal keinen Zugang mehr zu irgendwas, was via Web ausgeliefert werden sollte.  Somit sind die Webseiten erst mal offline und außer Gefahr.

Nun gilt es, den Angriff abzuwehren, wenn man den Apache wieder einschaltet. Dazu kann man nun jede einzelne IP die im access.log als Angreifer identifiziert wurde in eine deny from xxx.xxx.xxx.xxx Regel in die .htaccess eintragen, was jedoch bei dieser Menge absolut nicht zielführend ist. Denn dann wäre die .htaccess schnell einige Megabyte groß, also totaler Unsinn. Besser ist es, die wp-login.php direkt zu schützen und den Zugriff auf diese Datei via Nutzeridentifizierung zu gestalten. Auch hier hilft die .htaccess weiter.

Eine solche Authentifizierung – also eine Abfrage von Nutzername und Passwort – ist schnell eingerichtet. Die .htaccess hat man ja als anständiger WordPress-Nutzer eh schon im Hauptverzeichnis seiner Installation liegen, also muss nur noch eine .htpasswd angelegt werden. Die .htaccess wird dann um folgenden Eintrag erweitert.

1
2
3
4
5
6
<files wp-login.php>
    AuthName "Admin-Bereich"
    AuthType Basic
    AuthUserFile /pfad/zu/deiner/.htpasswd
    require valid-user
</files>

In die .htpasswd kommen dann die Nutzerdaten rein. Eine Kombination kann folgendermaßen aussehen.

1
Testuser:$1$YYYSWQNG$8BpaylFSwfqTq82GLiMR/0

Diese Daten kann man sich online generieren lassen, es gibt da einen sehr schönen .htpasswd Generator im Netz.

Loaded Modules in der PHP InfoWer es noch etwas sicherer mag, kann stat dem AuthType Basic den AuthType Digest nutzen. Dafür muss aber ein spezielles Apache-Modul installiert sein – mod_auth_digest. Welche Module geladen sind, finded ihr in eurer PHP-Info unter „Loaded Modules“. Bei Nutzung von AuthType Digest muss natürlich die Modifikation der .htaccess ein wenig anders aussehen.

1
2
3
4
5
6
<files wp-login.php>
    AuthName "Admin-Bereich"
    AuthType Digest
    AuthUserFile /pfad/zu/deiner/.htdigest
    require valid-user
</files>

Auch die .htdigest hat einen etwas anderen Inhalt und kann auf dieser Seite erzeugt werden.

Ich hoffe einigen damit geholfen zu haben, bei mir ist nun auf jeden Fall wieder Ruhe eingekehrt. Auch dank der guten Mitarbeiter des Boreus Rechenzentrums, in dem mein Server steht. Denn die haben da auch noch etwas ihre Magie spielen lassen :-)

17 Meinungen zu “Angriff auf den WordPress-Login

  1. Hallo Peter,
    Ich habe an manchen Tagen auch 1.000 Angriffe, trotz „Limited Login Attempts“. Oft an Wochenenden und Feiertagen. Das mit der .htaccess/.htpasswd habe ich noch nicht probiert, aber würde es ein „normaler“ Verzeichnisschutz auch tun und ist es überhaupt möglich nur das Login mit Verzeichnisschutz zu schützen, oder würde dann die ganze Seite ein Login brauchen?

    Ganz liebe Grüße

    • Der hier beschriebene Dateischutz ist bei meinen Seiten im Einsatz. Da auch wenn Du über deinedomain.de/wp-admin/ auf die wp-login.php zugreifst, reicht es aus, den Zugriff auf diese Datei zu sichern. Das Plugin Limit-ogin Attempts schlägt leider erst zu, wenn schon auf die Datei zugegriffen werden soll. Dann wird ein Vergleich gestartet, ob er sich überhaupt einloggen können darf oder nicht. Dies belastet die Datenbank und macht bei so vielen Anfragen den Server durchaus langsam und kann ihn durchaus überfordern. Daher ist es besser den zugriff auf die entsprechende Datei direkt zu reglementieren. Ist da eine Passwortabfrage drauf, wird die Datei erst geladen, wenn die richtigen Nutzerdaten eingegeben wurden, nicht vorher. Somit hat der Server Ruhe, auch wenn es einige tausend gleichzeitig versuchen.

  2. Hallo,
    vielen Dank für die interessante Erklärung.
    Welche Möglichkeiten hat man, wenn der „Einbrecher“ bereits auf der Seite ist und man keinen direkten Zugang auf den Server hat?

    Mit freundlichen Grüßen Thorsten

    • DANN ist es meistens zu spät.
      DANN sollte man beten, dass man ein aktuelles Backup hat, was man einspielen kann, denn ich würde dann allein aus Sicherheitsgründen gar nicht versuchen die Seite zu „retten“ in dem ich versuche das Passwort zu ändern, oder den vom „Eindringling“ angelegten Benutzer zu löschen. Gleich alles plätten und das Backup einspielen. Beinhalten Dateien und Datenbank. Natürlich danach sofort das eigene Passwort ändern. Sollte der ungebetene Gast auch auf dem Server sein, hilft meist ein Anruf beim Serverhoster weiter.

  3. Hallo,

    vielen Dank für den überaus gelungenen und wissenswerten Beitrag. Ich habe die Einrichtung gestern gleich durchgeführt.

    Ich nehme lieber den Umweg in Kauf, mich zweimal anmelden zu müssen, als dass meine WP-Login.php ständig Ziel irgendwelcher Attacken ist.

    Vielen Dank dafür,
    Stefan

  4. Oh ja, es ist sehr, sehr wichtig, seinen Blog vernünftig zu schützen. Das musste ich leider auch erfahren. Die Unterstützung von Leuten, die sich richtig gut auskennen, ist dabei Gold wert !
    Folgende Tipps habe ich selbst noch dazu bekommen:
    1. Blogs regelmäßig sichern (bei Bedarf ruhig täglich) z.B. durch das Plugin BackWPup, Sicherungsdateien z.B. in die Dropbox speichern lassen.
    2. Ein richtig langes Passwort mit Sonderzeichen und Zahlen gespickt, gerne 20 Zeichen lang.
    3. Regelmäßig Updates von WP durchführen, aber besten immer nach vorheriger Sicherung.
    4. Sicherungsdateien von .htaccess und wp-login.php als txt-Datei erstellen, dann lässt sich relativ schnell erkennen, ob das jemand etwas geändert hat.

    Gute Infos zu diesem Thema gibt auch unter http://wp-hacker-stop.com/

    Ich wünsche allen saubere und lebendige Blogs, die viel Freude machen!

  5. Jetzt hatte es mich auch einmal erwischt :( danke für die Tipps. Verdammt blöd, dass es immer wieder solche Möglichkeiten für gelangweilte Leute gibt.

  6. Hallo H.P.

    da ich nun auch eine Webseite auf WordPress-Basis habe, war ich beim ersten Lesen des Artikels natürlich schon etwas beunruhigt!
    Aber mein Admin hat mir gesagt, dass die Seite gut gesichtert ist und mir die einzelnen Sicherheitsbarrieren erläutert. Kennst du das Plugin „Better WP Security“? Da kannst du viele Hürden für Hacker einbauen und sogar die URL der Log-In Seite selber bestimmen – damit sind diese automatisierten Attacken schonmal passé!

    Dein Blog finde ich sehr interessant, werde mich in den nächten Tagen noch etwas mehr mit WordPress befassen und hoffe, hier noch einiges darüber lernen zu können :-)

    Liebe Grüße!
    Der Thomas

  7. Hallo,

    einen solch massiven Angriff auf eine meiner WP Installationen habe ich Gott sei Dank noch nicht erlebt. Mir reicht bisher das Plugin „Limit Login Attemts“ aus. Verbunden mit einem wirklich starken Passwort, sollte das auch für mich erstmal ausreichen.

    Sollte es auch bei mir mal zu einem solch ausdauernden Angriff kommen, kann ich immer noch für die Zukunft die wp-login mit einem zusätzlichen Passwortschutz ausrüsten. Ich hoffe aber, das es erst gar nicht soweit kommt ;)

    Gruß

    David

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>