FuzzyOcr Plugin : Détection des spams image (OCR Detection)
Contents
1 Introduction
L'outil de lutte contre les pourriels (spams) le plus répandu dans le monde du logiciel libre est spamassassin. Son mode de focntionnement se rapproche de celui du service amavisd-new. Il collecte les résultats obtenus par une collection d'autres outils et les transmet au service amavisd-new qui prend la décision sur le message en fonction du score total obtenu par celui-ci.
Du point de vue système, la mise en oeuvre de spamassassin est très simple. Il suffit de s'appuyer sur le paquet Debian/testing qui est très bien maintenu. Cette situation est d'autant plus intéressante que la collection des bibliothèques et des outils dépendants de spamassassin est très volumineuse. La commande :
apt-get |
apt-cache show spamassassin |
liste ces dépendances.
2 Configuration de Spamassassin
Il faut distinguer 2 niveaux pour la configuration de cet outil.
- À l'échelle du système, le répertoire /etc/spamassassin contient les fichiers de configuration communs à l'ensemble des utilisateurs.
- Pour l'utilisateur amavis, le répertoire .spamassassinsitué sous le répertoire personnel de l'utilisateur contient les fichiers de configuration dédiés ainsi que les bases de données constituées en cours d'exécution : liste blanche automatique, jetons de calcul, etc..
Comme dans les scénariis décrits dans ce document, le système sur lequel sont installés les outils est un serveur passerelle dédié au traitement du courrier électronique, tous les paramètres de configuration seront dans le répertoire général /etc/spamassassin et toutes les bases de données seront dans le répertoire /var/lib/amavis/.spamassassin.
3 La reconnaissance de caractères
La tendance de la rentrée 2006, c'est l'explosion des pourriels contenant des images animées de type GIF, PNG ou JPEG. Ces images contiennent le plus souvent des publicités ou des offres de cotations boursières pour le moins douteuses.
Le FuzzyOcr Plugin est une arme assez efficace pour lutter contre les pourriels contenant des images. Il se base sur la reconnaissance optique de caractères pour rechercher des mots clés dans ces images. Ce greffon possède aussi quelques optimisations pour le traitement des fichiers images volontairement corrompus.
Le fonctionnement de base du greffon, tel qu'il est décrit sur la page web de présentation recouvre les étapes suivantes :
- Recherche les images dans les différentes parties du message,
- Chaque image est analysée pour identifié sont format (GIF, PNG, JPEG),
- Suivant le format d'image détecté, différents outils sont appelés pour convertir l'image au format PNM,
- Le programme de reconnaissance optique de caractères gocr est appelé pour extraire le texte du fichier PNM,
- Les chaînes de caractères obtenues sont scrutées à la recherche de mots prédéfinis, les scores sont calculés et les résultats sont transmis à spamassassin.
4 L'installation du greffon FuzzyOCR
Malheureusement, on ne dispose pas encore de paquet Debian/testing. Il faut donc passer par une installation manuelle en s'appuyant sur les paquets des outils utilisés par le greffon.
On commence par télécharger le code du greffon et placer les sources dans l'arborescence du serveur passerelle de courrier électronique :
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-latest.tar.gz mv fuzzyocr-latest.tar.gz /usr/local/src/ cd /usr/local/src/ tar xf fuzzyocr-latest.tar.gz chown -R root.src FuzzyOcr* |
Ensuite, il faut que ces packages soient installés :
apt-get |
apt-get install spamassassin netpbm imagemagick libungif4g libungif-bin gocr libjpeg-progs libstring-approx-perl |
5 Configuration du greffon FuzzyOCR
Pour cette partie, on ne suit pas les recommandations du fichier INSTALL. En effet, la configuration par défaut du greffon prévoit d'utiliser le répertoire /etc/mail/spamassassin qui n'existe pas sur un système Debian. De plus, il n'est pas souhaitable de mélanger du code et des éléments de configuration dans le répertoire /etc/.
Pour l'installation du code du greffon, la commande # dpkg -L spamassassin |grep Plugin/ permet d'identifier le répertoire de dépôt des autres greffons utilisés par spamassassin : /usr/share/perl5/Mail/SpamAssassin/Plugin/. On copie donc le code dans ce répertoire.
cp FuzzyOcr.pm /usr/share/perl5/Mail/SpamAssassin/Plugin/ |
Pour le fichier de configuration, il suffit de copier les fichiers suivant dans le répertoire général de configuration de spamassassin.
cp FuzzyOcr.cf /etc/spamassassin/ cp FuzzyOcr.words.sample /etc/spamassassin/FuzzyOcr.words cd /etc/spamassassin |
Plusieurs fichiers de configuration doivent être édités pour s'adapter au contexte de configuration.
On doit indiquer le nouveau greffon dans la liste parcourue par spamassassin en ajoutant une ligne à la fin du fichier v310.pre.
echo loadplugin FuzzyOcr /usr/share/perl5/Mail/SpamAssassin/Plugin/FuzzyOcr.pm >> v310.pre |
On doit éditer le fichier FuzzyOcr.cf pour l'adapter au contexte :
Si voter version est vraiment différente de celle du dessus, voici un patch entre la configuartion de la passerelle et la version distribuée :
diff -uBb /usr/local/src/FuzzyOcr-2.3b/FuzzyOcr.cf FuzzyOcr.cf --- /usr/local/src/FuzzyOcr-2.3b/FuzzyOcr.cf 2006-08-25 22:56:00.000000000 +0200 +++ FuzzyOcr.cf 2006-09-10 23:23:39.000000000 +0200 @@ -1,4 +1,4 @@ -loadplugin FuzzyOcr FuzzyOcr.pm +#loadplugin FuzzyOcr FuzzyOcr.pm body FUZZY_OCR eval:fuzzyocr_check() describe FUZZY_OCR Mail contains an image with common spam text inside body FUZZY_OCR_WRONG_CTYPE eval:dummy_check() @@ -14,15 +14,15 @@ #### Logging options ##### # Verbosity level (see manual) Attention: Don't set to 0, but to 0.0 for quiet # operation. -#focr_verbose 1 +focr_verbose 4 # # Logfile (make sure it is writable by the plugin) -focr_logfile /etc/mail/spamassassin/FuzzyOcr.log +focr_logfile /var/log/fuzzyocr.log ########################## ##### Wordlists ##### # Here we defined the words to scan for -focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words +focr_global_wordlist /etc/spamassassin/FuzzyOcr.words # # This is the path RELATIVE to the respektive home directory for the personalized list # This list is merged with the global word list on execution @@ -90,6 +90,7 @@ # # This is used to disable the OCR engine if the message has already more points # than this value (Default value: 10) #focr_autodisable_score 10 +#focr_autodisable_score 50 # # Number of minimum matches before the rule scores (Default value: 2) #focr_counts_required 2
Enfin, il faut implanter la configuration nécessaire à la journalisation.
touch /var/log/fuzzyocr.log chown amavis.amavis /var/log/fuzzyocr.log |
Pour limiter l'occupation disque de la journalisation du greffon tout en conservant un historique à 90 jours, on créé un fichier de configuration pour le service logrotate. Créez ce fichier et insérez les lignes suivantes :
/etc/logrotate.d/fuzzyocr |
$ /etc/logrotate.d/fuzzyocr /var/log/fuzzyocr.log { rotate 90 daily compress delaycompress create 666 amavis amavis } |
6 Les tests de validation
Avant toute manipulation, il faut s'assurer du bon fonctionnement de spamassassin. Les deux commandes :
spamassassin |
spamassassin --lint |
et
su - amavis -- spamassassin --lint |
ne doivent produire aucun affichage. Si ce n'est pas le cas, il faut revoir la configuration de spamassassin ou amavis avant de tester le fonctionnement du greffon.
On utilise ensuite les échantillons de pourriels fournis avec les sources du greffon et on analyse les résultats produits.
On constate que les rapports sur les trois échantillons testés montrent que des mots clés ont été détectés dans les images et que les scores ont été augmentés en conséquence.
Il ne reste plus qu'à valider la solution en exploitation réelle ! Sans attendre, on obtient un échantillon qui montre que la reconnaissance optique de caractère à ajouté 18 points au score.
Extrait du journal système produit par le service amavisd-new :
Sep 10 18:08:57 MailGw amavis[13387]: (13387-04) SPAM, \ <lwrceuqp@demax.sk> -> <xxxxxxxxxxxxx@xxx.xxx-xxxx.fr>, Yes, \ score=27.449 tag=-999 tag2=6.31 kill=6.31 tests=[BAYES_50=2.5, \ DATE_IN_FUTURE_03_06=1.961, EXTRA_MPART_TYPE=1.091, FUZZY_OCR=18.000, \ HTML_MESSAGE=0.001, RCVD_IN_XBL=3.897, SPF_PASS=-0.001], \ autolearn=spam, quarantine lkwO3NF5SAMT (spam-quarantine)
Extrait du journal produit par le greffon pour le même message :
[2006-09-10 18:08:57] Debug mode: Message is spam (score 18)... [2006-09-10 18:08:57] Debug mode: Words found: "charts" in 1 lines "symbol" in 1 lines "stock" in 2 lines "international" in 3 lines "company" in 2 lines "million" in 1 lines "buy" in 1 lines "trade" in 3 lines "target" in 1 lines "meridia" in 1 lines (16 word occurrences found)
7 Faq
7.1 Je reçois toujours des spams de type image, que faire ?
Il faut savoir que si c'est très bien camouflé, la détection échouera. Mais vérifiez également ce que disent le logs. J'ai eu un problème avec les droits au niveau des logs. Faites donc une petite correction à ce niveau là si c'est celà qui bloque.