====== Virenscan-script ====== Mit diesem Script kann man Daten mit mehrere Scanengines prüfen. Es sollte ein separater Benutzer zur Ausführung des Programms verwendet werden. Dieser hat dann auch Berechtigungen auf die jew. Datenverzeichnisse und Unterverzeichnisse. Es wird davon ausgegangen das die Dateien über eine Webseite in das Verzeichnigs ''/virusscan/upload'' hochgeladen werden. Hier ein Beispiel: User1 = ghostbuster Mitglied der Gruppe "quarentine" (Benutzer der die Daten bearbeiten kann und das Virenscan-Script startet) User2 = quarentine (Benutzer dem das Quarantäneverzeichnis gehört) Ordnerstruktur: ^ ^ Ort ^ Berechtigungen ^ ^ Programmverzeichnis | ''/usr/local/bin'' | chown ghostbuster. /usr/local/bin/virusscan.sh chown ghostbuster. /usr/local/bin/scanner.sh chmod 700 /usr/local/bin/virusscan.sh chmod 700 /usr/local/bin/scanner.sh | ^ Konfigurationsverzeichnis | ''/etc/virusengines'' | | ^ Dateiverzeichnis | ''/virusscan'' | chgrp ghostbuster /virusscan chmod g+x /virusscan | ^ Quarantäneverzeichnis | ''/virusscan/quarentine'' | chgrp quarentine. /virusscan/quarentine chmod g+x /virusscan/quarentine | ^ Tempverzeichnis | ''/virusscan/tmp'' | chgrp ghostbuster. /virusscan chmod 760 /virusscan/tmp | ^ Scanverzeichnis | ''/virusscan/toScan'' | chgrp ghostbuster /virusscan/toScan | ^ Quellverzeichnis | ''/virusscan/upload'' | chown www-data. /virusscan/upload chmod g+x /virusscan/upload | ^ Logverzeichnis | ''/var/log/virusengines/'' | chgrp ghostbuster /var/log/virusengines chmod g+x /var/log/virusengines Hier eine Erläuterung zum Programmablauf. ===== virusscan.sh ===== Das Programm hat folgende Funktionen: - prüfen ob das Programm bereits läuft - verschiebt Dateien, samt der vorhandenen Ordnerstrucktur, aus dem Ordner ''/virusscan/upload'' in den Ordner ''/virusscan/toScan'' - Dateiliste der zu überprüfenden Dateien erstellen - Inhalte der Dateiliste mit mehreren Virus-Scanengines prüfen (Aufruf der Funktionen aus dem Programm ''scanner.sh'') - saubere Daten verbleiben im Ordner ''/virusscan/toScan'' - infizierte Daten werden in den Ordner ''/virusscan/quarentine'' verschoben - eine Freigabe in den lokalen Ordner '''' mounten - geprüfte und saubere Dateien werden, samt der vorhandenen Ordnerstrucktur, in den Ordner '''' verschoben - Mountpoint '''' unmounten Script: #!/bin/bash # # # # Dieses Script scannt Dateien mit verschiedenen Virenscannern # und verschiebt diese wenn sie sauber sind. # Bei Viren-Fund werden die Dateien in ein Quarantäne-Verzeichnis # verschoben und eine Mail versand. # ############ ## Hier den/die Virenscanengines (leerzeichen getrennt) angeben SCANNER="clamscan" ############ ############ ## Konfiguration zum Mail Versandt MAIL_SERVER=":25" EMAIL_SUB="Viren bei HTTP-Upload gefunden." EMAIL_FROM="" EMAIL_TO="" EMAIL_OPT="-o message-charset=utf-8" ############ ############ ## Mountverzeichnis MOUNT_DIR= ############ ############ ## Ab Hier nichts mehr verändern ############ PROG_DIR=/usr/local/bin CONF_DIR=/etc/virusengines FILES_DIR=/virusscan LOG_DIR=/var/log/virusengines SCANFILE_DIR=${FILES_DIR}/toScan INFECTED_DIR=${FILES_DIR}/quarentine TEMP_DIR=${FILES_DIR}/tmp UPLOAD_DIR=${FILES_DIR}/upload SCANFILELIST=files-to-scan.txt MOVEFILELIST=files-to-move.txt RSYNC=/usr/bin/rsync RSYNC_OPT="--remove-source-files" PROC_CHECK=`pgrep -c virusscan.sh` ## Check: Läuft das Programm noch? if [ ${PROC_CHECK} -gt 1 ]; then exit 5 else source ${PROG_DIR}/scanner.sh ## Alle Dateien von "Upload" nach "toScan" verschieben ${RSYNC} -a ${RSYNC_OPT} ${UPLOAD_DIR}/* ${SCANFILE_DIR} ## Liste mit zu scannenden Dateien erstellen find ${SCANFILE_DIR} -type f > ${FILES_DIR}/${SCANFILELIST} ## Scan for x in ${SCANNER}; do ${x} done ## Aufräumen rm ${FILES_DIR}/${SCANFILELIST} ## DFS mounten und saubere Dateien dahin verschieben sudo mount ${MOUNT_DIR} ${RSYNC} -r ${RSYNC_OPTS} ${SCANFILE_DIR}/* ${MOUNT_DIR} sudo umount ${MOUNT_DIR} fi ===== scanner.sh ===== Diese Programm steuert u. a. die einzelnen Antiviren-Scanengines. Grundsätzlich wird folgendes getan: - Funktion, für die jew. Scanengine, für das Programm ''virusscan.sh'' bereitstellen - Konfiguration für die jew. Scanengine aus der ".conf" Datei aus dem Ordner ''/virusscan/scanner-files'' auslesen - Scanengine mit den jew. Einstellungen starten - Im Log nach Virenfund suchen - bei einem Virenfund eine Mail mit der Log-Datei der Scanengine versenden Script (hier z.B. für die Scanengine "clamscan"): #!/bin/bash function clamscan () { source ${CONF_DIR}/${FUNCNAME[0]}.conf ${BIN} ${OPTS} > ${LOG} MALWARE=$(tail "${LOG}"|grep Infected|cut -d" " -f3); if [ "$MALWARE" -ne "0" ];then sendEmail -o ${EMAIL_OPT} -u ${EMAIL_SUB} -a "$LOG" -s ${MAIL_SERVER} -f "$EMAIL_FROM" -t "$EMAIL_TO" -m "Die Scanengine '${FUNCNAME[0]}' hat eine verdächtige Datei gefunden. \n Weitere Infos finden Sie in der Log-Datei."; fi } Konfigurationsdatei ''clamscan.conf'' (hier z.B. für die Scanengine "clamscan"): BIN=/usr/bin/${x} LOG=${LOG_DIR}/${x}.log OPTS="--infected --suppress-ok-results --tempdir=${TEMP_DIR} --recursive --allmatch --file-list=${FILES_DIR}/${SCANFILELIST} --move=${INFECTED_DIR} --detect-pua --detect-structured --scan-mail --scan-pe --scan-elf --scan-ole2 --scan-pdf --scan-swf --scan-html --scan-archive --detect-broken --block-encrypted" ==== Neue Engine hinzufügen ==== - Scanengine installieren - Konfigurationsdatei erstellen und wie folgt benennen .conf (Datei ''/etc/virusengines/scan-leer.conf'' kopieren und verwenden) - Funktion im Programm ''scanner.sh'' definieren (**WICHTIG**: ggf. die Suchbegriffe für die Variable "MALWARE" anpassen) - neue Funktion im Programm ''virusscan.sh'' in der Variable ''SCANNER'' hinzufügen (durch Leerzeichen getrennt) - neue Scanengine testen