Archive for the ‘ Spam ’ Category

Aufbau einer eigenen SBL (Spam Blacklist)

Ich habe mich rein aus interesse die Tage mit dem Aufbau einer eigenen SBL beschäftigt. Eine SBL ist eine DNS-Zone, in der IP Adressen von Spammern imReverse Format eingetragen werden. Dies ermöglich Postfix, policyd-weight und Spamassassin anschließend die Sender IP Adressen bei eingehenden Mails gegen diese DNS-Zone zu prüfen. Wurde ein entsprechender Eintrag gefunden, kann die E-Mail als Spam behandelt werden.

Beispiel: Meldet sich ein Server mit der IP Adresse 192.168.0.1 und möchte eine E-Mails bei uns los werden, so prüft das ensprechende Programm (Postfix, policyd-weight oder Spamassassin) ob diese IP Adresse in der SBL sbl.o-o-s.de eingetragen ist.

nslookup 1.0.168.192.sbl.o-o-s.de

Ist dies der Fall, wird eine IP aus dem 127.0.0.x Netz zurück geliefert, die jedoch nicht 127.0.0.1 sein darf. Ist dies der Fall, weiß das Programm, dass diese IP Adresse auf der Blackliste steht und behandelt die E-Mails entsprechend.

Im Internet gibt es schon zig SBLs, von denen einige besser als andere Funktionieren. Wie gesagt, ich wollte rein aus Interesse eine eigene SBL aufbauen.

das Script

Um eine SBL füttern zu können, benötigt man zu aller erst Spam Mails. Ich hab schon länger zum testen zwei Domains, die nur genau dem Zweck dienen, Spam Mails ein zu sammeln.

Sobald Spam Mails vorhanden sind, müssen die IP Adressen aus den Mails extrahiert werden. Dazu habe ich ein reaöltiv simples Script geschrieben, dass nur die im header vorhandenen IPs heraus filtert. Ursprünglich war mein Gedanke, die Hostnamen aus dem Header per dig aufzulösen, jedoch ist dies relativ schwierig, da die Header Zeilen nicht immer identisch aussehen. Da ich jedoch keine Professionelle SBL aufbauen wollte, reichte es mir die vorhandenen IP Adressen zu filtern.

Das Script kann hier herunter  geladen werden. Im Kopfbereich des Scriptes muss der Pfad zum Mailverzeichniss mit dem Spam Mails sowie der Pfad zum sbl zone file angegeben werden.

die DNS-Zone

Da meine sbl eine Dubdomain der Domain o-o-s.de ist, muss zuerst in der Zone o-o-s.de.zone ein Eintrag für die Subomain hinzugefügt werden.

sbl                     10800   IN      NS      ns.o-o-s.de.

Anschließend kann die Subdomain sbl.o-o-s.de eingerichtet werden.

$TTL 10800
@                       2560    IN      SOA     ns.o-o-s.de.       postmaster.o-o-s.de. (
 2010082404   ; serial YYYYMMDDnn
 3600         ; refresh ( 1 h)
 900          ; retry   ( 15 min)
 1209600      ; expire  ( 14 day)
 10800 )      ; minimum ( 3 hours)

@                       10800   IN      NS      ns.o-o-s.de.
@                       10800   IN      A       83.169.42.112

Wird nun das Script ausgeführt, so werden die IP Adressen aus dem Header der Spam Mails wiefolgt in der Zone eingetragen.

100.124.78.80   IN      A       127.0.0.10

Wenn alles richtig funktioniert, ist es nun an der Zeit, die SBL auszuwerten. Es gibt dafür mehrere Möglichkeiten.

  • policyd-weight
  • Spamassassin
  • Postfix

Auswertung mittels policyd-weight

Um die SBL mittels policyd-weight abzufragen, muss in der Datei /etc/policyd-weight.conf die SBL aktiviert werden.

[...]
@dnsbl_score = (
#    HOST,                    HIT SCORE,  MISS SCORE,  LOG NAME
'pbl.spamhaus.org',       3.25,          0,        'DYN_PBL_SPAMHAUS',
'sbl-xbl.spamhaus.org',   4.35,       -1.5,        'SBL_XBL_SPAMHAUS',
'bl.spamcop.net',         3.75,       -1.5,        'SPAMCOP',
'dnsbl.njabl.org',        4.25,       -1.5,        'BL_NJABL',
'ix.dnsbl.manitu.net',    4.35,          0,        'IX_MANITU',
'sbl.o-o-s.de',           3.35,          0,        'OOS_DE'
);
[...]

Sollte die Konfigurationsdatei nicht exisiteren, kann diese mittels

policyd-weight defaults > /etc/policyd-weight.conf

angelegt werden.

Auswertung durch postfix

Postfix kann die SBL ebenfalls auswerten. Jedoch ist dabei zu beachten, dass Postfix die E-Mails anhand der SBL nicht bewertet, sondern direkt rejected.

/etc/postfix/main.cf

smtpd_recipient_restrictions =
[...]
                 reject_rbl_client sbl.o-o-s.de
[...]

Auswertung durch Spamassassin

Zu guter letzt noch die Auswertung durch Spamassassin. Hierzu muss eine neue Konfigurationsdatei angelegt werden, in der die Regeln definiert werden.

/etc/mail/spamassassin/99_local_bl.cf

header   RCVD_IN_OOSBL      eval:check_rbl('oos', 'sbl.o-o-s.de.')
describe RCVD_IN_OOSBL      Received via IP listed by sbl.o-o-s.de
tflags   RCVD_IN_OOSBL      net
score    RCVD_IN_OOSBL      2.5

Links

Fingerprint Spamfilterung

Spamfilteurng ist ein permanenter Kampf in dem man seine Ansatzpunkte immer wieder neu überdenken bzw. anpassen muss.

Aktuell bin ich auf den Möglichkeit gestoßen (die es bestimmt schon länger gibt ;-) ), die Spam Filterung von amavisd-new/spamassassin anhand von Fingerprints zu verfeinern. Viele der Spam E-Mails werden von Botznetzwerken verschickt. Dies lässt sich mit p0f in die Bewertung von Spam E-Mails mit einbeziehen. P0f ist in der Lage, passive anhand der Verbindungskriterien das Betriebssystem der Gegenstelle zu bestimmen. Das Betriebssystem wiederrum ermöglicht Rückschlüsse auf die wahrscheinlichkeit das die eingehende E-Mail eine Spam E-Mail ist.

Installation von p0f

Installieren lässt sich p0f unter Debian netterweise wieder über apt-get (Ich liebe die Menge an verfügbaren Paketen)

apt-get install p0f

Start/Stop Skript

Um p0f beim booten mit den entsprechenden Parametern zu starten habe ich ein Skript unter /etc/init.d/ abgelegt welches dann über das antsprechende Runlevel gestartet wird. Anschließend muss dieses noch fürs entsprechende Runlevel verlinkt werden.

ln -s /etc/init.d/p0f.sh /etc/rc2.d/S99p0f

Amavisd-New anpassen

Nun muss der Filter noch über amavisd-new aktiviert werden. Da ich verschiedene Policies einsetzt, habe ich es in den entsprechenden Policies aktiviert.

/etc/amavis/conf.d/50-user

$policy_bank{'o-o-s.de'} = {
 [...]
 os_fingerprint_method => 'p0f:127.0.0.1:2345',        # p0f aktivieren
 [...]

Spamassasin anpassen

Damit Spamassassin die  E-Mail nun auch entsprechend bewerten kann, müssen wir noch die Header-Felder und Score Werte festlegen. Dazu habe ich unter /etc/spamassasin/ eine eigene Datei Namens p0f.cf angelegt.

header L_P0F_OS_WINDOWSXP   X-Amavis-OS-Fingerprint =~ /^Windows XP/
score  L_P0F_OS_WINDOWSXP   3.5
header L_P0F_OS_WINDOWS_OTHER X-Amavis-OS-Fingerprint =~ /^Windows(?! XP)/
score  L_P0F_OS_WINDOWS_OTHER 1.7
header L_P0F_OS_UNKOWN  X-Amavis-OS-Fingerprint =~ /^UNKNOWN/
score  L_P0F_OS_UNKOWN  0.8
header L_P0F_OS_LINUX  X-Amavis-OS-Fingerprint =~ /^Linux/
score  L_P0F_OS_LINUX  -0.3
header L_P0F_OS_UNIX  X-Amavis-OS-Fingerprint =~ /^((Free|Open|Net)BSD)|Solaris|HP-UX|Tru64/
score  L_P0F_OS_UNIX  -1.0
header L_P0F_D_1_4 X-Amavis-OS-Fingerprint =~ /\bdistance [1-4](?![0-9])/
header L_P0F_D_5_6 X-Amavis-OS-Fingerprint =~ /\bdistance [5-6](?![0-9])/
header L_P0F_D_7_9 X-Amavis-OS-Fingerprint =~ /\bdistance [7-9](?![0-9])/
header L_P0F_D_15_25 X-Amavis-OS-Fingerprint =~ /\bdistance [15-25](?![0-9])/
score  L_P0F_D_1_4 -0.7
score  L_P0F_D_5_6 -0.5
score  L_P0F_D_7_9 -0.3
score  L_P0F_D_15_25 0.3

Nun sollte nach einem Neustart der Dienste die Bewertung anhand von Fingerprints funtkionieren. Ob dies der Fall ist, erkennt man am Header der betreffenden E-Mails.

X-Spam-Score: 10.78
X-Spam-Level: **********
X-Spam-Status: No, score=10.78 tagged_above=-100 required=14.31
 tests=[HELO_DYNAMIC_DIALIN=3.995, L_P0F_D_7_9=-0.3,
 L_P0F_OS_WINDOWSXP=3.5, MISSING_SUBJECT=1.285, NO_REAL_NAME=1.2,
 RDNS_DYNAMIC=0.1, UNDISC_RECIPS=1]
X-Amavis-OS-Fingerprint: Windows XP/2000 (RFC1323+, w+, tstamp-) [GENERIC]
 Signature: [65535:121:1:52:M1260,N,W3,N,N,S:.:Windows:?], (distance 7,
 link: PIX, SMC, sometimes wireless), [80.141.48.85:]
header L_P0F_OS_WINDOWSXP   X-Amavis-OS-Fingerprint =~ /^Windows XP/
score  L_P0F_OS_WINDOWSXP   3.5
header L_P0F_OS_WINDOWS_OTHER X-Amavis-OS-Fingerprint =~ /^Windows(?! XP)/
score  L_P0F_OS_WINDOWS_OTHER 1.7
header L_P0F_OS_UNKOWN  X-Amavis-OS-Fingerprint =~ /^UNKNOWN/
score  L_P0F_OS_UNKOWN  0.8
header L_P0F_OS_LINUX  X-Amavis-OS-Fingerprint =~ /^Linux/
score  L_P0F_OS_LINUX  -0.3
header L_P0F_OS_UNIX  X-Amavis-OS-Fingerprint =~ /^((Free|Open|Net)BSD)|Solaris|HP-UX|Tru64/
score  L_P0F_OS_UNIX  -1.0

header L_P0F_D_1_4 X-Amavis-OS-Fingerprint =~ /\bdistance [1-4](?![0-9])/
header L_P0F_D_5_6 X-Amavis-OS-Fingerprint =~ /\bdistance [5-6](?![0-9])/
header L_P0F_D_7_9 X-Amavis-OS-Fingerprint =~ /\bdistance [7-9](?![0-9])/
header L_P0F_D_15_25 X-Amavis-OS-Fingerprint =~ /\bdistance [15-25](?![0-9])/

score  L_P0F_D_1_4 -0.7
score  L_P0F_D_5_6 -0.5
score  L_P0F_D_7_9 -0.3
score  L_P0F_D_15_25 0.3

Nachtrag

Wie ich gerade gesehen habe, gibt es p0f auch als Spamassassin Plugin ;-)

US-Gericht nimmt ISP vom Netz

Die Amerikanische Aufsichtsbehörde Federal Trade Commission hat die Tage den ISP Pricewert LLC vom Netz genommen. Der Provider soll den Versand von Spam, Viren und Malware geduldet haben. Die Abschaltung macht sich bei einigen eMail Hostern direkt bemerkbar.

mailgraph_rejects

Den Original Artikel finden Sie unter http://ftc.gov/opa/2009/06/3fn.shtm.

Debian: clamav Signatur Datei selbst erstellen

Auf Sanesecurity.com dürfte der ein oder andere ja bereits aufmerksam geworden sein. Wie in meinem Artikel “ClamAV zur Spambekämpung? Ja…” beschrieben, werden seit längerem auf sanesecurity.com Clamav Signatur Dateien angeboten, mithilfe derer man Spam eMails identifizieren kann. Das Prinzip ist identisch mit der Erkennung von Viren.

Beim erstellen wird aus einer Spam eMail ein Teil herausgesucht, der diese eMail möglichst eindeutig identifiziert. Für diese Phrase wird dann eine Checksumme errechnet die dann in einer Virendatei abgespeichert wird. Findet clamav nun eine Datei, die genau die gleiche Checksumme beinhaltet gilt dies als Treffer und die Datei – in unserem Falle die eMail wird als Virus/Spam identifiziert.

Unter dem Link http://www.sanesecurity.com/method.pdf ist bereits eine Anleitung zu finden, wie man sich eine eigene Signaturdatei erstellt, jedoch hatte ich damit irgendwie meine Probleme, dies mag unter anderem daran liegen, dass in dem PDF Dokument nicht beschrieben ist, dass von der errechnete Checksumme (siehe unten) die letzten beiden Nullen entfernt werden müssen. Nun aber weiter nach Plan…

Wir haben nun also eMail die wir eindeutig als Spam identifiziert haben und nun durch clamav filtern lassen wollen. Dies kann bei einer Massiven Spam Welle mit mehrere eMails des gleichen Inhaltes sinnvoll sein, wenn die eMail vom Spamfilter nicht erkannt wird… Wir suchen uns nun also einen Teil innerhalb der eMail der eindeutig für diese eMail ist.

In unserem Fall enthält die eMail den Text

Spezialangebot: ViAA 10 Tab + Ci 10 Tab – 56.15 Euro

Achten Sie beim aussuchen der Textstelle darauf, dass beim HTML Format evtl. noch Formatierungstags diese Stelle umschließen bzw. unterbrechen können. In diesem Fall sollten sie den Quelltext der eMail verwenden um die Passage inkl. Formatierungstags zu verwenden. Auf der Seite http://nickciske.com/tools/hex.php können Sie sich nun einen Hex-Wert für diese Textstelle erstellen lassen. Achten Sie darauf, dass sie die beiden letzten 00 anschließend entfernen müssen.

clamscan_create_sigfile_1

Nun haben Sie den Hex-Wert und schreiben diesen in folgendem Format in *.ndb Datei im Clamav Verzeichnis (/var/lib/clamav/).

o-o-s.de.090124001:3:*:5370657A69616C616E6765626F743A....
  • o-o-s.de.090124001 – Dieser Teil gibt an, als was die Datei identifiziert wird. Geben Sie hier einen eindeutigen Namen an.
  • :3: – steht für den Typ HTML. Mögliche Werte können bei Clamav im Dokument für die Signaturerstellung im Abschnitt Extended signature format nachgelesen werden
  • 5370657A69616C616E6765626F74… Der Hex-Wert der Textpassage

Nach einem reload der Clamav-DB sollten nun eMails mit der verwendeten Textpassage erkannt werden.

Wer nun den Betreff eine eMail verwenden möchte um diese zu identifizieren, kann dies auch tun.

o-o-s.de.090124002:4:*:5375626a6563743a{-30}54776F20676F….

  • 5375626a6563743a – steht in dem Fall für Subject:

SysCP: DKIM mit SysCP 1.4.2

Mit SysCP 1.4.2 wurde DKIM integriert, was es dem Absender ermöglicht, seine eMails beim versenden mit einer Signatur zu versehen, die der Empfangende Server prüfen kann um festzustellen ob die eMail tatsächlich von diesem Server Versand wurde. Weitere Informationen siehe Post-ID 1212.

So wie es aussieht, ist aber in der SysCP Version 1.4.2 ein Bug bezüglich der dkim Veröffentlichung mittels DNS enthalten, der aber bereits gemeldet wurde.

Schlüssel erstellen

siehe Post 2487

dkim-milter Installation

Da das Paket dkim-filter erst mit Debian Lenny ein fester Bestandteil von Debian wird, muss das Paket aus den Backports installiert werden.

wget http://www.backports.org/debian/pool/main/d/dkim-milter/dkim-filter_2.6.0.dfsg-1~bpo40+2_i386.deb
apt-get install libmilter0
dpkg -i dkim-filter_2.6.0.dfsg-1~bpo40+2_i386.deb

Coorperation mit amavisd-new

Da ich als Content-Filter jede eMail durch amavisd-new laufen lasse, musste die Signierung der eMails am Ort der Rückgabe der eMails nach der amavis Prüfung erfolgen. Dazu habe ich die master.cf wie folgt angepasst.

/etc/postfix/master.cf
127.0.0.1:10025 inet    n       -       -       -       -       smtpd
   [...]
  -o milter_default_action=accept
  -o milter_macro_daemon_name=ORIGINATING
  -o smtpd_milters=inet:localhost:8891
  -o non_smtpd_milters=inet:localhost:8891
  -o content_filter=

anpassen der dkim-filter Konfiguration

Nun muss noch die Konfiguration angepasst werden. Dazu muss über die Datei /etc/default/dkim-filter der Port angegeben werden, über den der Filter erreichbar ist. Weiterlesen