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/ |
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
<MOUNT_DIR>
mounten - geprüfte und saubere Dateien werden, samt der vorhandenen Ordnerstrucktur, in den Ordner
<MOUNT_DIR>
verschoben - Mountpoint
<MOUNT_DIR>
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="<MAILSERVER>:25" EMAIL_SUB="Viren bei HTTP-Upload gefunden." EMAIL_FROM="<FROM_MAILADRESSE>" EMAIL_TO="<TO_MAILADRESSE>" EMAIL_OPT="-o message-charset=utf-8" ############ ############ ## Mountverzeichnis MOUNT_DIR=<PFAD> ############ ############ ## 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“):
<code bash>#!/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“):
<code bash>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 <FUNKTIONS_NAME>.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 VariableSCANNER
hinzufügen (durch Leerzeichen getrennt) - neue Scanengine testen