Réseau - Web - GNU/Linux

2018 14 février

Filtrage des virus et des logiciels malveillants - Debian 9.0 Stretch

Rédigé par Marc GUILLAUME | 4 commentaires
Article précédent Mail façon FAI - Debian 9.0 Stretch Article suivant

Traduction 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"

4 commentaires

#1  - david a dit :

Bonjour j'ai suivi votre procédure, cependant lorsque je fais un scan avec la commande clamscan -r/ il me trouve 17 fichiers infectés. ces fichiers font parties du dossier /var/lib/clamav
Auriez vous des infos à ce sujet ?
merci

Répondre
#2  - Marc GUILLAUME a dit :

Curieux, d'abord /var/lib/clamav n'est pas un répertoire directement lié au serveur de mail, mais contient des fichiers utilisés par clamav. Chez moi il contient quatre fichiers :

# ll /var/lib/clamav/
total 437M
-rw-r--r-- 1 clamav clamav 930K Aug 9 03:30 bytecode.cld
-rw-r--r-- 1 clamav clamav 143M Sep 5 19:29 daily.cld
-rw-r--r-- 1 clamav clamav 294M Jun 8 2017 main.cld
-rw------- 1 clamav clamav 1.2K Sep 5 21:29 mirrors.dat

Avez-vous fait une nouvelle installation ou avez-vous utilisé un système déjà utilisé depuis un moment ? C'est une machine chez vous ou un serveur exposé sur Internet ? Il faudrait m'en dire un peu plus, car si il y a réellement autant de fichiers dans /var/lib/clamav sur votre machine il faut regarder si elle n' pas été compromise...

Répondre
#3  - Letouane a dit :

J'ai rencontré quelques soucis dans la section "Améliorer la détection des signatures de virus" :
1 - Détail pas très important
Dans le fichier /etc/clamav-unofficial-sigs/user.conf, la ligne user_configuration_complete="yes" mais elle est commentée.
Plutôt que de l'ajouter, il vaudra mieux la décommenter.

2 - Un poil plus embêtant
Lorsque j'ai lancé la commande /usr/local/sbin/clamav-unofficial-sigs.sh --install-logrotate, le script se bloque avec l'erreur "[...] Both dig and host are missing [...]".
Il conviendra donc d'ajouter l'une, l'autre ou bien les deux commandes.
Dig est inclus dans dnsutils et host est installable par son nom.
apt install host dnsutils

3 - Presque bloquant
Une fois ces outils installés, le script se bloque encore ; le coquin ! Cette fois-ci, il m'indique qu'il ne trouve pas le binaire ClamScan : "[...] cannot find clamscan _bin [...]".
Est-ce que "clamscan_bin" est un pattern de l'un des fichiers de configuration ?
cat /etc/clamav-unofficial-sigs/{master,user,os}.conf | grep clamscan
Oui dans master.conf
-> #clamscan_bin="/usr/bin/clamscan"
Du coup, et vu qu'on ne modifie ni master.conf, ni os.conf, je l'ai ajouté, décommentée, dans /etc/clamav-unofficial-sigs/user.conf
Ouf, c'est bon je peux installer le logrotate et les man pages !

4 - Bloquant (?) : la mise à jour manuelle
Aucune base de données n'est installée (STDOUT complet sur https://pastebin.com/wtqeTmgj ) !
-----------------------------------------------
No yararulesproject database file updates found
-----------------------------------------------
=================================
Setting permissions and ownership
=================================
=======================================================
No updates detected, ClamAV databases were not reloaded
=======================================================

En gros, je pense que le plus gros du problème que je rencontre c'est "/usr/local/sbin/clamav-unofficial-sigs.sh: line 1795: /usr/bin/clamscan: No such file or directory" : je ne trouve pas le binaire clamscan :'(
Même en ayant recherché "find / -name "clamscan" --> Aucun retour :-/

Répondre
#4  - Marc GUILLAUME a dit :

Ah! je ne peux répondre immédiatement, il faut que je fouille un peu, ça sera sans doute ce we, donc bientôt. Je n'ai pas installé clamscan sur mon serveur, il faut que je m'y colle pour voir ça de plus près. Donc à suivre... Merci

Répondre

Écrire un commentaire

Quelle est la quatrième lettre du mot uuyce ?

Fil RSS des commentaires de cet article

À propos

Yakati.com - Réseau - Web - GNU/Linux © 2017

Généré par PluXml en 0.061s  Compression GZIP activée - Administration

Mes coordonnées

Marc Guillaume
contact[at]yakati.com
79150 ÉTUSSON

Crédits

Pour la gestion du contenu

Généré par PluXml, le Blog ou Cms sans base de données

Pour le contenu

Licence Creative Commons
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.

Pour le thème

Thème SOLID de blacktie.co adapté pour PluXml