L’antivirus ClamAV est un l’antivirus opensource. Il est très connu d’une part pour faire de l’analyse des courriels en venant s’intercaler lors de la réception et l’envoi des mails. Je l’utilise sur mon serveur de mail pour éviter de recevoir ou d’envoyer des virus. D’autre part il peut bien sûr analyser des répertoires à la demande. Cela me permet d’avoir un analyse de mon système de manière régulière.
Analyse au moment de l’accès
Si la messagerie est un canal sous surveillance chez moi, les menaces peuvent arriver par bien d’autres vecteurs. L’analyse périodique adresse partiellement ce problème car une analyse complète d’un système est très coûteuse et au moment où elle est faite, le virus aura peut-être déjà été disséminé. Par exemple un téléchargement ou une copie de fichier depuis une clé USB suffit pour infecter le système avant que la prochaine analyse ne découvre l’intrus.
ClamAV possède une fonction d’analyse à la volée qui se déclenche quand on accède au fichier. Sa mise en œuvre est très simple. Le programme clamonacc vient intercepter les événements du noyau indiquant un accès à un fichier et va communiquer avec le démon clamd pour faire l’analyse du fichier afin d’autoriser ou non l’accès.
Configuration du démon
Dans le fichier /etc/clamav/clamd.conf
OnAccessMaxFileSize 5M
OnAccessPrevention yes
OnAccessExcludeUname clamav
OnAccessIncludePath /home
permet d’indiquer que on veut analyser les fichiers de moins de 5M (compromis de de performance) puis de réellement refuser l’accès si l’analyse révèle un virus. Le 3e paramètre est obligatoire car il permet d’exclure de l’analyse à la voler les accès faits par les processus lancées par clamav car le démon clamd étant lancé par le user clamav, ne doit lui même provoquer une interception par clamonacc. Sinon on boucle ! Enfin la dernière ligne sera dupliquée autant de fois que nécessaire pour indiquer les répertoire à mettre sous surveillance. Seuls les accès aux fichiers de ces répertoires vont être interceptés.
Lancement de clamonacc
En root il faut lancer clamonacc. On vérifiera qu’il est bien lancé en consultant sont PID par :
pgrep clamonacc
Le démon clamonacc ne se lance pas
Sur une installation fraîche de débian, le démon clamonacc ne se lance par.
Pour diagnostiquer le problème, lancer clamonacc en verbose et en précisant un fichier de log que l’on consultera ensuite.
root@phoenix:/run/clamav# clamonacc -v --log=/var/tmp/clamo.log
root@phoenix:/run/clamav# tail -f /var/tmp/clamo.log
ClamInotif: you likely do not have enough inotify watchpoints available … run the follow command to increase available watchpoints and try again …
$ echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
Clamonacc: onas_clamonacc_exit(), signal 15
Clamonacc: attempting to stop event consumer thread …
ClamScanQueue: onas_scan_queue_exit()
ClamScanQueue: stopped
Clamonacc: attempting to stop ddd thread …
ClamInotif: onas_ddd_exit()
ClamInotif: stopped
Clamonacc: stopped
On voit que clamonacc a besoin d’une configuration un peu élévée en inotify. Il suffit d’executer la commande suggérée et tout rendre dans l’ordre.
Test
Pour faire un test on pourra télécharger le fichier bien connu EICAR et le mettre dans l’arborescence sous surveillance. Puis faire un cat dessus.
thierry@phoenix:~$ wget http://www.eicar.org/download/eicar.com
--2020-06-30 22:20:23-- http://www.eicar.org/download/eicar.com
Résolution de www.eicar.org (www.eicar.org)… 213.211.198.62
Connexion à www.eicar.org (www.eicar.org)|213.211.198.62|:80… connecté.
requête HTTP transmise, en attente de la réponse… 301 Moved Permanently
Emplacement : https://www.eicar.org/download/eicar.com [suivant]
--2020-06-30 22:20:23-- https://www.eicar.org/download/eicar.com
Connexion à www.eicar.org (www.eicar.org)|213.211.198.62|:443… connecté.
requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 68 [application/octet-stream]
Sauvegarde en : « eicar.com »
eicar.com 100%[======================>] 68 --.-KB/s ds 0s
2020-06-30 22:20:23 (5,17 MB/s) — « eicar.com » sauvegardé [68/68]
thierry@phoenix:~$ cat eicar.com
cat: eicar.com: Opération non permise
thierry@phoenix:~$
Et voilà, l’accès au fichier est bien bloqué. La configuration est telle que même root ne peut pas accéder au fichier. Voilà pourquoi il vaut mieux restreindre cette fonction à des répertoires bien définis.
root@phoenix:/etc/cron.monthly# cat /home/thierry/eicar.comTags: ClamAV
cat: /home/thierry/eicar.com: Opération non permise
root@phoenix:/etc/cron.monthly#