URL: https://linuxfr.org/users/trim/journaux/scan-de-fichiers-automatique Title: Scan de fichiers automatique Authors: Adrien Dorsaz Date: 2015年06月23日T21:19:38+02:00 License: CC By-SA Tags: scan_antivirus_automatique, debian, firefox, clamav et antivirus Score: 19 Bonjour Nal! Cette semaine j'ai fait la bêtise d'exécuter un `.jar` en root sans l'avoir scanné auparavant... et voilà que j'ai lancé dans ma Debian un logiciel qui m'affiche de la pub et qui en plus paraît suspicieux pour clamav (pour Windows, heureusement...):> /home/adrien/Téléchargements/JOdin3CASUAL-r1035-dist.jar: Win.Worm.Chir-1370 FOUND Je me suis donc dit que je ne me ferais plus avoir et que je scannerai dès aujourd'hui tous les fichiers provenant d'Internet (oui, parfois je fais des téléchargements par FTP ou P2P...). Une première étape est de pouvoir scanner tout ce qui provient de Firefox\^W Iceweasel (comme c'est un client HTTP et FTP, c'est de lui que proviennent la plupart de mes fichiers). # ClamAV pour Firefox: Fireclam Très vite dans ma recherche je suis tombé sur l'extension qu'il me fallait: [Fireclam](https://addons.mozilla.org/fr/firefox/addon/fireclam/?src=api). Elle permet en effet de scanner tous les fichiers téléchargés depuis Iceweasel. Cette solution ne suffira évidemment pas, puisque parfois j'utilise Gnome Web\^W\^W Epiphany (le browser, pas le Double Dash like :)) ou Chromium. Bien que ça pouvait convenir dans un premier temps, cette solution a malheureusement un gros désavantage: scanner un fichier n'est pas rapide et Iceweasel est principalement mono processus, alors le navigateur reste figé pendant quelques instants et ça se ressent très vite. En attendant que le projet [Electrolysis](https://wiki.mozilla.org/Electrolysis) avance et en croisant les doigts pour que cette partie soit aussi dans un processus séparé du principal, il me fallait trouver une autre solution. # Système de fichier ClamAV: ClamFS Une deuxième solution est apparue durant ma quête: le projet [ClamFS](https://clamfs.sourceforge.net) propose de scanner automatiquement les fichiers accédés depuis un répertoire monté avec ce logiciel. Ce logiciel fonctionne bien et a en plus la bonne idée de garder un cache des fichiers déjà scannés, ce qui permet de ne scanner le fichier qu'une fois, même si l'accès se fait dix fois. Un premier soucis est que le message d'erreur lors de l'ouverture d'un fichier infecté est un message du style "Permission non accordée" ce qui fait d'abord penser à un fichier sans accès de lecture plutôt qu'un fichier malveillant. Ce problème est lié à FUSE et n'est pas trop dérangeant pour moi, il faut juste s'y habituer. Par contre un point plus dérangeant est qu'il n'est pas possible de monter le dossier `~/Téléchargements` sur `~/Téléchargements`. Bien que l'on puisse faire pointer le téléchargement des navigateurs sur un dossier caché comme `~/.downloads` et laisser ClamFS créer le dossier `~/Téléchargements` (ou celui définit dans votre fichier `~/.config/user-dirs.dirs`), il reste le problème que si l'on accède au fichier depuis le navigateur, aucun scanne ne sera effectué, puisque le navigateur accédera par `~/.downloads` au lieu de `~/Téléchargements`. Malgré ces deux désavantages, je pense garder cette solution pour l'installer sur mon serveur (typiquement pour le dossier `/opt`), car le code FUSE est bien écrit et claire (disponible par SVN chez [SourceForge](https://clamfs.sourceforge.net) et, vu les déboirs récent de SourceForge, cloné en GIT chez [moi](https://redmine.adorsaz.ch/projects/clamfs_)). En plus, un contributeur a proposé de faire les [scans lors de l'écriture](http://sourceforge.net/p/clamfs/feature-requests/2/) des fichiers (au lieu de l'ouverture): c'est donc implémentable et l'auteur de ClamFS n'y semble pas opposé bien que la proposition dorme depuis quelques temps. Pour moi, le top serait de pouvoir faire ceci lorsqu'un fichier est écrit : 1. lancer le scan du fichier 1. s'il est bon, le laisser ainsi (pas besoin de cache ici, il y a peu de chance que l'on écrive plusieurs fois le même fichier [excepté lors d'un renommage]) 1. s'il est mauvais: * le renommer en `fichier.extension.VIRUS` * créer un fichier avec le nom original (donc `fichier.extension`) et y placer le rapport de ClamAV. Pour éviter de scanner une deuxième fois le fichier renommé et de scanner le fichier de rapport crée, il faut faire les deux dernières étapes dans le dossier source du montage. Cette solution permettrait de résoudre mes problèmes avec les navigateurs: je peux ouvrir le fichier depuis le navigateur et lorsqu'il est infecté, je me retrouve avec un texte m'expliquant quel type de virus a été détecté (en plus, si je pense que c'est un faux positif, je peux toujours retrouver le fichier original facilement). À long terme, je pense faire cette proposition au développeur de ClamFS et peut-être même tenter moi-même une implémentation. # inotify à travers systemd.path En essayant ClamFS, je me suis souvenu que [tu m'avais déjà parlé d'inotify](https://linuxfr.org/news/exploiter-inotify-c-est-simple) et que tes commentaires proposait même d'utiliser systemd pour automatiser le lancement de services suite aux changements de fichier. J'ai essayé, ça marche. Ma solution fait un peu bricolage, mais à l'avantage d'être extensible (entendre, il est facile de surveiller plusieurs dossiers en même temps). Elle se compose de 4 fichiers systemd utilisateur (donc à placer dans `~/.local/share/systemd/user`): * filestoscan.path ```init [Unit] Description=Exécute ClamAV lors d'écriture dans le fichier ~/.files.toscan [Path] PathChanged=/home/adrien/.files.toscan Unit=clamscan.service ``` * clamscan.service ```init [Unit] Description=Scanne les fichiers listés dans ~/.files.toscan Require=clamd.socket [Service] ExecStart=/bin/sh -c 'mkdir -p /tmp/virus && \ if [ -e /home/adrien/.files.toscan ]; \ then clamscan -l /tmp/virus/clamscan.log -i -o -z -f /home/adrien/.files.toscan --move=/tmp/virus/ \ && rm /home/adrien/.files.toscan ;\ fi' ``` * downloads.path ```init [Unit] Description=Controle les modifications de ~/Téléchargements [Path] PathChanged=/home/adrien/Téléchargements Unit=listDownloads.service ``` * listDownloads.service ```init [Unit] Description=Créer une liste de fichier à scanner [Service] ExecStart=/bin/sh -c "ls -t1d /home/adrien/Téléchargements/* | head>> /home/adrien/.files.toscan" ``` Ensuite il faut activer les unités `.path` avec: ```init systemctl --user start downloads.path filestoscan.path ``` Il faut penser à l'ajouter dans `~/.xsessionrc` pour que tout soit en route lors du démarrage de ta session. Ça fonctionne ainsi: 1. Firefox écrit un fichier dans `~/Téléchargements` 1. `downloads.path` voit l'écriture du fichier et exécute `listDownloads.service` 1. `listDownloads.service` écrit la liste des 10 derniers fichiers téléchargés dans `~/.files.toscan` 1. `filestoscan.path` remarque que ce fichier est rempli et exécute `clamscan.service` 1. `clamscan.service` scanne les fichiers listés dans `~/.files.toscan` Cette solution est un peu alambiquée, mais elle me permet d'ajouter facilement de nouveaux répertoires à vérifier (p.ex. le `~/.cache`) sans devoir recréer le code de `clamscan.service`. Le top serait que `systemd.path` puisse passer en paramètre quels fichiers ont été écrit dans `~/Téléchargements`, mais `man` n'est pas très bavard à ce sujet et le web non plus... Ça m'éviterait de prendre arbitrairement les 10 derniers fichiers écrits dans le dossier `~/Téléchargements`. # Conclusion Je ne sais pas ce que la solution de systemd va donner sur le long terme, mais je l'aime bien, parce que les fichiers de configuration de systemd sont assez claire pour moi. J'ai déjà remarqué quelques points à améliorer dans mes services: parfois Firefox crée des fichiers `.part` durant le téléchargement, il faudrait les exclure. À cause de ça, il m'est arrivé d'avoir des doublons dans le fichier `~/.files.toscan` (ça ne perturbe pas trop `clamscan`, il y a juste quelques warnings écrits dans le log, mais rien de grave). D'ailleurs il faudrait idéalement éviter de créer des doublons dans le fichier ~/.files.toscan . Et toi Nal ? Comment fais-tu avec les dossiers téléchargés ? Est-ce que tu ne télécharges que les iso de ta distribution préférée, vérifie la somme sha1 et coupe la connexion internet jusqu'à la prochaine mise à jour ? Est-ce que tu refuses toute exécution de fichier dans ton /home ? Est-ce que tu as une solution beaucoup plus simple que je n'ai pas vu ?

AltStyle によって変換されたページ (->オリジナル) /