Website gehackt: Schadcode finden, entfernen und die Lücke schließen

Wenn Ihre Website gehackt wurde, gehen Sie in dieser Reihenfolge vor: Seite vom Netz nehmen oder auf eine Wartungsseite umstellen, alle Passwörter von einem sauberen Gerät aus ändern, den Schadcode in Dateien und Datenbank entfernen oder ein sauberes Backup zurückspielen und die Lücke schließen, über die der Angreifer hereinkam. Der letzte Schritt ist der wichtigste. Wer nur aufräumt, ist oft nach wenigen Tagen wieder infiziert. Diese Anleitung geht jeden Schritt am Beispiel von WordPress durch, das Vorgehen gilt aber für jedes CMS.

Woran Sie erkennen, dass die Website gehackt wurde

Viele Einbrüche fallen nicht sofort auf, denn Angreifer wollen den Zugang möglichst lange nutzen. Ob Ihre Website gehackt ist, merken Sie oft zuerst an diesen Anzeichen:

Anzeichen, dass eine Website gehackt wurde
Typische Hinweise sind Weiterleitungen auf fremde Seiten, Warnungen von Google oder dem Browser, unbekannte Administratoren, fremde Seiten im Suchindex, Spam-Versand über den Server und neue PHP-Dateien im Upload-Ordner.

Achten Sie besonders auf Weiterleitungen, die nur manchmal auftreten. Viele Schadskripte leiten nur Besucher vom Handy oder von Google weiter und lassen eingeloggte Administratoren in Ruhe. Testen Sie deshalb mit einem privaten Browserfenster und vom Handy über das Mobilnetz. Eine Abfrage nach site:ihre-domain.de bei Google zeigt außerdem, ob plötzlich Seiten mit fremden Inhalten wie Medikamenten, Markenware oder japanischen Schriftzeichen im Index stehen.

Die erste Stunde: Schaden begrenzen

Notfallplan für die erste Stunde
Seite vom Netz nehmen, Hoster informieren, den infizierten Zustand für die Analyse sichern, alle Passwörter von einem sauberen Gerät ändern und prüfen, ob eine Datenpanne gemeldet werden muss.
  1. Seite vom Netz nehmen: Schalten Sie eine Wartungsseite ein oder sperren Sie den Zugriff per .htaccess für alle außer Ihrer eigenen IP-Adresse. So infizieren Sie keine Besucher und verlieren keine weiteren Daten.
  2. Hoster informieren: Der Anbieter sieht oft mehr als Sie, etwa auffällige Prozesse oder Spamversand, und hat eigene Backups.
  3. Zustand sichern: Kopieren Sie die infizierten Dateien und die Datenbank in einen getrennten Ordner. Sie brauchen die Kopie, um später den Einstiegspunkt zu finden. Spielen Sie sie nie wieder ein.
  4. Passwörter ändern: Kundenkonto beim Hoster, SFTP, Datenbank, alle Administratoren im CMS und die Postfächer. Nutzen Sie dafür ein Gerät, auf dem kein Schadprogramm läuft. Gestohlene Passwörter vom eigenen PC sind ein häufiger Einstiegsweg.
  5. Datenpanne prüfen: Waren Kundendaten zugänglich, müssen Sie das nach Artikel 33 DSGVO innerhalb von 72 Stunden der Aufsichtsbehörde melden. Mehr dazu im Ratgeber zum DSGVO-konformen Hosting.

Zwei Wege zur sauberen Seite

Danach stehen Sie vor der Wahl: ein sauberes Backup zurückspielen oder die bestehende Seite bereinigen. Ist die Website gehackt und Sie haben ein Backup von vor dem Einbruch, ist das meist der schnellere und sicherere Weg.

Backup zurückspielen oder bereinigen
Ein sauberes Backup ist schneller und sicherer, verliert aber neue Inhalte seit dem Stand. Bereinigen erhält alle Inhalte, ist aber aufwendiger und fehleranfälliger.

Die Schwierigkeit beim Backup ist der Zeitpunkt. Viele Einbrüche liegen Wochen zurück, bevor jemand sie bemerkt. Prüfen Sie im Zugriffsprotokoll und an den Änderungsdaten der Dateien, wann die ersten verdächtigen Dateien auftauchten, und nehmen Sie ein Backup von davor. Alle Inhalte, die seitdem dazugekommen sind, also Beiträge, Bestellungen und Kommentare, müssen Sie anschließend von Hand nachtragen. Wie Sie Backups so aufbauen, dass genug alte Stände da sind, beschreibt der Ratgeber zum Website-Backup.

Website gehackt: Schadcode in den Dateien finden

Haben Sie kein sauberes Backup, bereinigen Sie die Seite selbst. Am einfachsten geht das mit SSH-Zugang und dem Kommandozeilen-Werkzeug WP-CLI. Gehen Sie von innen nach außen vor.

Den WordPress-Kern ersetzen

Prüfen Sie zuerst, ob Kerndateien verändert wurden. WP-CLI vergleicht jede Datei mit den offiziellen Prüfsummen von WordPress.org:

wp core verify-checksums
wp plugin verify-checksums --all

Die Befehle melden veränderte und zusätzliche Dateien. Der sicherste Weg ist, die Ordner wp-admin und wp-includes komplett zu löschen und mit wp core download --skip-content --force frisch zu laden. Plugins und Themes aus dem offiziellen Verzeichnis löschen Sie ebenso und installieren sie neu. Bezahl-Plugins laden Sie direkt beim Hersteller herunter. Die Dokumentation zu wp core verify-checksums beschreibt weitere Optionen.

Verstecke prüfen

Schadcode versteckt sich bevorzugt an Stellen, die beim Neuinstallieren nicht überschrieben werden:

Wo sich Schadcode versteckt
Häufige Verstecke sind PHP-Dateien im Upload-Ordner, der Ordner mu-plugins, die .htaccess, die Datenbank mit Beiträgen und Optionen, Cronjobs und zusätzliche Administratorkonten.

Diese Befehle helfen bei der Suche. Sie liefern auch harmlose Treffer, deshalb prüfen Sie jede Datei, bevor Sie sie löschen:

# PHP-Dateien im Upload-Ordner, dort gehören keine hin
find wp-content/uploads -name "*.php"
# PHP-Dateien, die in den letzten 14 Tagen geändert wurden
find . -name "*.php" -mtime -14
# typische Verschleierung
grep -rlE "eval\(base64_decode|gzinflate\(base64|str_rot13\(" --include=*.php .

Schauen Sie außerdem in die .htaccess im Hauptordner und in Unterordnern. Fremde Umleitungsregeln mit RewriteCond %{HTTP_REFERER} oder %{HTTP_USER_AGENT} sind ein klares Zeichen. Prüfen Sie auch die Cronjobs im Kundenmenü und, auf einem eigenen Server, mit crontab -l. Manche Angreifer legen dort einen Job an, der die Hintertür regelmäßig neu schreibt.

Ohne SSH: Bereinigung über SFTP und Kundenmenü

Viele kleine Webhosting-Pakete bieten keinen SSH-Zugang. Die Bereinigung geht dann auch, dauert aber länger:

  1. Laden Sie die komplette Seite per SFTP herunter, etwa mit FileZilla. Das ist Ihre Beweiskopie.
  2. Laden Sie WordPress in der installierten Version von wordpress.org, löschen Sie auf dem Server die Ordner wp-admin und wp-includes und laden Sie beide frisch hoch. Ersetzen Sie auch die PHP-Dateien im Hauptordner, mit Ausnahme der wp-config.php.
  3. Suchen Sie im Ordner wp-content/uploads nach Dateien mit der Endung .php. FileZilla kann dafür auf dem Server nach Dateinamen suchen.
  4. Öffnen Sie die wp-config.php und die .htaccess in einem Texteditor und vergleichen Sie sie mit Ihrer Beweiskopie und einer frischen Installation.
  5. Prüfen Sie die Datenbank über phpMyAdmin, das die meisten Hoster im Kundenmenü anbieten. Die Tabelle wp_users zeigt alle Benutzer, die Suche über alle Tabellen findet eingeschleuste Skripte.

Einige Hoster haben im Kundenmenü einen Dateimanager mit Virenscanner. Der markiert verdächtige Dateien und spart Ihnen die Suche von Hand.

Die Datenbank bereinigen

Auch in der Datenbank kann Schadcode stecken, etwa als eingeschleustes JavaScript in Beiträgen oder Widgets. Diese Abfragen zeigen verdächtige Stellen:

wp user list --role=administrator
wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '%<script%'"
wp option get siteurl
wp option get home

Löschen Sie unbekannte Administratoren. Prüfen Sie, ob siteurl und home auf Ihre eigene Domain zeigen. Nicht jedes Skript in einem Beitrag ist schädlich, eingebettete Formulare oder Statistik-Codes können legitim sein. Verdächtig sind vor allem Skripte, die von unbekannten Domains laden oder verschleierten Code enthalten. Erneuern Sie anschließend die geheimen Schlüssel in der wp-config.php, damit alle Sitzungen ungültig werden.

Scanner richtig einsetzen

Scanner finden bekannte Schadcode-Muster schneller als jede Handarbeit. Ob eine Website gehackt ist, erkennen sie aber nur, wenn das Muster schon bekannt ist. Nutzen Sie sie deshalb als Ergänzung zur Prüfung oben:

  • Im CMS: Wordfence vergleicht Dateien mit den Originalen und sucht nach Mustern bekannter Schadsoftware.
  • Beim Hoster: Viele Anbieter scannen den Webspace automatisch, oft mit ImunifyAV oder eigenen Werkzeugen, und zeigen das Ergebnis im Kundenmenü.
  • Von außen: Sucuri SiteCheck ruft die Seite auf wie ein Besucher und meldet sichtbaren Schadcode und Einträge in Sperrlisten.

Ein sauberer Scan beweist nicht, dass die Seite sauber ist. Neue oder gut versteckte Hintertüren kennen die Scanner oft noch nicht.

Die Lücke schließen

Wenn Ihre Website gehackt wurde, gibt es einen Weg hinein. Bleibt er offen, kommt der Angreifer zurück. Die häufigsten Ursachen sind:

  • ein Plugin oder Theme mit bekannter Lücke, das nicht aktualisiert war
  • ein gestohlenes oder erratenes Passwort, oft ohne zweiten Faktor
  • eine Raubkopie eines Bezahl-Plugins mit eingebauter Hintertür
  • eine andere Seite im selben Hosting-Konto, die schon infiziert war

In den Logs nachsehen, wie die Website gehackt wurde

Zuerst brauchen Sie den Zeitpunkt. Die Änderungszeit einer Datei kann ein Angreifer fälschen, die Zeit der letzten Statusänderung (ctime) nicht so einfach. Dieser Befehl listet die zuletzt veränderten PHP-Dateien danach sortiert:

find . -name "*.php" -printf "%C+ %p\n" | sort | tail -30

Mit dem Zeitpunkt der ersten fremden Datei gehen Sie ins Zugriffsprotokoll. Diese Auswertung zeigt, welche Adressen am häufigsten per POST aufgerufen wurden:

grep '"POST' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

Neben wp-login.php, admin-ajax.php und wp-cron.php fallen dann Dateien auf, die es in einer normalen Installation nicht gibt. Suchen Sie die IP-Adresse, die eine solche Datei zuerst aufgerufen hat, und sehen Sie nach, was diese Adresse kurz vorher angefragt hat. Oft ist das die Upload-Funktion eines bestimmten Plugins. Bei Webhosting finden Sie die Protokolle im Kundenmenü, oft nur für wenige Tage und mit gekürzten IP-Adressen. Laden Sie sie deshalb früh herunter.

Gleichen Sie Ihre Plugin-Versionen mit den Meldungen von Patchstack oder WPScan ab. Betreiben Sie mehrere Seiten im selben Konto, prüfen Sie alle. Danach setzen Sie die Maßnahmen aus der Anleitung zur WordPress-Sicherheit um: Updates, zweiter Faktor, Datei-Editor aus, PHP in Uploads sperren.

Nach der Bereinigung

  • Google informieren: Hat die Google Search Console unter „Sicherheitsprobleme“ eine Warnung angezeigt, beantragen Sie dort nach der Bereinigung eine Überprüfung. Erst danach verschwindet die Warnung in den Suchergebnissen und im Browser.
  • Spam-Seiten entfernen: Hat der Angreifer Seiten angelegt, liefern Sie für diese Adressen den Statuscode 410 aus, damit Google sie schneller vergisst.
  • Mailversand prüfen: Hat Ihr Server Spam verschickt, steht die IP-Adresse eventuell auf Sperrlisten. Wie Mail-Zustellung und Absender-Prüfung funktionieren, steht im Ratgeber zum Spam-Schutz.
  • Beobachten: Prüfen Sie in den nächsten Wochen regelmäßig auf neue PHP-Dateien und unbekannte Benutzer. Eine erneute Infektion zeigt, dass die Lücke noch offen ist.

Wann sich professionelle Hilfe lohnt

Holen Sie sich Unterstützung, wenn die gehackte Seite ein Shop mit Kundendaten ist, wenn sie nach der Bereinigung erneut infiziert wird oder wenn Sie keinen SSH-Zugang und kein sauberes Backup haben. Viele Sicherheitsdienstleister und Agenturen bieten eine Bereinigung zum Festpreis an. Fragen Sie vorher, ob die Suche nach der Ursache enthalten ist und ob es eine Garantie gegen erneute Infektion gibt. Der Hoster kann oft zumindest sagen, welche Dateien betroffen sind.

Häufig gestellte Fragen

Wie lange dauert die Bereinigung?

Mit sauberem Backup oft wenige Stunden. Ohne Backup und bei tief verstecktem Code kann es einen oder mehrere Tage dauern.

Reicht es, das verdächtige Plugin zu löschen?

Nein. Ist die Website gehackt, hinterlassen Angreifer fast immer weitere Hintertüren an anderen Stellen. Gehen Sie alle Schritte oben durch.

Muss ich Besucher informieren, wenn die Website gehackt wurde?

Wenn personenbezogene Daten betroffen sind und ein hohes Risiko für die Betroffenen besteht, verlangt Artikel 34 DSGVO eine Benachrichtigung. Die Meldung an die Aufsichtsbehörde ist schon bei geringerem Risiko Pflicht.

Was kostet es, wenn die Website gehackt ist?

Mit eigenem Backup kostet es vor allem Zeit. Dienstleister rechnen pauschal oder nach Stunden ab, der Preis hängt von Größe und Zustand der Seite ab. Vergleichen Sie Angebote danach, ob Ursachensuche und eine Garantie gegen erneute Infektion enthalten sind.

Warum steht in Google „Diese Website wurde möglicherweise gehackt“?

Google hat auf Ihrer Seite fremde Inhalte oder Weiterleitungen gefunden. Der Hinweis verschwindet erst, wenn Sie die Seite bereinigt und in der Search Console unter „Sicherheitsprobleme“ eine Überprüfung beantragt haben.

Kann der Hoster die Seite für mich bereinigen?

Manche Anbieter bieten das als Zusatzleistung an. Meist sperren sie aber nur die betroffenen Dateien und erwarten, dass Sie selbst bereinigen.

Wie verhindere ich, dass es wieder passiert?

Automatische Updates, ein zweiter Faktor für alle Administratoren, keine Raubkopien und ein Backup mit mehreren Ständen außer Haus.

Website gehackt? So geht es weiter

Nehmen Sie die Seite vom Netz, ändern Sie alle Passwörter und entscheiden Sie, ob Sie ein sauberes Backup zurückspielen oder bereinigen. Schließen Sie danach die Lücke, sonst ist die Website bald wieder gehackt.

Sichern Sie Ihre Seite jetzt gegen den nächsten Angriff ab.


Weitere Artikel in „SSL & Sicherheit“

Website-Backup: Dateien, Datenbank und CMS zuverlässig sichern

Website Backup richtig planen: was gesichert werden muss, wie oft, wohin und wie Sie die Wiederherst…

DSGVO-konformes Hosting: worauf Website-Betreiber achten müssen

DSGVO konformes Hosting erklärt: Auftragsverarbeitungsvertrag, Serverstandort, US-Anbieter, Logfiles…

WordPress-Sicherheit: die Seite Schritt für Schritt absichern

WordPress Sicherheit Schritt für Schritt: Updates, Zwei-Faktor-Login, Benutzerrollen, wp-config.php,…

SSL-Zertifikat Grundlagen: HTTPS und Verschlüsselung erklärt

SSL Zertifikat einfach erklärt: Wie Verschlüsselung funktioniert, welche Arten es gibt und warum HTT…

Let's Encrypt einrichten: Kostenloses SSL-Zertifikat installieren

Let's Encrypt einrichten und automatisch verlängern: Voraussetzungen, Installation, typische Stolper…

SSL-Zertifikat-Typen: DV, OV und EV im Vergleich

SSL Typen verständlich verglichen: Was Domain-, Organisations- und Extended-Validation unterscheiden…