Image Spam mit FuzzyOCR und SpamAssassin auf Debian/Ubuntu abwehren

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man E-Mails nach Image Spam mit FuzzyOCR überprüfst. FuzzyOCR ist ein Plugin für SpamAssassin, der auf ungewollte Postwurfsendungen ausgerichtet ist, die Images als Hauptinhalt beinhalten. Unter Verwendung verschiedener Methoden analysiert es den Inhalt und die Eigenschaften von Images, um zwischen normalen Mails (ham) und Spam Mails unterscheiden zu können. FuzzyOCR versucht die Netzbelastung gering zu halten indem es nur die Mails überprüft, die von SpamAssassin noch nicht als Spam eingestuft worden sind, somit wird unnötiger Arbeitsaufwand vermieden.

Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung verwende ich Debian Etch als Basissystem. Die Installationsschritte von FuzzyOCR sollten für Ubuntu Systeme die gleichen sein.

Ich gehe davon aus, dass SpamAssassin bereits installiert ist und funktioniert, mit /etc/mail/spamassassin/ als sein Hauptkonfigurationsverzeichnis. Falls Du ein anderes Verzeichnis hast (z.B. wenn Du ISPConfig installiert hast, ist das Verzeichnis /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/), ist das kein Problem. Ich werde angeben, wo was zu ändern ist.

Bitte stelle sicher, dass Deine SpamAssassin Version mit FuzzyOCR funktioniert. Zum Beispiel benötigt die FuzzyOCR Version, die ich hier installieren werde (fuzzyocr-3.5.1-devel.tar.gz) SpamAssassin 3.1.4 oder eine neuere Version.

2 Installation der Voraussetzungen für FuzzyOCR

FuzzyOCR hat einige Voraussetzungen wie ocrad und gocr, die wir wie folgt installieren können:

apt-get install netpbm gifsicle libungif-bin gocr ocrad libstring-approx-perl libmldbm-sync-perl imagemagick tesseract-ocr


3 Installation von FuzzyOCR

Als Nächstes laden wir die neuste FuzzyOCR Devel Version von http://fuzzyocr.own-hero.net/wiki/Downloads und installieren sie. Wir laden die Devel Version anstelle der stabilen Version runter, da die FuzzyOCR Entwickler meinen:

"The current recommendation is the development version because the stable version lacks features and is very old."

cd /usr/src/
wget http://users.own-hero.net/~decoder/fuzzyocr/fuzzyocr-3.5.1-devel.tar.gz

Dann entpacken wir FuzzyOCR und bewegen alle FuzzyOcr* Dateien und das FuzzyOcr Verzeichnis (sie sind alle im FuzzyOcr-3.5.1/ Verzeichnis) nach /etc/mail/spamassassin:

tar xvfz fuzzyocr-3.5.1-devel.tar.gz
cd FuzzyOcr-3.5.1/
mv FuzzyOcr* /etc/mail/spamassassin/

Falls Du ein anderes SpamAssassin Verzeichnis hast, z.B. /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/, dann sollte der letzte Befehl ersetzt werden mit

mv FuzzyOcr* /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/

Lösche noch nicht das /usr/src/FuzzyOcr-3.5.1/ Verzeichnis, es gibt ein Verzeichnis in dem Muster von Image Spam E-Mails enthalten sind (samples/), das wir später brauchen werden, um zu testen, ob FuzzyOCR wie erwartet funktioniert.

FuzzyOCR ist nun also installiert. Jetzt müssen wir es konfigurieren.

4 Konfiguration von FuzzyOCR

FuzzyOCRs Konfigurationsdatei ist /etc/mail/spamassassin/FuzzyOcr.cf. In dieser Datei ist fast alles auskommentiert. Wir öffnen diese Datei jetzt und nehme ein paar Modifizierungen vor:

vi /etc/mail/spamassassin/FuzzyOcr.cf

Füge folgende Zeile ein um den Ort von FuzzyOCRs Spam-Wort-Datei festzulegen:
[...]
focr_global_wordlist /etc/mail/spamassassin/FuzzyOcr.words [...]
/etc/mail/spamassassin/FuzzyOcr.words ist eine vordefinierte Wortliste, die in FuzzyOCR integriert ist. Du kannst sie nach Belieben anpassen, wenn Du magst.

Ändere als Nächstes
[...]
# Include additional scanner/preprocessor commands here: # focr_bin_helper pnmnorm, pnminvert, pamthreshold, ppmtopgm, pamtopnm focr_bin_helper tesseract [...]
zu
[...]
# Include additional scanner/preprocessor commands here: # focr_bin_helper pnmnorm, pnminvert, convert, ppmtopgm, tesseract [...]
Füge folgende Zeilen hinzu oder aktiviere sie:
[...]
# Search path for locating helper applications focr_path_bin /usr/local/netpbm/bin:/usr/local/bin:/usr/bin focr_preprocessor_file /etc/mail/spamassassin/FuzzyOcr.preps focr_scanset_file /etc/mail/spamassassin/FuzzyOcr.scansets focr_enable_image_hashing 2 focr_digest_db /etc/mail/spamassassin/FuzzyOcr.hashdb focr_db_hash /etc/mail/spamassassin/FuzzyOcr.db focr_db_safe /etc/mail/spamassassin/FuzzyOcr.safe.db [...]
Mit den letzten vier Zeilen aktivierst Du Image Hashing. Das sagen die FuzzyOCR Entwickler zu Image Hashing:

"The Image hashing database feature allows the plugin to store a vector of image features to a database, so it knows this image when it arrives a second time (and therefore does not need to scan it again). The special thing about this function is that it also recognizes the image again if it was changed slightly (which is done by spammers). "
Falls Du /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin anstelle von /etc/mail/spamassassin verwendest, ist FuzzyOCRs Konfigurationsdatei /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/FuzzyOcr.cf anstelle von /etc/mail/spamassassin/FuzzyOcr.cf, also bearbeite diese. In der Konfigurationsdatei kannst Du nun entweder alle Vorkommnisse von /etc/mail/spamassassin mit /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin, ersetzen ODER Du lässt es so wie zuvor gezeigt und erstellst einen Symlink von /etc/mail/spamassassin nach /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin wie folgt:

mkdir /etc/mail/
ln -s /home/admispconfig/ispconfig/tools/spamassassin/etc/mail/spamassassin/ /etc/mail/spamassassin

Die Konfiguration von FuzzyOCR ist nun abgeschlossen. Lass uns nun überprüfen, ob es wie erwartet funktioniert.

5 FuzzyOCR testen

Ich habe bereits erwähnt, dass in FuzzyOCR Muster von Image Spam Mails (im samples/ Verzeichnis) integriert sind:

ls -l /usr/src/FuzzyOcr-3.5.1/samples/

Die Ausgabe sollte wie folgt aussehen:

total 156
-rw-r--r-- 1 administrator users 13633 2007-01-07 12:55 ocr-animated.eml
-rw-r--r-- 1 administrator users 16108 2007-01-07 12:55 ocr-gif.eml
-rw-r--r-- 1 administrator users 27506 2007-01-07 12:55 ocr-jpg.eml
-rw-r--r-- 1 administrator users 27842 2007-01-07 12:59 ocr-multi.eml
-rw-r--r-- 1 administrator users 24657 2007-01-07 12:55 ocr-obfuscated.eml
-rw-r--r-- 1 administrator users 18236 2007-01-07 12:55 ocr-png.eml
-rw-r--r-- 1 administrator users 16113 2007-01-07 12:55 ocr-wrongext.eml
-rw-r--r-- 1 administrator users 3576 2007-01-07 12:55 README

Wir können nun jede dieser E-Mails zu SpamAssassin befördern, um herauszufinden, ob FuzzyOCR richtig in SpamAssassin verlinkt ist. Finde heraus, wo sich Dein spamassassin Programm befindet (normalerweise ist es in Deinem PATH - ob dies der Fall ist, findest Du heraus indem Du Folgendes ausführst

which spamassassin

Wenn ein Ergebnis angezeigt wird, ist spamassassin in Deinem PATH und Du musst den nicht den gesamten Pfad zu spamassassin festlegen, um es auszuführen.)

Falls Du nicht weißt wo spamassassin ist, findes Du es heraus indem Du dies ausführst

updatedb
locate spamassassin

Wenn Du ISPConfig verwendest, ist spamassassin hier: /home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin

Da Du nun weißt wo spamassassin ist, kannst Du die Muster Image Spam Mails wie folgt nach spamassassin befördern:

/path/to/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

Z.B.

/home/admispconfig/ispconfig/tools/spamassassin/usr/bin/spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

oder, wenn sich spamassassin in Deinem PATH befindet:

spamassassin --debug FuzzyOcr < /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml > /dev/null

Du müsstest nun eine riesige Ausgabe sehen, das Ende sollte wie folgt aussehen:

[...]
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: Friday Augurt 4, 4:01 pm ET
[10025] dbg: FuzzyOcr: LAS VEGAS, NEVADA--(MARKET WIRE)--Aug 4, 2006 -- auantum Energy, lnc. (OTC
[10025] dbg: FuzzyOcr: BB:aEGY.oB-_-
[10025] dbg: FuzzyOcr: auantum Energy, lnc. is pleased to announce that it has applied to have its shares listed for
[10025] dbg: FuzzyOcr: trading on the Frankfurt Stock Exchange. The company has retained the services ofBaltic
[10025] dbg: FuzzyOcr: lnvestment Group of Hamburg, Germany to assist with the application.
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: _ qEGY,OB "
[10025] dbg: FuzzyOcr:
[10025] dbg: FuzzyOcr: <<=end
[10025] info: FuzzyOcr: Scanset "ocrad" found word "target" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "service" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "hot energy stocki"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "stock" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "current price o"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "price" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "short term price target oo"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "company" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "trading on the frankfurt stock exchange the company has retained the services ofbaltic"
[10025] info: FuzzyOcr: Scanset "ocrad" found word "recommendation" with fuzz of 0.0000
[10025] info: FuzzyOcr: line: "sboog bup recommendation"
[10025] dbg: FuzzyOcr: Enough OCR Hits without space stripping, skipping second matching pass...
[10025] info: FuzzyOcr: Scanset "ocrad" generates enough hits (8), skipping further scansets...
[10025] info: FuzzyOcr: Message is spam, score = 15.000
[10025] info: FuzzyOcr: Adding Hash to "/etc/mail/spamassassin/FuzzyOcr.db" with score "15.000"
[10025] dbg: FuzzyOcr: Digest: 538584:327:549:7::255:255:255:255:168580::0:0:0:0:9098::0:128:0:75:1086::0:0:128:15:395::128:0:128:53:213::0:0:255:29:115
[10025] info: FuzzyOcr: Words found:
[10025] info: FuzzyOcr: "target" in 1 lines
[10025] info: FuzzyOcr: "service" in 1 lines
[10025] info: FuzzyOcr: "stock" in 2 lines
[10025] info: FuzzyOcr: "price" in 2 lines
[10025] info: FuzzyOcr: "company" in 1 lines
[10025] info: FuzzyOcr: "recommendation" in 1 lines
[10025] info: FuzzyOcr: (12 word occurrences found)
[10025] dbg: FuzzyOcr: Remove DIR: /tmp/.spamassassin10025QnPTq8tmp
[10025] dbg: FuzzyOcr: FuzzyOcr ending successfully...
[10025] dbg: FuzzyOcr: Processed in 2.191381 sec.

Wie Du siehst wurde /usr/src/FuzzyOcr-3.5.1/samples/ocr-gif.eml als Spam mit einem Score von 15 Punkten als Spam eingestuft, also funktioniert FuzzyOCR.

Dein SpamAssassin ist also jetzt in der Lage, Image Spam zu erkennen, dank der Hilfe von FuzzyOCR.

6 Links

0 Kommentar(e)

Zum Posten von Kommentaren bitte