Sicherheit von WordPress erhöhen

[toc]

Wer bekommt sie nicht? Diese E-Mails die uns mitteilen, dass wir auf einer populären Website unser Passwort verändert haben, unser Konto deaktiviert wurde oder das Plötzlich Geld verschwunden sei. Genau so eine E-Mail traf bei mir vor nicht all zu langer Zeit ein. Der Absender war vermeintlich Apple. Sie forderte mich auf, mich in mein Kundenkonto einzuloggen. Ich wusste bereits vorher, dass es sich wohl um eine so genannte Phishing-E-Mail handelte. Trotzdem fand ich es interessant, wohin der Link eigentlich führte. Zu meinem Verwundern war eine deutsche Domain angegeben. Und zwar auf die Website eines mittelständisches Transportunternehmens. Ich fragte mich sofort, warum ein Transportunternehmen aus Deutschland Spam-E-Mails verschicken würde. Das wäre wohl auch der erste Gedanke, den viele andere sofort bekämen. Der zweite war: “Kann es sein, dass die Website des Unternehmens gehackt wurde und das Unternehmen davon gar nichts weiß?“.

Einleitung

Ich klickte auf den Link (auch unter der Prämisse zu wissen, dass das Klick wohl mitgeloggt wird). Zu meiner Verwunderung leitete der Link (der zum Transportunternehmen ging) sofort zu einer anderen Seite weiter. Und zwar in ein Unterverzeichnis einer Domain eines Künstlers aus der UK. Mein Gedanke war: “Vermutlich weiß der Künstler auch nicht, dass seine Website gehackt wurde!“

Auf der Unterseite des Künstlers lag dann die eigentliche Website, die eine exakte Kopie der Login-Seite von Apple vortäuschte. Ziel war es also, über mehrere Redirects den User da hin zu leiten, wo er seine Zugangsdaten eingeben soll. Vermutlich um später an seine Kreditkartendaten zu gelangen.

Wen kümmert’s?

Sie denken sich nun wohl: Eine typische Phishing-Mail. Selbst schuld, wer darauf klickt!. Das stimmt wohl (wenn auch nur zum Teil), aber es gibt auch immer zwei Seiten. Denn was ist mit den Websites, die gehackt wurden?

Einige Tage später erhielt ich eine Anfrage einer größeren Werbeagentur, die Ihre Kunden fast ausschließlich mit WordPress bedient. Sie kamen zu mir, weil sie nicht mehr weiter wussten. Google Webmaster Tools gab eine Meldung aus, dass die Seite eines Kunden gehackt wurde. Das ist unschön, denn Google zeigt den Fehler nicht nur in den Webmaster Tools, sondern auch direkt in der Suche selbst an:

This site may be hacked.
This site may be hacked.

Was letztlich das Problem  war, erzähle ich Ihnen am Ende dieses Artikels.

Möglichkeiten, WordPress sicherer zu machen

Die Website des Transportunternehmens lief nicht auf WordPress sondern (vermutlich) über eine (veraltete) Typo3-Instanz. Nichts desto trotz stellte ich mir selbst die Frage: Wie kann man WordPress so sicher machen, dass oben genanntes Szenario hoffentlich nie eintritt?

Dazu gibt es mehrere Möglichkeiten:

1. Ihre Passwörter sind nicht sicher. Ändern Sie sie!

Logisch. Denn ein einfaches Passwort wie etwa 1234 ist nicht sicher. Sicherlich haben Sie schon viele Stories über sichere Passwörter gehört. Meine Empfehlung: halten Sie sich daran!

Daran müssen Sie denken:

  • FTP Passwort ändern,
  • MySQL Passwort ändern,
  • Passwort zum Hosting Provider ändern,
  • Passwort für WordPress ändern.

2. Ihr Benutzername ist nicht sicher. Ändern Sie ihn!

Zum Ändern des Passworts gehört auch der Benutzername. Benutzen Sie auf keinen Fall den Standard-Benutzernamen admin, der von WordPress vergeben wird. Benutzen Sie auch nicht den Domainnamen. Seien Sie ein wenig kreativ. Wenn Ihr Standard-Benutzername bereits admin ist, ändern sie ihn.

Das geht wie folgt:

  1. Loggen Sie sich mit dem Benutzer admin ein.
  2. Erstellen Sie einen neuen Benutzer und geben Sie ihm Admin-Rechte.
  3. Loggen Sie sich als admin aus.
  4. Loggen Sie sich unter dem neuen Benutzernamen ein.
  5. Löschen Sie den admin-Nutzer (Achtung: Sie werden danach gefragt, was mit den Beiträgen des Benutzers gemacht werden soll. Übertragen Sie alle Daten auf den neu erstellten Benutzer).

Das wars.

3. Anzahl der Login-Versuche beschränken.

Brute Force Attacken sind nichts anderes als andauernde Zugriffe auf den Login-Bereich von WordPress. Das ständige „ausprobieren“ von neuen Benutzernamen und Passwörtern führt irgendwann dazu, dass sie erraten werden. Eigentlich kann man gegen Brute-Force Attacken gar nichts machen. Warum? Wenn man von einer befallen wird, muss man warten bis sie von alleine aufhören.

Man kann den Angriff aber ein klein wenig entgegen wirken. Und zwar mit einem sehr genialen Plugin namens Limit Login Attempts.

Mit dem Plugin wird definiert, wie oft man eine fehlerhafte Benutzernamen-Passwort-Kombination eingeben darf bis die Anmelde-Seite gesperrt wird.

Wer Limit Login Attempts nicht vertraut (weil schon länger nicht aktualisiert) dem sei Login LockDown empfohlen.

4. Das Online-Editieren von Plugins und Themes deaktivieren

Ja, Sie lesen richtig: WordPress hat einen Online-Editor mit dem sich WordPress Plugins und Themes direkt aus dem Administrationsbereich editieren lassen. Purer Blödsinn. Zumindest wenn man selbst kein Coder ist oder dieser Editor jeden Tag unbedingt benötigt wird. Schalten Sie Ihn ab. Denn ohne ihn sind Sie besser dran. Vor allem dann, wenn es eine nicht vertrauenswürdige Person geschafft hat, sich auf Ihrer WordPress Oberfläche breit zu machen.

Gehen Sie so vor:

  1. Laden Sie mit einem FTP-Programm Ihrer Wahl die Datei wp-config.php herunter.
  2. Öffnen Sie die Datei und fügen Sie folgende Zeile ein: define( 'DISALLOW_FILE_EDIT', true );.
  3. Laden Sie die Datei wieder hoch.

Fertig.

Wer den zusätzlich den kompletten Update-Mechanismus sperren möchte gibt dazu noch folgende Zeile ein:

define( 'DISALLOW_FILE_MODS',true );

5. Den WP-Admin-Bereich mit einem Passwort schützen.

Fast alle WordPress-Installationen laufen auf einem Apache Webserver. Damit ist es relativ einfach, ein Verzeichnis mit einem Passwort zu schützen. Oft funktioniert das auch über die Weboberfläche der meisten Hosting-Provider. Machen Sie sich schlau, fragen Sie nach und schützen Sie den wp-admin Ordner mit einem Passwort, wenn möglich.

So funktioniert es bei den einzelnen Hosting Providern:

6. Das Ausführen von PHP-Dateien in Unterverzeichnissen verhindern.

Wenn Ihr Webserver auch mit Apache betrieben wird, können Sie das Ausführen von PHP-Dateien in Unterverzeichnissen deaktivieren. Nicht benötigt wird das z.B. im wp-content/uploads/ Verzeichnis.

Erstellen Sie dort eine Datei namens .htaccess und fügen Sie folgenden Inhalt ein:

<Files *.php>
deny from all
</Files>

Das wars. Jetzt können eingeschleuste PHP-Dateien dort nichts mehr ausrichten.

7. Menschliches Versagen und kein Verständnis von Sicherheit

Die besten Sicherheitstipps bringen nichts, wenn Sie als Mensch versagen. Leider ist das oft der Fall und es war letztlich auch so bei der Agentur, die mich angerufen hat. Ein Blick in das FTP-Verzeichnis und ich sah, wie eine WordPress-Backup-Datei zum Download im Webverzeichnis lag. Einfach so.

Und Sie vermuten richtig: dort drin lagen alle Dateien. Angefangen von der wp-config.php, die die Zugangsdaten zur Datenbank, die Datenbank selbst sowie (vermutlich) auch die FTP-Zugangsdaten enthielt.

Das gab den Hackern direkt Zugriff zum FTP-Verzeichnis. Letztlich wurde „nur“ eine .gif-Datei hochgeladen, die als Bild verkleidet, schadhaften PHP-Code enthielt der wiederum Dateien im gesamten Webverzeichnis streute. Solche Dateien zu finden kann mitunter sehr aufwändig werden. Denn er kann sich überall befinden. Als Bilddatei versteckt, in einem weit verzweigten Unterverzeichnis, in einem Theme, einem Plugin oder sogar im WordPress-Code selbst. Würden Sie dann noch einem automatischen Update von WordPress vertrauen? Ich nicht.

Einer der wichtigsten Punkte überhaupt ist deshalb:

8. Bleiben Sie Up-To-Date

Mit WordPress 3.7 erhielt das populäre CMS eine geniale Funktion: Automatische Updates. Das ist einerseits super, denn Sie erhalten sofort immer die aktuellsten Sicherheits-Updates automatisch. Auf der anderen Seite könnte es dazu führen, dass manche Plugins und/oder Themes nicht mehr funktionieren. Stellen Sie deshalb genauer ein, was WordPress tun soll. So ist es möglich, die automatischen Updates so einzustellen, dass nur sicherheitsrelevante Updates durchgeführt werden.

9. Vertrauen

Sie kaufen keine Themes oder Plugins oder downloaden diese sogar irgendwo aus dem Internet? Seien Sie vorsichtig. Denn nicht alle kostenfreien Plugins und Themes sind komplett schadfrei. Installieren Sie also nur Software von Unternehmen, denen Sie vertrauen (ich zähle hoffentlich dazu :-)).

10. Kaufen Sie sich einen guten Webspaces eines vertrauenswürdigen Hosters.

Ich benutze Beispielsweise uberspace. Die Jungs sind genial, schlau und immer hilfsbereit zugleich. Uberspace sichert alles, was möglich ist, per SSL ab. E-Mails und SFTP. Alles kein Problem. Auch Backups werden automatisch eingerichtet. Was will man mehr?

11. Verwenden Sie Sicherheits-Schlüssel

In der wp-config.php bietet WordPress die Möglichkeit, so genannte Security Keys anzugeben. Sie werden unter anderem für Cookies benötigt.

Gehen Sie so vor:

  1. Öffnen Sie Ihr FTP-Programm und laden Sie die wp-config.php herunter.
  2. Besuchen Sie folgende Seite: https://api.wordpress.org/secret-key/1.1/salt und kopieren Sie deren Inhalt in die wp-config.php. Vergessen Sie nicht, die alten Daten zu löschen bzw. zu überschreiben.
  3. Laden Sie die Datei wieder per FTP in Ihr Web-Verzeichnis hoch.

12. Umbenennen des Datenbank-Präfixes.

Standardmäßig versieht WordPress alle Datenbanken mit dem Präfix wp_. Ändern Sie das bevor Sie WordPress installieren. Und zwar ebenfalls in der wp-config.php.

Ändern sie dazu die Zeile:

$table_prefix = 'wp_';

zu Beispielsweise:

$table_prefix = 'm24v_';

Ändern Sie dies nicht nachträglich. Es sei denn, Sie wissen, was Sie tun!

13. Verschieben Sie die wp-config.php Datei

Ja, das ist möglich. WordPress kann diese Datei auch finden, wenn sie ein Verzeichnis über WordPress liegt. Mache Webhoster bieten auch Zugriff oberhalb des eigenen Web-Verzeichnisses an. Machen Sie davon gebrauch und versehen Sie Datei mit den Rechten 600.

wp-config.php ein Verzeichnis über WordPress
wp-config.php ein Verzeichnis über WordPress

14. Datei- und Verzeichnisrechte überprüfen

Nicht alle Dateien und Verzeichnisse müssen für Jedermann erreichbar sein. In der Regel brauchen Dateien (unter Unix) die Rechte 644 oder 640, Verzeichnisse 755 oder 750.

In der Regel kann jedes FTP-Programm auch die Rechte von Dateien und/oder Verzeichnissen ändern. Sie können hier mehr über Unix-Dateirechte erfahren.

15. SSL für den Admin-Bereich erzwingen

WordPress hat auch dafür eine Lösung parat:

  1. Laden Sie die Datei wp-config.php herunter.
  2. Öffnen Sie die Datei mit einem Texteditor und fügen Sie die Zeile
    define( 'FORCE_SSL_LOGIN', true );
    ein um nur das Login-Formular mittels SSL zu verschlüsseln und/oder fügen Sie die Zeile
    define('FORCE_SSL_ADMIN', true);
    ein um den kompletten Admin-Bereich mittels SSL zu verschlüsseln.
  3. Laden Sie die Datei wieder hoch.

Warum ist das wichtig? Sie entgehen dann den so genannten Man-in-the-middle Attacken. Das sind Angriffe bei denen ein Angriffet zwischen Ihnen und dem Server steht. Die Verbindung wird sozusagen über eine Dritte Person (Man in the middle) geleitet, der dann Ihre Daten abgreifen und/oder verändern kann.

Zwei Dinge zum Thema SSL:

  1. Wenn Sie nicht über ein eigenes SSL-Zertifikat verfügen wird oben genanntes nicht funktionieren.
  2. Es sei denn, Ihr Webhoster verschlüsselt zwar, aber nur mit einem selbst signierten Zertifikat. Besuchen Sie dann Ihre Website werden viele Browser Sie daran hindern wollen. Firefox bringt gar die Meldung, dass der Verbindung nicht vertraut wird. Sie können das getrost ignorieren, denn ich hoffe mal, dass Sie Ihrem eigenen Webhoster vertrauen 😉
    Die meisten Browser erlauben das Hinzufügen von Ausnahmeregeln.
Firefox SSL Fehler
Firefox SSL Fehler

16. Crawling von Verzeichnissen verbieten

Auch das ist wichtig. Je weniger ein potentieller Angreifer weiß, umso besser.

Zum einen können Sie mittels robots.txt ganze Verzeichnisse ausschließen, die von Suchmaschinen nicht durchsucht werden dürfen (ob die das dann auch wirklich tun ist allerdings nicht sicher).

Eine robots.txt sieht z.B. so aus:

User-agent: *
 
Disallow: /feed/
Disallow: /trackback/
Disallow: /wp-admin/
Disallow: /wp-content/
Disallow: /wp-includes/
Disallow: /xmlrpc.php
Disallow: /wp-

Zum anderen können Sie verhindern, dass der Webserver überhaupt irgendwelche Dateiverzeichnisstrukturen ausgibt. Das geht über die .htaccess Datei, die Sie ja bereits kennen.

Im Hauptverzeichnis (da wo WordPress installiert ist), erstellen oder editieren Sie sie und geben zusätzlich folgende Zeile mit ein:

Options All -Indexes

17. TRACE Methode verhindern

HTTP in der Version 1.1 hat einige Features, die die Version 1.0 nicht hatte: Es ist Webdesignern möglich, Daten direkt „in das Web“ per PUT-Befehl hochzuladen und per „DELETE“ zu löschen. Um nachvollziehen zu können ob Daten wirklich hochgeladen bzw. gelöscht werden, gibt es die TRACE Methode, die allerdings auch zur so genannten Cross-Site-Tracing-Attacke ausgenutzt werden kann (Details bei Wikipedia). Sie deaktivieren TRACE komplett mit folgenden Zeilen in der .htaccess-Datei:

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{REQUEST_METHOD} ^TRACE
	RewriteRule .* - [F]
</IfModule>

18. Nützliche Plugins und Services nutzen

18.1. Service: Cloudflare

Aktuell teste ich selbst den Dienst Cloudflare, der zuerst einmal mehr Speed auf die Seite bringen sollte. Der Dienst kann aber noch mehr (Angaben vom Anbieter 1):

  • Sicherung gegen DDoS Attacken
  • Sicherung gegen Inhaltsklau
  • Sicherung gegen Spam-Kommentare
  • Ganze IP-Adressen oder Adressgruppen aussperren
  • etc.

Das kleinste Paket von CloudFlare ist kostenlos.

18.2. Plugin: iThemes Security (zuvor: Better WP Security)

Glaubt man den Statistiken, ist es eines der am häufigsten heruntergeladenen Plugins zum Thema WordPress-Sicherheit.

Die Plugin-Seite erzählt von folgenden Funktionen:

  • Ändert die URLs zum WordPress Dashboard
  • Kann das Login für einen bestimmten Zeitbereich komplett sperren („Away-Mode“).
  • Entfernt den „Generator“ HTML-Tag im Header (falls vorhanden9
  • Ändert die ID des Benutzers mit der ID 1 (meist „admin“).
  • Nennt den Benutzernamen „admin“ um.
  • Ändert das Präfix der Datenbank von „wp_“ zu was anderes.
  • Und vieles mehr.

Downloads:

18.3. Plugin: Bulletproof Security

Dieses Plugin ist nicht so professionell aufgemacht wie iThemes Security, bietet aber ähnlichen Schutz. Vor allem aber gegen „XSS, RFI, CRLF, CSRF, Base64, Code Injection und SQL Injection hacking“, so die Plugin-Seite.

Download:

18.4. Plugin: WordFence

Wenn Sie vermuten, dass die eigene WordPress-Seite schon irgendwie infiziert ist, könnte das Plugin WordFence helfen. Es scannt den Code serverseitig und gleicht ihn mit dem ursprünglichen WordPress-Code ab. Selbes gilt auch für Themes und Plugins, die sich im WordPress.org-Verzeichnis befinden. Auch soll es die Seite 50x schneller machen (was ich allerdings nicht glaube).

Download:

18.5. Plugin: Hide My WP

Aufmerksam wurde ich auf das Plugin über CodeCanyon, da ich dort auch selbst sehr aktiv bin.

HideMyWP versucht, ähnlich wie iThemes Security, die eigenen WordPress-Installation zu verstecken, so dass von aussen nicht erkennbar ist, ob die Website mithilfe von WordPress läuft. Damit soll es den Hackern erschwert werden zu erkennen, mit welchem System sie es zu tun haben.

Download:

  1. Hardening WordPress (engl.) aus der offiziellen Dokumentation
  2. Lock Down WordPress (eBook)
  3. Secure WordPress Advanced (engl.)

Zusammenfassung

Ich hoffe, ich konnte einen „kleinen“ Einblick in die Welt der Sicherheit von WordPress geben. Welche Tipps und Möglichkeiten man umsetzt muss letztlich jeder für sich selbst entscheiden. Einige Dinge funktionieren so vielleicht auch gar nicht, weil sie so nur für den Apache Webserver anwendbar sind.

Sicherlich muss man aber auch keine Festung aus WordPress machen, denn es ist ja bereits sicher. Ich erlaube mir sogar zu sagen, dass WordPress eines der sichersten Content-Management-Systeme überhaupt ist. Der Grund dafür liegt wohl auch in der großen Community, die aktiv hilft, Sicherheitslücken aufzudecken und zu schließen.

Voraussetzung ist natürlich: WordPress sollte immer aktualisiert werden, falls irgendwie möglich. Denn nur mit den neuesten Sicherheitsupdates kann man sich auch einigermaßen sicher fühlen.

Trotzdem gilt: absolute Sicherheit gibt es nicht. Wenn sie jemand unbedingt hacken will, wird er das über kurz oder lang vielleicht sogar schaffen. Vielleicht, weil er/sie es lange genug probiert oder sei es aus Ihrer eigenen Unachtsamkeit.

Quellen

  1. https://www.cloudflare.com/plans

Schreiben Sie einen Kommentar