Wenn eine Website unerwartet weiterleitet, Spam-E-Mails versendet, unbekannte Dateien anzeigt oder der Browser vor einer Gefahr warnt, wurde sie wahrscheinlich gehackt. Wir empfehlen zwei kostenlose Tools, um infizierte Dateien auf dem Server aufzuspüren:
- ClamAV: ein allgemeines, quelloffenes Antivirenprogramm, das eine Vielzahl von Malware erkennt;
- Linux Malware Detect (Maldet): Dieses Tool ist speziell auf PHP-Malware (Webshells, eingeschleuste Codes) ausgerichtet, wie sie typischerweise auf Webhosting-Servern vorkommt, und kann für die Überprüfung auch ClamAV nutzen.
Dieser Artikel richtet sich an Betreiber eigener VPS- oder dedizierter Server. Auf Shared Hosting dürfen Sie solche Programme nicht installieren; sollten Sie dort einen Verdacht auf eine Infektion haben, wenden Sie sich bitte an unseren Support.
ClamAV
Installation
AlmaLinux, Rocky Linux (aus dem EPEL-Repository):
sudo dnf install epel-release
sudo dnf install clamav clamav-update
Unter AlmaLinux 10 installiert der Befehl „clamav-update“ das Paket „clamav-freshclam“, das den Befehl „freshclam“ ausführt; der Befehl funktioniert auf dieselbe Weise. Wir haben die Schritte auf einem AlmaLinux 10.2-System mit ClamAV 1.4.6 und Maldet 1.6.6 getestet.
Ubuntu, Debian:
sudo apt install clamav clamav-freshclam
Aktualisierung der Virendatenbank
sudo freshclam
Unter Ubuntu und Debian führt der Dienst „clamav-freshclam“ im Hintergrund automatische Aktualisierungen durch; wenn die Protokolldatei gemäß dem Befehl „freshclam“ gesperrt ist, läuft der Dienst gerade und es sind keine weiteren Maßnahmen erforderlich. Unter AlmaLinux können Sie die automatische Aktualisierung mit dem Befehl „sudo systemctl enable --now clamav-freshclam“ aktivieren.
Prüfung
sudo clamscan -r -i /var/www
-r: Durchsucht auch die Unterverzeichnisse,-i: Gibt nur die infizierten Dateien aus.
Die am Ende angezeigte Zeile „Infected files“ gibt die Anzahl der Fundstellen an. Bei dem Test wurde die unter /var/www abgelegte EICAR-Testdatei (ein harmloses Standardbeispiel zum Testen von Antivirenprogrammen) gefunden: „Infected files: 1“. Mit dem Schalter „--log=/root/clamscan.log“ können Sie das Ergebnis auch in einer Datei speichern.
ClamAV lädt zu Beginn der Überprüfung die gesamte Virendatenbank (im Test 3,6 Millionen Signaturen) in den Arbeitsspeicher: Im Test betrug die maximale Speicherauslastung ca. 965 MB, und die Überprüfung einer einzelnen Datei dauerte fast 3 Minuten – fast ausschließlich aufgrund des Ladevorgangs. Auf einem 2-GB-VPS ohne Swap-Datei kann dies sogar den OOM-Killer auslösen (siehe: Speicher erschöpft: OOM-Killer und Swap-Datei); überprüfen Sie daher alle betroffenen Verzeichnisse in einem einzigen Durchgang und vermeiden Sie zu viele separate „clamscan“-Aufrufe.
Linux Malware Detect (Maldet)
Installation
Maldet ist nicht in den Paket-Repositories verfügbar und muss von der Website des Entwicklers (R-fx Networks) heruntergeladen werden:
cd /usr/local/src
sudo curl -LO https://www.rfxn.com/downloads/maldetect-current.tar.gz
sudo tar -xzf maldetect-current.tar.gz
cd maldetect-*/
sudo ./install.sh
(Da wget auf dem AlmaLinux-Cloud-Image nicht installiert ist, wird in diesem Beispiel curl verwendet.) Das Installationsprogramm richtet zudem eine täglich ausgeführte Überprüfung (/etc/cron.daily/maldet) sowie eine automatische Aktualisierung der Signaturen ein.
Unter AlmaLinux und Rocky Linux gibt „sudo maldet“ die Fehlermeldung „command not found“ aus, da Maldet im Verzeichnis /usr/local/sbin installiert wird, das jedoch nicht im von sudo verwendeten Pfad (secure_path) enthalten ist. Geben Sie den vollständigen Pfad an (sudo /usr/local/sbin/maldet …) oder öffnen Sie eine Root-Shell (sudo -i). Die folgenden Beispiele gehen von Letzterem aus. Die Einstellungen befinden sich in der Datei /usr/local/maldetect/conf.maldet.
Ist ClamAV ebenfalls installiert, nutzt Maldet für die Überprüfung die „clamscan“-Engine (dies wird in der Datei „conf.maldet“ durch die Zeile „scan_clamscan="1"“ angegeben; im Test war dies der Standardwert), jedoch mit eigenen Signaturen, die speziell auf PHP-Malware zugeschnitten sind, wie sie typischerweise auf Webhosting-Servern vorkommt. Daher sind die beiden Tools nicht gegenseitig ersetzbar: Im Test wurde die EICAR-Testdatei von ClamAV erkannt, von Maldet jedoch nicht (malware hits 0). Es empfiehlt sich, die Überprüfung mit beiden Tools durchzuführen.
Prüfung
# Az aláírások frissítése
maldet -u
# Egy könyvtár átvizsgálása
maldet -a /var/www
# Csak az utóbbi 7 napban módosult fájlok vizsgálata (gyorsabb)
maldet -r /var/www 7
Am Ende der Prüfung gibt Maldet die Zusammenfassung und die Berichts-ID aus; im Test beispielsweise:
maldet(17656): {scan} scan completed on /var/www: files 110, malware hits 0, cleaned hits 0, time 174s
maldet(17656): {scan} scan report saved, to view run: maldet --report 261028-2314.17656
Das Ergebnis:
# A vizsgálatok listája
maldet --report list
# Egy vizsgálat részletes jelentése
maldet --report SCANID
Die gefundenen Dateien in Quarantäne verschieben (die Dateien werden dabei in das Verzeichnis „/usr/local/maldetect/quarantine“ verschoben und sind für die Website nicht mehr zugänglich):
maldet -q SCANID
Sollte eine Datei fälschlicherweise in Quarantäne verschoben worden sein, können Sie sie mit dem Befehl „maldet -s /usr/local/maldetect/quarantine/<fájlnév>“ wiederherstellen. (Da uns keine echte Schadsoftware-Datei zur Verfügung stand, haben wir weder das Verschieben in die Quarantäne noch die Wiederherstellung getestet.)
Was ist zu tun, wenn Sie eine Infektion feststellen?
Das Löschen der infizierten Dateien allein reicht nicht aus: Bleibt die vom Angreifer ausgenutzte Sicherheitslücke bestehen, wird die Website in Kürze erneut gehackt. Empfohlene Maßnahmen:
- Speichern Sie den aktuellen Zustand (einschließlich der infizierten Dateien) zur Untersuchung an einem Ort außerhalb des Verzeichnisses der Website.
- Ermitteln Sie die Art des Eindringens. Suchen Sie im Zugriffsprotokoll des Webservers (siehe: Logdateien unter Linux auslesen) nach Anfragen an die betroffenen Dateien und dem Zeitpunkt ihres ersten Auftretens. Häufige Ursachen sind veraltete Plugins, Templates oder CMS-Versionen sowie ein offengelegtes Passwort.
- Stellen Sie die Website aus einem sauberen Backup wieder her, sofern ein Backup vor dem Befall vorhanden ist; dies ist zuverlässiger als die einzelne Reparatur der infizierten Dateien.
- Aktualisieren Sie alles: das CMS, die Plugins und die Themes sowie die Server-Pakete (siehe: Systemaktualisierung mit dnf und apt). Entfernen Sie nicht verwendete Plugins und geknackte (nulled) Themes (siehe: Warum sollten Sie keine geknackten (nulled) WordPress-Themes und -Plugins verwenden?).
- Ändern Sie bitte alle Passwörter: die Passwörter für die CMS-Administration, die Datenbank sowie die FTP-/SFTP- und SSH-Konten.
- Überprüfen Sie auch den Server: unbekannte Benutzer (
/etc/passwd), SSH-Schlüssel (~/.ssh/authorized_keys), Cron-Aufträge (crontab -l,/etc/cron.d/) und laufende Prozesse (ps aux). Sollte sich der Angreifer Root-Rechte verschafft haben, ist eine Neuinstallation des Servers die sicherste Lösung.
Informationen zum Schutz von WordPress-Websites finden Sie im Artikel „Grundlegende WordPress-Sicherheitseinstellungen zum Schutz vor Hackerangriffen“.