Zum Inhalt springen

Wir erklären wie IT funktioniert

  • Office
  • Linux
  • Sicherheit
  • Windows
Wir erklären wie IT funktioniert

Malware in WordPress entfernen

Wenn eine WordPress-Site gehacked wurde, ist das in aller Regel sehr ärgerlich. Die Website funktioniert dann oft nicht mehr richtig und im schlimmsten Fall wird der eigene Webserver als Virenschleuder verwendet. WordPress Plugins zur Entfernung von Malware helfen leider oft nicht weiter. In diesem Howto beschreibe ich daher einen manuellen Weg, wie man Schad-Software oder Malware aus WordPress entfernen kann.

Für alles Folgende braucht man den Zugriff auf den Webserver. In unserem Fall ist das Linux.

Hinweis: Wer keinen direkten Shell-Zugriff auf seinen Webserver hat, der sollte sich den kompletten Dateipfad bzw. Ast mit den WordPress-Dateien herunterladen und anschließend die Schritte am eigenen PC durchführen.

Inhalt

  • Ausgangs-Situation
  • Wie Haker (hier) Schad-Software platziert haben:
  • Wie sieht Malware in WordPress aus?
  • Der Mechanismus der Malware
  • Auffinden der Malware in WordPress:
  • Konkretes Vorgehen zur Entfernung der Malware
    • Eigentliche Schadsoftware entfernen
    • @include-Anweisungen finden und entfernen
    • So kann man die  Dateien finden von der aus die Malware aufgerufen wird:
  • Alternativen zur manuellen Entfernung:
  • Plugins zur Schadensbegrenzung und Entfernung
  • Wie kam die Malware dorthin?
  • Fazit zum Thema Malware entfernen

Ausgangs-Situation

In unserem Fall war die betroffene Website für kurze Zeit weiß, d.h. ohne Inhalt. Eine komplette De-Aktivierung und anschließende Aktivierung aller WordPress-Plugins brachte den Content, d.h. die Blog-Beiträge wieder zurück. Allerdings traten immer wieder sporadische Warnungen von Viren-Scannern auf und die Zugriffszahlen halbierten sich innerhalb von wenigen Tagen. Hier stimmte offenbar etwas nicht.

Die Vermutung lag also nahe, daß auf der Website irgendwo eine Malware bzw. Schadcode von einem Hacker platziert worden war.

Wie Haker (hier) Schad-Software platziert haben:

Um die Malware zu finden, muss man sich ein wenig in den Hacker hinein versetzen.

Er will in der Regel seinen Code möglichst lange unentdeckt wissen. Dabei gibt er sich (mehr oder weniger) Mühe, seinen Hack unentdeckt zu lassen. Sein Quell-Code wird also eher schlecht zu lesen und eher kryptisch aussehen.

Im Gegensatz dazu ist der Quell-Code eines WordPress-Entwicklers in der Regel so geschrieben, daß ihn ein fachkundiger PHP-Entwickler gut lesen kann. Das ist exakt das Gegenteil von der Intention eines Hackers.

Wie sieht Malware in WordPress aus?

In unserem Fall sah der fragliche Code so aus:

index.php im Root-Verzeichnis:

/*48365*/
@include "\057var\057www\057vho\163ts/\142ite\156o.c\157m/h\164tpd\157cs/\167p-c\157nte\156t/.\061c4c\063535\056ico";

/*48365*/

Die Zeile würde im Klartext lauten

@include \var\www\vhosts\domain.tld\httpdocs\wp-content\.irgendwas.ico

Der eigentliche Schadcode liegt dann in eben dieser Datei \var\www\vhosts\domain.tld\httpdocs\wp-content\.irgendwas.ico

Der Inhalt dieser Schadcode-Datei sieht dann bspw. so aus:

<?php
$_89elm2n = basename/*d*/(/*hn4mp*/trim/*ab4wn*/(/*9ujf*/preg_replace/*lqwxr*/(/*5xf*/rawurldecode/*kzjbg*/(/*e6*/"%2F%5C%28.%2A%24%2F

oder so

<?php
$_19gi0c = basename/*qv*/(/*l2*/trim/*vqjr*/(/*i9*/preg_replace/*i4o*/(/*4zx*/rawurldecode/*4*/(/*roi2*/"%2F%5C%28.%2A%24%2F"/*72as*/)/*5p*/, '', __FILE__/*ihz*/)…….

Der Mechanismus der Malware

Der Entwickler der Malware legt also seine kryptische Datei an irgendeiner bestimmten Stelle im Dateisystem des Webservers ab. Diese Datei beginnt in der Regel mit einer Variablen-Zuweisung und dem Schlüsselwort „basename“ oder „base64“.

Diese kryptische Datei wiederum soll von möglichst vielen Stellen im PHP-Quell-Code aufgerufen werdeb. Dazu wird vom Eindringling ein „Einzeiler“ mit Hilfe eines @include-Statements in eine bestehende  PHP-Datei von WordPress eingefügt. Diese Zeile kommt also etwa in eine oder mehrere bestehende index.php Datei in der betroffenen WordPress-Installation.

Auch lesenswert:
Maßnahmen zum Schutz vor Computerüberhitzung
Powered by Inline Related Posts

Auffinden der Malware in WordPress:

Bei der weiteren Suche geht es erst einmal darum, diese schadhaften Dateien zu finden. Außerdem müssen wir den Ort in der vorhandenen Anwendung (hier WordPress) finden, von wo aus die Schadsoftware ausgeführt bzw. aufgerufen wird. Dies erfolgt in der Regel über eine @include Anweisung in php.

Vorgehen: Wir suchen zuerst nach der eigentlichen Datei mit dem Schadcode. Dies sind in der Regel wenige Dateien, manchmal sogar nur eine einzige Datei. Danach machen wir uns auf die Suche nach den Orten im PHP-Quell-Code, in dem diese zuvor entfernte Schadsoftware-Datei aufgerufen wird. Das sind häufig mehrere Stellen, oft sogar viele.

Konkretes Vorgehen zur Entfernung der Malware

Eigentliche Schadsoftware entfernen

Zuerst suchen und entfernen wir also die eigentliche Schadsoftware:

Um die schadhafte Datei zu finden sichen wir rekursiv durch die Inhalte der lesbaren Dateien und suchen mit grep nach den PHP-Schlüsselwörtern, die der Hacker in seinem Quell-Code nutzt:

Das sind der Reihe nach: basename, preg_replace, rawurlencode und später  noch “__FILE__”

Wir suchen deshalb rekursiv nach diesen Begriffen. Wichtig dabei ist, daß wir uns nicht auf einen Dateitypen festlegen. Der Angreifer verwendet hier in unserem Beispiel absichtlich die Endung .ico (Datei-Endung für Icon-Grafiken) und einen Punkte am Anfang des Dateinamens, was die Datei unter Linux ein weniger schwerer zu finden macht. Die Datei wird dann mit einem “ls -la” nicht angezeigt.

grep -iR basename *| grep -i replace | grep -i rawurldecode

Hinweis: Den “*” kann man bei grep im Zusammenspiel mit der Option “-R” (für rekursiv) weg lassen.

oder etwas ausführlicher noch mit der Suche nach dem Schlüsselwort “__FILE__”

 grep -iR basename | grep -i replace | grep -i rawurldecode | grep -i "__FILE__"

Die so ermittelten Treffer löschen wir oder noch besser: Wir verschieben die Datei(en) in einer separates Verzeichnis, um sie ggf. später noch weiter zu untersuchen.

@include-Anweisungen finden und entfernen

Im zweiten Schritt machen wir uns nun an das Suchen und Entfernen der Aufrufe der Schadsoftware in WordPress. Wir suchen also die @include-Anweisungen in PHP:

Die Anweisung @include kommt in PHP in legitimer Software sehr häufig vor. Allerdings hat ein normaler Programmierer selten das Problem, daß er in seinem Quellcode lange Dateinamen aufruft. Das würde ein Entwickler eher über eine Variable in PHP lösen. Um also die @Include Anweisungen zu finden, schauen wir uns nochmal die Zeile an, die der Angreifer in unserem Code platziert hat:

@include "\057var\057www\057vho\163ts/\142ite\156o.c\157m/h\164tpd\157cs/\167p-c\157nte\156t/.\061c4c\063535\056ico";

Das liest sich schon wesentlich schlechter und ist für einen Laien kaum verständlich. Letzteres ist hier selbstverständlich vom Angreifer beabsichtigt.

So kann man die  Dateien finden von der aus die Malware aufgerufen wird:

Wir suchen nach dem Begriff “@include” und danach nach dem “\”, der in dem Include-Statement häufiger vorkommt.

cd /var/www/domain.tld

grep -iR "@include" * | grep -iF '\'

Hinweis: Die ‘ am Ende statt ” sind richtig und wichtig

Auch lesenswert:
Welche Outlook Version habe ich: Eine einfache Anleitung zur Bestimmung Ihrer Version
Powered by Inline Related Posts

Man wird so noch die eine oder andere CSS Datei finden, die uns hier nicht interessiert.

Daher könnte man die Suche auf *.php Dateien einschränken:

 grep -iR "@include" *.php | grep -iF '\' # die ' am Ende statt " sind richtig und wichtig

In allen Dateien die hier gefunden werden, muss nun die Zeile bzw. die Zeilen mit den @include Statement entfernt werden.

Sofern das immer der gleiche Eintrag ist, dann geht das z.T. automatisch mit awk oder sed. In aller Regel wird der Hacker aber das so genannte Encoding (hier das Ersetzen der Zeichen und Buchstaben durch ASCII Code) variieren, so daß man häufig dazu gezwungen ist, den Schadcode bzw. die Malware von Hand zu entfernen.

Wir müssen also die gefundenen php-Dateien von Hand editieren, die betroffene Zeile löschen und die Datei anschließend speichern. Das erledigen wir mit „vim“ oder nano.

Tipp: Sofern möglich sollte man anschließend die Datei mit dem folgenden Kommando für generelle Schreibzugriffe sperren:

chmod 555 index.php

ls – la index.php

Alternativen zur manuellen Entfernung:

Wer sich sicher ist, daß in seinen Blog-Einträgen bzw. in der WordPress-Datenbank selbst kein Schadcode enthalten ist, der kann die WordPress-Dateien sowie das WordPress-Theme und die Plugins komplett neu installieren bzw. über die bestehenden Dateien kopieren und damit überschreiben. Damit wird dann in der Regel auch die schadhafte @include Anweisung entfernt.

Achtung: Die eigentliche Schad-Software wird man so aber nicht 100% los. Die Malware-Datei – in unserem Fall die Datei „.irgendwas.ico“ sollte man unbedingt vorher entfernen.

Plugins zur Schadensbegrenzung und Entfernung

Der Vollständigkeit halber sind hier noch zwei Plugins, die WordPress-Administratoren helfen, Schadcode zu finden. – In den Fällen, die wir hier gezeigt haben, konnten die Security-Plugins allerdings die Malware in WordPress nicht finden.

  • Sucuri
  • Gotmls

Wie kam die Malware dorthin?

Wir haben uns in diesem Tutorial darauf konzentriert, die Malware möglichst sicher zu entfernen. Als Website-Betreiber möchte man dieses aufwändige Unterfangen allerdings nicht noch mal machen müssen. Daher sollte man im zweiten Schritt unbedingt herausfinden, wie die Malware auf den Server gekommen ist.

Dabei hilft es sehr, wenn man seine WordPress-Installation mit einem oder mehreren Security-Plugins – wie etwa Better-WP-Security schützt.

Fazit zum Thema Malware entfernen

Der beste Schutz für WordPress ist meistens ein gut gepflegtes und aktuelles WordPress, in dem ein passendes Security-Plugin installiert und aktiv ist. Wer aber den sprichwörtlichen Schaden schon hat, der kann mit etwas Fleiß, Zeit und Mühe manuell mit der obigen Anleitung seine WordPress-Website von Malware befreien.

  • Über den Autor
  • Aktuelle Beiträge
Matthias Böhmichen

Matthias Böhmichen ist der Gründer der Website howto-do.it . Linux nutzt er seit 1991 um kurz danach Windows zu entdecken. Er entdeckt gerne neue Technologien und verbringt seine Zeit damit, sie für Kunden nutzbar zu machen. Im Hauptberuf ist er CEO der Biteno GmbH

  • Datenbank-Grundlagen: Was ist eine Transaktion?

Aktuellste Beiträge

  • Was ist Whitelisting? Verständlich erklärt.
    Was ist Whitelisting? Verständlich erklärt.
    22. Juli 2025
  • LVS, VGS und PVS einfach erklärt
    LVS, VGS und PVS einfach erklärt
    21. Juli 2025
  • Firewall-Überwachung erklärt: Schutz im Netzwerk
    Firewall-Überwachung erklärt: Schutz im Netzwerk
    21. Juli 2025
  • Verständnis: Was sind logical volumes unter Linux
    Verständnis: Was sind logical volumes unter Linux
    19. Juli 2025
  • Was ist eine DMZ: Ihre Bedeutung im Netzwerkschutz
    Was ist eine DMZ: Ihre Bedeutung im Netzwerkschutz
    19. Juli 2025
  • Linux LVM verstehen: Eine Einführung für Anfänger
    Linux LVM verstehen: Eine Einführung für Anfänger
    19. Juli 2025
  • Google Workspace Alternative für effiziente Teams
    Google Workspace Alternative für effiziente Teams
    19. Juli 2025
  • Was ist Blacklisting: So wirkt es auf Ihre Daten
    Was ist Blacklisting: So wirkt es auf Ihre Daten
    19. Juli 2025
  • pfSense vs. OpnSense: Welche Firewall ist besser?
    pfSense vs. OpnSense: Welche Firewall ist besser?
    18. Juli 2025

Kategorien

  • Allgemein (10)
  • Lexikon (106)
  • Linux (47)
  • Office (84)
  • Sicherheit (130)
  • Virtualisierung (19)
  • Windows (29)

Weitere lesenswerte Artikel

  • Was ist eine Access Control List (ACL)? Ein Leitfaden.
    Was ist eine Access Control List (ACL)? Ein Leitfaden.
    17. Juli 2025
  • Was ist Traffic Shaping – Optimierung des Datenverkehrs
    Was ist Traffic Shaping – Optimierung des Datenverkehrs
    17. Juli 2025
  • Was ist Google Workspace – Ihr Leitfaden fürs Büro
    Was ist Google Workspace – Ihr Leitfaden fürs Büro
    16. Juli 2025
  • Protokollanalyse erklärt: Einblick in Netzwerkdaten
    Protokollanalyse erklärt: Einblick in Netzwerkdaten
    15. Juli 2025
  • Was ist eine Web Application Firewall (WAF)?
    Was ist eine Web Application Firewall (WAF)?
    15. Juli 2025
  • Was ist Deep Packet Inspection (DPI) ? Einblick und Nutzen
    Was ist Deep Packet Inspection (DPI) ? Einblick und Nutzen
    14. Juli 2025
  • NAT erklärt: Was ist Network Address Translation?
    NAT erklärt: Was ist Network Address Translation?
    12. Juli 2025
  • Was ist Unified Threat Management (UTM) ? Wir erklären es
    Was ist Unified Threat Management (UTM) ? Wir erklären es
    12. Juli 2025
  • Was ist Port Forwarding ? Einführung und Nutzen
    Was ist Port Forwarding ? Einführung und Nutzen
    12. Juli 2025
  • Was ist eine Next-Generation Firewall (NGFW)?
    Was ist eine Next-Generation Firewall (NGFW)?
    10. Juli 2025
  • Was ist eine Netzwerkschicht-Firewall: Einfach erklärt!
    Was ist eine Netzwerkschicht-Firewall: Einfach erklärt!
    10. Juli 2025
  • Stateful Inspection erklärt – Ihr Sicherheitsguide
    Stateful Inspection erklärt – Ihr Sicherheitsguide
    10. Juli 2025
  • Was ist eine Proxy Firewall: Mehr Schutz im Netzwerk
    Was ist eine Proxy Firewall: Mehr Schutz im Netzwerk
    8. Juli 2025
  • Redis Grundlagen erklärt – Speicher & Datenbank Verständnis
    Redis Grundlagen erklärt – Speicher & Datenbank Verständnis
    8. Juli 2025
  • Erklärung: Was ist Advanced Threat Protection?
    Erklärung: Was ist Advanced Threat Protection?
    8. Juli 2025
  • Einführung in SAP HANA: Effiziente Datenverwaltung
    Einführung in SAP HANA: Effiziente Datenverwaltung
    7. Juli 2025
  • Was ist ein Paketfilter: Einfach erklärt
    Was ist ein Paketfilter: Einfach erklärt
    7. Juli 2025
  • Kontakt
  • Impressum
  • Disclaimer
  • Datenschutz
  • Sitemap
  • Howto-Do.IT auf Englisch

© 2025

Nach oben scrollen
  • Office
  • Linux
  • Sicherheit
  • Windows
Diese Website benutzt Cookies. Wenn Sie die Website weiter nutzen, gehen wir von Ihrem Einverständnis aus.