Malware-Bereinigung: Schritt-für-Schritt Anleitung
1. Vorbereitung
Backup erstellen (WICHTIG!)
# Komplettes Backup vor der Bereinigung
tar -czf /backup/webserver_backup_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/
mysqldump --all-databases > /backup/mysql_backup_$(date +%Y%m%d_%H%M%S).sql
System isolieren
# Webserver stoppen
sudo systemctl stop apache2 # oder nginx
sudo systemctl stop php-fpm # falls verwendet
# Ausgehende Verbindungen blockieren (optional)
sudo iptables -A OUTPUT -p tcp --dport 80 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 443 -j DROP
2. Infizierte Dateien identifizieren
Scan-Ergebnisse analysieren
# Scan-Log überprüfen
cat /var/log/malwarescan.log
# Infizierte Dateien auflisten
grep ":" /var/log/malwarescan.log | cut -d: -f1 | sort -u > /tmp/infected_files.txt
# Anzahl betroffener Dateien
wc -l /tmp/infected_files.txt
Verdächtige Dateien genauer prüfen
# Datei-Details anzeigen
ls -lah /var/www/html/verdaechtige_datei.php
# Letzte Änderungen anzeigen
stat /var/www/html/verdaechtige_datei.php
# Dateiinhalt überprüfen
less /var/www/html/verdaechtige_datei.php
3. Malware entfernen
Methode A: Einzelne Dateien bereinigen
# Liste aller infizierten Dateien
while read file; do
echo "Prüfe: $file"
# Backup der infizierten Datei
cp "$file" "$file.infected_backup"
# Datei zur manuellen Prüfung markieren
done < /tmp/infected_files.txt
Methode B: Bekannte Malware-Dateien löschen
# Typische Malware-Dateien entfernen
find /var/www/ -type f -name "id[0-9]*.php" -delete
find /var/www/ -type f -name "moban.html" -delete
find /var/www/ -type f -name "map.log" -delete
find /var/www/ -type f -name "idlogs.txt" -delete
# Malware-Verzeichnisse entfernen
rm -rf /var/www/*/sitetarget/
Methode C: .htaccess bereinigen
# Backup erstellen
cp /var/www/html/.htaccess /var/www/html/.htaccess.backup
# Verdächtige RewriteRules entfernen
sed -i '/RewriteRule.*index\.php?id=/d' /var/www/html/.htaccess
sed -i '/RewriteRule.*?cat=/d' /var/www/html/.htaccess
# Oder komplett durch saubere Version ersetzen
cat > /var/www/html/.htaccess << 'EOF'
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
EOF
Methode D: Komplette Neuinstallation (empfohlen für CMS)
# Beispiel für WordPress
# 1. Datenbank-Backup (bereits erledigt)
# 2. wp-content sichern (Themes, Plugins, Uploads)
cp -r /var/www/html/wp-content /backup/wp-content_clean
# 3. WordPress-Core neu herunterladen
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
# 4. Alte Installation entfernen (außer wp-content und wp-config.php)
cd /var/www/html
rm -rf wp-admin wp-includes *.php
# 5. Neue Dateien kopieren
cp -r /tmp/wordpress/* /var/www/html/
# 6. wp-content wiederherstellen (vorher prüfen!)
# wp-content manuell auf Malware prüfen!
4. Datenbank bereinigen
Nach Backdoor-Nutzern suchen
-- WordPress Beispiel
SELECT * FROM wp_users WHERE user_login NOT IN ('admin', 'bekannter_nutzer');
-- Verdächtige Nutzer löschen
DELETE FROM wp_users WHERE user_login = 'verdaechtiger_name';
Nach injizierten Inhalten suchen
-- Nach base64-encodiertem Code suchen
SELECT * FROM wp_posts WHERE post_content LIKE '%base64_decode%';
SELECT * FROM wp_options WHERE option_value LIKE '%eval(%';
-- Nach verdächtigen Skripten suchen
SELECT * FROM wp_posts WHERE post_content LIKE '%<script%';
Optionen bereinigen
-- Verdächtige wp_options entfernen
DELETE FROM wp_options WHERE option_name LIKE '%malware%';
DELETE FROM wp_options WHERE option_name LIKE '%backdoor%';
5. Berechtigungen korrigieren
# Besitzer setzen
sudo chown -R www-data:www-data /var/www/html/
# Verzeichnis-Berechtigungen
find /var/www/html/ -type d -exec chmod 755 {} \;
# Datei-Berechtigungen
find /var/www/html/ -type f -exec chmod 644 {} \;
# Keine Schreibrechte für Webserver auf Core-Dateien
chmod 444 /var/www/html/wp-config.php
chmod 444 /var/www/html/.htaccess
6. Sicherheit verbessern
PHP-Sicherheit erhöhen
# /etc/php/8.1/apache2/php.ini bearbeiten
sudo nano /etc/php/8.1/apache2/php.ini
Folgende Einstellungen ändern:
expose_php = Off
display_errors = Off
log_errors = On
allow_url_fopen = Off
allow_url_include = Off
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
Web Application Firewall installieren
# ModSecurity installieren (Apache)
sudo apt install libapache2-mod-security2
sudo a2enmod security2
Fail2Ban konfigurieren
# Fail2Ban installieren
sudo apt install fail2ban
# Konfiguration für WordPress
sudo nano /etc/fail2ban/jail.local
[wordpress-auth]
enabled = true
port = http,https
filter = wordpress-auth
logpath = /var/log/apache2/access.log
maxretry = 3
bantime = 3600
7. Monitoring einrichten
Datei-Integritätsprüfung mit AIDE
# AIDE installieren
sudo apt install aide
# Datenbank initialisieren
sudo aideinit
# Regelmäßige Prüfung (Cron)
echo "0 2 * * * /usr/bin/aide --check" | sudo tee -a /etc/crontab
Automatischer Malware-Scan
# Täglichen Scan einrichten
sudo nano /etc/cron.daily/malware_scan
#!/bin/bash
LOGFILE="/var/log/malwarescan_$(date +%Y%m%d).log"
echo "[$(date)] Malware-Scan gestartet" > "$LOGFILE"
find /var/www/ -type f \( -name "*.php" -o -name "*.inc" \) -mtime -1 \
-exec grep -l "eval\|base64_decode\|exec\|system" {} \; >> "$LOGFILE"
# Bei Funden: Admin benachrichtigen
if [ $(wc -l < "$LOGFILE") -gt 1 ]; then
mail -s "Malware-Alarm auf $(hostname)" admin@example.com < "$LOGFILE"
fi
# Ausführbar machen
sudo chmod +x /etc/cron.daily/malware_scan
8. Passwörter ändern
Alle Zugänge erneuern
# System-Passwörter
sudo passwd root
sudo passwd www-data
# SSH-Keys neu generieren
ssh-keygen -t ed25519 -C "neu@example.com"
# Datenbank-Passwörter
mysql -u root -p
ALTER USER 'wordpress_user'@'localhost' IDENTIFIED BY 'NEUES_SICHERES_PASSWORT';
FLUSH PRIVILEGES;
CMS-Admin-Passwörter
- WordPress: Über wp-admin oder wp-cli
- Drupal:
drush user:password admin "neues_passwort"
- Joomla: Über Backend oder Datenbank
9. Neustart und Überprüfung
# Dienste neu starten
sudo systemctl start apache2
sudo systemctl start mysql
sudo systemctl start php-fpm
# Logs überwachen
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/malwarescan.log
# Netzwerkverbindungen prüfen
sudo netstat -tupn | grep ESTABLISHED
# Ausgehende Verbindungen überwachen
sudo tcpdump -i any -n 'dst port 80 or dst port 443'
10. Langfristige Maßnahmen
Checkliste
- Regelmäßige Updates (täglich/wöchentlich)
- Backups (täglich automatisiert)
- Monitoring aktiv
- Firewall konfiguriert
- SSH nur mit Key-Authentifizierung
- Unnötige Dienste deaktiviert
- Sicherheits-Plugins installiert
- Zwei-Faktor-Authentifizierung aktiviert
WordPress spezifisch
# Automatische Updates aktivieren
wp config set WP_AUTO_UPDATE_CORE true
Dokumentation
# Vorfallsbericht erstellen
cat > /root/incident_report_$(date +%Y%m%d).txt << EOF
Datum: $(date)
Betroffene Dateien: $(wc -l /tmp/infected_files.txt)
Gelöschte Malware: [Liste]
Geänderte Passwörter: Alle
Durchgeführte Maßnahmen: [Details]
EOF
Zusammenfassung kritischer Befehle
# Komplette Bereinigung (Übersicht)
# 1. Backup
tar -czf /backup/pre_cleanup_$(date +%Y%m%d).tar.gz /var/www/
# 2. Malware-Dateien finden
find /var/www/ -name "id[0-9]*.php" -o -name "moban.html" -o -name "map.log"
# 3. Löschen
find /var/www/ -name "id[0-9]*.php" -delete
rm -rf /var/www/*/sitetarget/
# 4. .htaccess bereinigen
cp /var/www/html/.htaccess /var/www/html/.htaccess.backup
sed -i '/RewriteRule.*index\.php?id=/d' /var/www/html/.htaccess
# 5. Berechtigungen
chown -R www-data:www-data /var/www/html/
find /var/www/html/ -type f -exec chmod 644 {} \;
# 6. Passwörter ändern (siehe oben)
# 7. Monitoring aktivieren (siehe oben)
Support und weitere Hilfe
Bei schweren Infektionen:
- Professionelle Sicherheitsfirma beauftragen
- Server-Provider kontaktieren
- Bei Datenverlust: Forensische Analyse erwägen
- Rechtliche Konsequenzen prüfen (Datenschutz, Meldepflicht)
Wichtig: Nach einer Malware-Infektion sollte das komplette System als kompromittiert betrachtet werden. Im Zweifelsfall ist eine komplette Neuinstallation die sicherste Lösung.