Inhaltsverzeichnis

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:

  1. prüfen ob das Programm bereits läuft
  2. verschiebt Dateien, samt der vorhandenen Ordnerstrucktur, aus dem Ordner /virusscan/upload in den Ordner /virusscan/toScan
  3. Dateiliste der zu überprüfenden Dateien erstellen
  4. Inhalte der Dateiliste mit mehreren Virus-Scanengines prüfen (Aufruf der Funktionen aus dem Programm scanner.sh)
    1. saubere Daten verbleiben im Ordner /virusscan/toScan
    2. infizierte Daten werden in den Ordner /virusscan/quarentine verschoben
  5. eine Freigabe in den lokalen Ordner <MOUNT_DIR> mounten
  6. geprüfte und saubere Dateien werden, samt der vorhandenen Ordnerstrucktur, in den Ordner <MOUNT_DIR> verschoben
  7. 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:

  1. Funktion, für die jew. Scanengine, für das Programm virusscan.sh bereitstellen
    1. Konfiguration für die jew. Scanengine aus der „.conf“ Datei aus dem Ordner /virusscan/scanner-files auslesen
    2. Scanengine mit den jew. Einstellungen starten
    3. Im Log nach Virenfund suchen
    4. 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

  1. Scanengine installieren
  2. Konfigurationsdatei erstellen und wie folgt benennen <FUNKTIONS_NAME>.conf (Datei /etc/virusengines/scan-leer.conf kopieren und verwenden)
  3. Funktion im Programm scanner.sh definieren (WICHTIG: ggf. die Suchbegriffe für die Variable „MALWARE“ anpassen)
  4. neue Funktion im Programm virusscan.sh in der Variable SCANNER hinzufügen (durch Leerzeichen getrennt)
  5. neue Scanengine testen