Analyse anti-virale en temps réel

Bonjour,

Je souhaite que, dans la mesure du possible, les fichiers déposés dans certains répertoire (ou tous) soient analysé dès leur détection par le démon clamav.

J’ai déjà un script en bash, dont je ne suis pas très fan, qui ressemble à peu près à ça :

inotifywait -q -m -r -e create,modify,move "$DOSSIER" --format '%w%f' |
while read FICHIER; do 
        if [ -f "$FICHIER" ]; then
                clamdscan --quiet --no-summary -i -m "$FICHIER" --move=$QUARANTAINE
                if [ "$?" == "1" ]; then
                        logger -p user.warning -t "clamav-live[$$]" "Fichier $FICHIER mis en quarantaire dans $QUARANTAINE"
                fi
        fi
done &

Je comptais faire un truc un peu moins indigeste en Python, mais je me demande s’il n’existe pas une solution un peu plus élégante, par exemple, un démon qui fait ça tout seul.

J’ai fait quelques recherches, mais je ne trouve rien sur le sujet, c’est pourtant utile un anti-virus, même pour Debian.

Merci pour votre aide.

Salut
bof ces machins là ça détecte surtout les problèmes de la veille voire de l’avant-veille et pas ceux du lendemain :joy:

Sinon, un rapport avec ma question ?

le rapport puisqu’il faut tout expliquer…c’est que tu vas dépenser une énergie monstrueuse pour faire tourner clamav/clamscan qui ne va jamais te trouver aucun virus quand ils sont en circulation :joy: :joy:

Attend, tu veux donc dire que ClamAV est en perpétuelle obsoléscence ? Qu’il détecte seulement les virus qui sont dans un tel état d’ancienneté qu’ils sont dectectés par tous les anti-virus et pare-feu (même celui d’OpenOffice) ? Trouve ou produit mieux et nous en reparlerons. Pour ma part, je cherche juste à faire du scan en temps réel, pas remettre en question un logiciel libre qui a dû demander beaucoup de travail et qui en demander encore beaucoup aujourd’hui.
Je tiens aussi à te rappeller que ClamAV est libre, je ne crois pas que beaucoup d’anti-virus soient libres…

Bonjour,

S’agit-il de faire renaître ClamRT ?

ClamRT — Wikipédia

C’est ça, mais sous Debian et déjà existant, sinon, j’utilise quelque chose basé sur le bout de script dans mon premier message ou quelque chose de similaire.

Bonjour,

je prends cette discussion au vol …

je suis utilisateur non-paranoïd :wink: de ClamTk (Jessie),
depuis que je me suis soigné de Windows/Symantec

J’ai donc simplement installé le(s) paquet(s) et activé la MàJ auto des définitions
et je ne me sers de l’AV que pour scanner des fichiers que je viens de télécharger,
juste pour m’assurer que je n’introduis pas de M… dans mon système

Selon grandtoubab ça ne servirait à pas grand-chose,
pourtant il me semble que les définitions sont MàJ régulièrement ???

Et que ClamAV est plutôt parano
car il donne souvent des “Faux-Positifs” que je vérifie en ligne sur VirusTotal

D’autre part,
j’installe actuellement un système en // avec Windows
en partageant une large partition NTFS entre Win & Linux ;

l’utilisateur étant un typique Windowsien (qui tente une désintox progressive)
pour lui et sa sphère d’échange la question devient plus sensible.

Alors oui,
une extension de ClamAV qui scanne en auto au moins ce qui vient d’Internet,
ne semble pas un luxe.

Donc la solution …
C’est quoi ? :sunglasses:

Merci, et bonne journée à tous.

Pour l’instant, la solution semble être un produit Apple. Non pas que je ne sois pas fan, mais si un service propre et tout bien fait mis dans un paquet debian avec son petit unit systemd et ses fichiers de configuration, je ne suis pas contre.

Pour note, l’information que j’ai trouvée serait d’exécuter iwatch -r -c "clamdscan %f" /home.

Ce que je veux dire c’est que de toute façon les éditeurs d’antivirus arrivent toujours après la bataille.
Quand un pirate mets au point sont virus et qu’il se diffuse, il faut par définition que le virus en question ait fait des dégâts et soit repéré avant que ces fameux éditeurs d’anti-virus propose une parade.
Ce qui prends un certain temps et te laisse vulnérable.

je suis plutôt de cet avis

Globalement, il faut être conscient que les produits antivirus ne constituent de toute façon que la deuxième ligne de défense contre les programmes malveillants : la première ligne repose sur les épaules de l’utilisateur. Qui se tient au courant des logiciels malveillants, actualise régulièrement ses systèmes, n’ouvre pas de ports superflus, n’installe que des logiciels de sources dignes de confiance, refuse l’exécution automatique de contenus actifs dans le navigateur Internet et ne clique pas sans sourciller sur tout ce qui se présente sur son client de messagerie ou son bureau, n’a pas de raison de s’inquiéter des programmes malveillants pour Linux.

https://www.av-test.org/fr/nouvelles/news-single-view/linux-test-de-16-suites-de-protection-contre-les-programmes-malveillants-specifiques-a-windows-e/

1 J'aime

Oui, vu les utilisateurs que nous avons, c’est la première ligne. Je ne vais pas compter sur les utilisateurs pour réfléchir à ce qu’ils font. C’est pourquoi je voulais faire cette analyse en temps réel, pour intercepter l’interceptable avant que connerie ne soit faite.

Merci pour ce lien vers cet article qui donne de bonnes pistes …

Je crois que je vais tenter AVG pour mon transfuge de Windows :slight_smile:

Encore un autre exemple récent de l’inutilité des antivirus

dans le cadre de cette attaque, c’est du 0-day d’abord et en plus dans le cas de l’hopital, ils étaient tous sous windows XP

Pas sûr que ce soit du zeroday.
Ça s’appuie en partie sur quelque chose qui est connue depuis septembre 2016.

Du coup, je pars sur un script en Python3 avec quelque chose du genre :

'''
Scan en temps réel d'un ou plusieurs dossiers
Ce programme requiert le démon clamav
'''

# Je mets un alias à ClamdUnixSocket car il existe trois méthodes pour faire ça :
## ClamdUnixSocket qui permet d'accéder via une socket Unix
## ClamdNetworkSocket via une socket réseau TCP
## ClamdAgnostic qui teste les deux et qui utilise celui qui fonctionne
# J'utise ici la méthode avec la socket Unix parce que c'est celle qui est configurée par défaut dans debian à l'installation du démon clamav
from pyclamd import ClamdUnixSocket as ClamdSocket
from pyclamd.pyclamd import ConnectionError as ClamdConnectionError
from pyinotify import WatchManager, Notifier, IN_CLOSE_WRITE, IN_CREATE, IN_DELETE_SELF, IN_MOVED_TO
from os.path import isdir, isfile, islink, samefile, join
from os import walk, mkdir, remove as rm
from shutil import move as mv, Error as shError

def live_clamdscan (paths, quarantine = '/tmp/clamd-quarantine'):
	def add_dir (path):
		wd = wm.add_watch (path, IN_CLOSE_WRITE | IN_CREATE | IN_MOVED_TO | IN_DELETE_SELF, proc_fun = manage_event)
		for i in walk (path):
			f = i [0]
			if not samefile (f, path):
				manage_file (f)
			for j in i [2]:
				manage_file (join (f, j))

	def del_dir (path):
		wd = wm.get_wd (path)
		wm.del_watch (wd)

	def scan_file (path):
		# TODO: analyser le fichier
		try:
			if not clamd.scan_file (path) is None:
				try:
					mv (path, quarantine)
				except shError:
					rm (path)
		except FileNotFoundError:
			pass

	def manage_file (path):
		if isdir (path) and not islink (path):
			add_dir (path)
		elif isfile (path):
			scan_file (path)

	def manage_event (e):
		if e.mask & IN_DELETE_SELF == 0:
			manage_file (e.pathname)
		else:
			del_dir (e.pathname)

	try:
		clamd = ClamdSocket ()
	except ClamdConnectionError:
		'''
		Il se peut que le démon clamd ne soit pas disponible à ce moment.
		On retourne False pour indiquer une erreur, mais c'est normalement un des trois seuls cas de retour de cette fonction.
		'''
		pass
		return (False)
	wm=WatchManager ()
	notifier = Notifier (wm)
	
	try:
		mkdir (quarantine)
	except (FileNotFoundError, OSError) as e:
		'''
		Le second cas, impossible de créer la quarantaine
		'''
		return (False)
	except FileExistsError:
		'''
		Si la quarantaine existe déjà, on la recycle
		'''
		pass

	for i in paths:
		manage_file (i)

	try:
		notifier.loop ()
	except KeyboardInterrupt:
		'''
		Voici le troisième cas de retour, celui-ci est causé par une interruption par signal INT.
		On retourne True car c'est une fin qui n'émane par d'une erreur
		'''
		del notifier
		del wm
		del clamd
		return (True)

Et je lance la fonction live_clamdscan () avec un tuple des chemins à surveiller en premier paramètre et le chemin de la quarantaine en second paramètre.

Ça requiert les paquets clamav-daemon, clamav-freshclam, python3-pyinotify et python3-pyclamd.