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.

ispp_scan_1

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

ispp_scan_2

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.