WordPress Sicherheit – Teil 2

WordPress SicherheitAus gegebenen Anlass möchte ich heute noch einmal auf die WordPress Sicherheit eingehen.

Warum noch einmal? Ich bin im letzten Jahr schon auf die Sicherheit von WordPress eingegangen und habe eine paar grundlegende Gedanken niedergeschrieben, also eher allgemein.

Heute möchte ich ein wenig mehr ins Detail gehen, aber eins nach dem anderen.

Der Grund warum ich das Thema WordPress Sicherheit jetzt noch einmal aufgreifen liegt an den vergangenen zwei Monaten. Dort gab es laut meinem Limit Login Attempts Plugin über 1.500 Versuche, ja 1 5 0 0!, sich in mein Adminbackend einzuloggen, wohlgemerkt von verschiedenen IPs, da ich bei falschen Login direkt sehr lange Zeit diese IPs aussperre.

Grund genug mich auf die Suche nach mehr Sicherheit für mein WordPress zu machen, was ich dazu alles geändert habe möchte ich euch im folgenden vorstellen.

WordPress Sicherheit steigern durch Absicherung des Backends

Zur Absicherung meines Adminbereiches nutze ich, wie oben schon erwähnt, das WordPress Plugin Limit Login Attempts. Meine Einstellungen bezüglich fehlerhafter Logins habe ich mittlerweile sehr strikt gehalten. Hier ein Überblick meiner Einstellungen:

Sicherheit Einstellungen Limit Login Attempts

(+) Vergrößern

Wie im Bild zu sehen gibt es:

  • Nur einen Versuch sich anzumelden.
  • Gibt es 9.999 Minuten Pause wenn man es vermasselt, das sind etwa 7 Tage.
  • Dazu gibt es dann gleich noch 4000 Stunden extra, macht etwa 174 Tage Sperre.
  • Zurückgesetzt wird das ganze nach 400 Stunden, also etwa zwei Wochen.

Habt ihr euch einmal selbst ausgeschlossen wird es etwas nervig. Ihr müsst in eure Datenbank, dort sucht ihr nach der Tabelle „wp-options“. Hier geht es dann mit:


SELECT * FROM wp_options WHERE option_name = 'limit_login_lockouts'

Dort sucht ihr eure IP aus der Liste, löscht diese und speichert das ganze. Am besten geht das mit phpMyAdmin, wenn mich nicht alles täuscht kann man dort den obigen SQL Befehl einfach eingeben und bekommt das Ergebnis in einer EditBox. Es sollte auch eine „normale“ Suche geben.

Weil mir das aber nicht sicher genug war und mir auch die ständigen E-Mails auf die Nerven gingen, natütlich hatte ich eine Regel in meinem E-Mail Programm, trotzdem muss man ja schon einmal nachsehen ob ein Angreifer auf dem richtigen Weg ist, meint, ob ein Angreifer zumindestens den richtigen „Admin“ User gefunden hat. Bis auf zwei Ausnahmen versteifen sich die Angreifer aber auf den Benutzeraccount mit dem Namen „Admin“. Diesen solltet ihr nie nie nie benutzen.

Es geht aber noch mehr…

Also habe ich vor den eigentlichen Adminbereich für meine WordPress Sicherheit noch eine Passwort Abfrage mittel .htaccess  geschaltet. Diese Datei generiert sich WordPress bei der Installation selbst, um sie zu sehen müsst ihr „versteckte“ Dateien in eurem FTP Programm aktivieren und zum lokalen editieren auch auf eurem Rechner. Bei Windows geht das über die Ordneroptionen, bei Linux ähnlich. Mac User haben es da ein wenig schwerer, ich nutze einfach die „Bearbeiten“ Funktion meines FTP Programms.

Ebenfalls müsst ihr eine Datei mit dem Namen .htpasswd anlegen, zu dem Inhalt dieser Datei kommen wir später. Ihr braucht nur den absoluten Pfad, in dem diese Datei nachher liegen soll. Dies funktioniert allerdings nur unter einem Apache Webserver.

Einmal offen fügt ihr dies in eure .htaccess Datei hinzu:


# BEGIN LOGIN SHIELD
AuthName "Login zum Admin-Bereich"
AuthType Basic
AuthUserFile Absoluter_Pfad/.htpasswd
require valid-user
# END LOGIN SHIELD

Um den absoluten Pfad zu finden nutze ich folgenden kleinen Trick. Ihr öffnet einen Editor und fügt dort folgende Zeile ein:


<?php echo $_SERVER['DOCUMENT_ROOT']; ?>

Das ganze speichert ihr ab und nennt es wie ihr wollt, aber mit der Endung .php, also etwa „pfadfinder.php“.

Danach ladet ihr diese Datei hoch und ruft sie auf, schon bekommt ihr den richtigen Pfad. Unterstüzt euer Server diesen Befehl nicht, schickt eurem Hoster einfach eine kurze E-Mail, es sollte für ihn ein leichtes sein euch den absoluten Pfad mitzuteilen.

Jetzt geht es an das eigentliche Passwort:

Öffnet dafür die .htpasswd und den Generator von SelfHtml.

Scrollt in dem Link ein wenig nach unten und ihr findet eine Eingabemaske, in diese tragt ihr euer zukünftiges Passwort ein. Wie immer gilt: Umso länger, desto besser. Sonderzeichen sich auch super, sowie Zahlen und keine zusammenhängende Wörter am besten.

Drückt ihr auf den Button bekommt ihr einen Hash, diesen kopiert ihr euch und dann tragt ihr in die .htpasswd folgendes ein:


Ein_Beliebiger_Nutzername:Der_kopierte_Hash

Also links der Doppelpunkte einen gewünschten Nutzernamen, rechts den Hash den euch der Generator geliefert hat. Jetzt ladet ihr die .htaccess und auch die .htpasswd wieder auf euren Server und versucht euch in euren Adminbereich einzuloggen.

Wenn alles geklappt hat müsstet ihr nun eine Eingabemaske sehen, die den automatischen Loginversuchen einen Riegel vorschieben.

Limit Login Attempts lasse ich für den Fall der Fälle aber nach wie vor aktiviert.

WordPress Sicherheit bezüglich Malware und Viren

Zusätzlich bin ich in dem Zuge meiner „Ermittlungen“ noch auf einen anderen Aspekt der WordPress Sicherheit gestoßen, nämlich die Suche nach Viren oder Malware, die sich wie auch immer einschleichen können oder sich schon eingeschlichen haben.

Dafür gibt es ein sehr nettes Plugin mit dem Namen WordPress AntiVirus. Dieses prüft voll automatisch auf allen möglichen unerwünschten Kram und benachrichtigt euch auf Wunsch, wenn es fündig wird.

Nervige Spammer und Klickbetrüger aussperren

Ein anderes Problem das ich immer mal wieder habe sind nervige Spammer und auch IP Adress die Non-Stop auf die Werbung in der Sidebar klicken. Man stelle sich vor was Google einem hier erzählt, in Bezug auf Klickbetrug sind sie ja bekanntlich sehr streng.

Für diesen Fall sperre ich einfach ganze IP Adressen für mehrere Tage bis Wochen aus. Zu diesem Zweck brauchen wir wieder die oben schon bearbeitet .htaccess, in diese fügen wir nun folgenden Code hinzu.


# BEGIN IP SHIELD
order allow,deny
deny from xxx.xxx.xxx.xxx
allow from all
# END IP SHIELD

Statt dem x einfach die IP des Störers einsetzen. Bei Kommentaren seht ihr diese unter „Kommentare“ und dann schaut einfach unter den Benutzernamen. Bei Werbung kann das Log von einen URL Former helfen, wie etwa das Plugin Pretty Link. Dieses habe ich hier vorgestellt.

Die IPs gehören meist zu irgendwelchen Servern und sind feste IPs, ihr müsst also wenig Angst haben zukünftige Leser auszusperren, zumal die meisten dieser Spams meiner Erfahrung nach nicht aus dem DACH Raum kommen, zumindest lässt die Sprache der Kommentare diesen Schluss zu.

WordPress Sicherheit bezüglich der Nutzer

Als nächsten Punkt solltet ihr euch eure „wp-config.php“ anschauen und prüfen ob ihr die Schlüsselphrasen eingetragen habt, um eure Benutzer Cookies abzusichern. Sie eure „wp-config.php“ so aus wie unten wird es Zeit im Zuge der WordPress Sicherheit zu handeln.


define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');

WordPress ist sogar so freundlich und generiert euch die Keys, ein klick auf diesen Link genügt. Wer mir nicht vertraut, die gleich URL steht auch in eurer „wp-config.php“ und nein da war ich nicht dran. ;)

Die Daten die die WordPress API ausspuckt einfach eintragen und wieder hochladen, das war es schon.

An dieser Stelle bietet der WordPress Codex auch noch mehr Informationen an.

Die Sicherheit der WordPress Config gewährleisten:

Als letzten Punkt geht es wieder um die .htaccess. Dieses mal schützen wir nicht, wie oben, die „wp-login.php“, sondern die eben erwähnte „wp-config.php“. Wir verbieten diesemal den komplette Zugriff und dies geht so:


# BEGIN WP-CONFIG.PHP SHIELD
Order deny,allow
deny from all
# END WP-CONFIG.PHP SHIELD

Bei einem Aufruf der wp-config.php solltet wir nun folgenden Status zurück bekommen:


Error 403 - Forbidden

WordPress Sicherheit: Update, Backup & Monitoring

Es ist unerlässlich mit eurem System immer Up-To-Date zu sein, diese war ja schon ein wichtiger Bestandteil meines ersten Artikels. Natürlich gehören zu Updates auf der einen Seite, auch Backups auf der anderen Seite. Da bietet sich Lösungen, wie Backup zur Dropbox an, so hat man eine Backup „im Netz“ und auf der eigenen Festplatte.

Ein weitere nette Sache ist der Service von Pingdom. Hier könnt ihr kostenlos eine Webseite eintragen und diese wird per HTTP Request jede Minute kontaktiert. Bekommt der Service keine Antwort werdet ihr per SMS, Twitter oder E-Mail benachrichtigt. Übrigens eignet sich ein andere Service von Pingdom auch zur Messung der Ladegeschwindigkeit eurer Webseite, zu diesem Thema werde ich nächste Woche noch einmal einen Artikel veröffentlichen.

Ein weiterer Service dieser Art ist serverstate*, allerdings ist dieser nicht gratis zu haben, kostet aber auch nicht die Welt.

Fazit

Abschließend lässt sich sagen das wir mit der WordPress Sicherheit niemals jede Gefahr abwehren können, aber wir können mit diesen Mitteln daran arbeiten Systeme sicherer zu machen.

Natürlich gibt es noch andere Möglichkeiten, wie etwa die Tabellen schon bei der Installation mit einem anderen Prefix zu versehen, oder gar auf zuviele „unbekannte“ Plugins und Themes zu verzichten.

Auf jeden Fall solltet ihr euer WordPress immer im Auge behalten. Fällt euch etwas verdächtiges auf, irgendetwas was da nicht hin gehört oder aber auch vermehrte Versuche in eueren Adminbereich einzubrechen, schau lieber zwei mal hin.

Bewerte diesen Artikel:
1 Stern2 Stern3 Stern4 Stern5 Stern (Keine Bewertungen bis jetzt :( )
Loading...

5 Kommentare

  1. Hi Moritz,

    die Sicherheit der eigenes Website vergisst man ja gerne mal, um so wichtiger ist es von Anfang darauf zu achten und nicht erst wenn es schon zu spät ist.

    Das mit dem extra Passwort mittels .htaccess nutze ich bei mir auch. Habe es sogar so, dass ich mittels

    Allow from xxx.xxx.xxx.xxx (IP)

    den Zugriff nur für eine bestimmte IP, in dem Fall also meine, zulasse. Bringt zwar ein wenig mehr Aufwand mit sich, aber die (empfundene) Sicherheit ist es mir wert. Problem ist halt, dass ich keine statische IP habe und immer wieder die IP in der htaccess anpassen und per FTP neu hochladen muss.

    Grüße

    Stephan

    • Moritz on 05/03/2013 at 22:27 said:

      Ja das war auch mein Gedanke. Ich habe zwar eine, aber nur weil es mein Provide so entschieden hat, vor etwa einem Jahr. Evtl. entscheidet er sich noch einmal anders usw.

      Aber so kann man natürlich noch eine Schippe drauflegen, da hast du voll und ganz recht.

      Grüße Moritz

  2. Pingback: Analyse und Bewertung von Blogs - Blog Tips

  3. Nach einem fehlgeschlagenem Login-Versuch die IP zu sperren ist aber wirklich sehr strikt. Stellst Du Dir selbst damit nicht eine Falle? Womit stellst Du denn sicher, dass kein Fehler bei der Login-Eingabe passiert. Aus meiner Sicht ist das ja kaum möglich, wenn man regelmässig sein Passwort ändert. Oder wirfst Du dann deine IP einfach wieder aus der Datenbank über PHPMyAdmin bspw. wieder raus?
    Im Prinzip wird Limit Login Attempts bei Schutz mit Hilfe von .htaccess doch gar nicht mehr benötigt. Die Bots kommen bis dahin doch gar nicht durch.

    • Moritz on 03/08/2013 at 18:15 said:

      Ich kann es, wenn es denn passiert, einfach aus der DB löschen. Das geht recht flott. ;)
      Allgemein ist es für die Bots wohl nicht mehr nötig, aber schaden kann es nicht.

Schreibe einen Kommentar

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

This Blog will give regular Commentators DoFollow Status. Implemented from IT Blögg

Post Navigation