Was ist Spam?

Etwas zum Essen :-)

  • Spiced Pork And Ham
  • Monty-Python-Sketch

Usenet

  • Excessive Multiple/Cross-Posting
  • MUDs
  • Erster Usenet-Spam 1988 "HELP ME!".
  • MAKE MONEY FAST
  • ARMM - Retro-Moderation Software hatte Bug und postete 200 Messages nach news.admin.policy. Erste Verwendung des Worts "Spam" im Usenet (1993)
  • Global Alert for All: Jesus is Coming Soon. (1994)
  • Green Card Lottery. (1994)

E-Mail

  • UBE - Unsolicited Bulk Email
  • UCE - Unsolicited Commercial Email

Wieso ist Spam böse?

Menge

  • Ca. 50 % aller Mails am Backbone.
  • > 100 Spams pro Tag bei manchen Usern

Schaden: "Verlorene" Mails

  • Wirklich verloren - Mailbox voll, Server überlastet
  • Übersehen, versehentlich gelöscht
  • Postmaster, Double Bounces -> /dev/null
  • False Positives bei Spam-Filtern!

Wie wird Spam verschickt?

Parallel

  • Über hunderte/tausende Server gleichzeitig

Häufig ohne Einverständnis der "Mittäter"

  • Offene Relays
  • Offene Proxies
  • Trojan Horses

Versteckspiel

  • Gefälschter Absender
  • Irreführende Subjects
  • Falsche Angaben zur List-Policy

Spam-Erkennung

Sender - Black & White-Lists

Kategorisierung der Sender in Gute und Böse

Lokale Konfiguration

  • (kein) Offenes Relay
  • Eigene und andere User
  • Outgoing/Incoming
  • Access-Lists am MTA

Problem

  • Wartungsaufwendig! Listen von tausenden Adressen müssten gepflegt werden.

RBLs

  • Zentrale Sammelstellen für "Böse"
  • Unterschiedliche Kriterien (Offene Relays, Spam-Quellen, Dial-Up-User, Nase passt mir nicht)
  • Man gibt Kontrolle ab!

Content-Filter

Idee: Ich erkenne Spam, wenn ich ihn sehe, das sollte auch ein Computer schaffen

  • Stichwörter
  • Muster (GrOSSSCHREIBUNG, !!!!!!, L.ö.c.h.e.r)
  • Content-Types (text/html)

Im Anfang war procmail

  • Regular Expressions
  • Gewichtungen
  • Handarbeit
  • Sammlungen von Regeln

SpamAssassin

  • Hunderte Tests (positive und negative!)
  • Gewichtungssystem
  • Default-Werte aus Analyse vieler Mails
  • Andere Scores, zusätzliche Regeln
  • CPU- und Memory-aufwendig
  • spamd/spamc

Razor

  • Spam ist was als Spam empfunden wird
  • Einzelne Mails sind Spam
  • Zentrale Mail-Datenbank
  • "Fuzzy" Hashes
  • Voting System
  • Server nicht Open Source
  • Umstritten!

Statistische Filter - All your Bayes are belong to us!

Thomas Bayes (1702-1761)
Portrait
  • engl. Mathematiker
  • Theory of Probability
  • berechnet Wahrscheinlichkeit einer Ursache aus Häufigkeit der Symptome
  • von Boole widerlegt und (fast) in Vergessenheit geraten
  • aber für Klassifikationen verwendet
Paul Graham: A Plan for Spam (2002)
  • verwendet Bayes'sche Logik
  • (let ((g (* 2 (or (gethash word good) 0))) (b (or (gethash word bad) 0))) (unless (< (+ g b) 5) (max .01 (min .99 (float (/ (min 1 (/ b nbad)) (+ (min 1 (/ g ngood)) (min 1 (/ b nbad)))))))))
  • Spam wird immer erkennbare Merkmale haben
  • Automatische Anpassung an Spam-Trends
Lern-Methoden
  • (große) Samples
  • Lernen aus Fehlern (interaktiv)
  • Automatisches Lernen

Am Verhalten des Senders

Spammer sind atypische Mail-Sender

  • Open Proxies sind für HTTP, nicht SMTP - Protokollfehler.
  • Spammer wollen schnell viel Mail versenden, nicht zuverlässig! Keine Queues, falsche Reaktion auf Fehler.
  • »Trojanisierte« Hosts nicht als Mailserver konfiguriert - erkennbare Konfigurationsfehler (DNS-Config, HELO, ...)
  • Historie

Policy

Zentral vs. Dezentral

Zentrale Verwaltung

  • Insgesamt weniger Arbeit
  • Sehr viel weniger Arbeit für den einzelnen
  • Besserer Überblick

Dezentrale Verwaltung

  • Spam ist subjektiv
  • Kein Single Point of Failure
  • Accountability

Wo filtern?

Im User Agent

  • Interaktives Feedback vom Benutzer
  • freie Wahl der Software
  • Benutzer bekommt trotzdem den Spam
  • langsam
  • (normalerweise) keine Bounces

Im Delivery Agent

  • Feedback schwieriger
  • relativ flexibel für Benutzer
  • Verarbeitung im Hintergrund
  • (normalerweise) keine Bounces

Im Transfer Agent

  • Feedback noch schwieriger
  • unflexibel für Benutzer
  • Verarbeitung im Hintergrund
  • Mail wird gar nicht erst angenommen
  • Mehr Information über Sender
  • Benutzer bemerkt false positives nicht!
  • Mail bounct (aber beim Sender!)

Toolbox

qpsmtpd

Blurb

  • Drop-in replacement for qmail-smtpd
  • Can support other "queing backends" than qmail-queue via the plugin system
  • Advanced but simple to use plugin system to easily install extra functionality and write local rules.
  • Advanced anti spam features, can be enabled or disabled per local address
  • Can be configured to know about local addresses and bounce invalid addresses at the smtp level.

Erfahrungen

  • Plugins wirklich einfach zu schreiben (wenn man Perl kann)
    • aliases (+ per-user options)
    • queue/postix
  • Qualität der vorhandenen Plugins variiert
  • Extrem verboses Logging (wenn gewünscht).
  • Performance ist für kleine Sites brauchbar. (für große: PPerl o.ä., persistenter Daemon ist in Entwicklung)
  • SpamAssassin

    • Hunderte Tests (positive und negative!)
    • Gewichtungssystem
    • Default-Werte aus Analyse vieler Mails
    • Andere Scores, zusätzliche Regeln
    • CPU- und Memory-aufwendig
    • spamd/spamc

    Greylisting

    Beobachtungen

    • SMTP unterscheidet temporäre von permanenten Fehlern.
    • "Richtige" Mailserver legen bei temporären Fehlern Mail in Queue und versuchen es in regelmäßigen Abständen (einige Minuten bis einige Stunden) wieder.
    • Spamware verwirft die Mail.
    • "Normale" Mails zwischen zwei Personen haben immer den gleichen Absender, Empfänger und laufen über eine kleine Menge an Servern.
    • Spam-Mails haben häufig zufällige Absender und kommen von vielen Sendern.

    Idee

    • Tripel (Absender-Email-Adresse, Sender-IP-Adresse, Empfänger-Email-Adresse)
    • Ist Tripel unbekannt: temporärer Fehler und Eintrag in die "greylist".
    • Ist Tripel in der Greylist und seit dem Eintrag eine bestimmtes Zeitintervall (default 1-3 Stunden) vergangen: Mail annehmen und Eintrag in die "whitelist" (für 36 Tage).
    • Ist Tripel in der Whitelist: Mail annehmen, und Ablaufdatum der Whitelist verlängern.
    • Abgelaufene Einträge werden wie unbekannte behandelt.

    Probleme

    • Welches Greylisting-Intervall? Was sind übliche Queuing-Intervalle? ([15 Minuten ... 9 Stunden] scheint brauchbarer Kompromiss zu sein)
    • Wechselnde Absender-Adressen (VERP), insbesondere bei Mailinglisten. Teilweise pro Zustellversuch!
    • Wechselnde IP-Adressen bei Mail-Server-Farmen (Chello, Yahoo)
    • Kaputte Mailer: Keine Unterscheidung zwischen temporären und permanenten Fehlern, keine Queue-Runs, falsche Fehlermeldungen, etc.
    • -> Whitelisting
    • -> Optional

    Fallbeispiele

    Fallbeispiele: hjp.at

    Anforderungen

    • 1-Benutzer-System
    • always-online, statische IP
    • User verwendet Usenet und Mailinglisten (d.h., viel Spam, aber ich erwarte Mails von Unbekannten)
    • RFC-Faschist
    • qmail (bounct!)

    Mail-Kategorisierung

  • Verschiedene Mail-Adressen für Mailinglisten, Usenet, ...
  • procmail, .qmail, Mail::Audit
  • Razor, SpamAsssassin, Mail::Filter::Bayesian
  • Mail-Reject

    • qpsmtpd
    • Blackhole-Listen
    • Spamassassin (qpmtpd-Plugin + spamd) Reject, wenn Score > 5. Custom-Rules (Virenwarnungen)
    • "klez"-Filter

    Resultat

    • Nur eine Handvoll Spams pro Tag wird angenommen
    • und meistens "richtig" einsortiert
    • Blackhole-Listen liefern gelegentlich false positives (und werden dann meist entsorgt)

    Fallbeispiele: luga.at

    Anforderungen

    • Keine Enduser (nur Admins)
    • Mailinglists

    Mail-Kategorisierung

  • Implizit durch Mailinglists
  • Öffentliche Listen: Nur Subscriber dürfen senden
  • Geschlossene Listen/Aliases (office, ...): Alle dürfen senden :-(
  • Die öffentlichen Listen waren durch die »Nur Subscriber dürfen senden«-Regel ausreichend geschützt. Nur selten hat es ein Spammer geschafft, mit einer subscribierten Adresse auf die Liste zu posten.

    Insbesondere office wurde aber ziemlich mit Spam belastet - beim normalen Lesen eher ein geringes Problem (Spamassassin am eigenen Rechner filtert genauso zuverlässig, ob die Mail an mich direkt oder über office geschickt wurde) aber die Mailinglist-Archive wurden ziemlich unübersichtlich.

    Und dann kam Sobig

    Und ich sah, dass die Welt schlecht war

    • Mein MTA hat das Zeug rejected (Klez-Filter)
    • Günthers Mailbox war voll
    • -> viele Bounces.
    • + Virenwarnungen
    • = Handlungsbedarf

    Mail-Reject

    • Blackhole-Listen
    • qpsmtpd
    • Spamassassin (qpmtpd-Plugin + spamd)
    • greylisting
    • earlytalker
    • SMTP-Forward-Modul (-> sendmail)

    Resultat

    Anmerkung: In der Graphik fehlen die Mails, die sendmail an Hand des Content-Types filtert.

    • Deutliche Verringerung das Spam-Aufkommens (office-Liste: 80% (137/166) im Juli, 15% (12/91) im Oktober).
    • Nach "Einschleifphase" problemlos.

    wsr.ac.at

    • Kleines Rechenzentrum, Provider für 4 Institute
    • ca. 200 Enduser
    • Unterschiedliche Anforderungen der User
    • geringes technisches Verständnis der User

    Maßnahmen

    • SpamAssassin im MDA (nur Markieren, Filtern können die User im MUA)
    • SpamAssassin-Rules werden von uns gepflegt (AFAIK tut das kein User selbst)
    • qpsmtpd (+ standard-checks (resolvable_from, etc.))
    • Optional greylisting

    Resultat

    • Wahlmöglichkeit für User ist wichtig!
    • Ca. 50% der User verwenden Greylisting.
    • Gelegentlich verspätet oder gar nicht zugestellte Mails.

    Spam-Filter

    Spam-Filter

    Peter J. Holzer
    http://www.hjp.at/
    <hjp@hjp.at>
    http://www.hjp.at/publ/spam-2003-11-26/