Woher kennen Hacker und Bots meine Wordpress-Loginnamen?

Jeder, der über längere Zeit einen Wordpress-Blog betrieben hat, und einmal in seine Logfiles geschaut hat, kennt das Problem.
Die Rede ist von unautorisierten Login-Versuchen.
Immer wieder versuchen sich Unbefugte per Hand oder mithilfe von Bots, die automatisiert IP-Adressen wechseln und so ein Blockieren dieser schwierig machen, Zugriff zum eigenen Blog zu verschaffen. Während einige nur oft verwendete Benutzernamen wie "admin" oder "test" und entsprechende Passwörter ausprobieren, tauchen auch immer wieder Login-Versuche mit tatsächlichen Nutzernamen auf und das obwohl diese noch nie einen Beitrag verfasst haben.

Doch wie funktioniert das?


Betrachten wir dazu beispielhaft den Wordpress-Blog http://blog.nobbd.de (kein echter Wordpress-Blog).
Hängt man nun an die URL den Parameter "author" an und wählt als Werte die Zahlen ab eins aufsteigend, so leitet die Webseite auf die jeweiligen Autorenseiten weiter, die den entsprechenden Nutzernamen preisgeben. In der Praxis sieht das dann z.B. so aus:

http://blog.nobbd.de/?author=1 leitet auf http://blog.nobbd.de/author/admin/
http://blog.nobbd.de/?author=2 leitet auf http://blog.nobbd.de/author/test/
http://blog.nobbd.de/?author=3 leitet auf http://blog.nobbd.de/author/ads/
http://blog.nobbd.de/?author=4 leitet auf http://blog.nobbd.de/author/denis
...


Hier kann man nun gut die Nutzernamen "admin", "test", "ads" und "denis" erkennen. Dabei spielt es keine Rolle, ob der jeweilige Nutzer schon einen Beitrag im Blog verfasst hat.

Ist das eine Sicherheitslücke?


Nein, eine Sicherheitslücke ist dieses Problem nicht direkt und nur mit dem Nutzernamen kann ein Angreifer nicht viel anrichten. Ein gültiger Benutzername kann ihm aber helfen, andere Schwachstellen auf der Webseite auszunutzen und gibt einem Angreifer einen Vorteil, da er nun von der Nuternamen-Passwort-Kombination nurnoch einen unbekannten Wert, das Passwort, erraten muss.
Das ist auch der Grund weshalb in Rahmen eines Sicherheitstest die Möglichkeit Benutzernamen aufzulisten, als Schwachstelle angemerkt wird.

Was kann ich dagegen tun?


Abgesehen davon, dass man den Namen des Standard Benutzers "admin" im Hinblick auf die Sicherheit immer ändern sollte, umgeht man das Problem am einfachsten mit einer kleinen Änderung in der .htaccess Datei.
Das geht zum Beispiel mit dem folgenden Code-Beispiel, bei dem natürlich noch die URL auf die der eigenen Seite angepasst werden muss:

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?.*author=([0-9]*)
RewriteRule ^(.*)$ http://blog.nobbd.de/? [L,R=301]


Diese Regel erkennt, wenn der Parameter "author" in der URL vorhanden ist und leitet den Besucher dann auf die angegebene URL um.

Weitere Hinweise


Die oben beschriebene Methode verhindert, dass ein Angreifer die Namen von Nutzern ermitteln kann, die noch keinen Beitrag im Blog verfasst haben. Wenn mit dem Useraccount aber bereits ein Beitrag geschrieben wurde, dann findet man den entsprechenden Namen auch im Quellcode der Beitrags,- und Übersichtseiten wieder. So existiert in vielen Themes ein entsprechender Link zur jeweiligen Autorenseite und auch verschiedene CSS-Klassen enthalten den Namen.

Um zu verhindern, dass Andere über diesen Weg den Nutzernamen erkennen, kann man in der Datenbank in der Tabelle wp_users die Spalte user_nicename für die Benutzer ändern. Dann erscheint statt dem Loginnamen der neue Name im Quellcode des Blogs.
Wie immer gilt, dass man sich bei der Arbeit an der Datenbank im Zweifel lieber einen Profi zu Hilfe holen sollte, da die falschen Änderungen schnell die Seite zum Absturz bringen können.
Denis Werner
10.08.2014

zurück