WordPress absichern: 11 Tipps gegen Hackerangriffe

Hackerangriffe auf WordPress vermeiden (Quelle: fotolia.com – © frank peters)

Als weit verbreitetes Content Management System ist WordPress ein beliebtes Ziel von Hackerangriffen. Die letzte groß angelegte Attacke fand im April 2013 statt. Von gehackten deutschen Servern ausgehend, breitete sich der Angriff auf die WordPress-Systeme weltweit aus. Es handelte sich um eine sogenannte „Brute Force Attack“. Ein Botnetz versucht, sich in den WordPress-Installationen mit dem Benutzernamen „admin“ einzuloggen und probiert einfach solange Passwörter aus, bis das richtige dabei ist. Doch es gibt einige Möglichkeiten, um es den Angreifern besonders schwer zu machen.

Benutzername und Passwort mit Bedacht wählen

Bei der Installation wird ein Benutzer mit Administrationsrechten angelegt. Diesen sollte man nicht „admin“ oder „administrator“ nennen, sondern einen individuellen Namen wählen. Denn „admin“ war lange der Standard-Benutzername bei WordPress und ist daher erstes Ziel einer Attacke. Zudem ist es notwendig, ein sicheres Passwort zu wählen. Dieses sollte möglichst lang sein und aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen bestehen.

Admin bei bestehenden Installationen ändern

Bei bestehenden Installationen kann man nachträglich einen weiteren Benutzer mit Administrationsrechten anlegen. Hierfür loggt man sich mit seinem „admin“-Benutzer ein und legt einen neuen Benutzer mit Administrationsrechten an.

Danach loggt man sich aus und mit dem neu angelegten Benutzer wieder ein. Man hat nun die Möglichkeit, den „alten“ Administrator zu löschen. Doch Vorsicht: Vor dem Löschen wird man gefragt, was mit den Beiträgen (sofern vorhanden) des zu löschenden Benutzers geschehen soll. Möchte man die Beiträge behalten, muss man diese auf einen anderen Benutzer übertragen, ansonsten werden diese ebenfalls gelöscht.

Datenbanktabellen-Präfix individualisieren

Ein eigenes Datenbankpräfix macht WordPress sicherer

Um die Datenbank vor SQL-Injections zu schützen, sollte das Datenbanktabellen-Präfix wp_, welches während der WordPress-Installation vorgeschlagen wird, geändert werden. Hierzu gibt man am besten eine zufällige Kombination aus Buchstaben und Zahlen ein.

Präfix nachträglich ändern

Das Präfix kann man auch bei einer bestehenden Installation ändern. Am unkompliziertesten funktioniert das mit einem Plugin wie z. B. Change DB Prefix. (Dieses kann auch wieder deinstalliert werden, nachdem es seinen Dienst getan hat). Manuell kann man das Präfix auch ändern, allerdings ist das nicht so leicht, wie mit einem Plugin und man muss sich an der Datenbank zu schaffen machen. Wer das möchte, findet hier eine Anleitung um nachträglich das Datenbanktabellen-Präfix zu ändern.

Unbenutzte Dateien, Themes und Plugins entfernen

Je mehr Code vorhanden ist, desto größer ist auch das Risiko, dass eine Schwachstelle gefunden wird. Schon nach der Installation kann man folgende Dateien aus dem root-Verzeichnis der WordPress-Installation entfernen: license.txt, readme.html und ihr deutsches Pendant liesmich.html (in den beiden html-Dateien steht die Versionsnummer der Installation).

Zudem empfiehlt es sich, nur Plugins und Themes zu installieren, die man auch wirklich benötigt. Unnötige Plugins und Themes können nicht nur zur Sicherheitslücke mutieren, sondern das System auch langsamer machen.

Sicherheitsschlüssel in der wp-config.php neu generieren

In der wp-config.php befindet sich ein Abschnitt mit mehreren Sicherheitsschlüsseln. Diese sind wichtig für die Verschlüsselung von Informationen, die in Cookies abgelegt werden.

define('AUTH_KEY',         '/>Gu|XZ#Ki/um[4A=%n#C2+5wBgX&KFi6p{JFX3PzyU>Q0kH] M7pNgc5jZY8PDM');
define('SECURE_AUTH_KEY',  '&vBm.:~2v(5IDD<{B8V%IwQDI{fL-sgO!_Lq_h*2+&( |d~(x(ri_y;4Tz-cnZ&N');
define('LOGGED_IN_KEY',    'SFx7BIYD7rj5]mzysck>|!OC ,z+C2%<PrKr8nX4;-+E[C*m!BkND7Z2+/Dbd.`i');
define('NONCE_KEY',        '^Iw8TL-1Q,>3<9Be@Y+H^L6UmE7NqaxO#J}`sE3I<jfq!Sdvj;+6rk>9|$^sWJYU');
define('AUTH_SALT',        'PW_+F`:,GNr-OAI|N]1[bC*LgwY}-^5s[TU++|i?yOItN3WtCtz:of0L?|.opcM1');
define('SECURE_AUTH_SALT', '2hjX+d;nX=R1;}+Ykofsk[:0T+IRnsZkf1MA#DS-J?Sv-$W@HtMBhN ,byf#kf8l');
define('LOGGED_IN_SALT',   'K|za~ZSpP+-:mMTcq-lUcFIsGf={zgLuT2X~5:_Ld9|K|10@Q_z())5_-Pv_|rM%');
define('NONCE_SALT',       '>;b>|uUAAnhW+/xKry&6c:tFnrB}?khdYMem4Ab21h0~wIM% fZz(i>lJQrfqY%h');

Um Manipulationen zu erschweren, lässt man sich diese Sicherheitsschlüssel neu generieren und fügt sie in die wp-config.php ein. Praktischerweise stellt WordPress hierfür einen eigenen Dienst zur Verfügung: https://api.wordpress.org/secret-key/1.1/salt/

Debug-Modus ausschalten

Falls man während der Entwicklung den Debug-Modus eingeschaltet hatte, sollte man nicht vergessen, diesen vor dem Online-Stellen wieder auszuschalten. Die Fehlermeldungen, die bei aktiviertem Debug-Modus im Frontend ausgegeben werden, lassen Rückschlüsse auf die Verzeichnisstruktur zu. Hierzu sucht man den entsprechenden Eintrag in der wp-config.php und setzt ihn wieder auf false:

define('WP_DEBUG', false);

Zugriff auf wp-config.php sperren

Damit Hacker und Skriptkiddies erst garnicht an so wichtige Dateien wie die wp-config.php herankommen, verweigert man den Zugriff auf diese von außen. Das geschieht, indem man folgenden Code in die .htaccess-Datei einfügt:

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

Diese Datei muss sich im gleichen Verzeichnis befinden, wie die zu sperrende Datei. Bei WordPress liegen die wp-config.php und die .htacces-Datei standardmäßig im Wurzelverzeichnis.

Login zum Administrationsbereich zusätzlich schützen

Eine doppelte Absicherung des Login-Bereichs kann man erreichen, indem man das wp-admin-Verzeichnis zusätzlich per .htaccess sperrt. Um in den Admin-Bereich zu gelangen, gibt man zweimal Zugangsdaten ein, einmal um den Verzeichnisschutz aufzuheben und einmal im eigentlichen Login-Bereich von WordPress. Das mag zuerst lästig erscheinen, doch gerade gegen Brute Force Attacken ist das sehr effektiv. Hierzu legt man im Verzeichnis wp-admin zunächst eine .htacess-Datei mit folgendem Inhalt ab:

AuthName "secure"
AuthType Basic
AuthUserFile /hier/eigenen/pfad/einfügen/wp-admin/.htpasswd
require valid-user

Dann benötigt man noch eine .htpasswd-Datei im selben Verzeichnis. In dieser wird Benutzername und Passwort in folgendem Format abgespeichert:

Benutzername:$1$__cMFbXd$zZd0KrYiuI7HhmHirC2hS1

Mit diesem .htpasswd-Generator kann man sich seine eigene Kombination generieren. Dazu gibt man Username und Passwort ein (Passwort wird gleichzeitg verschlüsselt) und fügt das Ergebnis in der .htpasswd-Datei ein und legt die Datei ebenfalls auf dem Server im Verzeichnis wp-admin ab.

Fehlermeldungen bei falschem Login unterdrücken

Bei Falscheingabe von Benutzername oder Passwort erscheint standardmäßig bei WordPress eine Meldung, welcher eingegebene Wert nicht korrekt ist. Was eigentlich benutzerfreundlich ist, verrät potentiellen Angreifern, dass der jeweils andere Wert korrekt eingegeben wurde. Mit folgendem Eintrag in der functions.php lässt sich der Eintrag anpassen:

add_filter('login_errors',create_function('$a', 'return "Fehler";'));

Nun wird anstatt der Standardmeldung von WordPress einfach nur „Fehler“ ausgegeben. Der Wert „Fehler“ kann im Code durch eine beliebige andere Fehlermeldung zwischen den Anführungzeichen ersetzt werden.

Möchte man die Fehlermeldung gänzlich unterdrücken, kann man diesen Code in die functions.php einfügen:

add_filter('login_errors',create_function('$a', 'return null;'));

Die rote Umrandung der Fehlermeldung wird hierbei allerdings nicht entfernt.

Generator Tag aus Quellcode entfernen

Im Quellcode von WordPress befindet sich eine Metaangabe mit der Versionsnummer der installierten Version:

<meta name="generator" content="WordPress 3.5.1" />

Gerade bei älteren Versionen sind Sicherheitslücken meist bekannt und können für eine Attacke genutzt werden. Um es dem Angreifer nicht unnötig leicht zu machen, entfernt man diese Metaangabe, indem man folgenden Code in die functions.php des Themes einfügt:

remove_action('wp_head', 'wp_generator');

System aktuell halten

Wichtig ist es, das System möglichst auf dem neuesten Stand zu halten. Erscheint eine neue Version von WordPress, werden mit der Aktualisierung nicht nur Bugs entfernt, sondern auch bis dahin bekannte Sicherheitslücken geschlossen. Dasselbe gilt für Plugins.

Im WordPress Codex Versions kann man sich vor jedem Update informieren, was genau am System geändert wurde, und dann entscheiden, ob man ein Update durchführen möchte oder lieber noch abwartet. In jedem Falle sollte man vorher ein Backup von System und Datenbank anfertigen.

Pluginnutzung abwägen

Im umfangreichen Plugin Directory von WordPress gibt es für nahezu jeden Anwendungsfall etwas zu finden. Gerade gegen Brute Force Attacken werden Plugins empfohlen, die die Anzahl der möglichen Anmeldeversuche beschränken. Doch wie bei jedem Plugin sollte man sich vorher genau informieren und die Bewertungen lesen, ob es für den eigenen Anwendungsfall passend und notwendig ist.

Bei der letzten großen Brute Force Attacke auf WordPress haben manche dieser Plugins versagt. Da die angreifenden Botnetze mit vielen verschiedenen IP’s arbeiteten, erkannten die Plugins nicht, dass es sich um ein und den selben Angreifer handelte.

Fazit

Dieses sind gute Möglichkeiten, um WordPress ohne den Einsatz von Plugins sicherer zu machen. Vieles lässt sich schon bei der Installation mit geringem Aufwand erledigen. Am wichtigsten ist es, das System und die Plugins aktuell zu halten. Freundlicherweise wird man im Backend immer auf neue Versionen hingewiesen.

Garantierte Sicherheit hat man nie, doch mit diesen Kniffen kann man es den Hackern zumindest schwerer machen. Hat es die eigene Website doch erwischt, erkläre ich in folgendem Gastbeitrag, was man tun kann: Website gehackt? In 6 Schritten raus aus der Zwickmühle