Das Open-Source-Project ClamAV [1] ist derzeit der einzig frei verfügbare Virenscanner. Sein prominentestes Leistungsmerkmal ist ein Daemon, der über einen Netzwerkport oder Socket Anfragen entgegennimmt. Zusatzmodule, so genannte Third Party Addons, eröffnen viele Möglichkeiten, den Virenscanner in Mail- und Fileservern sowie Proxys und Webservern einzubinden.
Daneben agiert ClamAV auch als Kommandozeilenvirenscanner, für den es zwischenzeitlich viele grafische Oberflächen gibt zum Beispiel KlamAV.
Für beinahe alle großen Distributionen stehen passende Pakete zum Download bereit oder sind bereits deren Bestandteil. Eine Übersicht aller im Binärformat erhältlichen Pakete finden Sie auf der Webseite [2]. Sollten alle Stricke reißen, erledigen Sie das Übersetzen der Quellcodes mit dem bekannten Dreisatz configure, make und make install ebenfalls schnell.
ClamAV besteht aus mehreren Komponenten, die für verschiedene Aufgaben zuständig sind: Der Kommandozeilen-Client clamscan prüft Dateien auf Virenbefall. Das Programm clamdscan arbeitet ähnlich, verwendet jedoch zum Scannen den Daemon clamd. Für die Aktualität der Virendefinitionen sorgt freshclam.
Die Schädlingsdatenbank, die als Grundlage des Virenscanners dient, enthalten die Binärpakete meist nicht. Sie finden sie unter dem Paketnamen clamav-db.
Damit die Signaturen immer dem aktuellen Stand entsprechen, gilt es zunächst, den Update-Daemon mit dem Aufruf /etc/init.d/freshclam start zu aktivieren. Die Konfigurationsdatei /etc/freshclam.conf beschreibt zum einen, in welchem Turnus (in der Grundeinstellung alle zwei Stunden) der Daemon nach aktualisierten Virensignaturen Ausschau hält, und zum anderen, auf welchem Server er nachsehen soll. Damit das Programm weiß, welchen Mirror es verwenden soll, ersetzen Sie darin den Eintrag DatabaseMirror db.XY.clamav.net durch DatabaseMirror db.de.clamav.net.
Möchten Sie die Datenbank manuell aktualisieren, genügt der Aufruf freshclam ohne weitere Parameter. Die Ausgabe (Abbildung 1) zeigt dann die Aktualität der Datenbank, die derzeit aus etwa 78 000 Signaturen bestehen, welche das Programm im Verzeichnis /var/lib/clamav speichert.
Neben den Signaturen bedürfen auch die Programme einer regelmäßigen Aktualisierung. ClamAV prüft die Aktualität bei jedem Start einer Komponente und gibt die Meldung WARNING: Your ClamAV installation is OUTDATED! aus, falls eine neuere Version zum Herunterladen bereit steht. Zur Aktualisierung eines RPM-Paketes verwenden Sie den Aufruf rpm -Uvh Paket
, eine APT-Installation aktualisieren Sie mit apt-get update Paket
.
Das Kommandozeilenprogramm Clamscan erweist sich immer dann als nützlich, wenn das Betriebssystem keine grafische Oberfläche besitzt, wie das meist bei Servern der Fall ist. Die Eingabe von clamscan Datei/Verzeichnis
scannt das angegebene Objekt, zeigt gefundene Viren jedoch nur an. Möchten Sie rekursiv ganze Verzeichnisbäume scannen, verwenden Sie den Schalter -r.
Um die Ausgabe von Clamscan auf die gefundenen Viren zu reduzieren, verwenden Sie die Option -i. Während der Schalter --remove infizierte Dateien entfernt, verschiebt --move=Verzeichnis
sie in ein Quarantäneverzeichnis. Um das Scannen von gepackten Archiven zu verhindern, erweitern Sie die Eingabe um --no-archive. Einige Anwendungsbeispiele:
clamscan .: Prüft nur die Dateien des Verzeichnisses, in dem der Scanner gestartet wurde, und meldet infizierte Dateien, ohne sie zu löschen oder zu entfernen.clamscan --no-archive --remove .: Löscht alle infizierten Dateien nur in dem Verzeichnis, in dem der Scanner gestartet wurde. Archivdateien ignoriert das Programm.clamscan -r -i --move=/tmp/infected /home/: Überprüft alle Dateien und Unterverzeichnisse des Ordners /home und zeigt als Ausgabe nur infizierte Dateien an. Diese verschiebt das Programm in das Verzeichnis tmp/infected,Beachten Sie, dass auch der lesende Zugriff auf viele Dateien unautorisierten Benutzern nicht gestattet ist. Prüfen Sie deswegen beispielsweise Systemverzeichnisse oder die Home-Ordner anderer Benutzer stets mit Root-Rechten.
Der zweite Kommandozeilenscanner des Paketes heißt Clamdscan. Er unterscheidet sich von Clamscan in erster Line dadurch, dass er zu scannende Dateien an den Daemon weiterleitet, der diese dann mit den in der /etc/clamav.conf hinterlegten Einstellungen untersucht. Entsprechend reduzieren sich die Parameter des Scanners auf wenige Einstellungen wie die Behandlung infizierter Dateien (melden, verschieben, löschen).
Als Grundlage für den Einsatz von Drittprogrammen [3] dient der Scanner-Daemon clamd, der als passives Element nach dem Start nichts anderes tut als zu warten, dass ein Programm mit ihm kommuniziert. Dies geschieht in der Grundeinstellung über Port 3310 von Localhost (127.0.0.1). In den meisten Fällen legt das Installationspaket das Startskript /etc/init.d/clamd an, welches Sie mit den üblichen Parametern start, stop und restart bedienen.
Die Konfigurationsdatei /etc/clamd.conf zeichnet für das Start- und Laufverhalten des Daemons verantwortlich. Damit der Scanner seine Arbeit protokolliert (Abbildung 2), gilt es zunächst, den Logger zu aktivieren, indem Sie das Kommentarzeichen (#) vor dem Eintrag LogSyslog entfernen.
Mit LogFile /var/log/clamd legen Sie fest, wo der Daemon die Logdatei speichert und wie sie heißt. Um die Größe zu beschränken, setzten Sie den Limiter LogFileMaxSize auf die gewünschte Größe, beispielsweise 2M (zwei MByte). Soll im Logfile die Uhrzeit des Eintrags stehen, entfernen Sie das Kommentarzeichen vor dem Eintrag LogTime. Die Datenbank, welche der Scanner verwendet, bezeichnet DatabaseDirectory /var/lib/clamav.
Der Daemon erlaubt die Arbeit in den Betriebsmodi lokal und Netzwerk. Sie unterscheiden sich dadurch, dass der Prozess entweder an einem Port oder einem Socket lauscht. Den lokalen Socket-Modus aktivieren Sie, indem Sie die Zeilen TCPSocket und TCPAddr auskommentieren (#) und den Eintrag LocalSocket /Pfad/zur/Datei
hinzufügen. Bei älteren Versionen lautet der Eintrag clamd socket name = /Pfad/zur/Datei
. Da der Scanner den Socket als Datei erstellt, ist es wichtig, dass der Ordner, in dem sich diese befindet, für alle Benutzer zum Lesen und Schreiben freigegeben ist, damit andere Programme darauf zugreifen dürfen. Legen Sie deshalb beispielsweise im Verzeichnis /var/run/ das Unterverzeichnis clamscan an, und ändern Sie die Berechtigungen mit chmod 777 clamscan.
Um die Funktion des Scanner-Daemons zu testen, verwenden Sie die Eicar-Testdatei [4], die praktisch alle Virenscanner als Virus erkennen, die jedoch außer einer Signatur keinerlei Schadcode enthält. Folgt dem Aufruf clamdscan eicar.com die Meldung Eicar-Test-Signature FOUND, arbeitet der Scanner korrekt. Sofern das Logging aktiviert wurde, finden Sie auch einen entsprechenden Hinweis in der Protokolldatei. Damit der Scanner mit allen im Artikel beschriebenen Addons korrekt zusammenarbeitet, ist es nötig, ihn mit Root-Rechten zu starten. Dies geschieht über den Eintrag User root in der Konfigurationsdatei.
Die Einträge ScanArchive und ScanRAR definieren, ob der Daemon auch gepackte Archive scannt. Um das System vor so genannten Archivbomben zu schützen, legt der Limiter ArchiveMaxFileSize Megabyte
fest, wie groß die Datei in einem Archiv höchstens sein darf. Der Limiter StreamMaxLength hingegen definiert, wie groß die Datei generell sein darf, damit Clamd sie noch prüft.
Da Virenscanner naturgemäß nicht in der Lage sind, passwortgeschütze Archive zu prüfen, legt ArchiveBlockEncrypted fest, dass Clamd solche Dateien als Viren behandelt. Was mit Dateien geschieht, die der Scanner als Viren erkennt, entscheiden ausschließlich die kommunizierenden Applikationen. In der Regel sind das Vermittler zwischen Diensten (wie Mailserver, Fileserver, Proxy oder FTP-Server) und dem Scanner-Daemon.
Hat der Einsatz von Virenscannern zum Schutz des Linux-Systemen bislang eher akademischen Charakter, ändert sich das Bild drastisch, wenn es um die Sicherheit kommunizierender Windows-Clients geht. An diesem Punkt kommt das Potential von ClamAV dank diverser Module, die Serverdienste am Weiterleiten oder Verbreiten von Viren hindern, erst richtig zum Tragen.
Viele dieser Addons verwenden zum Scannen das Clientprogramm Clamscan. Ist Performance gefragt, sollten Sie davon absehen, diese einzusetzen, da die Software bei jedem Scanvorgang den Client startet, was die Geschwindigkeit senkt und die Rechnerlast erhöht. Einer der wichtigsten Koppler zwischen den Diensten ist Samba-vscan [5], der einer ganzen Reihe von Virenscannern (u.a. F-Prot, ClamAV, Sophos, Trend Micro) ermöglicht, Dateizugriffe auf Shares zu prüfen, die der Fileserver Samba hostet.
Unter gängigen Distributionen genügt zum Einrichten von Samba-vscan die Installation des gleichnamigen RPM-Paketes, das in der Regel Bestandteil der Distribution ist. Die Installationsroutine erstellt im Verzeichnis /usr/lib/samba/vfs/ verschiedene Module, die Samba über ein VFS die Zusammenarbeit mit den Virenscannern erlauben.
Um Samba und ClamAV mit dieser Komponente zur Zusammenarbeit zu bewegen, kopieren sie als ersten Arbeitsschritt die Beispiel-Konfigurationsdatei vscan-clamav.conf aus dem Template-Verzeichnis /usr/share/doc/packages/samba-vscan/ nach /etc/samba.
Die Anweisung infected file action = legt fest, wie das Modul mit als Viren erkannten Dateien verfährt. Zur Auswahl stehen die Parameter delete, quarantine und nothing. Da auch bei Virenscannern so genannte False Positives vorkommen, ist das direkte Löschen (delete) potentieller Viren unter Umständen riskant.
Weniger risikoreich gestaltet sich der Weg, diese in ein Quarantäneverzeichnis zu verschieben (quarantine), das Sie mit quarantine directory = Verzeichnis
festlegen. Die Zeile quarantine prefix = Präfix
gibt an, mit welchem Präfix – zum Beispiel virus- – Vscan die potentiellen Virendateien versieht. Möchten Sie die Benutzer von Windows-Clients davon in Kenntnis setzten, dass ihre Datei einen Virus enthält, aktivieren Sie die Option mit send warning message = yes (Abbildung 3).
Samba-vscan arbeitet mit Clamd nur dann zusammen, wenn dieser im lokalen Socket-Modus läuft. Mit dem Eintrag clamd socket name = Verzeichnis
geben Sie an, wo das Modul den Socket findet, beispielsweise /var/run/clamscan/clamd. Dieser Pfad muss identisch sein mit dem Eintrag hinter LocalSocket aus der Clamd-Konfiguration /etc/clamd.conf.
Abschließend gilt es, in Sambas Konfigurationsdatei /etc/samba/smb.conf festzulegen, welche Shares der Scanner prüft. Fügen Sie dazu im Abschnitt jedes gewünschten Shares den Eintrag
vfs objects = vscan-clamav:configfile=/etc/samba/vscan-clamav.conf
hinzu. Möchten Sie alle Shares absichern, schreiben Sie diese Anweisung unter den Abschnitt [global].
Nach einem Neustart von Samba und Clamd schützt Samba-vscan die Shares vor Virenbefall. Um das zu testen, öffnen Sie die Netzwerkfreigabe und versuchen, das Testvirus Eicar darin zu speichern. Je nach eingestellter Aktion sollte der Virus verschwinden und (auf dem Windows-Client) eine Warnmeldung (Abbildung 3) erscheinen.
Neben dem Einsatz als Fileserver nutzen viele Anwender Linux auch als Mail-Relay zum Versenden und Abholen von E-Mails. Der in wenigen Minuten in das System integrierte Mailscanner Clamsmtp [6] beschränkt sich in seiner Funktion auf das Filtern von Viren. Das Programm arbeitet als Daemon und wurde für den Einsatz in Zusammenarbeit mit Postfix entwickelt. Da es in der Programmiersprache C geschrieben wurde, benötigt er außer den systemüblichen keine weiteren Module oder Bibliotheken.
Als Installationsbasis verwenden Sie die Quellen des Programms, die Sie auch auf der Heft-CD finden. Erstellen Sie das Konfigurationsskript mit dem Kommandozeilenaufruf ./configure --sysconfdir=/etc, damit das Programm beim Start ohne zusätzliche Parameter die Konfigurationsdatei clamsmptd.conf findet.
Als nächstes starten Sie den Aufruf make && make install um das Programm zu übersetzen und einzurichten. Das Init-Skript zum Starten und Stoppen des Programms finden Sie im Verzeichnis scripts/ des Quellcodeordners. Der Befehl chmod 755 clamsmtpd.sh verleiht ihm die notwendigen Berechtigungen, der Aufruf cp clamsmtpd.sh /etc/init.d/clamsmtpd kopiert es ins Init-Verzeichnis. Da die Distributionen unterschiedliche Pfade verwenden, passen Sie den genannten den Gegebenheiten an.
Im nächsten Schritt kopieren Sie die Konfigurationsdatei clamsmtp.conf, die Sie im Ordner doc des Quellenordners finden, in das Verzeichnis /etc. Öffnen Sie die Datei und passen Sie den Eintrag #ClamAddress: /var/run/clamav/clamd an, indem Sie das Kommentarzeichen entfernen und den Pfad zum Socket des Scanner-Daemons angeben. In unserem Beispiel lautet dieser /var/run/clamscan/clamd.
Der Punkt Action: beschreibt, was mit infizierten Mails geschieht. Zur Auswahl stehen drop (löschen), bounce (schickt die Mail mit Hinweis samt Virus an den Absender zurück) und pass (lässt die Mail durch). Die Möglichkeit, infizierte Mails in ein Quarantäneverzeichnis zu verschieben, liefert das Programm nur über den Eintrag Virus actions:, der es erlaubt, eigene Skripte zu starten. Ein vorkonfiguriertes Skript namens virus_action.sh finden Sie im Verzeichnis scripts des Quellcode-Ordners. Darin passen Sie lediglich das Verzeichnis an, in das die kontaminierten Mails verschoben werden. Damit der gestartete Prozess das Skript aufrufen darf, ändern Sie die Zugriffsrechte mit chmod 755 virus_action.sh.
Möchten Sie den Daemon im Kontext mit Postfix verwenden, ändern Sie die den Eintrag Listen: 0.0.0.0:10025 auf Listen: 127.0.0.1:10025, damit der Daemon lediglich auf der lokalen Netzwerkschnittstelle lauscht und von außen nicht mehr zu erreichen ist. Da der Prozess keine privilegierten Rechte erfordert, geben Sie als Besitzer (User:) clamscan an.
Clamsmtpd in Postfix einbinden
Um den Filter in Postfix zu integrieren, öffnen Sie die Datei /etc/postfix/main.cf, und ergänzen diese um folgende Zeile:
content_filter = scan:[127.0.0.1]:10025
Danach ist die Datei /etc/postfix/master.cf an der Reihe, die Sie um folgende Einträge ergänzen:
# Clamsmtp Virenscanner (verwendet von content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
-o smtp_enforce_tls=no
# Dieser Eintrag ermöglicht Clamsmtp, gescannte Mails an Postfix zu übergeben
127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8Ein Neustart von Postfix und Clamsmtp aktiviert anschließend den Filtermechanismus.
Sie testen die Konfiguration, indem Sie eine potentiell infizierte Mail versenden. Öffnen Sie dazu mit cat eicar.com die Virensignatur des Eicar-Testvirus im Terminal. Mit mail root öffnen Sie den Maildialog, wo Sie in den Body der Mail die Signatur hineinkopieren. Ein abschließender Punkt versendet die Mail (Abbildung 4).
In jedem Fall lohnt sich ein Blick in die ausführliche Manpage (man clamsmtp und man clamsmtpd.conf), um das Potential des Scanners voll zu nutzen. Die Webseite von Nate Nielsen [7] erklärt im Detail das Verwenden von Clamsmtp als transparenten Proxy.
Auch wenn der Ansatz gut ist, so bietet Clamscan in Sachen Performance der kommerziellen Konkurrenz kaum ernsthaft Paroli. Eine Aufgabe, für die F-Prot im Test etwa zehn Sekunden benötigte, beschäftigte Clamscan über fünf Minuten. Einer der Hauptgründe dafür ist nach Aussage des Virenexperten Rainer Link von Trend Micro darin zu suchen, dass Clamscan alle Dateien, egal welchen Typs, gegen die Pattern der Signaturdatenbank prüft.
Dieses beinahe unüberwindliche Handicap machen auch diverse Schnittstellen nicht wett, die es erlauben, Clamscan in verschiedene Applikationen wie Postfix oder Samba einzubinden. Speziell beim Untersuchen kritischer Dateiinhalte, wie etwa E-Mails, sollten Sie nicht alleine auf Clamscan vertrauen, sondern zur Sicherheit einen zweiten Scanner verwenden.
Treffsicherheit und Geschwindigkeit
Geht es darum, große Datenmengen – beispielsweise ganze Partitionen – auf Virenbefall zu untersuchen, ist ClamAV definitiv das falsche Programm: Im Test benötigte es beispielsweise zum Scannen eines etwa 1 GByte großen Home-Verzeichnisses über fünf Minuten, während der Scanner F-Prot die gleiche Aufgabe in nicht einmal zehn Sekunden erledigte.
Auch die Trefferquote lässt zu wünschen übrig. Von den etwa 82 000 Testviren blieben um die 200 unerkannt, 60 davon identifizierte F-Prot [8] als Viren. Ein weiterer Scan der Dateien mit dem Referenzscanner von Kaspersky bestätigte das Ergebnis. Da jedoch auch F-Prot aus dem gesamten Pool über 200 Viren übersah, empfiehlt es sich zumindest an kritischen Stellen zwei Scanner zu verwenden, um die Quote unerkannter Viren möglichst gering zu halten.
Glossar
Archivbomben
Dateien mit einer Größe von mehreren GByte, die in Archiven jedoch kaum ein MByte Platz benötigen. Ohne einen Schutzmechanismus beschäftigt eine Archivbombe den Virenscanner eines Systems zuweilen für mehrere Stunden und setzt damit das System außer Gefecht ("Denial of Service"). Außerdem besteht die Gefahr, dass das Entpacken einer Archivbombe den kompletten temporären Speicherplatz beansprucht und damit das System zum Stillstand bringt.
VFS
Virtual File System. Eine Abstraktionsschicht über dem Dateisystem mit einer einheitlichen Schnittstelle, die es Programmen erlaubt, damit zu kommunizieren.
False Positives
Legitime Events oder Programme, die Schutzsysteme wie Virenscanner, Firewalls oder Intrusion-Detection-Systeme irrtümlich als Schadcode oder Einbruchsversuch deklarieren.
[1] ClamAV: http://clamav.net
[2] ClamAV-Binaries: http://clamav.net/binary.html
[3] Zusatzmodule für ClamAV: http://www.clamav.net/3rdparty.html
[4] Eicar-Virentestdatei: http://www.eicar.org
[5] Samba-vscan: http://www.openantivirus.org/projects.php
[6] Clamsmtp: http://memberwebs.com/nielsen/software/clamsmtp/
[7] Clamsmtp als transparenter Proxy: http://memberwebs.com/nielsen/software/clamsmtp/transparent.html
[8] F-Prot: http://www.f-prot.com