Mit ISPProtect nach Malware und Viren scannen.
Der ISPProtect Malware-Scanner muss nicht auf ihrem Server installiert werden, es reicht aus, ihm zum Beispiel nach /tmp herunterzuladen und das Archiv dort zu entpacken. Wenn Sie den Scanner regelmäßig nutzen möchten, empfehlen wir Ihnen, ISPProtect wie im Kapitel „ISPProtect Installation“ zu installieren.
Loggen Sie sich als root Benutzer auf der Shell ihres Servers ein und laden Sie ISPProtect mit wget in das /tmp Verzeichnis herunter. Anschließend entpacken Sie das Archiv mit Tar.
cd /tmp wget https://www.ispprotect.com/download/ispp_scan.tar.gz tar xzf ispp_scan.tar.gz
Dann starten Sie den Scanprozess:
./ispp_scan
Im ersten Schritt prüft der Scanner, ob die Systemvoraussetzungen erfüllt sind. ISPProtect benötigt PHP in der Version 5.2-7.0 sowie die Antivirus-Software ClamAV.
Geben Sie den ISPProtect Lizenzschlüssel ein oder das Wort "trial" wenn Sie ISPProtect testen möchten
Please enter scan key (or TRIAL if you have none, yet): ← TRIAL
Nun wird das Programm nach dem zu scannenden Pfad Fragen. Dies ist das Verzeichnis, in dem die Webseiten gespeichert sind. In den meisten Fällen ist dies /var/www oder /srv/www auf Servern mit dem OpenSuse Betriebssystem.
Please enter path to scan: ← /var/www
Der Scan startet nun. Der ISPProtect Scanner wird das Ergebnis auf dem Bildschirm anzeigen und zusätzlich in den oben gelisteten Dateien speichern. Des Weiteren wird die geschätzte Scandauer angezeigt.
Der Scan besteht aus drei Schritten: Im ersten Schritt wird das System mit einem signaturbasierten Scanner überprüft, im zweiten Schritt findet eine Überprüfung mit dem heuristischen Scanner statt, im dritten Schritt wird ihr System schließlich auf veraltete CMS-Systeme überprüft.
Im folgenden sehen Sie die komplette Ausgabe eines ISPProtect Scans.
./ispp_scan _____ _____ _____ _____ _ _ |_ _|/ ____| __ \| __ \ | | | | | | | (___ | |__) | |__) | __ ___ | |_ ___ ___| |_ | | \___ \| ___/| ___/ '__/ _ \| __/ _ \/ __| __| _| |_ ____) | | | | | | | (_) | || __/ (__| |_ |_____|_____/|_| |_| |_| \___/ \__\___|\___|\__| __ __ _ _____ \ \ / / | | / ____| \ \ /\ / /__| |__ | (___ ___ __ _ _ __ _ __ ___ _ __ \ \/ \/ / _ \ '_ \ \___ \ / __/ _` | '_ \| '_ \ / _ \ '__| \ /\ / __/ |_) | ____) | (_| (_| | | | | | | | __/ | \/ \/ \___|_.__/ |_____/ \___\__,_|_| |_|_| |_|\___|_| Version 1.6.1 (c) 2015 by ISPConfig UG all rights reserved Downloading ionCube Loader for your system. ionCube Check succeeded. Please enter scan key (or TRIAL if you have none, yet): TRIAL Please enter path to scan: /var/www Starting malware scan. This can take a long, long time depending on the server hardware and the amount of files ... !!! DO NOT INTERRUPT THE SCRIPT !!!! After the scan is completed, you will find the results also in the following files: Malware => /tmp/found_malware_20152911154431.txt Wordpress => /tmp/software_wordpress_20152911154431.txt Joomla => /tmp/software_joomla_20152911154431.txt Drupal => /tmp/software_drupal_20152911154431.txt Mediawiki => /tmp/software_mediawiki_20152911154431.txt Plugins => /tmp/plugins_20152911154431.txt Starting scan level 1 ... Scanning 82044 files now ... Scan level 1 completed. 3 hits. Starting scan level 2 ... Scanning 32233 files now ... Scan level 2 completed. 2 hits. ================================ Found 5 malware file(s) ================================ Malware suspect.globals.eval in /var/www/clients/client16/web30/web/include/resource/post.php Malware suspect.post.eval in /var/www/clients/client4/web2/web/wiki.php Malware {HEX}r2h.malware.blue.13 in /var/www/clients/client5/web18/web/webtools_forum/mod.php Malware {HEX}php.exe.globals.400 in /var/www/clients/client8/web24/web/blog/maintenance/gen.php Malware winnow.malware.vx.url.929756 in /var/www/webalizer/usage_201509.html ================================ Starting WordPress check. This could take a while ... Most decent version(s): 4.3.1 Outdated wordpress version: 2.2.2 (newest is 4.3.1) in "/var/www/clients/client9/web2/web" Outdated wordpress version: 2.2.1 (newest is 4.3.1) in "/var/www/clients/client8/web3/web" Outdated wordpress version: 2.7.1 (newest is 4.3.1) in "/var/www/clients/client4/web7/web" Outdated wordpress version: 2.6 (newest is 4.3.1) in "/var/www/clients/client17/web33/web" Outdated wordpress version: 3.6 (newest is 4.3.1) in "/var/www/clients/client5/web17/web/website" Outdated wordpress version: 3.5.1 (newest is 4.3.1) in "/var/www/clients/client5/web17/web/old/website" Outdated wordpress version: 2.8 (newest is 4.3.1) in "/var/www/clients/client22/web39/web" Outdated wordpress version: 2.8.1 (newest is 4.3.1) in "/var/www/clients/client22/web39/web/wp-content/upgrade/wordpress-2.8.1/wordpress" Outdated wordpress version: 3.2.1 (newest is 4.3.1) in "/var/www/clients/client10/web25/web" Outdated wordpress version: 3.0.1 (newest is 4.3.1) in "/var/www/clients/client21/web38/web" Outdated wordpress version: 3.1 (newest is 4.3.1) in "/var/www/clients/client21/web38/web/wp-content/upgrade/wordpress-3.tmp/wordpress" Outdated wordpress version: 3.0.1 (newest is 4.3.1) in "/var/www/clients/client21/web38/web/wp-content/upgrade/core/wordpress" Wordpress check found 0 current and 12 outdated versions. ================================ Starting Joomla check. This could take a while ... Most decent version(s): 2.5.28, 3.1.3, 3.2.7, 3.4.5 Joomla check found 0 current and 0 outdated versions. ================================ Starting Drupal check. This could take a while ... Most decent version(s): 8.0.0, 7.41, 6.37 Drupal check found 0 current and 0 outdated versions. ================================ Starting Mediawiki check. This could take a while ... Most decent version(s): 1.26.0 Outdated mediawiki version: 1.9.3 (newest is 1.26.0) in "/var/www/clients/client8/web9/web/wiki" Outdated mediawiki version: 1.14.0 (newest is 1.26.0) in "/var/www/clients/client2/web6/web/disabled_9841" Mediawiki check found 0 current and 2 outdated versions. ================================ Wordpress plugin All In One SEO V1.4.7 in /var/www/clients/client9/web2/web/ is vulnerable to Privilege escalation
ISPProtect installieren
ISPProtect kann ohne Installation auf ihrem Server verwendet werden. Wenn Sie ISPProtect jedoch regelmäßig nutzen möchten, empfehlen wir Ihnen, die Software auf Ihrem Server wie folgt zu installieren.
Loggen Sie sich als root Benutzer auf der Shell Ihres Servers ein. Erstellen Sie ein Verzeichnis für ISPProtect, wir werden das folgende Verzeichnis nutzen: /usr/local/ispprotect
mkdir -p /usr/local/ispprotect chown -R root:root /usr/local/ispprotect chmod -R 750 /usr/local/ispprotect cd /usr/local/ispprotect wget http://www.ispprotect.com/download/ispp_scan.tar.gz tar xzf ispp_scan.tar.gz rm -f ispp_scan.tar.gz ln -s /usr/local/ispprotect/ispp_scan /usr/local/bin/ispp_scan
Nun können Sie ISPProtect mit dem folgenden Befehl starten:
ispp_scan
Ohne hierfür erst in das Installationsverzeichnis zu wechseln.
ISPProtect aktualisieren
Führen Sie den ispp_scan Befehl aus, er wird Sie darüber informieren, wenn eine aktuellere Version zur Verfügung steht. Das Update wird automatisch heruntergeladen, nachdem Sie den Vorgang bestätigt haben. Die Malware Signaturen werden automatisch bei jedem Start aktualisiert.
Malware melden
ISPProtect enthält eine Funktion, mit der sie Malware melden können, die nicht durch den Scanner erkannt wurde.
./ispp_scan --report=/path/to/the/malware/file.php
ISPProtect wird nach Ihrer Erlaubnis fragen, bevor es uns Dateien sendet. Bitte senden Sie uns keine Dateien, die Passwörter oder andere sensible Informationen enthalten. Unsere Sicherheitsspezialisten werden die gemeldeten Dateien analysieren (dies dauert im Normalfall ein bis zwei Tage) und dann auf der Basis ihrer Datei eine neue Malware-Signatur erstellen.
Beispiel:
root@web:/tmp# ./ispp_scan --report=/var/www/web1/tool1.php _____ _____ _____ _____ _ _ |_ _|/ ____| __ \| __ \ | | | | | | | (___ | |__) | |__) | __ ___ | |_ ___ ___| |_ | | \___ \| ___/| ___/ '__/ _ \| __/ _ \/ __| __| _| |_ ____) | | | | | | | (_) | || __/ (__| |_ |_____|_____/|_| |_| |_| \___/ \__\___|\___|\__| __ __ _ _____ \ \ / / | | / ____| \ \ /\ / /__| |__ | (___ ___ __ _ _ __ _ __ ___ _ __ \ \/ \/ / _ \ '_ \ \___ \ / __/ _` | '_ \| '_ \ / _ \ '__| \ /\ / __/ |_) | ____) | (_| (_| | | | | | | | __/ | \/ \/ \___|_.__/ |_____/ \___\__,_|_| |_|_| |_|\___|_| Version 1.6.1 (c) 2015 by ISPConfig UG all rights reserved ionCube Check succeeded. Please note that the FULL file is sent to the ISPProtect server. We will delete all files after investigation but you should NOT SEND files containing LOGIN DATA etc. Please confirm that you want to send tool1.php (y/N):<- y Thank you. We have received your report and will check the file. Be aware that we cannot reply to your report.
Fehlerhaft erkannte Malware melden
ISPProtect enthält eine Funktion, mit der sie uns fälschlicherweise als Malware gekennzeichnete Dateien melden können.
./ispp_scan --false-positive=/path/to/the/malware/file.php
ISPProtect wird nach Ihrer Erlaubnis fragen, bevor es uns Dateien sendet. Bitte senden Sie uns keine Dateien die Passwörter oder andere sensible Informationen enthalten. Unsere Sicherheitsspezialisten werden die gemeldeten Dateien analysieren (dies dauert im Normalfall ein bis zwei Tage) und dann auf der Basis ihrer Datei einen Whitelist-Eintrag erstellen.
Für den Fall, dass es sich bei der gemeldeten Datei um eine HTML Datei handelt, die von einem Webstatistik Tool erstellt wurde, dann melden Sie diese bitte nicht als False Positive. Zugriffe auf Malware, die von einem Webstatistik Tool erfasst wurden, können dazu führen, dass die Statistik-Datei im Malware-Report auftaucht. Dabei handelt es sich nicht um einen False Positive.
ISPProtect entfernen
ISPProtect installiert keine Software auf Ihrem Server. Um ISPProtect zu entfernen, müssen Sie lediglich alle ispp_scan* Dateien in dem Ordner löschen, in den sie ISPProtect heruntergeladen haben.
ISPProtect im inkerementellen Modus starten
Wenn Sie ISPProtect regelmäßig als Cronjob laufen lassen, dann werden sie vermutlich nicht bei jedem Lauf alle Dateien scannen wollen. Für diesen Fall stellt ISPProtect einen inkrementellen Modus bereit, in dem Sie nur die neu hinzugekommenen Dateien der letzten X Tage scannen können. Fügen Sie einfach --max-age=2 zur Liste der Argumente des ispp_scan-Befehls hinzu und der Scanner wird alle Dateien, die älter als 2 oder (X) Tage sind, überspringen. Bitte Vergessen Sie nicht, dass das Änderungsdatum einer Datei gefälscht sein kann, daher empfehlen wir, mindestens einmal im Monat einen Scan aller Dateien durchzuführen.
Lokale White-List
ISPProtect ermöglicht das Anlegen einer lokalen White-List.
ispp_scan --whitelist=/pfad/zu/einer/datei.php
In der Whitelist wird der MD5-Hash der Datei gespeichert, sodass automatisch alle anderen Dateien mit identischem Inhalt ebenfalls bei den Funden ausgeschlossen werden.
Der Standard-Speicherort für diese Datei ist ~/.ispp_scan.whitelist, er kann geändert werden, indem ISPProtect der Parameter whitelist-path übergeben wird:
ispp_scan --whitelist-path=/home/user/.ispprotect.wl --whitelist=/pfad/zur/datei.php
Der whitelist-path Parameter kann bei normalen Scans ebenfalls verwendet werden, um den benutzerdefinierten Speicherort statt dem Standard zu verwenden.
Malware-Arten ignorieren
Es ist möglich, bestimmte Malware-Arten mit dem ignore-Parameter zu ignorieren, z. B. mit:
ispp_scan --ignore={ISPP}suspect.eval.base64
Dies würde alle Malware-Dateien mit dem Typ {ISPP}suspect.eval.base64 ignorieren (natürlich nicht empfohlen). Der Parameter kann mehrfach angegeben werden, um mehrere Malware-Arten bei einem Scan zu ignorieren.
ISPProtect als Cronjob ausführen
Erstellen Sie eine Cron-Datei, um ISPProtect täglich, wöchentlich oder monatlich auf dem Server auszuführen. Wir gehen davon aus, dass Sie ISPProtect in folgendem Verzeichnis installiert haben: /usr/local/ispprotect
Führen Sie den folgenden Befehl als root Benutzer auf der Shell aus:
nano /etc/cron.d/ispprotect
Fügen Sie den folgenden Inhalt in die Datei ein:
# # ISPProtect cronjob # # Minute Hour Day of Month Month Day of Week User Command # (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat) # Daily ISPProtect cronjob # 0 3 * * * root /usr/local/ispprotect/ispp_scan --update && /usr/local/ispprotect/ispp_scan --path=/var/www --email-results=root@localhost --non-interactive --scan-key=AAA-BBB-CCC-DDD # Daily incremental ISPProtect cronjob # 0 3 * * * root /usr/local/ispprotect/ispp_scan --update && /usr/local/ispprotect/ispp_scan --no-version-scan --path=/var/www --email-results=root@localhost --non-interactive --max-age=2 --scan-key=AAA-BBB-CCC-DDD # Weekly ISPProtect cronjob run on sunday # 0 3 * * 0 root /usr/local/ispprotect/ispp_scan --update && /usr/local/ispprotect/ispp_scan --path=/var/www --email-results=root@localhost --non-interactive --scan-key=AAA-BBB-CCC-DDD # Monthly ISPProtect cronjob # 0 3 1 * * root /usr/local/ispprotect/ispp_scan --update && /usr/local/ispprotect/ispp_scan --path=/var/www --email-results=root@localhost --non-interactive --scan-key=AAA-BBB-CCC-DDD
Folgende Anpassungen müssen an der Crondatei durchgeführt werden:
1) Entfernen Sie die # vor einer der 4 cron Befehlszeilen.
2) Ersetzen Sie /var/www durch den Pfad, der gescanned werden soll.
3) Ersetzen Sie root@localhost mit Ihrer Emailadresse. Das Scanergebnis wird an diese Adresse versendet.
4) Ersetzen Sie AAA-BBB-CCC-DDD Mit ihrem ISPProtect Lizenzschlüssel..
ISPProtect Installation mit Puppet
Puppet kann verwendet werden um ISPProtect automatisiert in größeren Serverfarmen zu installieren: Das ISPProtect Puppet Modul, entwickelt von Eelco Maljaars, ist auf Puppet Forge verfügbar:
https://forge.puppet.com/eelcomaljaars/ispprotect
Der Sourcecode kann auch auf GitHub heruntergeladen werden.
https://github.com/eelcomaljaars/puppet_ispprotect/
Erweiterte Optionen
Führen Sie den folgenden Befehl aus:
ispp_scan --help _____ _____ _____ _____ _ _ |_ _|/ ____| __ \| __ \ | | | | | | | (___ | |__) | |__) | __ ___ | |_ ___ ___| |_ | | \___ \| ___/| ___/ '__/ _ \| __/ _ \/ __| __| _| |_ ____) | | | | | | | (_) | || __/ (__| |_ |_____|_____/|_| |_| |_| \___/ \__\___|\___|\__| __ __ _ _____ \ \ / / | | / ____| \ \ /\ / /__| |__ | (___ ___ __ _ _ __ _ __ ___ _ __ \ \/ \/ / _ \ '_ \ \___ \ / __/ _` | '_ \| '_ \ / _ \ '__| \ /\ / __/ |_) | ____) | (_| (_| | | | | | | | __/ | \/ \/ \___|_.__/ |_____/ \___\__,_|_| |_|_| |_|\___|_| Version 1.24.14 (c) 2015-2018 by ISPConfig UG all rights reserved ionCube Check succeeded. Usage instructions: Call ./ispp_scan [--path=] [--no-version-scan] [--no-malware-scan] [--exclude= ] [--exclude-from=] [--ignore-chmod0] [--no-plugin-version-scan] [--email-results= , ,... [--email-empty-results]] [--non-interactive] [--quarantine[=xxxxxx] [--all|--restore]] [--scan-key= ] [--whitelist-path=] [--max-age= ] [--incremental[=all]] [--show-hits] [--ignore= ] [--use-tmp= ] [--db-scan[= ]] [--db-scan-maxrows] [--blacklist-check] or Call ./ispp_scan --key-status [--scan-key=] or Call ./ispp_scan --update [--email-results= , ,...] or Call ./ispp_scan --report= [--email= ] or Call ./ispp_scan --false-positive= [--force-yes] [--email= ] or Call ./ispp_scan --whitelist= [--whitelist-path=] --path What path should be scanned for malware? If not given, path is asked on script run. --no-malware-scan Don't scan for malware. --no-version-scan Don't scan for outdated web software (this implies --no-plugin-version-scan). --no-plugin-version-scan Don't Scan for outdated wordpress plugins. --no-dereference Don't resolve symlinks in paths found having outdated software versions. --no-symlinks Don't follow symlinks in typo3 check. ONLY use if you have issues with scan. --email-results Send found malware and outdated software to the provided address(es). --email-results-sender Set the sender address for your report emails. --email-empty-results Send scan report to email even if no malware was found. --email-hostname Use this hostname for email reports instead of guessing it. --use-smtp Use smtp mail sending instead of internal mail() function. You need to provide a configuration file with smtp settings, i. e. --use-smtp=/path/to/ispp_mail.cnf The file must be of the following form: [ispprotect-smtp] use_smtp = yes smtp_host = mail.yourdomain.com smtp_port = 25 smtp_user = yoursmtpusername smtp_pass = yoursmtppassword smtp_crypt = ssl Instead of ssl you can choose tls as encryption mode. --non-interactive Do not ask for input. You need to provide --scan-key to use non-interactive mode. Automatic updates are disabled. --ignore Malware of this type is not included in results (case-insensitive), e.g. --ignore={ISPP}suspect.eval.base64 Can be used multiple times. --exclude You can specify patterns to exclude from files to scan, e. g. --exclude='*.png' to ignore all png files. * is a placeholder for all characters except /. Do exclude full paths, use **, e. g. --exclude='**/log/*.log' Can be used multiple times. --exclude-from To avoid having to specify --exclude many times you can use --exclude-from pointing to a file that contains multiple exclude patterns (same form as for --exclude), one line each. Can be used multiple times. --quarantine Move infected files to quarantine directory. --quarantine=YYYYMMDDHHMMSS Move infected files from a finished run to quarantine directory. --all Also move possibly malicious files to quarantine directory (higher risk of false positives being moved). --restore Restore all quarantined files of a scan. --whitelist File will be added to the local whitelist. --whitelist-path Path to the hash file for the whitelist. Default is ~/.ispp_scan.whitelist --key-status Check status of provided key (e. g. amount of scans left). --scan-key Provide your scan key for non-interactive mode or the path to the file containing your scan key. --show-hits Show found malware files during scan (you will lose the progress output). --max-age Scan only files newer than X days. --ignore-chmod0 This option ignores all files that have a chmod of 000 during scan. --incremental Only check files at level 2 that have not been previously scanned as 'clean'. --time-check Check files for possibly faked modification times. This feature is only available on some file systems and is known to throw a lot of false positives. You should only use this for diagnostic purposes. If no signature file is found or it was created by a previous ISPProtect version, a full run is done. If using --incremental the --max-age argument is NOT taken into account for scan level 2! If used with --incremental=all found malware files will not be scanned again on next run, too. --update Update ISPProtect silently and quit. Return code will be 0 on success, 1 otherwise. --report Send a file to ISPProtect server that was accidently not recognized as malware. --false-positive Send a file to ISPProtect server that was accidently recognized as malware. --force-yes Do not ask for confirmation before sending a false positive file to the ISPProtect server. --use-tmp If your /tmp directory has not enough space or is not usable, you can specify an alternative path here. --db-scan This feature will scan your (local) databases for suspect contents. This feature is still in *experimental* state, but it can't do any harm to use it. On Debian-based servers it should be enough to use --db-scan because the tool uses the credentials from the /etc/mysql/debian.cnf config file. On servers that don't have this file, you have to create your own and provide the path, e. g. --db-scan="/root/myisppdatabase.cnf" The file's contents should look like this: [ispprotect] user = yourmysqluser password = yourmysqlpassword host = yourmysqlhost The "host" entry is optional, default is "localhost". Please make sure that the config file is not readable by unprivileged users! For security reasons you can create a special database user that has read-only privileges. --db-scan-maxrows By default the tool scans up to 1.000.000 rows per database table. Your can set this value to a lower one, e. g. --db-scan-maxrows=10000 If you want to scan ALL rows (not recommended) you can set --db-scan-maxrows=0 --db-no-context Do not display the context of found strings in databases --db-exclude Do not scan databases matching the string, wildcards supported (? = single char, * = any substring) --db-exclude-table Do not scan tables matching the string, wildcards supported (? = single char, * = any substring) --db-only Do ONLY scan databases matching the string, wildcards supported (? = single char, * = any substring) --db-only-table Do ONLY scan tables matching the string, wildcards supported (? = single char, * = any substring) these four arguments can be used multiple times to exclude / only scan multiple dbs/tables --blacklist-check The scanner tries to extract your set up domains from /etc (Apache / Nginx for now) and sends the domain names to different third party sites. If those services return matches for any of the domains, those are presented by ISPProtect.