WordPress gehackt? 3 Schritte zum Cleanup

Obwohl WordPress das verbreiteste Redaktionssystem ist, oder gerade deswegen, weil es dafür unzählige Plugins gibt, werden Websites mit dem CMS leider häufig gehackt. Ich erkläre, wie man Systeme bereinigen und absichern kann.

Da wir jährlich zahlreiche Websites von Schadcode wie Malware und spammigen Weiterleitungen befreien, möchte ich die einfachste Lösung als DIY-Ratgeber teilen, ein WordPress-System zu bereinigen.

Bereinigung in 3 Schritten

Malware wird häufig als „Nadel im Heuhaufen“ versteckt unter tausenden Dateien platziert und Schreibrechte manipuliert. Dadurch können manuelle Entfernungen mit sehr viel Aufwand verbunden sein und einen oder mehrere Tage dauern.

Man muss sich aber in den meisten Fällen gar nicht so viel Arbeit machen. Häufig reicht es aus, ein neues WordPress-System aufzusetzen, das dann mit bereinigten Backups gefüllt wird.

  1. Neues WordPress einrichten
  2. Bereinigte Backups einspielen
  3. Abschließende Kontrolle

Du benötigst dafür:

  • Administrator-Nutzer
  • Webhosting-Zugang
  • FTP-Zugang
  • Idealerweise ein Backup vor dem Hack – das Hack-Datum kannst du meist anhand der letzten Dateiänderungen im FTP sehen:
Hier sieht man einige Änderungen am Donnerstag, den 22.08.2024. Verdächtig ist die index.php-Datei, deren Zugriffsrechte manipuliert und stark eingeschränkt wurden. Ein Backup vor dem 22.08. ist also dringend ratsam. Screenshot aus dem FTP-Programm Transmit.
In der index.php-Datei taucht hochgradig verdächtiger verschlüsselter Code auf, der hier nicht rein gehört. Das kann man durch den Vergleich mit einer Original index.php-Datei schnell sehen. Screenshot aus Dreamweaver.

1. Neues WordPress-System einrichten

  1. Um eine neue WordPress-Installation einzurichten, lädst du dir als Erstes das Redaktionssystem in der aktuellsten Version herunter. Bitte keine veralteten Versionen von WordPress nutzen, da diese auch wieder Sicherheitslücken haben können.
  2. Dann lädst du per FTP-Programm alle Dateien in ein neues Verzeichnis deines Hostings. Der FTP-Zugriff darf dazu nicht auf deine aktuelle, gehackte Website begrenzt sein und der neue WordPress Ordner also nicht als Unterverzeichnis dieser angelegt werden, sondern auf gleicher Ebene. Hierzu ist ggf. der Webhosting-Zugriff erforderlich, um die Zugriffs- und Verzeichnisrechte des FTP-Nutzers anzupassen.
  3. Anschließend richtest du eine neue wp-config.php-Datei ein. Dazu duplizierst du im neuen WordPress-Verzeichnis die Datei wp-config-sample.php und benennst sie in wp-config.php um. dann öffnest du diese neue wp-config.php-Datei und die alte wp-config.php-Datei der gehackten Website und kopierst von dort die folgenden Informationen rüber, um die neue WordPress-Installation mit deiner bestehenden Datenbank zu verbinden, worin die Inhalte und Einstellungen von WordPress abgespeichert sind:

2. Datei-Backups einspielen

Nun nimmst du dir idealerweise das Backup vor dem Hack vor und kopierst aus dem wp-content-Ordner die folgenden Unterordner in den wp-content-Ordner der neuen WordPress-Installation:

  • uploads
  • plugins
  • themes

Hast du kein Backup vor dem Hack erstellen können/ lassen oder bist dir unsicher, ob dieses frei von Malware ist, ziehst du dir aus der gehackten Seite die besagten Ordner und scanst sie erst mit einem Virenscanner wie Avast. Alle als verdächtig gemeldeten Dateien sollten sofort gelöscht werden.

Dann schaust du durch die Unterordner und löscht …

  • … im Upload-Ordner alle Dateien, die nicht zu deiner Seite gehören zu scheinen, insbesondere diejenigen mit PHP- und JS-Endung haben dort eigentlich nichts verloren. Dazu kannst du den Ordner mit den Sprachdateien löschen, da hier gelegentlich Schadcode platziert wird – die Sprachdateien lassen sich später per Update neu laden.
  • … im Plugins-Ordner alle Plugins, von denen du nicht sicher weißt, dass sie erforderlich sind. Denn manche Hacker platzieren hier Fake-Plugins. Wenn du dir nicht sicher bist, lade dir von den Plugins aus dem WordPress-Pluginverzeichnis und ggf. von Marktplätzen und Lizenzgebern die neuesten Versionen herunter und ersetze damit die bestehenden Ordner (am besten alte Plugin-Ordner löschen, dann die neuen in den Plugins-Ordner kopieren)
  • … im Themes-Ordner alle Themes mit Ausnahme deines Haupt-Themes und ggf. Child-Themes. Alle Standard-Themes wie Twenty Twentyfour bitte löschen und als Fallback die aktuellste Version von Twenty Twentfour herunterladen und in den Themes-Ordner kopieren. Falls dein Haupt-Theme keine Eigenentwicklung ist, rate ich dazu, vom Theme-Autor oder Marktplatz eine aktuelle Version zu ziehen und damit die Version deines Backups zu überschreiben. Wenn dein Haupt-Theme eine Eigenentwicklung ist, dann ggf. mit den Programmierern sprechen und diese um Prüfung nach Schadcode bitten.

Wie vorab schon beschrieben, spielst du dann die drei Ordner uploads, plugins und themes in das wp-content-Verzeichnis deiner neuen WordPress-Installation.

Anschließend gehst du ins Webhosting und änderst das Verzeichnis, auf das deine Domain zielt, auf das der neuen WordPress-Installation. Es dauert meist ein paar Minuten bis Stunden, bis die Domain aktualisiert ist und du in das neu aufgesetzte System kommst.

3. Abschließende Updates und Kontrolle

  1. Zunächst sollte das System auf Sicherheitslücken und Malware geprüft werden. Am einfachsten geht das mit dem Webservice von SUCURi, der allerdings nur oberflächlich scannt.
    Darüber hinaus sollte ein tieferer Scan mit einer Anti-Viren-Software und/ oder durch Sicherheitsexperten erfolgen, welche dazu die Website per FTP herunterladen und nach Schadcode durchsuchen. Ich habe hierzu gute Erfahrungen mit Avast gemacht: beim Tiefenscan eines Backups wurde immer die Malware gefunden. Allerdings maße ich mir nicht an, dass ich ein IT-Security-Experte bin.
  2. Dann sollten alle Updates durchgeführt werden und dazu ggf. Plugin- oder Theme-Lizenzen erneuert werden, da manche Entwickler die Updates nur aktiven Kunden weitergeben. Falls Fehler auftreten sollten, einfach mal nach einander die einzelnen Plugins deaktivieren und schauen, bei welchen Lösungen es eventuelle Neuinstallationen oder Workarounds bedarf. So kann es beispielsweise bei Borlabs Cookie passieren, dass Serverfehler entstehen und eine Neuinstallation mit Setup erforderlich ist.
  3. Anschließend ist eine Sicht- und Funktionskontrolle der Website dringend empfehlenswert. Dazu sollten alle Seiten und exemplarisch die Beiträge sowie Formulare geprüft werden. Hierzu kann man auch Tools wie Screamingfrog SEO Spider einsetzen, welche über Fehler im Code berichten können.
  4. Nach der Bereinigung einer WordPress-Seite sollten alle Nutzer mit Backend-Zugriff ihre Passwörter neu setzen. Entweder übernimmt das jeder eigenverantwortlich oder ein Admin setzt die Passwörter zurück und sendet sie getrennt vom Nutzernamen bspw. via SMS oder als verschlüsselte Notiz via privnote an die Kollegen.
  5. Falls bei der abschließenden Kontrolle noch Fehler oder Malware auftauchen, muss man leider den Rat von Experten suchen. Das können Mitarbeiter von einem Hoster oder Entwickler sein, wie von unserer WordPress-Agentur.

Ursachen und Vermeidung von Hacks

1. Sicherheitslücken

Die häufigsten Ursachen von WordPress-Hacks sind fehlende Updates unsicherer Plugins oder Themes. Dies kann man vorher kaum erkennen und ist unabhängig von den Installationszahlen einer Lösung.

Meistens findet irgendwann irgendein Entwickler eine Sicherheitslücke und meldet sie offiziell, sodass WordPress das Plugin aus dem Plugin-Verzeichnis, der sogenannten Repository nimmt, oder nutzt die Sicherheitslücke im eigenen Interesse zur Malware-Injektion oder Übernahme der Website.

Daher ist es obligatorisch, dass WordPress-Websites ständig aktualisiert werden. Hierzu empfehlen wir einerseits automatische Updates für kleinere Aktualisierungen zu optimieren, andererseits regelmäßig größere Updates durchzuführen. Bei größeren Websites sollten diese vorher in einer Entwicklungsumgebung geprüft werden, damit Änderungen nicht zur Instabilität eines Live-Systems führen.

2. Unsichere Passwörter

Am zweithäufigsten sind unsichere Passwörter. Leider hat WordPress keine Standard-Funktion an Bord, welche den Nutzern sichere Passwörter aufzwingt, sodass man nach Akzeptieren einer Checkbox selbst „123456“ als Passwort definieren kann.

Screenshot aus WordPress

Es gibt aber zumindest Möglichkeiten, einen sicheren Zugang zu erzwingen:

  • Mit dem Plugin Password Policy Manager kann man Regeln für die Passwortstärke definieren und Nutzer nach einer Zeit x aussperren, die ihre Passwörter nicht entsprechend eingestellt haben.
  • Alternativ dazu kann man nachfolgenden Code über die functions.php seines Child-Themes einspielen, um bspw. Passwörter mit einer Länge von mindestens 8 Zeichen, einem Sonderzeichen und einer Zahl zu erzwingen.
add_action('user_profile_update_errors', 'custom_validate_password', 10, 3);
add_action('validate_password_reset', 'custom_validate_password_reset', 10, 2);

function custom_validate_password($errors, $update, $user) {
    if (!empty($_POST['pass1'])) {
        $password = $_POST['pass1'];
        if (!custom_is_valid_password($password)) {
            $errors->add('pass', 'Das Passwort muss mindestens 8 Zeichen lang sein, eine Ziffer und ein Sonderzeichen enthalten.');
        }
    }
}

function custom_validate_password_reset($errors, $user) {
    if (!empty($_POST['pass1'])) {
        $password = $_POST['pass1'];
        if (!custom_is_valid_password($password)) {
            $errors->add('pass', 'Das Passwort muss mindestens 8 Zeichen lang sein, eine Ziffer und ein Sonderzeichen enthalten.');
        }
    }
}

function custom_is_valid_password($password) {
    // Prüfe, ob das Passwort mindestens 8 Zeichen lang ist
    if (strlen($password) < 8) {
        return false;
    }

    // Prüfe, ob das Passwort mindestens eine Ziffer enthält
    if (!preg_match('/\d/', $password)) {
        return false;
    }

    // Prüfe, ob das Passwort mindestens ein Sonderzeichen enthält
    if (!preg_match('/[\W]/', $password)) {
        return false;
    }

    return true;
}

Wer noch mehr auf Nummer Sicher gehen will, nutzt ein Firewall- und Security-Plugin wie All-In-One Security, um eine Zwei-Faktor-Authentifizierung für seine Nutzer zu erzwingen. Dies unterstützt dann einen Sicherheitscode, der bspw. über den Google Authenticator, Microsoft Authenticator und 1Password generiert wird und zum Login erforderlich ist.

Eine absolute Sicherheit bieten aber weder Firewall noch sichere Passwörter. Wenn etwa ein Nutzer das Passwort schon mehrfach verwendet hat und das irgendwo geleakt wird, bringen auch die sichersten Passwörter wenig. Aber durch die Zwei-Faktor-Authentifizierung wird das Risiko, dass jemand Unbefugter sich mit einem geklauten Passwort einloggt, minimiert.

Fazit

Ein WordPress-Hack ist äußerst ärgerlich, aber meist mit relativ überschaubarem Aufwand und klarem Kopf zu bereinigen. Am besten reduzierst du das Risiko, das deine Website gehackt wird,

  • indem du sie regelmäßig aktualisierst,
  • ausschließlich sichere Passwörter verwenden lässt
  • eine Firewall einsetzt

sowie externe Backups und Sicherheitschecks durchführen lässt. Hierzu empfehle ich den Service ManageWP, mit welchem sich auch mehrere Projekte überwachen und verwalten lassen.

Falls meine einfachen Empfehlungen aus diesem Ratgeber nicht helfen, bieten wir gerne auch professionelle Hilfe bei der Bereinigung von WordPress an.

Severin Lucks

Ich bezeichne mich als Inbound-Marketing-Experte und SEO-Spezialist. Ich mag die Kombination von gutem Design, überzeugenden Texten (mit dem einen oder anderen psychologischen Trick) und langfristiger SEO-Strategie, um nachhaltig Besucher für unsere Kunden zu gewinnen und zu konvertieren.