Dieser Artikel stellt einen eigenen Best Practice zum Absichern von WordPress dar. Es besteht kein Anspruch auf Vollständigkeit. Er ist zur Sensibilisierung mit der Sicherheitsproblematik von WordPress gedacht.

WordPress ist ein Multifunktions Content Management System und bietet dem Webdesigner unheimlich viele Möglichkeiten.
Weil der Einstieg in WordPress so einfach ist und es zudem kostenlos ist, hat WordPress auch einen enorm hohen Marktanteil.
Wie es bei vielen Produkten mit hoher Verbreitung der Fall, stehen auch die Webmaster von WordPress Webseiten vor der Herausforderung, dass Hacker als lohnenswerte Zielscheibe verwendet wird.
Viele Hoster bieten WordPress als vorinstalliertes System auf ihren Hosting Plattformen an und machen damit vor allem Einsteigern den Einstieg schmackhaft.
Die hohe Verbreitung und viele nicht professionell abgesicherte WordPress Systeme stellen für Hacker allerdings ein lohnenswertes Ziel dar.

WordPress aktualisieren

WordPress erhält regelmäßig Updates für den Core. Die Nebenversionen werden automatisch aktualisiert. Es schadet nicht, zu kontrollieren, ob die aktuellste Version auch tatsächlich installiert ist.
So wurde mit WordPress 4.9.3 automatisch eine Nebenversion installiert, die durch einen Bug weitere automatische Aktualisierungen verhinderte.
Vertrauen ist gut, Kontrolle ist besser!

Betriebssystem aktualisieren

Direkten Zugriff auf die wp-config.php verhindern

Benutzerrechte

Die Datei wp-config.php ist eine sehr wichtige Datei, weil sie mitunter die Zugriffsdaten für die Datenbank beinhaltet.
Aus dem Grund wollen wir die wp-config.php ganz besonders schützen.

Nach der Installation von WordPress weist die Datei in der Regel die Standard Benutzerrechte 644 auf. Das ist in der Regel ausreichend, aber sicherlich nicht optimal.

Warum verschiedene Webseiten, die sich mit WordPress Sicherheit befassen, so unnötig lasche Benutzerrechte von 644 empfehlen, wo dies doch bereits die Standard Benutzerrechte sind, bleibt für mich unerklärlich.

Lesen Sie mehr über Benutzerrechte

Verschieben der wp-config.php

Die Sicherheit der wp-config.php kann durch das Verschieben um eine Ebene nach oben deutlich verbessert werden.
Wordpress sucht automatisch auch eine Ebene weiter oben nach dieser Datei.
Dafür müssen allerdings folgende Kriterien erfüllt sein:

  • Hosting: beim Hosting muss es möglich sein, auf die Ebene oberhalb des eingebundenen Webserver Verzeichnisses httpdocs/ zugreifen zu können. Besonders bei billigen Webhosting Angeboten ist das häufig nicht möglich.
  • WordPress Installationsort: Nur wenn WordPress im Webserver Hauptverzeichnis installiert wurde liegt die Ebene darüber auch tatsächlich außerhalb des Webservers.

Salts

„Salts“ sind Zeichenstrings, die den Benutzer kontinuierlich authentifizieren. In WordPress sind Salts ein elementarer Bestandteil für die sichere Erzeugung von gültigen Cookies wie z.B. Login Cookies.
Salts werden standardmäßig in der Datenbank abgelegt. Es ist jedoch bereits eine Vorbereitung für das Einfügen individueller Salts in der wp-config.php.

In die Bereiche „put your unique phrase here“ werden die neu generierten Strings eingesetzt.
Achtung: erstellen Sie neue Strings, und verwenden Sie nicht die im folgenden gezeigten Salts.
Dieses Beispiel dient nur dem einfacheren Verständnis.

Begründungsansatz

Mark Jaquith äußert sich (sinngemäß), dass die Gründe für das Festlegen der Salts in der wp-config.php zwar nicht offensichtlich sind, dieser Schritt aber durchaus sinnvoll ist. Er begründet seine Äußerung mit einem Risiko-splitting. Sollte ein Angreifer Lesezugriff auf die Datenbank erhalten, so kann er nur anhand der dort abgelegten Kennwörter keine erfolgreiche Authentifizierung herstellen, weil dafür Salts benötigt werden, die sich eben nicht mehr in der Datenbank befinden. Für das Herstellen eines Login Cookies werden dann sowohl Datenbankzugriff als auch zusätzlich Dateisystemzugriff benötigt, was einen Hack enorm erschwert.

Mark Jaquith verwendet dafür eine Metapher:

If your house had two deadbolt locks on the front door, you wouldn’t keep both keys under the same rock. (Kommentar von Mark Jaquith auf vaultpress.com, 24.03.17)

Neue Salts generieren

Zugriff auf die MySQL Datenbank einschränken

Um den Angreifern den Zugriff auf die WordPress Datenbank zu erschweren, lassen wir den Zugriff auf die MySQL Datenbank nur für localhost zu.
Somit Remote Logins von externen Maschinen auch dann verhindert, falls die Angreifer die wp-config.php ausgelesen haben sollten und an den Benutzernamen und das Kennwort der Datenbank gelangt sind.

Welche Dateien und Ordner sind hinsichtlich der Benutzerrechte besonders kritisch?

Das sind natürlich erst einmal Konfigurationsdateien, die Hashes und Kennwörter beinhalten wie z.B. die Datei wp-config.php, oder auch das upload/ Verzeichnis et cetera.

Security Plugins

Seien Sie vorsichtig mit der Installation von Plugins unbekannter Quelle oder unbekannter Qualität.
Ein unsicheres Sicherheits-Plugin kann die Situation auch einfach nur verschlimbessern.
Vor der Installation eines Plugins sollten Sie darauf achten, wieviele aktive Installationen vorhanden sind und wie aktiv die Pflege des Plugins durch den Entwickler ist, was sich anhand der Changelogs und der WordPress-Kompatibilität für die aktuelle Version zeigt.

Login Lockdown

Mit dem kostenlosen Plugin Login Lockdown können Sie Angreifer daran hindern, dass Kennwort beliebig oft einzugeben.
Der Angreifer wird nach einer festgelegten Anzahl an falsch eingegebenen Kennwörtern an einem weiteren Login Versuch gehindert, indem die IP des Computers von WordPress gesperrt wird.

Zugriff auf WordPress Login verhindern

Eine weitere Sicherheitsebene für den WordPress Login Bereich lässt sich über den Webserver erstellen.
Dazu wird ein Verzeichnisschutz mittels .htaccess Datei erzeugt. Somit muss im Falles eines Hackingversuchs ein weiterer Benutzername mit dazugehörigem Kennwort geknackt werden, um Zugang zum WordPress Backend zu erlangen.

Directory Browsing

Das Directory Browsing ist eine Einstellung des Webservers und ermöglicht die Auflistung des Inhalts eines Ordners, der sich in public_html/ befindet. Das folgende Video erklärt Directory Browsing in sehr kompakter Form.