Im dritten Teil meines Tutorials zum Thema “IT Sicherheit: Hardening Apache, PHP und WordPress” geht es heute darum, wie man die IT Sicherheit für WordPress erhöhen kann.
Es gibt verschiedene Einfallswege, durch die ein Hacker Schaden an einer WordPress-Installation anrichten kann. In diesem Artikel versuche ich einige dieser Wege zu skizzieren, damit Du Deine Webseite möglichst sicher gestalten kannst. Diese Aufstellung erhebt keinen Anspruch auf Vollständigkeit und manche Maßnahmen könnten schon jetzt oder zukünftig wirkungslos sein oder werden. Deswegen muss man sich in Sachen IT Sicherheit stets auf dem Laufenden halten.
Generell sollte man immer WordPress, Plugins und (gekaufte) Themes auf den aktuellen Stand halten. Es gibt zu diesem Zweck auch Plugins, die dies automatisiert machen, jedoch empfehle ich sich die paar Minuten Zeit zu nehmen und dies manuell zu machen. Es ist nicht ratsam, seine WordPress Installation unnötig mit Plugins zu überfrachten.
Ferner solltest Du darauf achten, stets sichere Passwörter zu vergeben. Am besten verwendest Du zur Generierung eines solchen Passwortes einen Passwortgenerator. Davon gibt es im Netz mehrere zu finden. Einen möglichen Passwortgenerator findest Du hier.
Installation
Bereits bei der Installation von WordPress gibt es einige Dinge zu beachten, die der Sicherheit der neuen Webseite zuträglich sind. WordPress rühmt sich der einfachen fünf Minuten Installation. Manche Hoster gehen sogar noch weiter und bieten ihren Kunden eine 1-Click-Installation von WordPress an. So schön pragmatisch derartige Lösungen auch sind, so bergen sie Gefahren für die Sicherheit der neu zu erstellenden Webseite.
Zunächst einmal wird in solchen Installationen teilweise automatisch ein Benutzer mit administrativen Rechten angelegt, der den Namen “admin” trägt. Dies ist bereits eine Gefahr, weil Hacker zuallererst nach solchen Benutzern Ausschau halten. Um einen Benutzerkonto zu hacken benötigt man zwei Elemente: den Benutzernamen und das Passwort. Durch die Vergabe des Benutzernamens “admin”, hat der Hacker bereits 50% der Zugangshürde bereits überwunden. Der erste Schritt zum Absichern seiner Webseite besteht darin, diesen Benutzernamen umgehend zu ändern.
Dies lässt sich relativ einfach mit dem Tool “phpMyAdmin” bewerkstelligen, indem man in die Tabelle “xx_users” geht und dort den Namen “admin” gegen einen beliebigen Namen ändert. Falls der Blog bereits eine Weile besteht und es bereits Beiträge gibt, die vom Benutzer “admin” geschrieben wurden, so werden alle bestehenden und zukünftigen Beiträge als diesem neuen Benutzer zugehörig angezeigt.
Der letzte Absatz führte uns schon zu dem zweiten Sicherheitsproblem bei den 1-Click-Installationen. Die Tabellen in der Datenbank bekommen standardmäßig das Prefix “wp_”. Damit weiß ein Hacker, dass er in der Tabelle “wp_users” die Benutzernamen findet und wenn er es schafft, über eine SQL-Injection oder einem anderen Weg auf die Tabelle zuzugreifen, kann er sich entweder einen neuen eigenen Benutzer anlegen oder einen bestehenden Benutzernamen – idealerweise den Benutzer “admin” – zu seinen Gunsten umbenennen. Deshalb sollte man dieses Prefix tunlichst vermeiden, oder wenn es bereits angelegt wurde, nachträglich ändern. Im Backend von WordPress kann man dieses Präfix übrigens ändern.
Du kannst auch in der wp-config.php einen neuen Sicherheitsschlüssel generieren lassen. Die im Browserfenster angezeigten Zeilen kopierst Du und fügst sie in der wp-config.php anstelle der bestehenden Zeilen ein.
Eine weitere Schutzmaßnahme besteht in dem Verschieben der wp-config.php eine Ebene nach oben und damit aus dem unmittelbaren Zugriff von außen. Dazu bedarf es nicht einmal irgendwelcher Änderungen in der Konfiguration, weil WordPress automatisch nach der wp-config.php im übergeordneten Verzeichnis sucht, wenn sie sich nicht direkt in dem Wurzelverzeichnis der Installation befindet.
Um einem Hacker das Leben weiter schwer zu machen, könntest Du das Verzeichnis “wp-content” umbenennen. In diesem Verzeichnis befinden sich u.a. die Plugins, Themes und das Upload-Verzeichnis von WordPress. Nach der Installation ist die Umbenennung am einfachsten. Man benennt wp-content
um und fügt dort folgenden Code in die Datei wp-config.php
ein:
define('WP_CONTENT_DIR', '/pfad/zum/neuen/content/verzeichnis');
define('WP_CONTENT_URL', 'http://www.domain.de/content');
Wobei “content” der Name des Verzeichnisses darstellt, zu dem das alte wp-content Verzeichnis umbenannt wurde. Bei einer bestehenden WordPress Installation ist die Umbenennung nicht so simpel, weil es in der Datenbank bereits zahlreiche Einträge gibt, die auf dieses Verzeichnis zeigen (insbesondere alle Bilder der Mediathek).
Um trotzdem das Verzeichnis umbenennen zu können, benötigt man ein Plugin, mit dessen Hilfe alle Vorkommen von “wp-content” in der Datenbank umbenannt werden können. Dazu eignet sich z.B. das Plugin Suchen und Ersetzen. Es kann dennoch bei Themes und Plugins zu Problemen führen, wenn diese direkt im Sourcecode auf das “wp-content” Verzeichnis verweisen. Dies müsste dann mühsam manuell angepasst werden (was wiederum bei Updates zu Schwierigkeiten führt!).
Wenn Du dies tust, dann sichere vorher die Datenbank, falls etwas schief gehen sollte.
Login
Eine weitere Angriffsfläche liefert das Login, d.h. die Anmeldeprozedur zu WordPress. Eines der ersten Dinge, die Du tun kannst, um die Sicherheit von WordPress zu erhöhen, ist die Begrenzung der Anzahl der Anmeldeversuche. Viele Hacker verwenden Brute-Force-Angriffe, um zu versuchen, den Benutzernamen und/oder das Passwort zu knacken. Selbst wenn diese Angriffe nicht erfolgreich sind, kann die sich wiederholende Art der Angriffe Deinen Server erheblich belasten.
Durch die Begrenzung der Logins verhinderst Du, dass ein Hacker auch nur den Versuch eines Brute-Force-Angriffs unternimmt. Er könnte es zwei- bis dreimal versuchen und dann wird seine IP gesperrt. Du kannst dies leicht einrichten, indem Du das Plugin Limit Login Attempts Reloaded verwendest. Dieses Plugin beschränkt die Anzahl der Widerholungsversuche beim Einloggen (pro IP). Das Plugin ist auch DSGVO-kompatibel. Wenn die Kompatibilitätsfunktion eingeschaltet ist, werden alle gespeicherten IP-Adressen verschleiert (md5-Hash).
Es ist eine Sache, sicherzustellen, dass Du nicht “admin” als Benutzernamen verwendest. Es ist eine ganz andere Sache, zu verhindern, dass andere Leute versuchen, sich damit anzumelden. Da “admin” heutzutage so sehr mit Brute-Force-Angriffen assoziiert wird, sind Leute, die versuchen, sich mit ihm auf Deiner Website anzumelden, oft Hacker. Du kannst ihren Versuchen jedoch Einhalt gebieten, indem Du jeden sperrst, der versucht, sich mit “admin” einzuloggen.
Zu diesem Zweck kannst Du das WordPress Plugin Wordfence Security – Firewall & Malware Scan verwenden. Dieses Plugin hat noch viele weitere Funktionen, um Deine WordPress Webseite abzusichern. Es ist auch DSGVO-konform .
Security through obscurity
Security through obscurity (deutsch „Sicherheit durch Obskurität“ oder „Sicherheit durch Unklarheit“) ist ein Prinzip, die Sicherheit eines Systems zu gewährleisten, indem die Funktionsweise geheim gehalten wird. Die Idee dahinter ist, möglichst wenig Informationen über das verwendete System – in diesem Fall WordPress – offenzulegen.
Eine mögliche Maßnahme wäre, die Login-Seite zu verstecken oder mit einem weiteren Passwort abzusichern. Es würde dem Hacker das Leben schwer(er) machen, aber ihn letzlich nicht davon abhalten, zu seinem Ziel zu gelangen. Wenn Du dies tun willst, dann schaue Dir dazu das Plugin WPS Hide Login an.
Ferner kannst Du Informationen über die verwendete WordPress Version verstecken. Du kannst die Versionsnummer verstecken, indem Du in der functions.php den folgenden Code schreibst:
function remove_version() {
return '';
}
add_filter('the_generator', 'remove_version');
Zum selben Zweck dient es auch, wenn Du aus dem Hauptverzeichnis die Dateien Readme.html und / oder Liesmich.html löschst, weil diese auch Informationen über WordPress enthalten, die ein versierter Hacker sofort sucht. Dies musst Du allerdings nach jedem WordPress Update wiederholen, weil diese Dateien jedes Mal wieder hineingeschrieben werden.
Eine weitere hilfreiche Maßnahme in diesem Zusammenhang ist, die Fehlermeldungen nach einem fehlerhaften Login weniger aussagekräftig zu machen. Dazu fügst Du den folgenden Code in die functions.php ein:
function less_verbose_login_messages() {
return 'FEHLER: Falsche Zugangsdaten eingegeben.';
}
add_filter( 'login_errors', 'less_verbose_login_messages' );
Dateien und Verzeichnisse
Die Datei- und Verzeichnisrechte innerhalb der WordPress Installation sollten eingeschränkt werden. Dateien sollten die Rechte 644 und Verzeichnisse die Rechte 755 erhalten. Dies reicht für den normalen Betrieb von WordPress.
Die Dateien install.php und upgrade.php solltest Du aus dem Verzeichnis /wp-admin entfernt werden, da sie nach der Installation keine Verwendung mehr haben. Das Löschen hat auf die Updatefähigkeit von WordPress keine Auswirkung.
Das Upload Verzeichnis ist häufig Ziel von Hackerangriffen. Deshalb sollte man dieses Verzeichnis bestmöglich absichern. Erstelle in dem Verzeichnis eine .htaccess Datei und schreibe die folgenden Zeilen hinein:
<Files *.php>
Deny from All
</Files>
Damit wird verhindert, dass in diesem Verzeichnis PHP Skripte ausgeführt werden (manchmal schaffen es Hacker, in diesem Verzeichnis PHP Skripte hochzuladen. Dies würde ihnen aber nichts nutzen, wenn sie sie nicht ausführen können. Deshalb diese Schutzvorrichtung.).
Und schießlich kannst Du noch die folgende Zeile in die functions.php schreiben:
define('DISALLOW_FILE_EDIT', true);
Damit verhinderst Du das Editieren von Themes und Plugins im Backend. Wenn Du das nicht kannst, dann kann das auch kein Hacker. Da die Entwicklung und Wartung einer WordPress Installation idealerweise auf dem lokalen Rechner erfolgen soll, so kann man alle Änderungen zuerst lokal machen, danach die obige Zeile kurz auskommentieren, die Änderung auf dem Live-System nachfahren und dann die Editiersperre wieder aktivieren.
Auf Sicherheitslücken durch XSS und CSRF habe ich bereits in den vorherigen Teilen dieses Tutorials hingewiesen. Dies gilt natürlich auch im Umfeld von WordPress analog.
Auch habe ich darauf verzichtet, eine Liste mit Sicherheitsplugins in diesem Artikel aufzuführen. Dazu findet man über Google hinreichend Verweise für derartige Listen.
Ich hoffe, ich konnte mit diesem Artikel einige Anregungen liefern, wie man die IT Sicherheit von WordPress erhöhen kann. Fragen und Anregungen bitte im Kommentarbereich hinterlassen.
Fragen oder Feedback zu diesem Artikel