Webseite gehackt? Soforthilfe
Praxis-Anleitung in 6 Schritten: von kompromittierter Webseite zurück zur sicheren Seite. Maintenance-Mode, Forensik-Backup, Malware-Scan, Bereinigung, Härtung und Monitoring. Für Schweizer KMU, mit Hinweisen zum revidierten DSG und EDÖB-Meldepflicht.
Bevor Sie anfangen
- Zugang zum Hosting per SSH, FTP oder Hoster-Backend (File-Manager)
- Zugang zur Datenbank via phpMyAdmin oder MySQL-CLI
- CMS-Admin-Login falls noch erreichbar (sonst Passwort via DB zurücksetzen)
- Externer Speicher für das Forensik-Backup (eigene Festplatte, USB, Cloud)
- Aktuelle saubere Kopie der CMS-Core-Files (z.B. WordPress-ZIP)
- Bei Datenleck mit Personendaten: EDÖB-Meldepflicht binnen 72h beachten
Seite sofort offline nehmen (Maintenance-Mode)
Erste Priorität: keine weiteren Besucher dürfen die infizierte Seite sehen. Sonst werden Geräte infiziert, Daten abgegriffen und Google markiert die Seite als unsicher.
Schnellste Methode: per FTP/SSH eine .maintenance-Datei ins WordPress-Root, oder eine .htaccess-Regel die alle Requests auf eine statische wartung.html umleitet.
Die Wartungsseite soll eine kurze, freundliche Erklärung enthalten (technische Wartung, in Kürze wieder erreichbar) und idealerweise eine alternative Kontaktmöglichkeit (E-Mail, Telefon).
Eigene IP per .htaccess-Whitelist freischalten, damit Sie am Backend weiterarbeiten können während alle anderen die Wartungsseite sehen.
# .htaccess - alle ausser eigene IP zur Wartungsseite umleiten
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123\.45\.67\.89$
RewriteCond %{REQUEST_URI} !/wartung\.html$
RewriteCond %{REQUEST_URI} !\.(jpe?g|gif|png|svg|css|js)$ [NC]
RewriteRule .* /wartung.html [R=503,L]
# 503-Status für Google (signalisiert temporär nicht verfügbar)
ErrorDocument 503 /wartung.html
Header always set Retry-After "3600"Forensik-Backup erstellen (bevor Sie irgendetwas anfassen)
Wichtig vor jedem weiteren Schritt: vollständiges Backup von Files und Datenbank, lokal gespeichert, klar beschriftet (Datum + 'kompromittiert').
Dieses Backup ist die Grundlage für die Forensik (was wurde geändert?), allfällige rechtliche Schritte (bei Datenleck), Versicherungs-Schadenmeldung und Vergleich vor/nach Bereinigung.
Files via tar oder zip direkt am Server, dann via SCP/SFTP herunterladen. Datenbank via mysqldump.
Wenn eine Lösegeldforderung vorliegt (Ransomware): Backup auch dann ziehen, aber den Computer mit dem Backup nicht ans Internet hängen, Schadsoftware könnte sich verbreiten.
# Files backuppen cd /var/www/html tar -czf /tmp/site-forensik-$(date +%Y%m%d).tar.gz . # Datenbank dumpen mysqldump --single-transaction -u dbuser -p ihrefirma_db \ > /tmp/db-forensik-$(date +%Y%m%d).sql # Lokal herunterladen scp user@server:/tmp/site-forensik-*.tar.gz ./ scp user@server:/tmp/db-forensik-*.sql ./
Malware-Scan durchführen
Extern: Sucuri SiteCheck (sitecheck.sucuri.net) gegen die Live-Domain laufen lassen. Zeigt was öffentlich sichtbar ist (Defacement, eingeblendeter Spam, Blacklisting).
Intern bei WordPress: Wordfence installieren (falls noch nicht da) und Vollscan starten. Findet veränderte Core-Files, eingeschleuste Scripts, verdächtige Patterns in der Datenbank.
Alternativ MalCare (auch für andere CMS) oder imunify360 (oft schon im Schweizer Managed Hosting integriert).
Ergebnis dokumentieren: Liste der infizierten Files, gefundener Backdoors, kompromittierter DB-Einträge. Mit dem Forensik-Backup vergleichen, um den Infektionsumfang zu verstehen.
# Manuelle Suche nach typischen Backdoor-Patterns (Linux/macOS) grep -rIl "eval(base64_decode" /var/www/html grep -rIl "preg_replace.*\/e" /var/www/html grep -rIl "FilesMan\|c99shell\|r57shell" /var/www/html # Verdächtige PHP-Files in uploads-Ordnern find /var/www/html/wp-content/uploads -name "*.php" # Kürzlich modifizierte Files find /var/www/html -type f -mtime -7 -name "*.php"
Infektion bereinigen (Files austauschen, DB bereinigen)
Core-Files komplett ersetzen: bei WordPress aktuelle ZIP von wordpress.org herunterladen, wp-admin/ und wp-includes/ überschreiben, ebenso die Root-Files (index.php, wp-login.php etc.). wp-content/ NICHT überschreiben.
Themes und Plugins komplett löschen und neu installieren aus offiziellen Quellen. Custom-Themes aus dem letzten sauberen Backup oder dem Git-Repo wiederherstellen.
Backdoor-Scripts ausserhalb der CMS-Struktur suchen und löschen: häufig in uploads/, cache/, im Root oder versteckt in Plugin-Ordnern.
Datenbank bereinigen: eingeschleuste Admin-User löschen, Spam-Posts entfernen, manipulierte wp_options (z.B. siteurl, home) prüfen. WP-CLI ist hier Gold wert.
# WordPress Core via WP-CLI komplett neu wp core download --force --skip-content # Verdächtige Admin-User auflisten wp user list --role=administrator # Spam-Comments löschen wp comment delete $(wp comment list --status=spam --format=ids) # siteurl und home prüfen wp option get siteurl wp option get home # Alle Plugins komplett neu wp plugin uninstall --all --deactivate # Dann manuell neu installieren aus offizieller Quelle
Sicherheitslücken schliessen
Alle Passwörter zurücksetzen: WordPress-Admin-User, Datenbank-User, FTP/SSH-User, Hosting-Account. Mindestens 16 Zeichen, generiert von einem Password Manager (1Password, Bitwarden).
Zwei-Faktor-Authentifizierung für alle Admin-Logins aktivieren. WordPress: WP 2FA oder Wordfence-2FA. Hosting-Backend: TOTP-App (Authy, Google Authenticator).
Alle CMS-, Theme- und Plugin-Updates installieren. Plugins ohne Updates der letzten 12 Monate ersetzen oder ganz entfernen (sehr häufige Einfallsquelle).
File-Permissions korrekt setzen: Files 644, Verzeichnisse 755, wp-config.php auf 600. Datei-Schreibrechte nur dort vergeben wo nötig (uploads/, cache/).
Security-Plugin permanent installieren: Wordfence (Free oder Premium), Sucuri Security oder iThemes Security. Limit Login Attempts und Disable XML-RPC sind Pflicht.
# File-Permissions zurücksetzen
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chmod 600 /var/www/html/wp-config.php
# wp-config.php härten
# In die wp-config.php einfügen:
define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('WP_AUTO_UPDATE_CORE', 'minor');
# Alle WordPress-User-Passwörter via WP-CLI zurücksetzen
wp user list --field=ID | xargs -n1 -I{} wp user reset-password {}Wieder online, Monitoring und Search-Console-Reconsideration
Nochmal mit Sucuri SiteCheck, Wordfence-Scan und ggf. VirusTotal prüfen, dass alles sauber ist. Erst dann Maintenance-Mode deaktivieren.
Bei vorheriger Google-Markierung als unsicher: in Google Search Console unter Sicherheit & manuelle Massnahmen die Markierung sehen, nach Bereinigung Reconsideration anfordern. Dauert 1-3 Tage.
Bei Datenleck mit Personendaten: nach revidiertem DSG (gültig seit 1. September 2023) Meldung an EDÖB innerhalb 72 Stunden. Bei kritischen Fällen auch ans NCSC (ncsc.admin.ch).
30 Tage tägliches Monitoring: Wordfence Live Traffic, Sucuri Continuous Monitoring oder eigenes Uptime-Monitoring mit Inhalts-Check. Auffällige Logins, neue Files, ungewöhnliche Server-Last alarmieren lassen.
Backup-Strategie etablieren: täglich automatisch, mindestens 30 Tage rückwirkend, off-site gespeichert (nicht auf demselben Server). UpdraftPlus oder BlogVault sind gute Optionen.
Häufige Fehler vermeiden
Backup einspielen ohne Lücke zu schliessen
Backup von vor der Infektion einspielen ist verlockend. Wenn aber die ursprüngliche Sicherheitslücke (veraltetes Plugin, schwaches Passwort) nicht geschlossen wird, ist die Seite innert Tagen wieder infiziert.
Bereinigung ohne Forensik-Backup
Wer ohne Backup direkt bereinigt, verliert die Beweismittel. Bei Datenleck-Meldung, Versicherungs-Schadenmeldung oder Strafanzeige unverzichtbar. Immer zuerst sichern, dann aufräumen.
Nur Wordfence-Quarantäne statt sauberer Neuinstallation
Wordfence quarantäniert infizierte Files, hinterlässt aber oft Backdoors die der Scanner nicht erkennt. Sicherer: Core-Files, Themes und Plugins komplett neu installieren aus offiziellen Quellen.
EDÖB-Meldepflicht ignorieren
Seit dem revidierten DSG (1.9.2023) müssen Schweizer Verantwortliche bei Datenpannen mit Personendaten innert 72 Stunden den EDÖB informieren. Versäumnis kann hohe Bussen nach sich ziehen.
Was wenn etwas nicht klappt?
Webseite wird nach Bereinigung erneut infiziert
Die ursprüngliche Sicherheitslücke ist noch offen. Häufige Ursachen: veraltetes Plugin/Theme, geleaktes Passwort eines Admins, Backdoor an unerwarteter Stelle (z.B. .well-known/, mu-plugins/). Komplette Neuinstallation und alle Credentials rotieren.
Google zeigt weiter die rote Sicherheitswarnung
Reconsideration-Request in Search Console einreichen unter Sicherheit & manuelle Massnahmen. Davor sicherstellen, dass externe Scanner (Sucuri SiteCheck) keine Spuren mehr finden. Google braucht 1-3 Tage zur Prüfung.
Kein Backup vor der Infektion vorhanden
Schwierig aber lösbar. WordPress Core via wp-cli komplett neu, Themes/Plugins aus offiziellen Repos. Content aus dem aktuellen (infizierten) Backup extrahieren, Posts und Pages manuell prüfen. Custom-Code via Git-History oder Wayback-Machine rekonstruieren.
Hoster sperrt die Webseite wegen Malware
Hoster kontaktieren, Bereinigungs-Plan kommunizieren, temporären Backend-Zugang anfragen. Nach Bereinigung schriftlich Freischaltung beantragen mit Bericht was bereinigt wurde. Bei wiederholten Sperrungen Hoster wechseln (siehe verwandte Anleitung).
Lieber von uns bereinigen lassen?
Erstdiagnose mit Statusbericht ab CHF 240. Komplette Bereinigung inkl. Härtung und 30 Tage Monitoring zwischen CHF 580 und 1'400. Bei DSG-relevanten Datenlecks unterstützen wir bei der EDÖB-Meldung.
Verwandte Anleitungen und Services
Vertiefen oder direkt machen lassen.
Häufige Fragen
Wie erkenne ich, dass meine Webseite gehackt wurde?
Typische Symptome: Google-Sicherheitswarnung im Suchergebnis, Browser-Warnung beim Aufruf, plötzlich auftauchender Spam-Content, unbekannte Admin-User, ungewöhnliche Server-Last, neue Files in uploads/, defekte Funktionen ohne erkennbaren Grund.
Muss ich Behörden informieren?
Bei Datenleck mit Personendaten von Schweizer Bürgern besteht nach revidiertem DSG seit Sept. 2023 Meldepflicht beim EDÖB innerhalb 72 Std. Bei Lösegeld oder gezieltem Angriff zusätzlich NCSC und ggf. Kantonspolizei.
Wie lange dauert die Bereinigung?
Standard-WordPress ohne grosse Schäden: 1.5-3 Stunden. Tief verankerte Malware mit kompromittierter DB und mehreren Backdoors: 6-12 Stunden. Wir bieten Erstdiagnose ab CHF 240, komplette Bereinigung ab CHF 580.
Reicht es, ein altes Backup zurückzuspielen?
Nur wenn das Backup garantiert vor der Infektion entstand. Viele Hacks sind Wochen aktiv, bevor sie sichtbar werden. Backup einspielen ohne Sicherheitslücken zu schliessen führt meist innert Tagen zur erneuten Infektion.
Was kostet professionelle Hilfe?
Bei AmuraDesign: Erstdiagnose CHF 240, komplette Bereinigung inkl. Härtung und 30 Tage Monitoring CHF 580-1'400 je nach Umfang. Bei DSG-Datenleck unterstützen wir die EDÖB-Meldung.