WordPress Sicherheit #1 – System-Check mit Ninja Scanner

WordPress Sicherheit – #1 – Was macht man eigentlich, wenn die WordPress Seite gehackt wird und über die Seite massenweise Spam versendet wird? Es passiert immer mal wieder dass WordPress-Webseiten „gekapert“ werden und von Web-Piraten genutzt werden um ihr Unwesen im Netz zu treiben.

Hierbei werden von eurer E-Mail Adresse Spam Mails versendet – etwas schlimmeres kann eigentlich gar nicht passieren denn was da im Netz passiert bleibt nie unentdeckt. Wenn von eurem Server Spam Mails ausgehen, kann es schnell passieren dass er auf einer Blacklist und eure Mails fortan im Spam-Ordner der Empfänger landet oder sogar schon vorher ausgefiltert wird.

Im Folgenden möchte ich euch eine Handlungsanleitung zur Hand geben, was ihr in einem solchen Fall machen könnt und meiner Meinung nach auch solltet.

Inhalt:
1. Das Leck ausfindig machen
2. Die üblichen Verdächtigen
3. WordPress scannen mit dem Ninja Scanner
4. Infizierte / Verdächtige Dateien wiederherstellen
5. WordPress Sicherheit mit Security Ninja

1. Das Leck ausfindig machen

Als erste müsst ihr rausfinden wie und wo der Hacker bzw. sein Bot in euer System eindringen konnte. Sobald ihr es gefunden habt werden sort wahrscheinlich angepasste Dateien vorliegen die wieder gegen das original auszutauschen sind. Es kann auch sein dass zusätzliche Datei ins System geschleust wurden. Diese müssen auch gefunden und gelöscht werden.

2. Die üblichen Verdächtigen

Es gibt einige, wenn nicht sogar zahlreiche, bekannte Schlupflöcher wie automatisierte Skripte einen Weg in dein WordPress System finden. Diese sind die üblichen Verdächtigen:

  1. Es wird eine alte Version von WordPress verwendet – Je älter eine Version ist, desto wahrscheinlicher ist, dass sich bestimmte Sicherheitslücken zu der Version rumsprechen und entsprechende Skripte im Netz umschwirren um eine Seite zu infizieren.
  2. Alte Plugins oder Themes – Hier besteht das gleiche Problem wie bei der WordPress installation selbst. Alle Komponenten des Systems sollten immer up to date sein. Plugins die nicht mehr aktualisiert werden sollten gegen alternative Plugins ausgetauscht werden.
  3. Formulare – Kontakt & Kommentar- oder Bewertungsformulare sind beliebte Eingänge für ungebetene Gäste. Diese kann man zum Beispiel mit Captchas schützen.
  4. Weitere Software Installationen – Ihr habt auf dem gleichen Webspace noch einen Statistik Software von anno pief? Besser weg damit, oder auf eine anderen Server installieren. Mindestens aber auf einem getrennten FTP Zugang und eigener Sub-Domain.

3. WordPress scannen mit dem Ninja Scanner

Wenn wir wissen wollen, woher das Problem kam, oder wenigstens wo der Schadcode nun liegt brauchen wir Tools um unsere WordPress-installation zu prüfen. Das erste Tool, das ich euch vorschlagen möchte ist der Ninja Scanner.

Mit dem Ninja Scanner könnt ihr mit einem Klick eure Seite prüfen. Das Plugin ist kostenlos und euer erste Schritt zu mehr Durchblick als Grundlage für eine erhöhte WordPress Sicherheit.

Wie man sieht kann man die Scans (bei der kostenpflichtigen version) auch automatisieren. Preislich liegen wir bei 19.5 $ / Jahr für die Einzellizenz. Bei Mehrfachlizenzen sinkt der Preis ab bis auf 5 $ / Jahr (bei +50 Lizenzen) was ein fairer Preis ist.

Wordpress Sicherheit #1 - System-Check mit Ninja Scanner

Der Scan geht recht schnell von statten (je nach Seitengröße natürlich) und man bekommt eine Liste von verdächtigen Dateien angezeigt. Ist die Meldung rot markiert, sollten die Dateien schnell wiederhergestellt werden.

Von oben nach unten bekommt ihr, sofern schlimmstenfalls vorhanden, verdächtige WordPress core Dateien, verdächtige WordPress Plugin Dateien, verdächtige WordPress Theme Dateien und sonstige Dateien und Ordner angezeigt. Abgerundet wird das ganze von einem Blick auf Ant-Malware Software Dateien und einem File-Snapshot mit einem Blick auf neue und gelöschte Dateien, seit dem letzen Scan. Definitiv ein cooles und kostenloses Plugin.

4. Infizierte / Verdächtige Dateien wiederherstellen

4.1 WordPress core files integrity
Dieser erste Punkt in der Liste zeigt Dateien an, die im Haupt System von WordPress verändert wurden. Sofern ihr die angezeigten Dateien nicht zufällig selber angepasst habt solltet ihr das ganze zumindest einmal prüfen. Hierfür könnt ihr eine Datei in der Liste anklicken, was dazu führt dass zusätzliche Buttons angezeigt werden. Mit einem Klick auf „View Change“ könnt ihr sehen was sich verändert hat. Außerdem bekommt ihr neben den Buttons auch angezeigt, wann die entsprechende Datei geändert wurde. Wenn die Änderung weit in der Vergangenheit liegt ist es z.B. recht unwahrscheinlich, dass das der Grund für den Spam-Versand war.

Sofern da aber Dateien geändert wurde sollte der WordPress core grundsätzlich einmal frisch installiert und der Scan noch einmal neu durchgeführt werden. Insbesondere wenn es bereits eine neue WordPress Version gibt.

Hierfür geht ihr auf Dashboard > Aktualisierungen und klickt dort auf „erneut installieren“.

4.2 Plugin files integrity
Bei den Plugins könnt ihr ähnlich vorgehen. Wenn es viele Dateien sind, muss man jede Datei einzeln wiederherstellen, was länger dauern kann. Bei Plugins kann es sich dann lohnen es zu löschen und neu zu installieren, da das Wiederherstellen einer Datei ca. 30 Sekunden dauert.

Wenn es sich um ein ungenutztes oder aber ein Plugin handelt, das lange nicht mehr aktualisiert wurde sollte es gelöscht werden.

Dann kann es auch passieren, dass ein Plugin nicht gleich vom System erkannt wird. Wenn man z.B. ein kostenpflichtiges / Premium Plugin verwendet, wird dieses nicht automatisch vom Ninja erkannt und man muss sich erst einmal in das Thema einlesen.

Wer diesem Link folgt, kann sich dort schlau machen:
https://blog.nintechnet.com/ninjascanner-powerful-antivirus-scanner-for-wordpress/#integrity

Man muss das Plugin einmal neu von der Seite runterladen, die Zip Datei in dem Format das dort gezeigt wird benennen und dann in den Ordner /wp-content/ninjascanner/local hochladen.

Am Beispiel des Plugins No Category Base (WPML) geht man also zuerst auf doie Plugin Seite: https://de.wordpress.org/plugins/no-category-base-wpml/ und lädt dort die aktuelle Version des Plugins runter. Wenn man dort auf der Seite auf den Reiter Entwicklung klickt sieht man auch welche Version die aktuelle ist. In diesem Fall ist es aktuell die Version: 1.3.

Das heißt also ich muss die geladene Datei mit dem Namen no-category-base-wpml.zip umbenennen in no-category-base-wpml.1.3.zip und dann in den Ordner /wp-content/ninjascanner/local hochladen, damit der Ordner beim Scan berücksichtigt werden kann.

Hier sehen wir noch, dass das Plugin nicht ausgelesen bzw. gescannt werden kann:

20 - WordPress Sicherheit - Ninja Scanner - Scan - Plugins-Liste

20 – WordPress Sicherheit – Ninja Scanner – Scan – Plugins-Liste

Nachdem man das Plugin mit dem angepassten Dateinamen in den besagten Ordnet lädt kann es auch gescannt werden.

4.3 Theme files integrity
Auch hier ist wieder das gleiche Spiel – wie bei den Punkten zuvor. Alles was verdächtig bzw. rot ist sollte geprüft, gelöscht, austauscht oder in Karantäne verschoben werden.

Man muss i Endeffekt das Theme einmal neu von der Seite runterladen, die Zip Datei in dem Format das dort gezeigt wird benennen und dann in den Ordner /wp-content/ninjascanner/local hochladen. Bei Divi nenne ich die Datei z.B.: Divi.3.11.1.zip

4.4 Files and folders
Hier werden auffällige versteckte, ausführbare sowie nicht lesbare Dateien / Ordner und symbolic links (was auch immer das sein soll) angezeigt.

4.5 Anti-malware
Ja auch in euren Schutz-Programmen kann der eine oder andere Wurm drin stecken. Hier bekommt ihr angezeigt, um welchen Wurm es sich handelt und wie viele davon an Bord sind.

Zusätzliche Funktionen der Premium Version:
– Bearbeitung per über Kommandozeile / WP-CLI Integration
– Regelmäßige Scans
– VIP Support

5. WordPress Sicherheit mit Security Ninja

Das Plugin Security Ninja ist hervorragend dafür geeignet um die grundsätzliche Sicherheit der WordPress Seite transparent anzeigen zu lassen. Aktuell werden bei der kostenlosen Version hierbei 45 verschiedenen Kriterien geprüft.

Hat das System die Prüfung bestanden wird es grün angezeigt, und dann gibt es noch orangene und rote Meldungen, wenn eine potentielle Gefahr entdeckt wurde. Man sollte hier also mindestens alle roten Punkte so lange bearbeiten bis die Gefahr gebannt ist. Das kann natürlich, je nach Anzahl der Problem-Zonen einiges an Zeit verschlingen.

Weiterführende Links:
Kostenlose Firewall: „Anti-Malware Security and Brute-Force Firewall“ von Eli Scheetz:
https://de.wordpress.org/plugins/gotmls/
wp-hostvergleich.de – „WordPress gehackt?“
https://wp-hostvergleich.de/wordpress-gehackt/

Weitere Infos zu NinjaScan:
Wordpress Plugin Seite: https://de.wordpress.org/plugins/ninjascanner/
NinTechNet Webseite: https://nintechnet.com/ninjascanner/

Vermeidung von Clickjacking und Phishing durch korrekte Security Header Einstellungen

Im heutigen digitalen Zeitalter sind Websites ständig Angriffen ausgesetzt. Eine gängige Bedrohung ist Clickjacking, bei dem Angreifer unsichtbare Frames auf einer Website einfügen, um die Benutzer zu täuschen und sie dazu zu bringen, unbeabsichtigt Aktionen auf der Seite auszuführen. Eine effektive Methode, um Clickjacking zu verhindern, ist die Verwendung von sicheren HTTP-Headern. In diesem Beitrag werden wir erläutern, wie du durch die korrekte Konfiguration von Security Headers deine Website vor Clickjacking und anderen Bedrohungen schützen kannst.

1. Strict-Transport-Security

HTTP Strict Transport Security (HSTS) ist eine großartige Funktion, um die Implementierung von TLS zu verstärken und den User Agent dazu zu bringen, nur HTTPS-Verbindungen zu verwenden. Dies schützt vor Man-in-the-Middle-Angriffen und sichert die Kommunikation zwischen deinem Server und den Besuchern.

Empfohlene Einstellung:

Strict-Transport-Security: max-age=31536000; includeSubDomains

Fehler laut securityheaders.com:

Strict-Transport-Security HTTP Strict Transport Security is an excellent feature to support on your site and strengthens your implementation of TLS by getting the User Agent to enforce the use of HTTPS. Recommended value "Strict-Transport-Security: max-age=31536000; includeSubDomains".

Optionen:

  • a) Sucuri: Sucuri bietet eine einfache Möglichkeit, HSTS hinzuzufügen, besonders bei der Verwendung von WordPress. Weitere Informationen findest du im wpbeginner Blog.
  • b) Cloudflare: Cloudflare bietet ebenfalls eine einfache Integration von HSTS. Sie stellen entsprechende Einstellungen in ihrer Dashboard-Oberfläche zur Verfügung.
  • c) Custom htaccess: Wenn du deine eigene .htaccess Datei bearbeiten möchtest, füge die folgende Zeile hinzu:

In der .htaccess-Datei (Apache Server):

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

In NGINX Umgebungen:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

2. Content-Security-Policy

Content Security Policy (CSP) ist ein wirksames Mittel, um deine Website vor Cross-Site-Scripting (XSS)-Angriffen zu schützen. Durch das Whitelisten von vertrauenswürdigen Quellen für Skripte und andere Inhalte kannst du verhindern, dass schadhafter Code geladen wird.

Empfohlene Einstellung:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';

Fehler laut securityheaders.com:

Content-Security-Policy Content Security Policy is an effective measure to protect your site from XSS attacks. By whitelisting sources of approved content, you can prevent the browser from loading malicious assets.

In der .htaccess-Datei (Apache Server):

Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';"

In NGINX Umgebungen:

add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';";

3. X-Frame-Options

Der X-Frame-Options Header sorgt dafür, dass deine Website nicht in einem Frame auf anderen Seiten angezeigt werden kann. Dies schützt vor Clickjacking-Angriffen, bei denen Benutzer durch unsichtbare Frames manipuliert werden können.

Empfohlene Einstellung:

X-Frame-Options: SAMEORIGIN

Fehler laut securityheaders.com:

X-Frame-Options X-Frame-Options tells the browser whether you want to allow your site to be framed or not. By preventing a browser from framing your site you can defend against attacks like clickjacking. Recommended value "X-Frame-Options: SAMEORIGIN".

In der .htaccess-Datei (Apache Server):

Header always set X-Frame-Options "SAMEORIGIN"

In NGINX Umgebungen:

add_header X-Frame-Options "SAMEORIGIN";

4. X-Content-Type-Options

Der X-Content-Type-Options Header verhindert, dass der Browser den MIME-Typ von Dateien errät. Durch diese Einstellung wird sichergestellt, dass der Browser den deklarativen Content-Type verwendet und keine gefährlichen Inhaltsarten versehentlich interpretiert.

Empfohlene Einstellung:

X-Content-Type-Options: nosniff

Fehler laut securityheaders.com:

X-Content-Type-Options X-Content-Type-Options stops a browser from trying to MIME-sniff the content type and forces it to stick with the declared content-type. The only valid value for this header is "X-Content-Type-Options: nosniff".

In der .htaccess-Datei (Apache Server):

Header always set X-Content-Type-Options "nosniff"

In NGINX Umgebungen:

add_header X-Content-Type-Options "nosniff";

Zusammenfassung: Alle empfohlenen Header-Einstellungen

Hier sind alle Sicherheits-Header, die du in deiner .htaccess oder NGINX-Konfiguration einfügen kannst, um Clickjacking und andere Angriffe zu verhindern:

Für die .htaccess-Datei (Apache Server):

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header set Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"

Für NGINX Server:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';";
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";

Ressourcen