Es gibt im Internet eine Vielzahl von Anleitungen, mit nützlichen Tipps um die eigene WordPress Installation sicherer zu gestalten. Da die Installationsroutine von WordPress stets dieselbe ist, und am Ende immer ein User mit dem Namen admin die Administratorenrolle bekommt, die Tabellen immer den Präfix wp_ erhalten, ist das Eindringen in eine Standard-Installation relativ einfach.
Schon mit wenigen Änderungen wird es für einen Angreifer allerdings ungleich schwerer, ändert man zum Beispiel den Namen des Administrator von admin in KlAus, muss der Angreifer nicht nur das Passwort sondern auch den geänderten Loginnamen erraten.
WP Security Scan
Das Plugin WP Security Scan ist bei diesen kleinen Änderungen sehr hilfreich und zeigt in einem Extrabereich des Administrationsmenüs mögliche Schwachstellen auf.
In meinem Beispiel werden alle Tests bestanden, bis auf das Tabellen Präfix, welches bei mir noch wp_ lautet.
Neben dieser kurzen Übersicht über die Hauptschwachstellen bietet das Plugin noch einen Scanner für die Dateizugriffsrechte der wichtigen Verzeichnisse und einen Generator zur Erstellung wirklich sicherer Passwörter.
Limit Login Attempts
Eine weitere Schwachstelle von WordPress stellt der Login zum Administrationsbereich dar. Für einen Angreifer ist es möglich ein Passwort mittels geeigneter Tools zu knacken, da WordPress unendlich viele Eingabeversuche erlaubt. Abhilfe schafft hier das Plugin Limit Login Attempts, mit dessen Hilfe die maximale Anzahl für Login Versuche festgelegt werden kann.
AskApache Password Protect
Ein weiterer Möglichkeit die Sicherheit der Installation zu steigern bietet ein Schutz der wichtigen Verzeichnisse mittels .htaccess-Dateien. Hier gilt es aber im Voraus zu klären, ob die Verwendung von .htaccess-Dateien auf dem eigenen Webspace auch möglich ist.
Der einfachste Weg diesen Schutz zu realisieren bietet das Plugin AskApache Password Protect, welches über ein eigenes Menü die Verwaltung der .htaccess-Dateien ermöglicht.
.htaccess manuell
AskApache Password Protect bietet allerdings mehr als der normale Nutzer benötigt, und wer sich nicht scheut selbst ein paar Dateien auf dem Server zu verschieben, kann den Schutz auch manuell einrichten.
Zuerst wird eine Passwortdatei benötigt, diese heißt meist .htpasswd, der Name ist aber nicht zwingend vorgeschrieben. Die Datei beinhaltet später die Namen der berechtigten Personen und die Passwörter.
Als Speicherort ist es empfehlenswert die Datei außerhalb des Webverzeichnisses zu speichern, ein Auslesen über das Internet wird eigentlich über den Dateinamen .ht… verhindert, aber sicher ist sicher, also raus damit aus dem Webverzeichnis.
Erstellt werden kann diese Datei mit einem Generator im Internet, den ausgegebenen Text (Benutzername:Passwort) einfach in die Datei .htpasswd einfügen und speichern.
Ist die Passwortdatei auf dem Server hinterlegt, ist die halbe Arbeit schon erledigt, nun benötigen wir nur noch den absoluten Pfad zur Passwort Datei und erstellen dann noch zwei Dateien mit folgendem Inhalt.
.htaccess Datei für das Wurzelverzeichnis:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress<files wp-config.php>
Order deny,allow
deny from all
</files><Files wp-login.php>
Order Deny,Allow
Deny from All
Satisfy Any
AuthType Basic
AuthName "Kein Zugang!"
AuthUserFile /Pfad/zur/Passwort/Datei/.htpasswd
Require valid-user
</Files>
Die .htaccess-Datei im Wurzelverzeichnis der WordPress Installation schützt die Dateien wp-config.php, die wichtige Daten über die Datenbank enthält, und die Datei wp-login.php.
Während der Zugriff auf wp-config.php komplett gesperrt ist, kann wp-login.php aufgerufen werden, es erscheint dann allerdings ein Eingabefenster in dem der Nutzer seinen Benutzernamen und sein Passwort eingeben muss. Unberechtigte haben somit keine Chance das Login-Formular zu erreichen.
Der oberste mit # BEGIN WordPress beginnende Bereich wird von WordPress selbst eingetragen und regelt das Umschreiben der Permalinks mittels mod_rewrite.
In der Zeile AuthUserFile /Pfad/zur/Passwort/Datei/.htpasswd muss der absolute Pfad zur gespeicherten Passwort-Datei angegeben werden.
.htaccess Datei für den wp-admin-Ordner:
Order Deny,Allow
Deny from All
Satisfy Any
AuthType Basic
AuthName "Kein Zugang!"
AuthUserFile /Pfad/zur/Passwort/Datei/.htpasswd
Require valid-user<FilesMatch ".(ico|pdf|flv|jpg|jpeg|mp3|mov|wav|wmv|png|gif|swf|css|js
$">
Allow from All
</FilesMatch><FilesMatch "(async-upload|admin-ajax).php$">
<IfModule mod_security.c>
SecFilterEngine Off
</IfModule>
Allow from All
</FilesMatch>
Die Datei für den wp-admin-Ordner ist etwas kürzer, da sie die rewrite-Regeln nicht enthält. Jeglicher Zugriff auf die Dateien im Admin-Ordner werden nur nach erfolgreicher Authentifizierung mittels Benutzername und Passwort gestattet, ausgenommen sind alle Dateien mit den Endungen, die unter FilesMatch aufgeführt sind.
Diese Dateien werden teilweise bei Fehlermeldungen (Kommentare) benötigt und können so auch ohne Authentifizierung genutzt werden.
Fazit
Nutzt man all diese Möglichkeiten und benutzt dazu noch sichere Passwörter ist die eigene WordPress-Installation ziemlich sicher. 100%ige Sicherheit gibt es nie, Freiwild ist man somit aber auch nicht mehr.