WordPress absichern

WordPress absichern und vor Hacking schützen.

Ein CMS ist so sicher wie dessen schwächstes Glied. Dieser Artikel stellt einen eigenen Best Practice zum Absichern von WordPress dar. Es besteht kein Anspruch auf Vollständigkeit. Er ist für unsere Kunden zur Sensibilisierung 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 weil WordPress manchmal sogar bereits vorinstalliert wird, hat es einen sehr hohen Marktanteil. Die hohe Verbreitung, und viele nicht professionell abgesicherte WordPress Systeme stellen für Hacker ein lohnenswertes Ziel dar.

Themen

  • WordPress aktualisieren
  • Hosting absichern
  • Webserver konfigurieren
  • Benutzerrechte im Dateisystem setzen
  • Die Datenbank absichern
  • Sichere Passwörter verwenden
  • SSL Verschlüsselung
  • Salts
  • Directory Browsing
  • Zugriff auf das Backend Login verhindern per Passwort schützen
  • Umbennenen des WordPress Backend Login

WordPress aktualisieren

WordPress erhält regelmäßig Updates für den Core und installierte Erweiterungen. Die Nebenversionen werden automatisch aktualisiert. Es schadet nicht, zu kontrollieren, ob auch tatsächlich die aktuellste Version installiert ist. Es hat in der Vergangenheit Probleme beim Aktualisierungsprozess gegeben. So wurde automatisch ein Update auf die Nebenversion WordPress 4.9.3 eingespielt, welche einen Bug aufwies und folgende automatische Aktualisierungen verhinderte.
Vertrauen ist gut, Kontrolle ist besser!

Themes und Plugins

Themes und Plugins von Drittanbietern sollten aktualisiert werden.
Bei der Verwendung von Drittanbieter Erweiterungen ist immer besondere Vorsicht geboten.

Direkten Zugriff auf die wp-config.php verhindern

Der Webserver kann so konfiguriert werden, dass der Webserver einen Zugriff auf die wp-config.php kategorisch unterbindet.

<files wp-config.php>
order allow,deny
deny from all
</files>

Benutzerrechte

Die wp-config.php enthält u.a. die Zugangssdaten zur Datenbank. Es ist ratsam, die Benutzerrechte für die wp-config.php anzupassen.
Nach der Installation von WordPress weist die wp-config.php in der Regel die Standard Benutzerrechte 644 auf. Das ist in der Regel ausreichend, aber sicherlich nicht so sicher wie möglich.

cd ~/www/<dir>
chmod 400 wp-config.php

Salts

Standardseitig unterstützt WordPress die Verwendung individueller Zeichenfolgen (salts). Salts werden standardmäßig in der Datenbank abgelegt. Die wp-config.php ist vorbereitet, individuell generierte Salts darin zu hinterlegen.

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');

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 Risikosplitting. 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

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.

Security Plugins

Sehen Sie sich die Bewertungen und die Anzahl der Installationen an, bevor Sie ein Plugin installieren. Ein schlechtes Plugin kann es einfach nur verschlimmbessern.

Bei 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 den Eindringling daran hindern, das Kennwort beliebig oft eingeben zu können.
Der Eindringling wird nach einem einstellbaren Eingabeversuch gesperrt.

Zugriff auf WordPress Login verhindern

Der WordPress Loginbereich kann mit einem Verzeichnisschutz versehen werden.

Directory Browsing

Das Directory Browsing erlaubt die Dateianzeige eines Webverzeichnisses falls keine Index-Seite vorlhanden ist. Diese Funktion ist in vielen Fällen bereits deaktiviert. Das zu überprüfen schadet aber sicher nicht.

Verschleiern des Backend Loginbereichs

Der Loginbereich kann per Redirect umgeschrieben werden. Somit erhalten Zugriffe auf das vorherige Verzeichnis wp-admin/ eine HTTP 404 Fehlerseite angezeigt. Auch hierfür sind Plugins vorhanden.

Ausführbarkeit im Verzeichnis uploads verhindern

Gelingt es dem Eindringling, auf das uploads/ Verzeichnis zugreifen zu können, dann könnte der dort hochgeladene Code z.B. in Form einer *php Datei dazu genutzt werden, auf weitere Bereiche zuzugreifen. Die folgende Angabe verbietet es dem (Apache) Webserver im uploads/ Verzeichnis u.a. .php Dateien auszuführen.

<FilesMatch "\.(php|phtml|php3|php4|php5|pl|py|jsp|asp|html|htm|shtml|sh|cgi|suspected)$">
    deny from all
</FilesMatch>