Sicherung/Härtung von gehosteten WordPress Installationen

Insbesondere bei WordPress Installationen, die über Hosting Anbieter bereitgestellt werden, ist es schwierig, auf die Einstellungen der eigentlichen Hosting-Umgebung Einfluss zu nehmen oder diese nach den eigenen Sicherheitsvorstellungen anzupassen. Umso wichtiger ist es, die eigentliche WordPress Konfiguration möglichst sicher zu gestallten.

Änderung des Standard Datenbank-Präfix

Standardmäßig vergibt WordPress während der Installation den Präfix wp_ für die WordPress Tabellen. Daher können Angreifer die Datenbank-Struktur auf diese Weise ermitteln. Es ist daher zu empfehlen, den Präfix während der Installation auf einen kryptischen Wert zu ändern, z.B.: x8a3_.

Standarbenutzer ändern

Mit der URL <Wordpress-URL>/?author=1 lassen sich alle Beiträge des WordPress Standard-Benutzers anzeigen. Darüber hinaus ändert sich dann die URL auf <WordPress-URL>/author/<Benutzername> – dadurch ist es relativ einfach, denn Admin-Account der WordPress-Installation zu ermitteln.

Um dies zu unterbinden sollte nach Abschluss der Installation ein neuer (zusätzlicher) Admin-Benutzer mit einem unverfänglichen Namen angelegt und der bisherige Standard-Admin gelöscht werden.

Dateibearbeitung deaktivieren

Die Bearbeitung – oder im Falle eines Angreifers die Manipulation – von Dateien lässt sich über das Admin-UI von WordPress abschalten. Hierzu bearbeitet man die Datei wp-config.php im Menü Design / Editor und stellt folgenden Parameter ein:

// Disallow file edit
define( 'DISALLOW_FILE_EDIT', true );
PHP Dateibearbeitung für bestimmte Verzeichnisse deaktivieren

Neben der Deaktivierung der Dateibearbeitung auf WordPress-Ebene sollte zusätzlich die generelle Ausführung von PHP in ausgewählten Ordner per .htaccess Datei deaktiviert werden. Dazu wird in jedem der betroffenen Ordner eine eigene .htaccess Datei mit folgendem Inhalt angelegt:

# .htaccess - Block *.php file access
<Files *.php>
  deny from all
</Files>

Die betroffenen Ordner sind z.B.:
/wp-includes/
/wp-content/
/wp-content/uploads/

Directory Indexing und Directory Browsing deaktivieren

Um Angreifern nicht die Möglichkeit zu bieten, die Seitenstruktur per Browser auszulesen, wird im nächsten Schritt das Directory Indexing und Directory Browsing deaktivier. Auch hierzu verwendet man eine .htaccess Datei, diesmal direkt im Root-Verzeichnis der Seite, und fügt folgenden Eintrag hinzu:

Options -Indexes
Zugriff auf /wp-admin/ Ordner einschränken

Um die Zugriffe auf den wp-admin Ordner einzuschränken wird in diesem Ordner eine eigene .htaccess angelegt und konfiguriert. In diesem Beispiel werden alle Zugriffe blockiert, außer die Source-IP der Anfrage ist die öffentliche IP 84.190.110.80.

# .htaccess - Restrict /wp-admin/ folder access
order deny,allow
deny from all
allow from 84.190.110.80
Zugriff auf wp-config.php Datei einschränken

Für die Einschränkung der Zugriffe auf die wp-config.php Datei wird die .htaccess im Root-Verzeichnis von WordPress angepasst. In diesem Beispiel werden wieder alle Zugriffe blockiert, außer die Source-IP der Anfrage ist die öffentliche IP 84.190.110.80.

# .htaccess - Restrict wp-config.php folder access
<Files wp-config.php>
  order deny,allow
  deny from all
  allow from 84.190.110.80
</Files>
WordPress XML-RPC deaktivieren

XML-RPC  wird seit WordPress 3.5 standarmäßig aktiviert, um die immer weiter verbreitete Bearbeitung von WordPress mit Mobile Apps zu unterstützen. Da XML-RPC jedoch dadurch auch ein insgesamt gesehen sehr mächtiges Werkzeug ist, kann es auch z.B. für Brute-Force Angriffe verwendet werden.

So benötigt z.B. ein Hacker normalerweise für einen Brute-Force Angriff mit 1000 verschiedenen Passwörtern auch 1000 verschiedene Anmeldeversuche, die durch Login-Lockdown Plugins erkannt und abgewehrt werden können. Mit XML-RPC kann dagegen der Hacker die system.multicall Funktion nutzen um tausende Passwörter mit weniger als 50 Anmeldeversuchen auszuprobieren. Deswegen sollte XML-RPC deaktiviert werden, wenn es nicht unbedingt für die Seite verwendet wird.

Für die Deaktivierung gibt es mehrere Möglichkeiten. Ich verwende hier die Methode mit der .htaccess Datei, da diese am wenigsten Ressourcen benötigt. Für diese Methode ist die .htaccess im Root-Verzeichnis von WordPress anzupassen. Wie vorher werden in diesem Beispiel alle XML-RPC Anfragen blockiert, außer die Source-IP der Anfrage ist die öffentliche IP 84.190.110.80.

# .htaccess - Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
  order deny,allow
  deny from all
  allow from 84.190.110.80
</Files>
Anmeldung mit ReCAPTCHA sichern

Standardmäßig lässt sich die WordPress Anmeldeseite nur mit Benutzername/Passwort relativ leicht angreifen, z.B. mit Brute-Force Angriffen. Gerade bei gehosteten WordPress Installationen kann dies (neben dem eigentlichen Zweck solcher Angriffe) auch dazu führen, dass die Anfragen die Datenbank überlasten und die Seite offline geht, weil die Datenbank nicht mehr ausreichend schnell antworten kann. Um diese Art von Angriffen abzuwehren ist es relativ einfach per ReCAPTCHA Plugin eine zusätzliche Hürde in die Anmeldeseite einzubauen.

Ein solches ReCAPTCHA Plugin ist z.B. das Login No Captcha ReCAPTCHA Plugin oder das Advanced noCaptcha & invisible Captcha Plugin. Letzteres verfügt neben der standard ReCAPTCHA Checkbox Funktion noch über die Möglichkeit, ein Invisible Captcha in die Login-Seite zu implementieren. Für beide Plugins muss nach der Installation lediglich der API-Key (ReCAPTCHA v2, bzw. Invisible Captcha) von Google eingegeben werden. Danach verfügt die Login-Seite über einen zusätzlichen Schutzmechanismus.

Anmeldeversuche beschränken

Eine weitere Möglichkeit, um sich vor Brute-Force Angriffen zu schützen ist es, diese zu registrieren und zu blockieren. Das Plugin Login LockDown registriert die IP-Adresse und den Zeitstempel jedes Anmeldeversuchs und blockiert weitere Versuche von der IP, falls die konfigurierten Schwellwerte für fehlgeschlagene Versuche überschritten werden.

Anmeldung mit Multifaktor-Authentifizierung sichern

Über die Sicherung der eigentlichen WordPress Anmeldeseite hinaus sollte auch die eigentliche Benutzeranmeldung gesichert werden. Eine gute Möglichkeit ist die Nutzung von Multifaktor-Authentifizierung (MFA), also die Anmeldung mit Benutzernamen, Passwort (etwas, was man kennt) und Key/Token (etwas, was man hat).

Für die Implementierung von MFA gibt es mehrere Plugins, z.B.:

  • Google Authenticator: Das Google Authenticator Plugin ermöglicht MFA mit der Google Authenticator App und anderen Apps die OTP Token unterstützen.
  • Two-Factor: Das Two-Factor Plugin ermöglicht MFA analog zum Google Authentictor Plugin. Darüber hinaus lässt sich MFA per Email,  U2F (FIDO, Yubikey) und Backup Code konfigurieren. Zudem sind mehrere MFA-Methoden pro Benutzer möglich (primäre Methode / alternative Methode).
readme.html sperren

Die readme.html Datei im Root-Verzeichnis von WordPress enthält Informationen über die WordPress Version, aus denen ggf. Angreifer mögliche Schwachstellen ermitteln können. Um dies zu verhindern kann man die Datei zwar löschen, jedoch wird sie bei jedem Versionsupdate neu erstellt und müsste manuell wieder gelöscht werden. Einfacher ist es daher, die Datei zu belassen, aber den Zugriff darauf zu sperren. Hier hilft wieder die .htaccess Datei im Root-Verzeichnis mit folgendem Eintrag:

# Block readme.html access
<Files readme.html>
  order deny,allow
  deny from all
</Files>
Backup-Lösung implementieren

Da alle Sicherheitsmaßnahmen keinen 100%igen Schutz bieten und nicht 100%ig verhindern können, dass eine WordPress Installation gehackt und übernommen werden kann, sollte man auch für diesen Fall vorbereitet sein und über ein Backup verfügen. Auch hierfür gibt es glücklicherweise mehrere Plugins wie z.B. Akeeba Backup. Mit Hilfe eines solchen Plugins sollten regelmäßig vollständige Backups erstellt und an einen sicheren Ort gespeichert werden.

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.