8 votes

Anti-virus dans le conteneur Docker - est-ce que fanotify fonctionne entre l'hôte et le conteneur?

Je dois mettre en place une solution de numérisation antivirus à la demande pour les fichiers à l'intérieur des conteneurs Docker en utilisant un logiciel open-source. Clamav On-Access fonctionne bien mais a certaines exigences et limitations :

  • nécessite la capacité CAP_SYS_ADMIN pour fonctionner à l'intérieur d'un conteneur
  • doit être exécuté par conteneur, pas par hôte
  • nécessite 850 Mo de mémoire résidente pour les signatures dans chaque conteneur en cours d'exécution, même les plus petits

Cette limitation - "fanotify ne fonctionne pas pour les événements de conteneur lorsqu'ils sont surveillés depuis l'hôte", existe-t-elle vraiment ou ai-je simplement mal configuré ClamAV ? Je n'ai pas une connaissance approfondie de la façon dont fanotify fonctionne avec les namespaces, mais cela me semble être une limitation du kernel.

MISE À JOUR : Y a-t-il des solutions de contournement pour cette limitation ? Ajouter /var/lib/docker/overlay2/container_id/merged est une option, en raison de la nature dynamique des conteneurs, clamd.conf doit être mis à jour à chaque événement de conteneur. Mais même avec le chemin ajouté, ClamAV ne détecte pas les fichiers malveillants dans les conteneurs.

Exécuter ClamAV par conteneur crée une surcharge mémoire énorme, en particulier pour les petits conteneurs.

Collection de liens :

4voto

user44127 Points 56

J'ai une solution avec un ClamAV patché.

  1. Doit utiliser ClamAV < 0,102,0 en raison de la division de la numérisation et de la détection: les fichiers détectés ne peuvent pas être analysés car le chemin est observé du point de vue du conteneur
  2. OnAccessMount ne fonctionne pas car vous devez répertorier chaque montage dans la configuration de ClamAV, puis redémarrer et Docker crée des montages à la volée
  3. Doit utiliser overlayfs plutôt que LVM pour que ClamAV puisse accéder au point de montage
  4. OnAccessIncludePath ne fonctionne pas car la méthode d'énumération des fichiers et des dossiers ne traverse pas les systèmes de fichiers (ne scanne pas au-delà du montage pour le chemin spécifié)

J'ai réussi à faire fonctionner OnAccessIncludePath avec un correctif que j'ai posté sur la liste de diffusion clamav-devel : https://lists.gt.net/clamav/devel/77347#77347.

J'ai fini par avoir un processus utilisant fanotify pour les montages statiques et un utilisant inotify pour surveiller les montages éphémères de /var/lib/docker. Avoir 2 instances est quand même bien meilleur qu'1 par conteneur. J'ai fait pas mal de tests de charge et j'ai eu le correctif en production depuis environ le moment où j'ai envoyé le message à la liste.

Sophos n'a pas fonctionné pour moi mais j'ai abandonné assez rapidement.

1voto

Douglas Leeder Points 29986

Oui, fanotify ne surveille que les événements dans l'espace de montage dans lequel il s'exécute.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X