Eine WordPress-Installation ist in der heutigen Zeit ein ständiges Angriffsziel. Dabei sind nicht nur bekannte Sicherheitslücken im Fokus, sondern auch der Versuch mit erratenen oder geklauten Login-Daten Zugriff auf die WordPress-Installation zu erhalten.
Die aller wichtigsten Regeln:
- WordPress aktuell halten
- PlugIns aktuell halten
- PlugIns nur aus vertrauenswürdigen Quellen installieren (z.B. offizielles WP-Repository)
- keine einfach zu erratenden Passwörter nutzen
- Benutzernamen nicht auf der Webseite anzeigen
- nicht mehr benötigte Benutzer löschen oder deaktivieren
- das Internet ist prinzipell BÖSE – zumindest aus Sicht der Sicherheit! 🙂
Um ein WordPress bzw. auch jede andere Applikation im Internet zu schützen existieren vier Möglichkeiten – sofern man nicht selbst über tiefgreifende WP-, PHP- und DB-Kenntnisse verfügt und den WP-Core zu analysieren beabsichtigt:
- Applikation offline setzen
- Zugriff durch eine Firewall (FW) beschränken
- Zugriff per .htaccess beschränken
- Sicherheits-Plugins nutzen
Einen Webserver mit einer Applikation wie WordPress kann man sich vorstellen wie das eigene Eigenheim.
- Offline = das Eigenheim hat keine Anbindung durch Straßen, Wege, …. eine sehr einsames Unterfangen, da man nie Besuch bekommen kann 🙂
- Firewall = Zutrittskontrolle an der Grundstücksgrenze
- htaccess = Zutrittskontrolle vor den Türen und Fenstern, sowie vernagelten Türen und Fenster, durch die kein Besucher kommen darf.
- Plugins = Zutrittskontrolle hinter jeder Tür und jedem Fenster, die dann aber schon geöffnet sind. Ist der böswillige Besucher besonders clever, ist er maskiert und gibt sich als guter Freund aus
1. Applikation offline setzen
Dies ist natürlich die sicherste Methode, da Angreifer so früh wie möglich abgewehrt bzw. blockiert werden – hier: es existiert kein Zugriff, daver 100% abgewehrt – sofern der Angreifer nicht physikalischen Zugriff zum System hat!
=> Diese Szenario entspricht einem Intranet, OHNE Anbindung an das Internet!
Für eine eine Webseite, Blog, … nicht sehr zielführend! 🙁
2. Zugriff durch Firewall (FW) beschränken
Eine Firewall schütz den Server sehr effektiv, allerdings ist die Formulierung der FW-Rules im Internet etwas kompliziert. Hier können zwar einschlägige Blacklist (IP-Adressen, IP-Ranges) hilfreich sein, aber es besteht das Risiko, dass gewünschte Besucher ebenfalls geblockt werden. Dies kann passieren, wenn eine IP-Adresse auf der Blacklist steht, diese aber neu vergeben wurde, an einen normalen Besucher, der nichts böses im Schilde führt.
Zudem haben die meisten Webmaster – sofern sie den Server nicht selbst betreiben – keinen Zugriff auf die Firewall.
3. Zugriff per .htaccess beschränken
Mit der .htaccess kann u.a. Zugriff auf den Webserver “gesteuert” werden.
Hier können ebenfalls IP-Adressen und DNS-Namen blockiert werden – was zur gleichen Problematik führt wie bei 2. – sofern es sich nicht nur um “Traffic-Spam” handelt.
In der .htaccess kann zudem der Zugriff auf einzelen Dateien gesteuert werden. Für einzele Dateien oder ganze Verzeichnisse (rekurisv!) kann der Zugriff komplett geblockt, mit einem Passwort geschützt oder auf IP/DNS-Ebene eingeschränkt werden.
Das schöne an der .htaccess ist, dass der Zugriff schon auf der Ebene des Webserver geblockt oder eingeschränkt wird.
Kurzum: Der Besucher (Angreifer) kommt erst garnicht auf die Seite, wodurch auch der Server selbst entlastet wird, da nicht irgendwelche PHP-Scripte o.ä. den Zugriff analysieren und Aufgrund der Analyse dann erst blockieren.
Viele Hoster bieten das Einrichten eines Zugriffsschutz über das Admin-Panel an. Dann wird z.B. die “.htpasswd” oft auch nicht im “htdocs”-Verzeichnis abgelegt, sondern an einem “sicheren Ort” der per HTTP nicht erreichbar ist.
Bietet der Hoster diese Möglichkeit nicht an oder möchte man die htaccess einfach selbst machen, dann sollte auf folgende geachtet werden:
- Die htpasswd (diese enthält die Benutzer und Passwörter) sollte nicht im htdocs, www, public … oder wie das Verzeichnis auch immer benannt ist liegen
- Experiemente immer auf einer Test-/Wartungsumgebung durchführen um die Webseite nicht versehendlich durche ien falsch formulierte htaccess komplett zu blockieren
- existierende htaccess Dateien (WP bringt eine eigen mit) nicht überschreiben, sondern ergänzen
- die ReleaseNotes bzw. das ChangeLog von neunen WP-Versionen lesen, evtl. gibt es sicherheitsrelevante Änderungen, die man in die eigene htaccess übernehmen sollte
- die htaccess regelmässig auf Manipulationen überprüfen – Ursache können unsichere PlugIns, Zero-Day-Exploits, … sein
Anmerkung: Die .htaccess ist sehr mächtig, wodurch es bei Tippfehlern passieren kann, dass die gesamte Webseite nicht mehr erreichbar ist.
Daher sollten Experimente immer in einem unkritischen Unterverzeichnis oder einer Test-/Wartungsumgebung getestet werden.
Folgende Dateien und Verzeichnisse sollten per htaccess geschützt werden:
xmlrpc.php => komplett blockieren, sofern man diese Funktionalität für die Remote-Administration nicht benötigt
<Files xmlrpc.php> Order Deny,Allow Deny from all </Files>
wp-login.php => Schutz durch Benutzer und Passwort (unter htdocs, www, public, …)
AuthType Basic AuthName "Login" AuthUserFile /path/zur/passwd/.htpasswd <Files wp-login.php> require valid-user </Files>
wp-admin/ => Schutz durch Benutzer und Passwort (in wp-admin/ für das gesamte Verzeichnis gültig!)
AuthType Basic AuthName "Admin" AuthUserFile /path/zur/passwd/.htpasswd require valid-user
4. Sicherheits-PlugIns nutzen
Im Repository von WordPress sind unzählige PlugIns zum Schutz einer WP-Installation gelistet.
Viele haben natürlich ihre daseins Berechtigung, vorallem wenn es um den Einsatz von Captchas geht oder die Erkennung von mehrmaligen falschen Logins.
Allerdings sollte man bedenken, dass ein Angreifer schon auf Dateien (per HTTP) Zugriff hat, wenn diese PlugIns greifen.
Ergänzungen zu diesem Beitrag sind willkommen (keine Zusammenfassung kann komplett vollständig sein!) und dürfen gerne über das Kontaktformular mitgeteilt werden!