Filtrage des virus et des logiciels malveillants - Debian 9.0 Stretch
Rédigé par Marc GUILLAUME | 4 commentairesTraduction de la page : https://workaround.org/ispmail/stretch/filtering-viruses-malware/
Ma rangaine habituelle : je considère les scanners de virus comme un remêde de charlatan. Si quelqu'un veut vraiment infecter un ordinateur à l'aide d'une pièce jointe malveillante, alors les scanners de virus ne vous aideront pas. Ils sont basés sur des signatures de logiciels malveillants connus et (si vous avez de la chance) un algorithme heuristique tentant de découvrir des comportements inhabituels. Il été prouvé mille et mille fois qu'un virus bricolé, même une variante légèrement altérée d'un virus bien connu, échappait facilement aux scanners de virus. Alors pourquoi ces derniers existent-t-ils ? La réponse est le FUD. Les responsables informatiques connaissent bien les faiblesses de cette approche. Mais si quelque poste sous Wind*ws se retrouve infecté ils peuvent dire à la direction générale qu'ils ont employé toutes les mesures de protections standard. J'ai parlé avec de nombreux directeurs informatiques et tous m'ont raconté la même histoire. Cela ressemble à la religion numérique du 21ème siècle 🙂. Cependant, si vous décidez que vous désirez un scanner de virus ajoutons-en un à votre serveur de mails.
ClamAV : le pour et le contre
Comme d'habitude je préfère n'utiliser que des composants open source. Le choix évident est donc le fameux scanner de virus ClamAV. Mais sont taux de détection est ridiculement bas en utilisant ses signatures par défaut. J'ai entendu parler d'une étude disant que dans leurs tests ClamAV présentait un taux de détection de 100%. Une autre lui a donné le second rang de tous les scanners testés. J'ai moi-même scanné de nombreux mails infectés (trouvés par un autre logiciel) et il n'a jamais trouvé le moindre virus.
Du coup j'ai cherché une alternative, comme un scanner de virus gratuit (mais pas libre) de chez Sophos qui fonctionnait bien par le passé avec le milter Amavis. Son taux de détection est assez bon. Et les développeurs de rspamd disaient même que leur module antivirus supportait Sophos. Mais quoi que j'aie tenté je n'ai jamais réussi à faire fonctionner les deux ensemble. Et pour être honnête… la documentation du module antivirus de rspamd est, pour le moins qu'on puisse dire, incomplête.
Alors un ami très féru d'informatique m'a indiqué le projet SaneSecurity qui ajoute des signatures antivirus à ClamAV afin de le rendre réellement utilisable. Et ceci est finalement devenu la solution recommandée pour ce guide Mail façon FAI. Dans une configuration commerciale où vos clients comptent sur un meilleur scanner de virus, vous ne pourrez probablement pas éviter de dépenser de l'argent pour une variante payante. Pourquoi vous expliquais-je tout cela ? Principalement pour m'excuser d'avoir eu besoin de deux semaines pour juste écrire cette page. 🙂
ClamAV
Allons-y et lançons ClamAV en commençant par installer les paquets nécessaires :
apt install clamav-daemon
Un daemon est un processus qui tourne en permanence sur votre système attendant des connexions depuis d'autres programmes. C'est une solution plus rapide que de lancer un nouveau processus à chaque vois que l'on veut scanner un mail. La configuration par défaut fonctionne bien, il n'y a donc rien à faire.
Vérifiez que le démon a bien été lancé :
service clamav-daemon status
Regardez, dans ce que va afficher cette commande à la ligne Active. Si elle dit « Acrive: active (running) » alors tout va bien. Si elle dit « Active: inactive (dead) » ne vous inquiétez pas. Il y a toutes les chances pour que les signatures de virus n'aient pas encoré été téléchargées. ClamAV est fourni avec le démon freshclam qui réalise les mises à jour de la liste de signature automatiquement. Mais lors de la première utilisation vous pouvez vouloir gagner du temps et télécharger une première fois les signatures manuellement. Arrêtez le démon freshclam et effectuez la mise à jour :
service clamav-daemon stop freshclam service clamav-daemon start
Lancez service clamav-daemon status
une nouvelle fois et vérifiez que le démon tourne maintenant.
Obtenez-vous un message du genre… ?
WARNING: Your ClamAV installation is OUTDATED! WARNING: Local version: 0.99.2 Recommended version: 0.99.3 DON'T PANIC! Read http://www.clamav.net/documents/upgrading-clamav
Faites ce que l'on vous dit, ne paniquez-pas 🙂. Debian Stretch Contient la version 0.99.2, ce qui est très bien. Vous n'avez pas à vous soucier de cela.
faites en sorte que rspamd utilise ClamAV
Pour finir vous devez indiquer à rspamd le moyen de parler avec le démon clamav. Malheureusement la documentation est un peu trompeuse ou au moins incomplète ce qui m'a un peu trompé dans un premier temps. Le démon ClamAV crée par défaut un fichier socket sur votre serveur /var/run/clamav/clamd.ctl. Les sockets ressemblent à des fichiers et servent d'interface pour les communications entre processus. rspamd peut communiquer via ce socket pour demander à ClamAV si un mail contient un virus.
Vous pouvez voir la configuration par défaut dans le fichier /etc/rspamd/modules.d/antivirus.conf. Améliorons-la un peu. Créez un nouveau fichier /etc/rspamd/override.d/antivirus.conf Contenant ceci pour remplacer la section par défaut :
clamav { attachments_only = false; symbol = "CLAM_VIRUS"; type = "clamav"; action = "reject"; servers = "/var/run/clamav/clamd.ctl"; }
Qu'est-ce que cela signifie ?
- attachment_only… en réalité définit si l'on doit scanner seulement les pièces jointes ou si le mail entier est scanné, y compris les images. Ce paramètre semble ne pas fonctionner et saute les pièces jointes, donc je recommande de lui donner la valeur faux ;
- symbol… si un virus est découvert par ClamAV alors rspamd ajoute le nom symbolique CLAM_VIRUS. Vous vous souvenez peut-être qu'à ces symboles on peut assigner des scores ou qu'on peut les utiliser pour ajouter des entêtes de mail pour voir quels critères ont été reconnus. Vous pouvez lui donner le nom que vous voulez ;
- type… définit quelques valeurs par défaut dans le module antivirus indiquant à rspamd comment communiquer avec ClamAV.
- action… est un paramètre optionnel que nous utilisons pour immédiatement rejeter le mail si un virus est découvert. Nous n'ajoutons pas de valeur au score de spam. À la place nous refusons d'accepter le mail lors de la session SMTP ;
- servers… définit la façon de communiquer avec ClamAV. Dans notre cas nous indiquons le chemin vers le socket que le démon ClamAV a ouvert pour nous.
Relancez rspamd :
service rspamd reload
Le scan de virus devrait maintenant fonctionner. Voyons s'il fonctionne comme on l'attend.
Test de la configuration
Comme évoqué plus haut, il existe un test de signature pour les scanners de virus appelé EICAR. Ce n'est pas un virus, juste un fichier qui peut être présenté à votre scanner de virus pour évaluer son fonctionnement général. Téléchargez le fichier depuis le site d'eicar :
wget https://secure.eicar.org/eicar.com
Si vous avez installé l'outil swaks comme je l'avais suggéré plus tôt vous pouvez l'utiliser pour envoyer un mail de test avec EICAR en pièce jointe :
swaks --to john@example.org --attach - --server localhost < eicar.com
Sur une des dernières lignes vous devriez lire…
<** 554 5.7.1 clamav: virus found: \”Eicar-Test-Signature\”
Ceci prouve que Postfix a envoyé le mail à rspamd, qui à son tour a vérifié le mail en utilisant ClamAV qui a découvert la signature de test et rejeté le mail.
Améliorer la détection des signatures de virus
Comme indiqué en début de page, le taux de détection des signatures fournies par ClamAV est assez ridicule. Nettoyer son salon avec une petite cuiller est beaucoup moins efficace qu'avec un aspirateur. Heureusement l'équipe de SaneSecurity aide à faire de ClamAV un vrai détecteur de virus. Ils ont fourni des signatures de virus depuis une décennie et affirment qu'ils sont à même de détecter 97% de tous les virus existants alors que le taux de détection de ClamAV tourne en général autour de 14%.
Quelques passionnés ont créé un script de mise à jour automatique que l'on peut trouver sur Github. Sa configuration se fait en quelques étapes, mais les mises à jour deviennent alors complètement automatiques. Commençons par télécharger la dernière version de l'archive d'installation :
wget https://github.com/extremeshok/clamav-unofficial-sigs/archive/master.tar.gz
Décompressons-la :
tar xvzf master.tar.gz
L'archive a été décompressée dans le répertoire clamav-unofficial-sigs-master. Rentrons dans ce répertoire :
cd clamav-unofficial-sigs-master
Il faut copier le script lui-même dans /usr/local/sbin où l'on installe classiquement les scripts d'administration créés par les utilisateur :
cp clamav-unofficial-sigs.sh /usr/local/sbin/
Créez un nouveau répertoire pour les fichiers de configuration :
mkdir /etc/clamav-unofficial-sigs
Copiez le gabarit de configuration pour Debian Stretch dans ce répertoire :
cp config/os.debian9.conf /etc/clamav-unofficial-sigs/os.conf
Copiez les deux autres fichier indispensables :
cp config/{master.conf,user.conf} /etc/clamav-unofficial-sigs/
Pour activer le script de mise à jour vous devez éditer le fichier /etc/clamav-unofficial-sigs/user.conf et à la fin ajouter :
user_configuration_complete="yes"
Configurez logrotate pour compresser et archiver les anciens fichiers de log créés par le script :
/usr/local/sbin/clamav-unofficial-sigs.sh --install-logrotate
Installez les pages de manuel (man 8 clamav-unofficial-sigs) du script :
/usr/local/sbin/clamav-unofficial-sigs.sh --install-man
Copiez la configuration systemd pour les mises à jour récurrentes (qui fonctionne comme cron) :
cp systemd/* /etc/systemd/
Essayez la mise à jour manuellement :
/usr/local/sbin/clamav-unofficial-sigs.sh
Si la mise à jour a fonctionné vous pouvez maintenant vérifier quelles sont les signatures supplémentaires peuvant être reconnues par ClamAV :
clamscan --debug 2>&1 /dev/null | grep "loaded"