ebook - no spam

160
Tobias Eggendorfer No Spam!

Upload: hl1234

Post on 30-Jun-2015

58 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: eBook - No Spam

Tobias Eggendorfer

No Spam!

Page 2: eBook - No Spam
Page 3: eBook - No Spam

Tobias Eggendorfer

No Spam!Besser vorbeugen als heilen

Software & Support Verlag GmbHFrankfurt 2005

Page 4: eBook - No Spam

Tobias Eggendorfer : No Spam!Besser vorbeugen als heilen.Frankfurt, 2005ISBN 3-935042-71-X

© 2005 Software & Support Verlag GmbH

http://www.software-support-verlag.dehttp://www.entwicklerpress.de/buecher/nospam

Ihr Kontakt zum Verlag und Lektorat: [email protected]

Bibliografische Information Der Deutschen Bibliothek

Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar.

Korrektorat: Petra Kienle

Satz: text & form GbR, Carsten Kienle

Umschlaggestaltung: Melanie Hahn

Belichtung, Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, Paderborn.

Alle Rechte, auch für Übersetzungen, sind vorbehalten. Reproduktion jeglicher Art (Fotokopie, Nachdruck, Mikrofilm, Erfassung auf elektronischen Datenträgern oder andere Verfahren) nur mit schriftlicher Genehmigung des Verlags. Jegliche Haftung für die Richtigkeit des gesamten Werks kann, trotz sorgfältiger Prüfung durch Autor und Verlag, nicht übernommen werden. Die Programmbeispiele dienen nur der Er-klärung und sind nicht ungeprüft für den Produktionseinsatz geeignet. Die im Buch genannten Produkte, Warenzeichen und Firmennamen sind in der Regel durch deren Inhaber geschützt.

Page 5: eBook - No Spam

Inhaltsverzeichnis

Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Notwendige Vorkenntnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Zum Umgang mit diesem Text . . . . . . . . . . . . . . . . . . . . . . . . . 13

1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1.1 Untaugliche Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.2 Spam an der Wurzel bekämpfen . . . . . . . . . . . . . . . . . . . . 16

2 Was ist Spam? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.1 Etwas Geschichte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.2 Spam und Recht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.3 Unsolicited Bulk E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3 Woher haben Spammer die Mailadressen?. . . . . . . . . . . . . . . . 25

3.1 Freiwillige Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2 Adressen im Internet automatisch sammeln . . . . . . . . . . . 25

3.2.1 Durchsuchen von Internetseiten. . . . . . . . . . . . . . 253.2.2 Newsgroups und ähnliche Quellen . . . . . . . . . . . 283.2.3 Erraten von Adressen . . . . . . . . . . . . . . . . . . . . . . 293.2.4 Adresshandel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

4 Grundlegende Vorsichtsmaßnahmen. . . . . . . . . . . . . . . . . . . . . 33

4.1 Umgang mit Mailadressen . . . . . . . . . . . . . . . . . . . . . . . . . 334.2 Wegwerfadressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.3 Newsletter und Ähnliches . . . . . . . . . . . . . . . . . . . . . . . . . 364.4 Keinesfalls: gefälschte Absenderadressen . . . . . . . . . . . . . 374.5 Webtelefonbücher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384.6 Spammer beim Sammeln identifizieren. . . . . . . . . . . . . . . 394.7 SMTP-Teergruben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394.8 Rechtsweg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

5 E-Mail-Adressen von Webseiten verbannen . . . . . . . . . . . . . . . 43

5.1 Adressen fälschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455.2 Verstecken mit HTML-Code . . . . . . . . . . . . . . . . . . . . . . . 46

5.2.1 Kontaktformular. . . . . . . . . . . . . . . . . . . . . . . . . . 47

5No Spam!

Page 6: eBook - No Spam

Inhaltsverzeichnis

5.2.2 Tarnen mit HTML . . . . . . . . . . . . . . . . . . . . . . . . 585.2.3 Rechtliches. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

5.3 Bilder und Ähnliches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675.3.1 E-Mail-Adresse als Bild. . . . . . . . . . . . . . . . . . . . 675.3.2 PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695.3.3 Flash. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5.4 JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725.4.1 Das Grundprinzip. . . . . . . . . . . . . . . . . . . . . . . . . 725.4.2 Eine stabilere Lösung. . . . . . . . . . . . . . . . . . . . . . 745.4.3 Theoretische Informatik ausnutzen . . . . . . . . . . . 765.4.4 Mit Verschlüsselung. . . . . . . . . . . . . . . . . . . . . . . 775.4.5 Harvester mit JavaScript . . . . . . . . . . . . . . . . . . . 835.4.6 JavaScript-freie Browser . . . . . . . . . . . . . . . . . . . 84

5.5 Weitere Verfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865.6 Test auf echten Webseiten . . . . . . . . . . . . . . . . . . . . . . . . . 875.7 Test mit echten Harvestern. . . . . . . . . . . . . . . . . . . . . . . . . 89

6 Automatisch tarnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

6.1 Apache-Modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946.1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956.1.2 Programmierzauber . . . . . . . . . . . . . . . . . . . . . . . 966.1.3 Tarnfunktion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966.1.4 Das Script selbst. . . . . . . . . . . . . . . . . . . . . . . . . . 97

6.2 Tuning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100

7 Missbrauch fertiger Scripten . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

7.1 Missbrauch von Kontaktformularen . . . . . . . . . . . . . . . . . 1047.1.1 Empfänger als INPUT TYPE HIDDEN . . . . . . . 1047.1.2 Nutzereingabe im From-Feld. . . . . . . . . . . . . . . . 1067.1.3 Nutzereingabe sonstiger Header-Felder. . . . . . . . 1067.1.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . 107

7.2 Missbrauch von eCards . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077.2.1 Hinweise zur Umsetzung . . . . . . . . . . . . . . . . . . . 109

7.3 Send-To-A-Friend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

6

Page 7: eBook - No Spam

Inhaltsverzeichnis

8 Harvester blockieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

8.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.2 Überlastungsprophylaxe. . . . . . . . . . . . . . . . . . . . . . . . . . . 124

8.2.1 Semaphoren in PHP . . . . . . . . . . . . . . . . . . . . . . . 1258.3 Die Lösung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1268.4 Ein Script – viele Namen . . . . . . . . . . . . . . . . . . . . . . . . . . 1278.5 Suchmaschinen schützen . . . . . . . . . . . . . . . . . . . . . . . . . . 1288.6 Beispiel-Teergrube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128

8.6.1 Konfiguration der Beispiel-Teergrube . . . . . . . . . 1288.6.2 Das Script. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

8.7 Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348.8 Weitere Verbesserungsmöglichkeiten . . . . . . . . . . . . . . . . 135

9 Absichern von Mailinglisten und Newslettern . . . . . . . . . . . . . 137

9.1 Sicherheitsziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379.2 Anmeldeverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

9.2.1 Opt-Out . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389.2.2 Einfacher Opt-In . . . . . . . . . . . . . . . . . . . . . . . . . 1389.2.3 Double-Opt-In . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399.2.4 Anmeldebestätigung . . . . . . . . . . . . . . . . . . . . . . 141

9.3 Laufender Betrieb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419.3.1 Schutz der Mailadressen . . . . . . . . . . . . . . . . . . . 1429.3.2 Schutz der Liste . . . . . . . . . . . . . . . . . . . . . . . . . . 144

9.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Literaturhinweise. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

7No Spam!

Page 8: eBook - No Spam
Page 9: eBook - No Spam

Vorwort

Spamfilter sind langsam, fehleranfällig und wirken meiner Meinung nach amfalschen Ende: Sie entfernen Spam erst dann, wenn er auf dem Server desEmpfängers eingetroffen ist und ihm damit bereits Kosten verursacht hat. DasZiel sollte daher sein, Spam schon vor der Entstehung zu unterbinden und sodie Investition in aufwendige Spamfilter überflüssig zu machen.

Ich möchte Ihnen in diesem Buch Verfahren und Möglichkeiten der präventi-ven Spam-Vermeidung vorstellen, die ich entweder selbst entwickelt habe oderfür die ich im Rahmen meiner Recherchen Anregungen und Ideen entdeckte,die ich dann häufig noch verfeinern konnte.

Mein Ansatz ist dabei zu verhindern, dass Spammer überhaupt in den Besitzvon E-Mail-Adressen gelangen. Dadurch wird ihnen das wichtigste Hand-werkzeug genommen.

Spammer ernten E-Mail-Adressen vorzugsweise – aber nicht ausschließlich –von Webseiten. Daher stelle ich hier unter anderem Lösungen vor, wie sichWebseiten so gestalten lassen, dass Sammelprogramme dort keine E-Mail-Adressen mehr finden. Dabei werde ich auch eine Lösung implementieren, diedie vorgeschlagenen Verfahren automatisiert durchführt, ohne dass die beste-henden Webseiten manuell geändert werden müssten.

Zwei große Themenkomplexe in der Spambekämpfung spare ich aus: zum ei-nen die Konfiguration von Mail-Servern, so dass sie nicht als Open Relaymissbraucht werden können1, und zum anderen die Problematik des „OpenProxy“. Beide Probleme erscheinen mir zu speziell und sind in der Literaturmittlerweile ausführlich und ergiebig diskutiert. Zudem setzen beide Lösun-gen einen Schritt hinter meinem Ansatz an: Sie versuchen, den Versand vonSpam zu behindern, und greifen damit erst dann ein, wenn der Spammer be-reits E-Mail-Adressen seiner Opfer hat.

Ich hoffe, in der folgenden Darstellung die richtige Mischung aus Theorie undPraxis gefunden zu haben. Und ich hoffe, dass ich mein Ziel, Ihnen durch an-schauliche Erklärungen das Verständnis zu erleichtern, erreiche.

1. Siehe z.B.: [COS97] für Sendmail, [HEIN04] für Postfix und [SIL01] sowie [BER03a] für qmail.

9No Spam!

Page 10: eBook - No Spam

Vorwort

In „Notwendige Vorkenntnisse“ gebe ich Ihnen einige Hinweise, welche Vor-kenntnisse Sie zum Verständnis der einzelnen Kapitel mitbringen sollten. Siewerden sehen, dass häufig eine gesunde Portion Neugier und Interesse aus-reicht, um den Beispielen zu folgen.

Leider bin ich auch nur ein Mensch und somit fehlbar – gerade eine erste Aus-gabe hat den Fehlerteufel in sich. Daher würde ich mich über Feedback, An-merkungen, konstruktive Kritik, aber auch über eine Sammlung meinerschönsten Tippfehler und unverständlichsten Sätze freuen. Zu diesem (undvielen weiteren Zwecken) existiert auf meiner Homepage http://www.eggen-dorfer.info ein Kontaktformular.

Sollten Sie sehr viele Fehler finden – oder auch reichlich Verbesserungsvor-schläge haben, dann wird dort auch eine Seite mit entsprechenden Hinweisenentstehen.

Ich wünsche Ihnen viel Spaß bei der Lektüre!

10

Page 11: eBook - No Spam

Notwendige Vorkenntnisse

Von meinem Verlag wurde ich mehrfach gefragt, an wen sich das Buch wende.Das ist schwer zu sagen:

Einige der dargestellten Techniken (in Kapitel 4 und 5) sind für jeden nach-vollziehbar, der schon mal eine Webseite erstellt hat. Häufig sind dafür nochnicht einmal detailliertere HTML- oder gar JavaScript-Kenntnisse notwendig.

Diese Lösungsvorschläge wenden sich somit an jeden, der eine eigene Home-page betreibt. Der notwendige Code ist stets ausführlich erläutert und kann sofast immer ohne Änderungen auf die eigene Homepage übernommen werden.

In Kapitel 6 stelle ich Ihnen eine Methode vor, wie Sie die in Kapitel 5 erklär-ten Tarnverfahren automatisch von Ihrem Webserver durchführen lassen kön-nen. Das Schöne an der Lösung ist, dass Sie Ihre bestehenden Webseiten garnicht mehr anfassen müssen, um in den Genuss effektiver Tarnung zu kom-men.

Der Haken an der Sache? Wie so oft: Bevor man sich faul zurücklehnen kann,ist etwas Programmierarbeit nötig. Für das Verständnis des vorgestellten Pro-gramms sind daher Perl-Kenntnisse hilfreich. Um das Konzept zu verstehen,brauchen Sie aber nur Ihren gesunden Menschenverstand.

Kapitel 7 ist dann etwas für den kleinen Cracker in Ihnen: Wir schauen uns an,wie typische Scripten auf Webseiten von Spammern missbraucht werden kön-nen, und diskutieren, wie man sie gegen diese Angriffe abdichten kann. Umdie Ideen dieses Kapitels zu verstehen, sind HTML-Grundkenntnisse und et-was Fantasie nötig. Um die Programmbeispiele nachvollziehen zu können undan die eigenen Bedürfnisse anzupassen, sind PHP-Kenntnisse empfehlens-wert. So stelle ich Ihnen beispielsweise in Kapitel 7.2 ein Verfahren vor, wieman spamfrei eCards anbieten kann.

Ans Eingemachte gehen wir in Kapitel 8: Wir konstruieren eine Falle fürSpammer. Das Konzept ist wiederum für jedermann verständlich – allerdingsnutzt das vorgestellte PHP-Script zur Umsetzung dann einige trickreiche Pro-grammiermethoden, die ich Ihnen ausführlich erkläre. Wenn Sie das Script aufIhrer eigenen Seite einsetzen wollen, sollten Sie daher PHP beherrschen.

In Kapitel 9 wird es wieder etwas allgemeiner: Wir diskutieren verschiedeneVerfahren, um Mailinglisten vor Spammern zu schützen. Das trifft Sie vor al-

11No Spam!

Page 12: eBook - No Spam

Notwendige Vorkenntnisse

lem dann, wenn Sie selbst Newsletter oder Mailinglisten anbieten wollen –sollte das der Fall sein, so haben Sie auch schon Erfahrung mit der notwendi-gen Software. Ansonsten liefert Ihnen das Kapitel einige wertvolle Hinweise,worauf Sie achten sollten, wenn Sie sich irgendwo anmelden.

Generell gilt: Die Erklärungen und Beispiele sind meiner Meinung nach für je-den verständlich, der ein bisschen gesunde Neugier mitbringt. Die unterstelleich Ihnen, sonst hätten Sie kaum dieses Buch in der Hand.

12

Page 13: eBook - No Spam

Zum Umgang mit diesem Text

Um Programmbefehle zu markieren, verwende ich die folgende Darstellung:

Sollten durch den Druck zufällig Zeilenumbrüche an Stellen entstehen, an de-nen sie nicht hingehören und zu einer Fehlfunktion führen würden, markiereich den Zeitpunkt, an dem Sie die Return-Taste drücken dürfen, mit [RET]. So-weit aber ein Zeilenumbruch nicht stört, verzichte ich im Sinne der besserenLesbarkeit auf diesen Zusatz.

Ich verwende im Text relativ großzügig Fußnoten. Häufig gebe ich Ihnen dortQuellen an, unter denen Sie weitere Detailinformationen zu einem bestimmtenProblemkreis finden können, dessen Darstellung hier den Rahmen sprengenwürde. Manchmal ist es hilfreich, wenn die eigene Neugier geweckt ist, einenEinstiegspunkt für weitere Recherchen zu finden.

Die Literatur ist dabei mit einem Kürzel im Text angegeben, Sie finden dievollständigen Angaben unter dem Kürzel im alphabetisch sortierten Literatur-verzeichnis am Ende des Buchs.

Ich kann keinerlei Garantie für die Fehlerfreiheit der Programmbeispiele über-nehmen: Zwar habe ich sie ausführlich getestet, einige liefen (und laufen) aufWebseiten, die massiv von Spammern heimgesucht werden, aber die Scriptensind hier lediglich aus didaktischen Gründen eingestreut und sollen das Ver-ständnis erleichtern. Sie sollen Ihnen als Ausgangsbasis zur Entwicklung eige-ner Lösungen dienen, die Sie vor dem Live-Einsatz natürlich gründlich testenmüssen – insbesondere auf Sicherheitslöcher2.

Jedoch schränke ich das Nutzungsrecht daran ausdrücklich dahingehend ein,dass keines der Programme, Programmbeispiele oder der vorgestellten Verfah-ren von Spammern, zur Vorbereitung der Versendung oder der Versendung vonSpam oder ähnlich niederträchtigen Zwecken verwendet werden darf. Einesolche Verwendung würde ich als Urheberrechtsverstoß verfolgen.

Gegen eine Nutzung zu privaten und wissenschaftlichen Zwecken unter Hin-weis auf meine Urheberschaft habe ich jedoch keinerlei Einwände.

UPDATE leser SET wissen = wissen + 1 WHERE buch_gelesen = true;

2. Mit diesem Problem beschäftigen sich ausführlich: [KOZ04], [HOG04] und [VIE01]. Eine allgemeinere Einführung liefert [PEI04].

13No Spam!

Page 14: eBook - No Spam
Page 15: eBook - No Spam

1 Einführung

Spam lässt Ihren E-Mail-Briefkasten überquellen. Doch warum eigentlich?Woher haben die Spammer Ihre Adresse? Und was kann man präventiv gegenSpam tun? Das sind Fragen, mit denen wir uns hier beschäftigen wollen.

1.1 Untaugliche Filter

Dabei klammern wir die Frage nach Spamfiltern bewusst aus: Erstens gibt esdazu bereits mehr als genug Literatur, zweitens sind die Filter anders als beiViren und Würmern nur eingeschränkt wirkungsvoll. Viren und Würmer ha-ben eindeutige Signaturen, über die sie gut automatisch erkannt werden kön-nen. Bei Spam gibt es so etwas nicht.

So hilft z.B. ein Filter, der auf bestimmte Schlagwörter reagiert, nichts: FürApotheker, Urologen, Kardiologen und Internisten beispielsweise sind E-Mails mit dem Wort „Viagra“ häufig wichtige Anfragen von Patienten undnicht unbedingt Spam. Ähnlich werden Uhrenhändler und Juweliere die Be-griffe „Rolex“, „Cartier“ und „Breitling“ nicht auf ihre Blacklist setzen wol-len.

Auch die anderen gängigen Filterverfahren scheitern an praktischen Proble-men: So schlagen manche Autoren vor, E-Mails nur von Rechnern mit festenIP-Adressen anzunehmen und haben dabei die Rechnung ohne die Telekom-munikations-Überwachungsverordnung (TKÜV) gemacht: Denn die zwingtdie großen Provider dazu, an ihren Mailservern Abhörvorrichtungen bereitzu-stellen. Wer das umgehen will, nutzt diese Server nicht, sondern mailt direktvon seinem PC. Technisch ist das kein Problem.

Vielfach hochgelobt sind so genannte Open-Relay-Blacklists, also schwarzeListen von Servern, die E-Mails für fremde Domains annehmen und weiterge-ben („relayen“). Ungünstig ist dabei nur, dass manche Listen so aggressiv sind,dass sogar seriöse Anbieter wie web.de und GMX regelmäßig dort gesperrtwerden. Mancher Administrator setzt im vollen Vertrauen sogar Listen wie dievon Spamcop als einzigen Filter ein, obwohl Spamcop selbst davor warnt, weilsie ihre Liste als experimentell und sehr aggressiv einstufen.

Zudem wirkt der Filter schlicht am falschen Ende der „Spam-Kette“. Günsti-ger wäre es, das Übel Spam an der Wurzel zu packen.

15No Spam!

Page 16: eBook - No Spam

1 – Einführung

1.2 Spam an der Wurzel bekämpfen

Die Wurzel ist, so haben eine Studie ([CDT03]) und eigene Untersuchungen3

ergeben, die Veröffentlichung von E-Mail-Adressen auf Webseiten. An diesemPunkt setze ich an und dokumentiere Verfahren, wie E-Mail-Adressen auf Ho-mepages für Spammer unsichtbar gemacht werden können.

Später werden wir uns überlegen, wie beispielsweise Kontaktformulare gestal-tet sein müssen, um zu verhindern, dass sie als „Spamming-Engines“ miss-braucht werden können. Dabei demonstriere ich Ihnen auch ein Verfahren zumAnbieten von eCards, ohne Gefahr zu laufen, als Spammer auf Unterlassung inAnspruch genommen zu werden4.

In einem letzten Schritt werfen wir dann einen Blick auf ein Verfahren, dasSpammern das Sammeln von Adressen vergällen soll.

Zuerst jedoch möchte ich Ihnen zeigen, wie Spammer die Adressen sammeln,und den Begriff Spam definieren. Immer mehr unerwünschte Mails werdenheutzutage von Würmern und Trojanern versandt, die mit den Methoden die-ses Buchs nicht kleinzukriegen sind.

Das Problem der Viren, Würmer und Trojaner können wir hier nicht behandeln– es passt nicht in diesen Rahmen. Auch dazu existiert bereits einiges an Lite-ratur5.

Parallel zur Erstellung dieses Buchs habe ich einen Kurs für die Volkshoch-schule München konzipiert, der sich jedoch nur auf die spamsichere Gestal-tung von Homepages konzentriert und nicht alle präventiven Möglichkeitenvorstellen sollte – schließlich ist der Zeitrahmen einer solchen Veranstaltungbegrenzt. Die dort beschriebenen Methoden fasste ich für die Zeitschrift „Li-nux-User“ in einem Beitrag zusammen. Der Beitrag stieß unter den Lesern,wie zahlreiche Zuschriften belegen, auf sehr großes Interesse und erschienmittlerweile in Übersetzungen in der internationalen, englischen Ausgabe „Li-nux-Magazine“, im rumänischen Linux-Magazin „Linux-Magazin Romania“und in der polnische Ausgabe „Linux Magazine“6.

3. [EGG05a], [EGG05b] und [EGG05c]4. Siehe dazu http://de.wikipedia.org/wiki/E-Card, dort ist der Volltext der einschlägigen

Urteile verlinkt5. Siehe dazu: [EGG04d], [EGG05d]6. Siehe: [EGG04], [EGG04g], [EGG04h], [EGG04f]

16

Page 17: eBook - No Spam

Spam an der Wurzel bekämpfen

Im deutschsprachigen Linux-Magazin stellte ich erstmals auch ein Verfahrenvor, Spammer zu ärgern – sie also beim Einsammeln von Adressen nachhaltigzu behindern.7

Im vorliegenden Buch diskutiere ich um einiges ausführlicher, als es im Rah-men von Artikeln möglich ist, diese und andere Verfahren. Insbesondere wer-den dabei auch die rechtlichen Konsequenzen dargestellt.

Ich wünsche Ihnen viel Vergnügen bei der Lektüre – und eine spamfreie Zu-kunft. Die verspricht zumindest [CDT03], hindert man Spammer am Adres-sensammeln.

7. Siehe: [EGG04a]

17No Spam!

Page 18: eBook - No Spam
Page 19: eBook - No Spam

2 Was ist Spam?

Die Bezeichnung „Spam“ wird heutzutage in einer wesentlich umfassenderenBedeutung verwendet als ursprünglich. Viele Anwender verstehen unter Spamdie massenhafte Zusendung von E-Mails unabhängig von deren Inhalt. Insbe-sondere werden auch die von Würmern automatisch generierten E-Mails vonvielen Anwendern als Spam bezeichnet. Manche gehen sogar noch weiter undnennen alles Spam, was auch nur in entferntester Form unerwünschte Werbungdarstellen könnte: Einige sprechen von Google-Spam, also manipuliertenTrefferpositionen in einer Google-Suche, und andere von Papier-Spam undverstehen darunter Postwurfsendungen.

2.1 Etwas Geschichte

Ursprünglich stand Spam für die massenhafte Sendung unerwünschter Wer-bung in den Newsgroups, speziellen Diskussionsbereichen im Internet. Dorttauchte auch erstmalig der Begriff „Spam“ auf.

Dabei ist das Wort SPAM zunächst unverfänglich und kommt aus einem völliganderen Bereich: SPAM in Großbuchstaben geschrieben ist nämlich als Wort-marke von der US-amerikanischen Firma Hormel Foods8 geschützt. SPAMsteht dabei als Abkürzung für Spiced Pork and Ham und ist ein penetrant pinkleuchtendes, unnatürlich aussehendes, aber in den USA ubiquitäres Dosen-fleisch. Dieses Dosenfleisch hat dort offensichtlich Kultcharakter erlangt:Ähnlich wie für das bei uns bekanntere Nutella gibt es eigene SPAM-Koch-bücher9 und SPAM-Restaurants.

Den Zusammenhang zwischen diesem Fleischderivat und unerwünschter Wer-bung erzeugte indirekt Monty Python, ein britischer Komiker. In einer seiner„Flying Circus“-Folgen möchte ein Gast in einem Restaurant, dessen Speise-karte ausschließlich Speisen enthält, die in irgendeiner Art auf SPAM basieren,ein Gericht ohne dieses Fleisch bestellen. Beim Versuch, die Bedienung nachentsprechenden Angeboten zu fragen, unterbindet ein Wikinger-Chor dieKommunikation und singt lauthals „Spam, Spam, Spam ...“.

8. Siehe dazu: http://www.spam.com 9. Siehe dazu: [WYM99]

19No Spam!

Page 20: eBook - No Spam

2 – Was ist Spam?

In einem Usenet-Posting am 31. März 1993 wurde dann, so die Darstellung in[GOO04], das erste Mal für unerwünschte Werbung in Newsgroups der Begriff„Spam“ verwendet. Die damalige Internetgemeinde, der sehr viele Fans vonMonty Pythons Flying Circus angehörten, verstand die Anspielung.

Andere Autoren dokumentieren die Begriffsentstehung nicht so detailliert,sondern heben auf die massive Kommunikationsstörung und die Analogie zudiesem Sketch ab: Durch Spam wird jede normale Kommunikation unterbun-den, das Kommunikationsmedium unbrauchbar gemacht.

So laufen Postfächer wegen Spam über, Mailserver brechen unter der Flut vonWerbemails zusammen und schlecht konfigurierte Filter löschen erwünschteNachrichten, weil sie diese fälschlich für Spam halten. Der Mensch, als letzterin der Reihe, übersieht dann auch noch in den Mail-Massen die erwünschtenNachrichten. So wird E-Mail unbrauchbar.

Aus der Geschichte, die [McW05] in Romanform erzählt, ergibt sich zunächstdie enge Definition von Spam: Spam sind unerwünschte Werbepostings imUsenet. Später wurde der Begriff schnell erweitert auf unerwünschte Werbe-E-Mails, die man ursprünglich „Unsolicited Commercial E-Mail“ oder kurzUCE nannte.

Tatsächlich gibt es immer wieder Hardliner, die Spam nur in der ursprüngli-chen, engen Definition der unerwünschten Usenet-Postings verwendet wissenwollen. So gab es z.B. lang anhaltende, heftige Diskussionen, als der Artikelüber UCE im deutschen Wikipedia10 unter die Überschrift „Spam“ verschobenwurde. Mittlerweile wird auch dort Spam in der neueren, weiteren Definitionverwendet.

Allerdings ist die überwiegende Meinung in Fachkreisen immer noch, dass un-ter Spam nur unerwünschte Werbemails zu verstehen sind, nicht jedoch uner-wünschte Massenmails: Letztere stellen eine Art Oberbegriff dar: Auch Spam-Mails sind unerwünschte Massenmails, englisch „Unsolicited Bulk E-Mail“(UBE), aber nicht jede UBE ist Spam.

2.2 Spam und Recht

Spam ist nur dann Spam im Sinne unserer Definition, wenn es sich bei dem In-halt der Nachricht um unerwünschte E-Mail-Werbung handelt. Die Nachricht

10. http://www.wikipedia.de

20

Page 21: eBook - No Spam

Spam und Recht

muss also einen werbenden Charakter haben. Dabei fasst die deutsche Recht-sprechung den Begriff Werbung anwenderfreundlich sehr weit.

Wichtigstes Kriterium ist „unerwünscht“. Eine werbende Mail ist genauso wieWerbung per Fax, BTX, Telex, SMS oder auch Telefon immer dann uner-wünscht, wenn sie außerhalb einer Geschäftsbeziehung zugesandt wird undder Absender nicht mit dem Interesse des Empfängers an seiner Zusendungrechnen durfte. Durch diese Einschränkung soll der Absender die Chance ha-ben, neue Geschäftsbeziehungen anbahnen zu können, schließlich gehört daszum üblichen Geschäftsgebahren.

Allerdings ist der Absender in Bezug auf das mutmaßliche Interesse des Emp-fängers nach deutscher Rechtsprechung beweispflichtig. Seine Begründungmuss einer objektiven Nachprüfung standhalten.

Die Behauptung, dass jeder Mensch irgendwann einmal eine zwie- oder rot-lichtige Seite im Netz besuchen würde, reicht also nicht aus, sondern es mussdas konkrete, aktuelle Interesse des Empfängers begründet werden11. Das je-doch fällt den meisten Spammern schwer.

In einem der Verfahren, die ich gegen Spammer geführt habe, konnte sich derSpammer in seinen Schriftsätzen noch nicht einmal entscheiden, ob er mich alsFreiberufler oder Privatperson kontaktiert hatte. Damit half ihm die Ausrede,ich könnte an einer Kontaktaufnahme interessiert gewesen sein, auch nichtweiter.

Die Annahme, dass der Empfänger der Werbemail auf seiner Homepage eineE-Mail-Adresse angegeben hätte und damit stillschweigend jeglicher Kontakt-aufnahme zustimme, reicht ebenso wenig für eine gültige Begründung aus.

Umstritten ist derzeit noch, ob in einer bestehenden Geschäftsbeziehung dieZusendung von Werbung in beliebigem Umfang geduldet werden muss. Dieüberwiegende Mehrheit geht davon aus, dass, sobald der Empfänger der wei-teren Zusendung von Werbung nachweislich widersprochen hat, sie als uner-wünscht einzustufen ist und es sich damit um Spam handelt.

Unter anderem deswegen fordert das 2004 aktualisierte Gesetz gegen den un-lauteren Wettbewerb (UWG) das Vorhandensein eines Abmeldelinks in sol-chen Newslettern. Allerdings zeigt die Praxis, dass Spammer das Anklickeneines Abmeldelinks häufig als Bestätigung ansehen, dass Mails an die be-

11. Detaillierter zur Rechtslage [EGG04c] mit zahlreichen weiteren Quellen.

21No Spam!

Page 22: eBook - No Spam

2 – Was ist Spam?

spammte Adressen tatsächlich gelesen werden. Solche Adressen werden als„verified“ unter Spammern zu deutlich höheren Preisen gehandelt. Deshalb istes in aller Regel nicht zu empfehlen, einen solchen Link anzuklicken12.

Nicht nur wegen der häufig mit dem Klick auf einen vorgeblichen Abmelde-link verbundenen Gefahren ist die Form des Widerspruchs dem Widerspre-chenden überlassen. Insbesondere stellt die Zusendung einer Abmahnung mitAufforderung zur Abgabe einer Unterlassungserklärung einen Widerspruchgegen die Zusendung von weiteren Newslettern dar. Der Vorteil eines Wider-spruchs per Fax oder Brief ist zudem die Beweisbarkeit. Denn die Beweis-pflicht für den erfolgten Widerspruch liegt beim Empfänger der Werbung.

Zulässig ist es, Empfängern auf deren ausdrücklichen Wunsch hin E-Mails mitwerbendem Inhalt zuzusenden. Diese Werbung wird zumeist als Newsletterbezeichnet. Beweispflichtig für die Eintragung in den Newsletter ist der Ver-sender. Daher empfiehlt sich die Verwendung eines qualifizierten Double-Opt-In-Verfahrens, um zu verhindern, dass missbräuchlich E-Mail-Adressen Drit-ter ohne deren Zutun eingetragen werden. Mit diesem Verfahren befasst sichKapitel 9.

Wie genau diese Zustimmung zur Zusendung von E-Mail-Werbung jedochaussehen muss, ist nicht festgelegt. Häufig konstruieren daher zwielichtigeAnbieter bei Kontaktaufnahme eine Zustimmung über ein Kontaktformularoder bei Teilnahme an einem Gewinnspiel über die angeblich einbezogenenAGB. Dabei steht entweder unterhalb des Eingabeformulars im Kleingedruck-ten, dass der Absender der Nutzung seiner E-Mail-Adresse zu werblichenZwecken zustimmt, oder aber, der Surfer muss den Teilnahmebedingungen,die in diesem Fall aus rechtlicher Sicht AGB darstellen und eine entsprechendeRegelung enthalten, zustimmen.

Aus meiner Sicht ist es fraglich, ob bei einer allgemeinen Anfrage an ein Un-ternehmen über ein Kontaktformular ein Vertrag zustande kommt, der die Ein-beziehung von AGB rechtfertigen würde: Es fehlt am Vertragsbindungswillendes potenziellen Kunden, der Bedingung für einen Vertragsschluss ist. Kommtaber kein Vertrag zustande, dann können erst recht keine AGB, die ja ein vor-formuliertes Vertragswerk darstellen, Vertragsbestandteil werden.

Im Fall der Gewinnspielteilnahme wäre kritisch zu prüfen, ob eine Bedingung,die erhaltenen Daten des Teilnehmers an Dritte weitergeben zu dürfen, und das

12. Siehe dazu z.B. [GOO04]

22

Page 23: eBook - No Spam

Unsolicited Bulk E-Mail

„Zwangsabonnement“ eines Newsletters nicht überraschende Klauseln sind,mit denen ein Teilnehmer nicht zu rechnen braucht.

Die Rechtslage ist hier meiner Ansicht nach jedenfalls neu zu beurteilen undnicht zwangsläufig mit Gewinnspielen, an denen man z.B. durch Ausfüllen ei-ner Postkarte teilnimmt, vergleichbar: Zum einen muss der Absender Postkar-ten nicht vollständig ausfüllen, was bei Online-Spielen durch entsprechendeProgrammierung verhindert werden kann, und zum anderen verursacht diepostalische Zusendung von Werbung, die bei Offline-Gewinnspielen die übli-che Konsequenz ist, anders als E-Mail-Werbung beim Empfänger keine Kos-ten.

Die rechtswissenschaftliche Literatur schweigt sich allerdings zu dieser Fragederzeit noch aus. Auch in der Rechtsprechung findet sich noch kein entspre-chendes Urteil.

2.3 Unsolicited Bulk E-Mail

Unter UBE versteht man alle unerwünscht eintreffenden Massenmails – unab-hängig von ihrem Inhalt und Absender. UCE ist also eine Untermenge vonUBE: Jede Spammail ist UBE, aber nicht jede UBE ist Spam.

Die massenhaft eintreffenden und überaus lästigen Wurm-Mails, die von infi-zierten Rechnern mit dem Ziel, die Infektion zu streuen, automatisch versandtwerden, sind kein Spam. Bei ihnen handelt es sich ebenso um UBE wie beimancher lästigen E-Mail aus dem Bekanntenkreis, in der ein Absender Be-langlosigkeiten an sein gesamtes Adressbuch versendet, ohne die Blind-Car-bon-Copy-Funktion (Blind-CC, BCC) seines E-Mail-Programms zu nutzen.Damit verstößt der Absender nicht nur vollumfänglich gegen die Netiquette13

und handelt sich so schnell den Ruf eines DAU (DAU, dümmster anzunehmen-der User) ein, sondern er liefert auch gleichzeitig E-Mail-Würmern Futter: Diedurchsuchen mittlerweile E-Mails auf infizierten Systemen nach Mailadressenneuer Opfer.

Die Unterscheidung zwischen UBE und UCE ist notwendig, da Würmer beimSammeln von Adressen ihrer Opfer andere Verfahren verwenden. Daher sindgegen Würmer die gängigen Anti-Spam-Verfahren machtlos – effektiver istder Einsatz eines Virenscanners auf dem Mailserver, der ähnlich wie z.B.

13. Siehe dazu: [FREY02] und [RFC1855]

23No Spam!

Page 24: eBook - No Spam

2 – Was ist Spam?

ClamAVs Milter für Sendmail14 Viren und Würmer bereits im SMTP-Dialogabblockt.

Zudem sollten Arbeitsplatzrechner durch Firewallsysteme und aktuelle Vi-renscanner geschützt werden und Anwender im Umgang mit Viren geschultsein. Gerade die Anwenderschulung ist vor dem Hintergrund der zunehmen-den Verbreitung von Viren und Würmern mittels Trojaner, die einen Menschenfür ihre Ausführung brauchen, eine vielfach unterschätzte Sicherheitsmaßnah-me, die großes Potenzial birgt.

Die folgenden Maßnahmen zielen einzig auf die Bekämpfung von „echtem“Spam ab. Gegen UBE, insbesondere das von Würmern verursachte, sind siemachtlos. Aber dagegen existieren ja bereits effektive Mittel.

14. ClamAV ist ein OpenSource-Virenscanner, den es auf http://www.clamav.org gibt, und Sendmail ist der wohl am weitesten verbreitete Mailserver, zu finden unter http://www.send-mail.org. Milter ist ein Kunstwort, das aus „Mail-Filter“ entstanden ist und eine Sendmail-Schnittstelle zum Filtern von Mails beschreibt. Mehr dazu u.a. in [EGG05d]

24

Page 25: eBook - No Spam

3 Woher haben Spammer die Mailadressen?

3.1 Freiwillige Eingabe

Spammer kennen im Wesentlichen zwei Methoden, um an die E-Mail-Adres-sen ihrer Opfer zu gelangen: Entweder überzeugen sie ihre potenziellen Opfer,ihre E-Mail-Adresse auf Webseiten, Papierformularen oder telefonisch frei-willig zu verraten, meist unter Vorspiegelung eines Gewinnspiels oder einesfreien Zugangs zu meist zwie- bzw. rotlichtigen Seiten. Im Rahmen zweifel-hafter AGB, häufig auch Teilnahmebedingungen genannt, holen sie sich vomOpfer sogar noch die Erlaubnis, die so gewonnene E-Mail-Adresse auch anDritte weitergeben zu dürfen.

3.2 Adressen im Internet automatisch sammeln

Die alternative Methode setzt nicht auf Leichtgläubigkeit, sondern auf Suchro-boter, und lässt sich damit vom Anwender selbst viel schlechter kontrollierenals die freiwillige Weitergabe der E-Mail-Adresse.

3.2.1 Durchsuchen von Internetseiten

Es ist ohne Probleme und ohne großen Aufwand möglich, aus Internetseitenautomatisch E-Mail-Adressen herauszusuchen. Dafür ist (theoretisch) kein be-sonderes Know-how, sondern lediglich ein leistungsstarker Rechner mit einembreitbandigen Internetzugang notwendig. Die verbleibende Arbeit erledigenLinux-Bordmittel oder einige wenige Zeilen in einer Script-Sprache wiePerl15.

Es gibt auch zahlreiche fertige Programme für solche Zwecke, wie z.B. E-MailHunter! oder Email Spider. Eine Zeit lang wurden diese Programme sogar fürT-Online-Kunden im Download-Bereich von T-Online zur Verfügung gestellt.

15. Hinweise zur Programmierung von Spidern und damit auch Harvestern liefert z.B. [HEM03]

25No Spam!

Page 26: eBook - No Spam

3 – Woher haben Spammer die Mailadressen?

Diese Sammelprogramme sind technisch eigentlich primitiv, denn man mussnur einen kleinen Pseudo-Browser schreiben, der Internetseiten abruft undnach allem sucht, was aussieht wie ein Link oder eine E-Mail-Adresse.

Links verfolgt das Programm, um möglichst viele Seiten im Internet zu errei-chen. Durch gegenseitige Links zwischen Webseiten besteht die Gefahr, dasseine Art Ring entsteht. Das Programm soll daher jede Seite nur genau einmalaufsuchen, um sich nicht in einer Endlosschleife zu verheddern. Besuchte Sei-ten müssen also protokolliert werden.

Die E-Mail-Adressen lassen sich sehr einfach über so genannte regularexpressions16 im HTML-Code finden und auslesen. Dabei können natürlichE-Mail-Adressen auf verschiedenen Seiten genannt werden, so dass maneinige Doubletten hat. Um diese zu eliminieren, wandelt man sie mit demUnix-Befehl tr einheitlich in Kleinbuchstaben um, so dass beim anschließen-den Sortieren mit dem Programm sort nicht unterschiedliche Groß- und Klein-schreibung Verwirrung stiftet. Jetzt kann uniq Doubletten erkennen und ent-sorgen. Das Ergebnis dieser Operationen schreibt man in eine Datei, die mandann dem Mail-Programm als Eingabe liefert.

Für die Suche muss ein günstiger Einstiegspunkt gewählt werden. Webver-zeichnisse wie Yahoo bieten sich an, da hier unzählige Links auf jede MengeSeiten gelistet sind. Damit wird sehr schnell möglichst viel „Internet17“ abge-grast: Die Zahl der gefundenen E-Mail-Adressen lässt sich so maximieren.

Um Ihnen einen Eindruck davon zu verschaffen, wie einfach dieses Verfahrenist, gebe ich Ihnen zwei Linux-Befehlszeilen an, die eine solche Suche durch-führen können.

16. Eine Einführung in regular expressions, eine Methode zur Erkennung von bestimmten Mustern in Zeichenketten, findet sich in [EGG05] oder auch [SEL02],[FRI02] oder [STU03]. Das Konzept stammt aus der theoretischen Informatik, die mit regulären Aus-drücken so genannte reguläre Sprachen konstruiert.

17. Ich verwende hier den Begriff „Internet“ und „World Wide Web (www)“ synonym: Das ist zwar technisch nicht korrekt, entspricht aber dem Sprachgebrauch.

wget --user-agent="Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)" -r --span-hosts -t1 --ignore-length --reject gif,jpg,jpeg,png,mpg,mpeg,avi,zip,gz,tar,css,js http://www.example.com [RET]

26

Page 27: eBook - No Spam

Adressen im Internet automatisch sammeln

Dabei handelt es sich bei der vorgeschlagenen Lösung bewusst noch längstnicht um eine Optimallösung: Zum einen werden alle Internetseiten vollstän-dig auf der Platte zwischengespeichert und erst dieses Ergebnis wird anschlie-ßend auf E-Mail-Adressen untersucht. Sie ahnen sicher, dass dies bei der Viel-zahl von vorhandenen Seiten einen schier unendlichen Speicherplatzbedarfbedeuten würde. Zum anderen überprüft das hier verwendete Programm wget,ob eine Datei robots.txt existiert, mit der Webseiten-Programmierer solchenautomatischen Suchprogrammen den Zugriff auf bestimmte Seitenteile verbie-ten können18.

Allerdings ist dies eine Konvention, die nur von anständigen Entwicklern ein-gehalten wird, technisch jedoch problemlos zu umgehen ist und auch umgan-gen wird. So kann beispielsweise wget über die Konfigurationsdatei .wgetrcentsprechend konfiguriert werden, genauere Angaben enthalten die Info-Pagesvon wget.

Die erste Befehlszeile startet also das Programm wget, das sich dabei als Inter-net Explorer ausgeben soll, um in den Logfiles der Seitenbetreiber keine ver-dächtigen Eintragungen zu hinterlassen. Die zusätzlichen Parameter bringenwget dazu, ausschließlich HTML-Seiten herunterzuladen und Links auch überunterschiedliche Server zu verfolgen.

wget hat den Vorteil, selbst in der Lage zu sein, Links in den Seiten zu extra-hieren und zu verfolgen. Somit konnten wir uns hier Entwicklungsarbeit spa-ren.

In der zweiten Befehlszeile werden die gespeicherten Seiten auf dem Rechnernach E-Mail-Adressen durchsucht und diese extrahiert. Dies leistet der Befehlgrep in Zusammenarbeit mit sed. grep greift dabei alle Zeilen heraus, in denendie Zeichenfolge „mailto:“ vorkommt. Diese markiert in einem HTML-Linkeine E-Mail-Adresse.

sed verwendet dann eine regular expression, mit der es aus dem HTML-Linkdie E-Mail-Adresse extrahiert.

grep -rhiE "mailto:" ./ | sed "s/.*mailto:\([A-Z0-9_-]\+\(\.[A-Z0-9_-]*\)*@\([A-Z0-9_-]\+\.\)\+[A-Z]\{1,4\}\).*/\1/gi" | tr "[:upper:]" "[:lower:]" | sort | uniq > emailadressen.txt [RET]

18. Eine genaue Beschreibung des Formats und Beispiele finden sich in [KOS94] und [W3CAPPB]

27No Spam!

Page 28: eBook - No Spam

3 – Woher haben Spammer die Mailadressen?

Anschließend werden die E-Mail-Adressen mittels des Hilfsprogramms trvollständig in Kleinbuchstaben umgewandelt, alphabetisch sortiert (sort) unddann von Doubletten mittels uniq befreit.

Das Ergebnis dieser Arbeit wird in die Datei emailadressen.txt geschrieben,die problemlos von jedem anderen Programm genutzt werden kann.

Zwar ist die hier vorgestellte Lösung noch weit von einem Optimum entfernt,insbesondere die aufwendige Zwischenspeicherung der Webseiten auf derPlatte ist ungünstig. Auch lassen sich unter Umständen E-Mail-Adressen, dienicht in einer Zeile stehen, nicht fehlerfrei extrahieren und auch so genannteSession-Ids würden von wget nicht korrekt erkannt und interpretiert, weshalbnoch Endlosschleifen entstehen könnten.

Allerdings ist es beeindruckend, dass man ohne eine einzige Zeile program-mieren zu können, nur unter Verwendung von Unix-Bordmitteln, schon einenMinimal-Harvester (harvester, engl. „Erntemaschine“) erstellen kann. Der Ein-satz von Perl und des LWP-User-Agent führt ähnlich schnell zu Ergebnissen –jedoch lassen sich dann durch eigene Programmierarbeit die Nachteile des ein-fachen „wget-Harvesters“ beseitigen.

Alternativ kann man auch wget für diesen Zweck umprogrammieren, schließ-lich ist es ein OpenSource-Programm, so dass der Quellcode vorliegt und sichbeliebig anpassen lässt.

Tatsächlich ist der Einsatz solcher Harvester derzeit das beliebteste Verfahren.Der Aufwand ist bei richtiger Programmierung, die mittlerweile Spammernauch schon abgenommen wird, weil entsprechende Software in großem Um-fang im Internet angeboten wird, minimal. Zudem kommen, bei geeigneterWahl des Startpunkts der Suche, in kürzester Zeit Tausende von E-Mail-Adres-sen heraus, wie ich durch eigene Tests19 gezeigt habe – und was Sie jederzeitleicht durch Eingabe der Befehlszeilen oben verifizieren können.

3.2.2 Newsgroups und ähnliche Quellen

Beliebt sind ferner das automatische Durchkämmen von Mailinglisten-Archi-ven, was häufig auf eine automatische Suche über Internetseiten hinausläuft,und das Durchsuchen von Newsgroups, den schwarzen Brettern des Internets.

19. Siehe dazu: [CDT03], [EGG04], [EGG04a], [EGG05a], [EGG05b] und [EGG05c]

28

Page 29: eBook - No Spam

Adressen im Internet automatisch sammeln

Vorteil ist, dass hier im Allgemeinen jeder Newsgroup-Post einen Treffer lie-fert und häufig die Adressen valide sind und gelesen werden. Nachteilig dabeiist, dass zumindest für die Suche in Newsgroups etwas mehr Aufwand notwen-dig ist, den die meisten Spammer anscheinend scheuen. Allerdings wird dieserNachteil durch zahlreiche Webseiten, die Newsgroups in das WWW spiegelnund somit in Form von Webseiten anbieten, schnell kompensiert. Der bekann-teste Dienst für diesen Zweck dürfte Google Groups sein, der aus oben ge-nanntem Grund mittlerweile E-Mail-Adressen in seinem News-Archiv ver-kürzt und damit verfälscht darstellt.

Auch die Whois-Einträge zu Domainnamen werden von Spammern genutzt:Dort muss eine gültige E-Mail-Adresse eingetragen sein, die automatisch aus-gelesen werden kann. In einem Beitrag in der einschlägigen Newsgroup de.ad-min.net-abuse.mail berichtete Can Filip Sakrak im Dezember 2004, dass auchPGP-Key-Server20 nach E-Mail-Adressen abgesucht würden. Allerdings sinddiese beiden Methoden derzeit noch eher selten und auch kaum lohnend, dazahlreiche Anwender dort nicht gelistet sind.

3.2.3 Erraten von Adressen

E-Mail-Adressen lassen sich auch erraten. So gibt es in den Requests for Com-ments (RFC), die eine Art Internetnorm darstellen, eine Empfehlung, welcheAdressen unter jeder Domain vorhanden sein sollten. Dies sind, neben einigenanderen, info, webmaster, hostmaster und postmaster, also Adressen, denenbestimmte Funktionen in Zusammenhang mit Servern zugeordnet sind.

Hat man nun eine Liste von Domains, so kann man auf gut Glück versuchen,an diese Adressen unter den jeweiligen Domains seinen Werbemüll zu versen-den, und hat, sofern die Mailserver ordentlich konfiguriert sind, bereits einehohe Trefferquote.

Tatsächlich erhalte ich regelmäßig an solche Accounts – beliebt ist vor allemwebmaster und postmaster – Spam.

Allerdings wird diese Methode zunehmend unbeliebt, da diese Adressen häu-fig fortgeschrittenen Anwendern oder gar Administratoren zugeordnet sind,die sich massiv gegen Spam wehren und damit zu starke Gegner darstellen.

20. PGP dient zur asymmetrischen Verschlüsselung von E-Mails. Die öffentlichen Schlüssel werden auf so genannten Key-Servern bereitgestellt. Siehe auch: [EGG04e] oder z.B. [SCHWE02]

29No Spam!

Page 30: eBook - No Spam

3 – Woher haben Spammer die Mailadressen?

Ein anderes Verfahren, das sehr lange z.B. bei web.de funktionierte, war dasErraten von E-Mail-Adressen. Da web.de einer der größten E-Mail-Anbieter inDeutschland ist und die meisten Anwender Adressen der Form „vorna-me.nachname@“ bzw. Variationen davon bevorzugen, lassen sich mit Hilfe ei-nes Telefonbuchs schon eine Menge Adressen raten.

web.de unterstützte diese Methode versehentlich längere Zeit, da es beimEmpfang einer E-Mail schon beim Lesen des SMTP-Envelope21 überprüfte, obder Empfänger der Mail existiert, und eine entsprechende Positiv- oder Fehler-meldung generierte. Dadurch ließen sich Adressen sehr schnell verifizieren.

Mittlerweile macht auch web.de das, was zahlreiche Mailserver schon langevorher taten: Sie nehmen die Mail zunächst anstandslos an, um später eineFehlermeldung zu generieren. Dieses Verfahren ist deshalb günstiger, weil dieVerifikation von Adressen so wesentlich mehr Aufwand bedeutet und zudemnicht nur den Mail-Server auf Empfängerseite belastet, sondern auch den desAbsenders, der ja die eingehenden Fehlermeldungsmails verarbeiten muss –sofern die Absenderadresse existiert und nicht gefälscht ist. Sonst entstehenSchleifen von Fehlermeldungsmails oder es werden unbeteiligte Dritte mitFehlermeldungen regelrecht bombardiert.

Analog war früher auch das Erraten von E-Mail-Adressen bei AOL sehr ein-fach: Es gab eine maximale Länge für den so genannten local part, also dieZeichenfolge, die links vom @ steht. Aufgrund des begrenzten Zeichenvorrats,der für den local part in Frage kommt, lassen sich allein durch Ausprobierenausreichend viele gültige Adressen finden.

Diesen Aufwand zu betreiben, waren Spammer auch nicht immer gewillt – sokaufte ein Spammer einem mittlerweile ehemaligen AOL-Mitarbeiter für50.000 US$ einfach ein Kundenverzeichnis mit E-Mail-Adressen ab.

Ebenso war es eine Zeit lang möglich, T-Online-Adressen zu erraten: JederNutzer hatte eine aus seiner Telefonnummer inklusive Vorwahl und einer zu-sätzlichen eindeutigen Zahlenfolge bestehende E-Mail-Adresse. Die Telefon-nummern lassen sich wiederum automatisch aus dem Telefonbuch generieren– das gibt es zweckmäßiger Weise auf CD-ROM oder online, jeweils mit derMöglichkeit, die Zielgruppe sogar räumlich einzugrenzen.

21. Ein virtueller Briefumschlag einer E-Mail, den Mailserver generieren und auch wieder ent-fernen. In Ihrem Mailprogramm bekommen Sie ihn nie zu Gesicht.

30

Page 31: eBook - No Spam

Adressen im Internet automatisch sammeln

Aus diesen Darstellung lässt sich folgern, dass die Wahl eines kleineren Pro-viders unter Umständen günstiger sein kann. Zudem sollte die E-Mail-Adressenicht allzu leicht zu erraten sein – was die Nutzbarkeit für den Besitzer derAdresse wiederum einschränkt: Eine beliebige Zeichenfolge mit Sonderzei-chen lässt sich nun mal schwer kommunizieren und an Dritte weitergeben.

3.2.4 Adresshandel

Ein weiteres Standbein für Spammer, vor allem für die, die nicht einmal in derLage sind, die eben geschilderten einfachen Such- und Ratemethoden zu nut-zen, liefert der Adresshandel: Dritte generieren nach den oben beschriebenenVerfahren E-Mail-Adressen und verkaufen sie dann an neue Spammer. Häufigwerden diese Adresslisten wiederum durch Spam beworben – also Spam fürSpam, eine Art Meta-Spam.

Ein Beispiel für so eine Meta-Spam-Mail zeigt Abbildung 3.1.

Abb. 3.1: Meta-Spam: Diese Mail wirbt Spammer-Nachwuchs

31No Spam!

Page 32: eBook - No Spam

3 – Woher haben Spammer die Mailadressen?

Teilweise bleiben solche Adresslisten mehrere Jahre im „Handel“: Dadurchkönnen plötzlich neu eingerichtete, aber noch nicht publizierte E-Mail-Adres-sen Opfer von Spam werden, nur weil diese Adresse bereits vor einiger Zeitvon jemand anderem genutzt wurde.

Solche Listen findet man immer wieder auch z.B. bei eBay im Angebot. DiePreise beginnen bei einigen wenigen Euro für einige Millionen Adressen.

32

Page 33: eBook - No Spam

4 Grundlegende Vorsichtsmaßnahmen

Ziel ist das Entwickeln von Methoden, mit deren Hilfe sich Spam möglichstfrühzeitig vermeiden lässt. Bereits einige einfache Grundregeln können dazueinen wertvollen Beitrag leisten.

4.1 Umgang mit Mailadressen

Eine hohe Spam-Vermeidungsquote erreicht man bereits, indem man kritischüberprüft, wem man wann seine Mailadresse mitteilt: So ist es in aller Regelnicht empfehlenswert, auf Webseiten z.B. in Gästebüchern oder Foren die ei-gene Mailadresse anzugeben. Genauso wenig sollte die Mailadresse auf Post-karten für Gewinnspiele oder auf Messeständen eingetragen werden. Häufigstellt die anschließend erhaltene Werbung zwar subjektiv Spam dar, objektivjuristisch gesehen ist sie jedoch mit Einwilligung des Empfängers zugesandtund damit eben gerade kein Spam mehr.

Auch mit den Mailadressen Dritter sollte sorgfältig umgegangen werden: E-Mails an mehrere Personen sollten – außer die Empfänger kennen sich alle gutuntereinander – nicht über das To:-Feld, sondern über das Bcc:-Feld versandtwerden. Bcc steht für „Blind Carbon Copy“. Die im Bcc:-Feld angegebenenEmpfänger erhalten die Nachricht, jedoch erfahren die anderen Adressatennichts von diesen Empfängern. Die Adressen sind also für alle anderen un-sichtbar.

Das hat zwei Vorteile: Zum einen können Würmer, die vermehrt zum Spam-Versand eingesetzt werden, diese Adressen auch nicht erkennen – sie findenalso weniger Opfer. Zum anderen kann der Empfänger nicht aus Versehen eineAntwort an alle senden. Das wäre dann zwar formal kein Spam, ist aber fastgenauso lästig.

Als Nebeneffekt können Dritte nicht „versehentlich“ eine Adresse an Spam-mer weitergeben: Sie kennen sie ja gar nicht.

33No Spam!

Page 34: eBook - No Spam

4 – Grundlegende Vorsichtsmaßnahmen

4.2 Wegwerfadressen

Sollten Sie tatsächlich einmal an einem Gewinnspiel teilnehmen wollen oderes aus sonstigem Grund für nötig halten, eine E-Mail-Adresse anzugeben,empfiehlt sich der Einsatz von Wegwerfadressen.

Es gibt Anbieter, bei denen man E-Mail-Adressen generieren kann, die nur füreine bestimmte Zeit gültig sind. Das ist vorteilhaft, wenn Sie sicher wissen,wann die Antwort eintreffen wird.

Einen solchen Dienst bietet Spamhole unter http://www.spamhole.com an. Je-doch muss man sich dort für jede neu zu erzeugende E-Mail-Adresse erneuteinloggen, was die Nutzung etwas umständlich macht.

Die Alternative sind E-Mail-Adressen, die bei Bedarf vom Mailserver desProviders automatisch erzeugt werden: MyTrashMail (http://www.mytrash-mail.com) und dodgeit (http://www.dodgeit.com) erlauben es, eine E-Mail aneinen beliebigen Local-Part22 unter den jeweiligen Domains zu schicken. Dieempfangenen E-Mails können dann über eine Weboberfläche abgerufen wer-den. Dazu muss kein Passwort angegeben werden, auch muss diese E-Mail-Adresse nicht vorher auf der Webseite eingetragen werden.

Zum „Login“ reicht es aus, den richtigen Local-Part anzugeben. Das ermög-licht es auch Dritten, E-Mails zu lesen, indem sie den Local-Part erraten. BeimTesten der verschiedenen Angebote konnte ich so mit „someone“ als Local-Part interessante (?) Nachrichten lesen.

Immerhin können E-Mails bei MyTrashMail gelöscht werden – bei dodgeitnicht, was im Allgemeinen nicht tolerabel sein dürfte. Zudem hat währendmeiner Tests dodgeit einige E-Mails nicht angenommen, was gegen eine prak-tische Nutzung spricht.

MyTrashMail bietet zudem die Möglichkeit, Antwortmails direkt über dieWeboberfläche zu senden. Damit bietet MyTrashMail zusammen mit einemAnonymisierdienst wie z.B. dem Java Anonymous Proxy der TU-Dresden(http://anon.inf.tu-dresden.de) eine einfache Möglichkeit, anonym zu mailen.

Eine andere Lösung, zeitlich unbegrenzt gültige, aber mengenmäßig limitier-bare Accounts zu erzeugen, bietet Spamgourmet (http://www.spamgour-met.com). Dabei werden die von Spamgourmet empfangenen Nachrichten für

22. Der Teil der Mailadresse vor dem „@“-Symbol

34

Page 35: eBook - No Spam

Wegwerfadressen

den Absender unsichtbar und vor allem unbemerkt an die eigene E-Mail-Adresse weitergeleitet.

In diesem Zusammenhang kann man für jede Spamgourmet-E-Mail-Adresseunter dem eigenen Benutzernamen einstellen, wie viele E-Mails weitergeleitetwerden sollen. Treffen danach noch E-Mails ein, werden sie automatisch vonSpamgourmet gelöscht.

Das Praktische an diesem Dienst ist, dass Spamgourmet-Adressen jederzeitund ohne die Webseite des Dienstes besuchen zu müssen, generiert werdenkönnen. Damit ist die Funktionalität vergleichbar mit der Lösung von My-TrashMail, sie bietet jedoch den Vorteil, E-Mails per SMTP weiter an ein de-finiertes Postfach zuzustellen, und ist damit für Dritte nicht so einfach einzu-sehen.

In einer erweiterten Konfiguration kann man sogar einrichten, dass Antworten,die vom eigenen, regulären Mailaccount aus gesendet werden, getarnt werdenund als Absender die für diese Kommunikation gewählte Spamgourmet-Adresse verwendet wird. Allerdings übernimmt Spamgourmet keine Anony-misierung – aus dem Header einer Antwortmail ist der Absender unter Um-ständen noch ersichtlich. Dieses Problem lässt sich aber mit einem E-Mail-Anonymisierdienst23 bei Bedarf beheben.

Die Weboberfläche von Spamgourmet bietet zusätzliche Optionen an. So ist esbeispielsweise möglich, Absender einzurichten, die bei der Zählung derE-Mail-Anzahl nicht berücksichtigt werden. Außerdem lässt sich nachträglichdie Zahl der zulässigen Mails verändern.

Zusätzliche Optionen ermöglichen es auch paranoiden Nutzern, mit diesemDienst glücklich zu werden: So kann man das Muster der E-Mail-Adressen be-einflussen, ein Raten durch einen Spammer wird somit unmöglich gemachtoder deutlich erschwert.

Im Vergleich zu dodgeit und MyTrashMail bietet Spamgourmet den Vorteil,die E-Mails für Dritte nicht so einfach zugänglich zu machen. Außerdem las-sen sich bei Spamgourmet die benötigten Adressen on-the-fly generieren, dieempfangenen E-Mails werden an das reguläre Postfach weitergeleitet. Ein Be-such auf einer Webseite entfällt im Gegensatz zu Spamhole.

23. Diese Dienste nennt man anonymous remailer und lassen sich, sucht man nach diesem Begriff bei Google, in großer Menge finden. Siehe dazu auch: [EGG05h]

35No Spam!

Page 36: eBook - No Spam

4 – Grundlegende Vorsichtsmaßnahmen

4.3 Newsletter und Ähnliches

Spamgourmet kann auch für Newsletter eingesetzt werden, indem bestimmteAbsender auf eine White-List gesetzt werden und somit von der Zählung aus-genommen sind.

Allgemein sollten für Newsletter-Abos oder Bestellungen bei Unternehmenbesondere, eigene Mailadressen verwendet werden. Dadurch lässt sich die pri-vate Post von solchen Nachrichten trennen und sehr einfach, ohne den Bekann-tenkreis mit einer neuen Adresse belästigen zu müssen, die für Newsletter ein-gesetzte Adresse deaktivieren.

Häufig wird vorgeschlagen – sofern man über einen eigenen Mailserver ver-fügt –, für jedes Unternehmen eine eigene Adresse zu verwenden. Damit lie-ßen sich Weiterverkäufer von Adressen leicht identifizieren und man kann dieAdresse bei Missbrauch individuell sperren.

Geht man davon aus, dass wesentlich häufiger Adressen neu angelegt werden,als welche blockiert werden müssen, so lässt sich diese Lösung nur sinnvollmit einem Mailserver realisieren, der über eine so genannte Catch-All-Funkti-on verfügt. Dabei wird zunächst geprüft, ob die Empfängeradresse eigens de-finiert wurde. Ist das nicht der Fall, wird sie an eine definierte Adresse weiter-geleitet.

In sendmail24 lässt sich das in der virtusertable leicht einstellen. So leitet

alle Mails, die unter der Domain mail.example.com eingehen, mit unveränder-tem Local-Part an die Domain example.com weiter. Aus [email protected] wird damit [email protected].

Einen „wahren“ Catch-All erzeugt die folgende Zeile:

Damit werden alle Mails, die an eine beliebige, nicht anderweitig in der virt-usertable definierte Adresse unter der Domain example.com gehen, an denlokalen Benutzer „catchall“ weitergeleitet.

@mail.example.com %[email protected]

24. Ausführlichere Informationen zu Sendmail und dessen Konfiguration liefert [COS97]

@example.com catchall

36

Page 37: eBook - No Spam

Keinesfalls: gefälschte Absenderadressen

Mit dieser Konfiguration lassen sich neue E-Mail-Adressen bei Bedarf wie beiSpamgourmet schnell anlegen, insbesondere ist eine Bearbeitung der virtuser-table nicht notwendig.

Allerdings muss zum Blockieren von Adressen die virtusertable bearbeitetwerden:

Dadurch werden E-Mails an die Adresse [email protected] schon imSMTP-Dialog mit der Fehlermeldung „User unkown“ und dem entsprechen-den SMTP-Fehlercode geblockt. Damit werden sie gar nicht mehr angenom-men.

Ähnliche Konfigurationsmöglichkeiten bietet auch das für seine Sicherheitund Stabilität bekannte Mailserver-Programm qmail, erhältlich unter http://www.qmail.org. Auf der qmail-Webseite findet sich eine an sich ausreichendeDokumentation. Wer gedruckte Unterlagen bevorzugt, sollte einen Blick in[SIL01] oder [MAT97], [BER03] und [BER03a] werfen. Analog gilt das fürden sehr bekannten Mailtransferagenten Postfix, für den [HEIN04] wohl dasStandardwerk schlechthin sein dürfte.

Der Einsatz von Wegwerfadressen hilft somit, dem Adresshandel vorzubeugenund Adresshändler zu identifizieren. Ob jedoch die Aussage, man habe dieAdresse [email protected] ausschließlich an das Unternehmen XY kommuni-ziert und somit sei dieses Unternehmen für den Weiterverkauf der Adresse ver-antwortlich, vor Gericht einen ausreichenden Beweis darstellt, steht auf einemanderen Blatt. Die einfache Sperrmöglichkeit und die Option, „Gute“ von „Bö-sen“ zumindest für den eigenen Bedarf zu trennen, sind jedenfalls Pluspunktedieses Verfahrens.

Der Einsatz externer Anbieter wie Spamgourmet verringert den eigenen Kon-figurationsaufwand und spart eigenen Netzverkehr.

4.4 Keinesfalls: gefälschte Absenderadressen

Für die Verwendung in Newsgroups oder in den immer beliebter werdendenInternetdiskussionsforen wird häufig vorgeschlagen, gefälschte Absender-adressen zu verwenden. Zwar verhindert das nachhaltig Spam beim Verwenderder Adresse, es kann aber leicht einen unbeteiligten Dritten zum Opfer ma-chen. Entweder, weil dieser zufällig die (vermeintlich nicht existente) Adresse

[email protected] error:nouser User unkown

37No Spam!

Page 38: eBook - No Spam

4 – Grundlegende Vorsichtsmaßnahmen

tatsächlich besitzt, oder aber, weil er als gefälschter Absender für den Spamherhalten musste und daher mit Fehlermeldungen überschüttet wird.

Gerade das Problem, eine Adresse zu besitzen, von der keiner ihre Existenz an-nimmt, kenne ich aus eigener Erfahrung: Ich hatte jahrelang die E-Mail-Adres-se [email protected] und [email protected]. Iname ist ein Webmail-An-bieter, der ähnlich wie GMX oder web.de funktioniert und vor allem auf demnordamerikanischen Kontinent entsprechend verbreitet ist. ACME kennen si-cherlich alle Tom & Jerry-Freunde unter Ihnen – und auch viele andere: In fastallen Zeichentrickserien steht ACME zur Vermeidung von Schleichwerbungals Firmenname auf verschiedensten Produkten. Die meisten behaupten, es seiein Akronym für „A Company that Manufactures Everything“. Die [email protected] riecht also auch nach Fälschung. Leider stellten beide An-bieter ihre Dienste in der ursprünglichen Form ein, so dass Sie mich nicht mehrunter diesen schönen Adressen erreichen können.

Im worst case könnten, wenn die gefälschte Absenderadresse auch nicht exis-tiert, Schleifen zwischen den zwei Mailservern, die gegenseitig immer wiederversuchen, eine (Fehlermeldungs-)Mail zuzustellen, entstehen, was unnötigeNetzlast zur Folge hat.

Wegen dieser unschönen Nebeneffekte ist der Einsatz von gefälschten Adres-sen nicht zu empfehlen – der gleiche Effekt lässt sich über Wegwerfadressengenauso erreichen.

Alternativ sind lediglich noch nach /dev/null „geerdete“ Adressen sinnvoll.Dabei wird automatisch jede an diese Adresse eingehende Mail in den unend-lich großen virtuellen Papierkorb /dev/null weitergeleitet und somit – ohnehässliche Fehlermeldungen – entsorgt.

4.5 Webtelefonbücher

Im Internet gibt es diverse „E-Mail-Telefonbücher“, „Personensuchdienste“und Ähnliches. Zwar können diese Dienste bei der Suche nach einer Persondurchaus nützlich sein, aber sie stellen gleichzeitig eine Fundgrube für Spam-mer dar.

Daher ist es nicht empfehlenswert, sich auf einer solchen Seite einzutragen.Möchte man wirklich unter seinem Namen im Internet auffindbar sein, scheintes zweckmäßiger, eine im Sinne von Suchmaschinen sinnvoll gestaltete Ho-

38

Page 39: eBook - No Spam

Spammer beim Sammeln identifizieren

mepage zu betreiben, über die man für Menschen, nicht jedoch für Spammerauffindbar ist.

4.6 Spammer beim Sammeln identifizieren

Da Spam fast ausschließlich aus dem Ausland versandt wird, aber häufig ge-nug inländische, dubiose Unternehmen bewirbt, liegt es aus präventiver Sichtnahe, den inländischen Hintermännern das Handwerk zu legen.

Jedoch müssen diese dazu zunächst identifiziert werden können. Das lässt sichsehr einfach über die von ihnen verwendeten Harvester realisieren: Präsentiertman jedem Besucher einer Webseite eine eigens für diesen Besucher generier-te E-Mail-Adresse, dann sammelt jeder Harvester auch diese individuelleAdresse.

Es muss dabei sichergestellt sein, dass eine solche E-Mail-Adresse eindeutigist und eineindeutig der IP-Adresse des Harvesters und seinem exakten Be-suchszeitpunkt zugeordnet werden kann. Denn dann lässt sich der Rechner,von dem aus gesammelt wurde, zweifelsfrei identifizieren.

Dabei besteht im Zweifel gegen den Provider des Spammers nach §13a Unter-lassungsklagengesetz (UklaG) ein Herausgabeanspruch bezüglich der Datendes Spammers, sollte eine einfache Whois-Anfrage nicht bereits die notwen-digen Informationen liefern.

Damit kann gegen die deutschen Hintermänner vorgegangen werden und diesegerichtlich auf Unterlassung in Anspruch genommen werden, wodurch sichdie Zahl der potenziellen Spammer um einen reduziert.

[REHWWW] stellt die Idee und die benötigte Software vor. [REHWWW] be-richtet auch von einem konkreten Fall, bei dem deutsche Hintermänner vonSpam ausgemacht werden konnten. Leider wurde in diesem Fall bislang nochkeine Klage erhoben, so dass keine Gerichtsentscheidung dazu vorliegt.

4.7 SMTP-Teergruben

[REHWWWa] und [DON04a] möchten Spammern zusätzlich gezielt präpa-rierte Mailadressen anbieten, für die ein besonders konfigurierter, sehr langsa-mer Mailserver zuständig ist. Durch die besonders langsamen Antworten desMailservers soll der Mailversand des Spammers insgesamt ausgebremst wer-den.

39No Spam!

Page 40: eBook - No Spam

4 – Grundlegende Vorsichtsmaßnahmen

Ich halte das Verfahren allerdings nur für eingeschränkt wirkungsvoll, da es ei-ner sehr weiten Verbreitung bedarf, um seine Wirkung entfalten zu können.Das liegt daran, dass ein Spammer üblicherweise zum Mailserver des Empfän-gers eine Verbindung aufbaut, über die er beliebig viele Mails für diesen Mail-server einliefern kann. Hat also ein Spammer z.B. 100 Mailadressen unter ei-ner Domain eingesammelt, dann kann er Mails an alle diese Mailadressen ineiner einzigen Verbindung mit dem Mailserver einliefern. Da die Bremsfunk-tion nur die bestehende Verbindung betrifft, wird der Versand an andere Mail-server nicht behindert, denn der erfolgt typisch parallel: Jeder Rechner ist the-oretisch in der Lage, ca. 64.000 parallele Verbindungen zu verschiedenenServern zu unterhalten.

Damit müsste ein großer Anteil aller Mailserver mit solchen Teergruben aus-gerüstet werden, um wirklich effektiven Schaden bei Spammern hervorzuru-fen. Andererseits liegen mir aber auch E-Mails von Anwendern solcher Ver-fahren vor, in denen sie für deren Einsatz von Spammern wüst beschimpft undbedroht wurden.

Technisch gesehen wird bei solchen Teergruben der SMTP-Dialog künstlichmaximal verzögert, um den ausliefernden Mailserver, der vermutlich einemSpammer zuzuordnen ist, auszubremsen. Sind ausreichend viele solcher Teer-gruben im Einsatz, hofft man, damit den Spammer tatsächlich lahm zu legenund ihn so an der Aussendung weiteren Werbemülls zu hindern.

Die Blockade entsteht, weil die Zahl der maximal gleichzeitig bestehendenVerbindungen zum Versand von E-Mails nach oben limitiert ist. Durch diemassive Verzögerung der Kommunikation zwischen Client und Server werdendiese Verbindungen besonders lange offen gehalten. In je mehr Teergruben derSpammer fällt, desto mehr Verbindungen werden so blockiert. Dadurch sinktdie Versandgeschwindigkeit des Spammers erheblich.

In der Theorie kann man durch solche Teergruben Server von Spammern völ-lig ausbremsen und damit verhindern, dass sie Spam ausliefern – oder zumin-dest die Auslieferung so massiv verzögern, dass sie für den Spammer unerträg-lich lange dauert.

In der Praxis hat das Verfahren jedoch einen wesentlichen Nachteil: Eigentlichjeder SMTP-Client ist in der Lage, einem SMTP-Server in einer Verbindungalle Mails für diesen Server zu übermitteln. Er muss dazu nicht mehrere paral-lele Verbindungen zu diesem Server aufbauen. Da die Teergrube nur genaueine Verbindung lahm legt, der Spammer aber potenziell mehrere tausend Ver-

40

Page 41: eBook - No Spam

Rechtsweg

bindungen parallel halten kann, ist der Effekt in der Praxis im Allgemeinensehr klein, es sei denn, der Spammer tappt durch Zufall auf einen Schlag inzahlreiche Teergruben.

Da die Verbreitung solcher Teergruben eher gering sein dürfte, sinkt die Wahr-scheinlichkeit für den gewünschten Blockadeeffekt leider deutlich.

Zudem muss der Betreiber einer Teergrube sicherstellen, dass er nicht verse-hentlich mit seinem System „anständige“ Server blockiert. Das wird in allerRegel dadurch erreicht, dass die Teergruben nur für bestimmte (Sub-)Domainseingerichtet werden, für die die E-Mail-Adressen ausschließlich auf speziellenHarvester-optimierten Webseiten kommuniziert werden.

Damit ist der Aufwand für den Betrieb einer Teergrube relativ hoch, was sichwiederum negativ auf deren Verbreitung auswirkt – und damit auf den Blockade-effekt.

4.8 Rechtsweg

Die langfristig wirkungsvollste, präventive Anti-Spam-Maßnahme dürfte je-doch immer noch der Rechtsweg sein: Ist ein Spammer erst mit Ordnungsgel-dern von bis zu 250.000 € oder bis zu sechs Monaten Ordnungshaft bedrohtund drohen ihm zusätzlich hohe Gerichtskosten, dann schwindet der Vorteildes Spamming, mit minimalen Kosten eine große Adressatengruppe zu errei-chen.

Schließlich ist Spamming für den Absender wirtschaftlich interessant: Spam-mer können immer noch darauf vertrauen, dass ein kleiner Bruchteil der Emp-fänger tatsächlich die beworbene Dienstleistung gegen Entgelt erwirbt oder er-werben will, denn wer weiß schon, ob jemand, der seine per Spam beworbenenWaren über gehackte Server verkauft und damit schon erhebliche kriminelleEnergie beweist, nicht zufällig auch noch die Lieferung vergisst.

Solange die Kosten für den Versand des Spam geringer sind als der zu erwar-tende Gewinn, rechnet sich diese Werbeform. Durch Ordnungsgelder und -haftsowie Gerichtskosten sinkt die Gewinnspanne.

Einige Autoren25 sehen zusätzlich bereits nach geltendem Recht auch eineStrafbarkeit des Spamming an sich – unabhängig von eventuellen Straftaten

25. So allen voran die Dissertation [FRA04a], zusammengefasst in [FRA04].

41No Spam!

Page 42: eBook - No Spam

4 – Grundlegende Vorsichtsmaßnahmen

oder Ordnungswidrigkeiten z.B. wegen versuchten Betrugs oder Verstoß ge-gen das Arznei- und Betäubungsmittelrecht, die der Spammer durch sein An-gebot verwirklicht. Das erhöht das „unternehmerische“ Risiko nochmals – zu-mindest für in Deutschland ansässige Spammer.

Eine aktuelle Gesetzesinitiative26 möchte im Teledienstegesetz (TDG) das Fäl-schen von Header-Daten in E-Mails, das Spammer routinemäßig machen, umihre Identität zu verschleiern, unter Strafe stellen. Kritiker befürchten jedoch,dass dadurch Spam mit korrekten Header-Daten indirekt für zulässig erklärtwird, und verweisen auf die Strafbarkeit der Verfälschung beweiserheblicherDaten, die das Fälschen von Header-Daten bereits unter Strafe stellt.

In die wirtschaftliche Richtung gehen zwar auch Vorschläge, den E-Mail-Ver-sand selbst kostenpflichtig zu machen. Dies würde allerdings zum einen dengroßen Vorteil der E-Mail-Kommunikation zunichte machen und zum anderensind diese Vorschläge durch die weit verteilte Infrastruktur des Internets prak-tisch nicht realisierbar. Insbesondere, wenn man bedenkt, dass trotz „Ächtung“von so genannten Open Relays immer noch zahlreiche27 als Open Relay kon-figurierte Mailserver in Betrieb sind. Zudem ist die Zahlungsbereitschaft imInternet nicht sonderlich groß, so dass hier zusätzliche Widerstände bei derEinführung zu befürchten sind. Schon die von zahlreichen erfahrenen Net-Ci-tizens befürwortete Abschaffung von Open Relays hat sich trotz des geringenzusätzlichen Konfigurationsaufwands noch nicht weltweit durchgesetzt.

26. Stand: 03/200527. Hinweise über deren Menge liefern die Open Relay Black Lists, z.B. http://www.ordb.org.

42

Page 43: eBook - No Spam

5 E-Mail-Adressen von Webseiten verbannen

Homepages lassen sich grob einteilen in „geschäftliche“ und in private Seiten.Zu Ersteren zählen alle Seiten, die in irgendeiner Hinsicht das Ziel haben, Ein-nahmen zu generieren: sei es als Informationsquelle über Produkte und diedaraus resultierenden Einkäufe, sei es durch direkten Verkauf von der Home-page, durch Bannerwerbung oder auch nur durch Links auf ein provisionsori-entiertes Buch-Partnerprogramm, wie z.B. bei Amazon oder Libri. Wobei imFall des provisionsorientierten Partnerprogramms in der rechtswissenschaftli-chen Diskussion die Gewerbsmäßigkeit umstritten ist.

Eindeutig private Seiten verfolgen keine solche Ziele, sondern bestehen imEndeffekt „nur“ zum Spaß und Zeitvertreib des Seitenbetreibers.

Für gewerbsmäßig betriebene Internetseiten schreibt §6 Nr. 2 TDG vor, dassauf der Seite „Angaben, die eine schnelle elektronische Kontaktaufnahme undunmittelbare Kommunikation mit“ dem Anbieter „ermöglichen, einschließlichder Adresse der elektronischen Post“ enthalten sein müssen.

Dabei ist der Begriff der Gewerbsmäßigkeit sehr unscharf, da er im Gesetznicht definiert ist, was kurz nach Einführung des Gesetzes zu Abmahnwellenwegen fehlerhaften oder nicht vorhandenen „Impressen“ führte.

Doch auch private Anbieter von Homepages sehen ihre Seiten nur selten alsreinen Selbstzweck, sondern wollen in aller Regel auch Kontaktmöglichkeitenangeben, um mit den Besuchern der Seite in Diskussion treten zu können.

In allen Fällen ist es daher praktisch notwendig und sinnvoll, auf der Home-page eine Möglichkeit zur „schnellen, elektronischen Kontaktaufnahme“ vor-zusehen. Häufig wird darunter eine E-Mail-Adresse verstanden.

Einige wenige Betreiber von Webseiten nennen statt einer E-Mail-Adresseeine Handynummer und argumentieren, man würde darüber per SMS auchschnell und elektronisch kommunizieren können. Ob das tatsächlich so zu se-hen ist, ist bislang von der Rechtsprechung noch nicht entschieden worden.

Stellt man sich auf den Standpunkt, dass eine schnelle elektronische Kommu-nikation per E-Mail erfolgen kann, dann erfolgt sie sicherlich auch per SMS.Doch beide Kommunikationswege stellen de facto keinerlei Zustellzeiten si-

43No Spam!

Page 44: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

cher. Insbesondere ergeben sich aus einer E-Mail-Adresse auch keine Ant-wortzeiten. Schnelligkeit ist also bei E-Mail sicher nicht gewährleistet.

Sieht man aber den Begriff der Schnelligkeit eher weit, wie es die Interpreta-tion „E-Mail“ suggeriert, dann müsste sich auch der Begriff „elektronisch“weit auslegen lassen. Damit wäre auch eine Telefonnummer eine Möglichkeitder schnellen, elektronischen Kontaktaufnahme.

Zudem stellt das Telefon – anders als die E-Mail – die zeitlich unmittelbareKommunikation eher sicher, sofern kein Anrufbeantworter oder Sprachcom-puter den Anruf entgegennimmt. Tatsächlich wird von vielen Autoren sogar –unter anderem in Hinblick auf die Entstehung des Gesetzes – angenommen,dass mit der Möglichkeit der schnellen, elektronischen Kontaktaufnahme min-destens eine Telefonnummer gemeint sei und eben keine E-Mail-Adresse.

Diese Auffassung stützt beispielsweise [GRAV03] und folgert das vor allemaus der Bundestagsdrucksache 14/6098, die das Telefon explizit als Mittel derschnellen elektronischen Kontaktaufnahme nennt.

Die Aufforderung jedoch, eine Adresse der elektronischen Post anzugeben, ist(fast) eindeutig: Damit kann der Gesetzgeber eigentlich nur eine E-Mail-Adresse gemeint haben, wenn auch die Übersetzung in die GerichtsspracheDeutsch eher krampfhaft wirkt.

Somit kommt der gewerbsmäßige Homepage-Betreiber um die Angabe einerE-Mail-Adresse wohl nicht herum, die gelegentlich praktizierte Angabe einerHandynummer und der Verweis auf SMS erscheinen auf den ersten Blick un-geeignet.

Andererseits könnte man auch eine Faxnummer als eine Adresse der elektro-nischen Post ansehen: Das Telefax überträgt Schriftstücke auf elektronischemWeg und ermöglicht damit einen elektronischen Postversand. Die Faxnummerist dabei zur Adressierung notwendig und somit eine Adresse der elektroni-schen Post. Mit gleicher Argumentation wäre dann auch die SMS elektroni-sche Post.

Auch die URL eines Kontaktformulars könnte die Adresse der elektronischenPost darstellen, schließlich lassen sich darüber unmittelbar E-Mails, die ein-deutig zur elektronischen Post zu zählen sind, versenden.

Allerdings ist auch über diese Spitzfindigkeit bislang von den Gerichten nochnicht entschieden worden. Will man also auf der sicheren Seite sein und poten-

44

Page 45: eBook - No Spam

Adressen fälschen

ziell teuren Rechtsstreitigkeiten aus dem Weg gehen, bleibt einem nicht vielanderes übrig, als eine E-Mail-Adresse im „Impressum“ zu nennen.

Zum Glück fordert das Gesetz nur die „Angabe“ der Adresse. Eine Verlinkungderart, dass die E-Mail-Adresse in ein E-Mail-Programm übernommen wird,ist noch nicht notwendig, was auch in Hinblick auf die folgenden Lösungsvor-schläge günstig ist: Viele von ihnen würden nicht mehr funktionieren, müsstedie Adresse zwangsweise verlinkt werden.

Dabei zeigt sich wieder ein interessanter Denkansatz der Gesetzgeber: Wenndas Sammeln von Adressen verboten ist und auch der Versand von Spam nichterlaubt ist, dann kann beides nicht stattfinden. Das ähnelt Christian Morgen-sterns Palmström in „Die unmögliche Tatsache“ ([MOR04]), der feststellt,dass „nicht sein kann, was nicht sein darf“.

5.1 Adressen fälschen

Um der Pflicht oder dem Wunsch nach Angabe einer E-Mail-Adresse nach-zukommen, ohne jedoch bespammt zu werden, wird häufig zur Irreführungder Adressjäger eine verfälschte E-Mail-Adresse angegeben: Dabei wird dieE-Mail-Adresse mit Zusätzen nach dem Muster „REMOVE_TO_MAIL_ ME“versehen. Nicht immer jedoch sind diese Zusätze eindeutig und zweifelsfrei zuerkennen oder zu entfernen. Dann besteht die Gefahr, dass eine falsche E-Mail-Adresse generiert wird.

Aber selbst, wenn die Zusätze erkennbar sind, kommt es immer wieder vor,dass versehentlich zuerst an die verfälschte Adresse gemailt wird. Die darauf-hin zurückkommende Fehlermeldung, so die Verfechter dieser Methode, wür-de dem Absender schon zu erkennen geben, wie die Adresse korrigiert werdenmüsse.

Allerdings entspricht bereits die Annahme nicht der Realität – ein Großteil derAnwender ignoriert Fehlermeldungen schlicht und macht sich nicht die Mühe,deren, häufig englischsprachigen, Inhalt zu verstehen. Immer wieder wird vonAnwendern sogar eine generelle Unlust angemeldet, sich mit diesem „Com-puterzeug“ überhaupt zu befassen, schließlich handle es sich dabei um einWerkzeug. Eine Haltung, die für mich nicht nachvollziehbar ist, denn auch derUmgang mit dem Werkzeug „Auto“ oder „Kettensäge“ erfordert eine Ausein-andersetzung mit dem Gerät und den zugehörigen Regeln.

45No Spam!

Page 46: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Allerdings muss man zugestehen, dass die Fehlermeldung nicht sonderlichaufschlussreich sein kann, denn sie beschreibt ein aus der verfälschten Adresseresultierendes Problem: beispielsweise, dass der Name des Mailservers nichtaufgelöst werden konnte, also z.B. „DNS not found“, oder aber, dass der Nut-zer nicht existiert, z.B. „User unkown“. Beide Fehlermeldungen sind für denLaien nicht verständlich und weisen auch nicht auf die wahre Fehlerursachehin – wie sollten sie auch.

Typischerweise enthalten solche Meldungen noch weitere „Diagnostic Infor-mations“, die für Fachleute verständlich sind, für den Laien aber die wahreFehlermeldung so effektiv verbergen, dass sie der Endanwender in einem IT-englischen Zeichensalat kaum mehr finden kann.

Auf diese Art und Weise werden zahllose Endanwender ausgeschlossen, wasim Allgemeinen nicht im Sinne einer Homepage sein dürfte. Zudem sind sol-che Fälschungen, wie in Kapitel 4.4 diskutiert, technisch zweifelhaft und ber-gen zahlreiche Risiken.

Auch mit dem Wunsch des Gesetzgebers, der sich hinter §6 TDG verbirgt, demEndverbraucher bessere Kontaktmöglichkeiten zu bieten, ist dieses Vorgehenmeines Erachtens nicht vereinbar. Eine verfälschte E-Mail-Adresse könntealso durchaus noch zu einer berechtigten Abmahnung wegen eines unvollstän-digen Impressums führen.

Damit ist der Einsatz von verfälschten E-Mail-Adressen zwar geeignet, um dieHarvester von Spammern zu blockieren, aber ansonsten völlig unbrauchbar.

5.2 Verstecken mit HTML-Code

Somit bleibt als nächste Möglichkeit, die E-Mail-Adresse auf der Seite so an-zugeben, dass ein Sammelprogramm sie nicht automatisch auswerten kann.Zum Erkennen von E-Mail-Adressen lassen sich zwei Merkmale nutzen: ein-mal der Link auf die Adresse:

Und zum anderen die Adresse selbst:

Für die Suchmethoden der Harvester sind beide nahezu gleich gut zu finden.

<A HREF=“mailto:[email protected]“>

[email protected]

46

Page 47: eBook - No Spam

Verstecken mit HTML-Code

Der mailto-Link jedoch ist noch einen Tick eindeutiger, da so neumodischeWörter, die ein „@“ anstelle eines „a“ enthalten, nicht fälschlich für E-Mail-Adressen gehalten werden können. Schließlich verlinkt mailto ausschließlichMailadressen.

5.2.1 Kontaktformular

Daher sollte man zunächst alle mailto-Links aus der Homepage entfernen.Möchte man dennoch den Komfort bieten, durch einen direkten Klick eineNachricht an diese Adresse zu verschicken, so empfiehlt sich der Einsatz einesKontaktformulars. Dieses Kontaktformular kann man problemlos mit der (zu-nächst noch lesbar) angegebenen E-Mail-Adresse verlinken.

Ein solcher Link würde also in einem ersten Schritt so aussehen:

Durch diese Maßnahme verschwinden alle mailto-Links, die einfach automa-tisiert zu finden sind, von der Webseite. Diese Quelle für E-Mail-Adressen istdamit trockengelegt.

Sofern wir im Folgenden in HTML E-Mail-Adressen verstecken, gehe ich im-mer davon aus, dass sie auf eine Kontaktseite verlinkt werden und nicht mit ei-nem mailto-Link versehen sind.

Wie sollte ein sicheres Kontaktformular aussehen?

Auch ein Kontaktformular kann von einem Harvester automatisch ausgelesenwerden. Daher sollten weder im Kontaktformular als versteckte Werte nochauf der Kontaktseite selbst E-Mail-Adressen unmittelbar lesbar angegebenwerden.

Daher sollte das Mail-Script, das vom Kontaktformular aufgerufen wird, auto-matisch den Empfänger der Nachricht aus einem übergebenen Code ermittelnkönnen. Der Beispiel-Formmailer in PHP weiter unten ordnet dabei jedemEmpfänger eine Nummer zu. Diese Zuordnung kann vom Harvester nicht um-gekehrt werden.

Auch das bekannte Perl-Formmailer-Script von Matt Wright (http://www.scriptarchive.com), das von vielen Webspace-Providern vorinstalliert wird,kann man so modifizieren.

<A HREF="./kontakt.html">[email protected]</A>

47No Spam!

Page 48: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Als Nebeneffekt lässt sich das Kontaktformular nicht mehr zum Versendenvon Spam missbrauchen: Es gab immer wieder Fälle, in denen das Formularauf der HTML-Seite selbst so modifiziert wurde, dass die E-Mail nicht mehran den von der Webseite vorgesehenen Empfänger ging, sondern an andereAdressaten.

Aus diesem Grund verschickt das Beispielscript Nachrichten auch nur anEmpfänger, die im Script selbst eingetragen sind. Das Script kann ein Angrei-fer nicht so einfach manipulieren wie eine HTML-Seite, denn um es bearbei-ten zu können, müsste er sich Zugang zum Server verschafft haben, was in al-ler Regel weitere Probleme zur Folge hat.

Programmbeispiel Formmailer

Das Script versucht auch, alle Eingaben sehr streng zu überprüfen, um einenMissbrauch möglichst zu erschweren. Die notwendigen Übergabeparametersind im Script selbst dokumentiert und werden im Beispiel unten gezeigt.

Zum Verständnis des Scripts ist es sinnvoll, wenn Sie sich die in das Script ein-gefügten Kommentare durchlesen. Ich habe versucht, sie möglichst ausführ-lich zu halten. Dadurch stehen die wichtigen Hinweise direkt an den relevantenStellen des Scripts.

<?php /* ***************************************************************** Formmail-Script in PHP Autor: Tobias Eggendorfer (c) 2004, 2005 Fuer die Funktion wird keinerlei Gewaehrleistung uebernommen. Es handelt sich bei dem Script um ein Beispiel zu Lehrzwecken. ***************************************************************** */ /* ***************************************************************** Das Script erwartet als Uebergabeparameter wahlweise per GET oder POST: to: Die Nr. des Empfaengers der E-Mail entsprechend dem Index des Empfaengers im globalen Array empfaenger unten. Default-Wert ist 0. Mehrere Empfaenger-Nummern koennen durch Komma getrennt an- gegeben werden. Beispiel: 1,2,3

48

Page 49: eBook - No Spam

Verstecken mit HTML-Code

cc: Adressaten, an die die Mail in cc gehen soll. Ebenfalls als in Index in das Array empfaenger. Ist dieses Feld leer, wird kein cc:-Header eingefuegt. cc an den Absender wird _nicht_ unterstuetzt, wegen der Gefahr des Missbrauchs des Scriptes als Spamming-Engine.

bcc: Adressaten, an die die Mail in bcc gehen soll. Analog "cc".

subject: Betreff der generierten E-Mail, Default-Wert steht in der globalen Konstanten "DEF_SUBJECT". from: E-Mail-Adresse des Absenders. Wird _nicht_ als Absender der E-Mail eingetragen, um Spammen über Bounces zu vermeiden. from_name: Name des Absenders.

msg: Nachricht, die der Absender eingegeben hat.

vars: Variablennamen, kommasepariert, die zusätzliche Daten ent- halten, die in der Mail stehen sollen. httpvars: http-Umgebungsvariablen, die der Mail angefuegt werden sollen. Siehe dazu die PHP-Doku. ****************************************************************** */ /* Konfiguration des Scriptes */ define ('DEF_SUBJECT','Mail vom Formular'); /* Dieses Subject wird eingesetzt, wenn kein Subject uebergeben wurde. */ define ('DEF_FROM','[email protected]'); /* _Gueltige_ E-Mail-Adresse, die als From in der generierten Nachricht eingetragen wird. Empfehlung: Ihre eigene. */ /* Liste der Empfaengeradresse, die Erste hat den Index 0, die zweite 1 usw. */ $empfaenger = array ( '[email protected]', // Index 0 '[email protected]', // Index 1 /* oberhalb dieser Zeile weitere Adressen nach dem Muster oben anfuegen.

49No Spam!

Page 50: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

*/ '' // bitte so stehen lassen );

/* **************************************************************** Funktionen **************************************************************** */ function valid_csv_numbers($text) { /* Testet, ob $text csv-getrennte Ganzzahlen sind. Wenn ja, wird ein Array mit diesen Zahlen zurueckgeliefert. Wenn nein, FALSE */ $ret_value = FALSE; if ( isset($text) && (($text = trim($text)) != "") && (preg_match('/^[0-9]+(,[0-9]+)*$/',$text) != 0) ) { $ret_value = split(',',$text); } return $ret_value; } function to_address_line($numbers) { /* setzt die uebergebenen Nummern ueber das array empfaenger in gueltige E-Mail-Adressen um und schreibt sie so, dass die PHP-Funktion mail() sie unmittelbar nutzen kann. $numbers ist ein array. Ist das nicht der Fall, liefert die Funktion FALSE zurück. */ global $empfaenger; $ret_value = FALSE; if ( isset($numbers) && is_array($numbers) ) { $ret_value = ''; foreach ($numbers AS $number) { if ( isset($empfaenger[$number]) && ($empfaenger[$number] != "") &&

50

Page 51: eBook - No Spam

Verstecken mit HTML-Code

(preg_match('/^([a-z0-9_.-])+@([a-z0-9-]+.)+[a-z]{2,6}$/i', $empfaenger[$number]) != 0) ) { $ret_value .= $empfaenger[$number].","; } } // end foreach if ($ret_value != "") { $ret_value = substr($ret_value,0,-1); } else { $ret_value=FALSE; } } return $ret_value; } function send_header_and_head() { header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Expires: ".gmdate("D, d M Y H:i:s")." GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-Encoding: iso-8859-1"); header("Content-Type: text/html"); ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Mailformular</TITLE> </HEAD> <BODY> <?php } function send_footer() { ?> </BODY> </HTML>

51No Spam!

Page 52: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

<?php }

function fehler($msg) { /* Bricht den Programmlauf mit einer Fehlermeldung ab. */ send_header_and_head(); ?> <H1>Fehler</H1> <P><B>Ihre Mail wurde nicht versandt.</B></P> <P>Es ist ein Fehler aufgetreten. Die Fehlermeldung lautet: <?php print $msg; ?></P> <P>Bitte verwenden Sie den Back-Button Ihres Browsers, um zur vorhergehenden Seite zur&uuml;ck zu gehen.</P> <? send_footer(); die(); }

/* ****************************************************************** Beginn des eigentlichen Programmes ****************************************************************** */ foreach ($empfaenger AS $adresse) { $adresse = trim($adresse); } /* validiere Eingabedaten */ $to = isset($_REQUEST["to"]) ? valid_csv_numbers($_REQUEST["to"]) : FALSE; $to = is_array($to) ? to_address_line ($to) : to_address_line(array(0)); if ($to === FALSE) { fehler('Keine g&uuml;ltige Zieladresse gefunden.'); }

$add_header = "";

52

Page 53: eBook - No Spam

Verstecken mit HTML-Code

if (isset($_REQUEST["cc"])) { $cc = valid_csv_numbers($_REQUEST["cc"]); $add_header.= is_array($cc) ? "Cc: ".to_address_line ($cc)."\r\n" : ""; } if (isset($_REQUEST["bcc"])) { $bcc = valid_csv_numbers($_REQUEST["bcc"]); $add_header.= is_array($bcc) ? "Bcc: ".to_address_line ($bcc)."\r\n" : ""; } $add_header .= "From: ".DEF_FROM."\r\n". "Reply-To: ".DEF_FROM."\r\n"; if ( isset($_REQUEST["subject"]) ) { $subject = substr( str_replace("\r","", str_replace("\n","", trim( $_REQUEST["subject"]))),0,60); if ($subject == "") { $subject = DEF_SUBJECT; } } else { $subject = DEF_SUBJECT; } if ( !isset($_REQUEST["msg"]) || (trim($_REQUEST["msg"]) == "") ) { fehler('Die &uuml;bergebene Nachricht war leer. Leere Mails '. 'k&ouml;nnen Sie &uuml;ber dieses Formular nicht '. 'versenden.'); } else { $msg = $nachricht = trim($_REQUEST["msg"]); }

53No Spam!

Page 54: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

if ( isset($_REQUEST["vars"]) && (trim($_REQUEST["vars"]) != "") && (preg_match('/^[a-z0-9_]+(,[a-z0-9_]+)*$/i', trim($_REQUEST["vars"])) !== FALSE ) ) { $vars = split(',',trim($_REQUEST["vars"])); $msg.="\n\n\nFolgende Variablen wurden uebergeben:\n\n\n"; foreach ($vars AS $var) { $msg .= "$var: ". (isset($_REQUEST[$var]) ? $_REQUEST[$var] : ""). "\n\n"; } }

if ( isset($_REQUEST["httpvars"]) && (trim($_REQUEST["httpvars"]) != "") && (preg_match('/^[a-z0-9_]+(,[a-z0-9_]+)*$/i', trim($_REQUEST["httpvars"])) !== FALSE ) ) { $vars = split(',',trim($_REQUEST["httpvars"])); $msg.="\n\n\nFolgende HTTP-Variablen sollen ausgegeben werden:". "\n\n\n"; foreach ($vars AS $var) { $msg .= "$var: ". (isset($_SERVER[$var]) ? $_SERVER[$var] : ""). "\n\n"; } } if ( isset($_REQUEST["from"]) && (trim($_REQUEST["from"]) != "") ) {

54

Page 55: eBook - No Spam

Verstecken mit HTML-Code

$msg = "Absender-Email: ".trim($_REQUEST["from"]). "\n\n".$msg; } if ( isset($_REQUEST["from_name"]) && (trim($_REQUEST["from_name"]) != "") ) { $msg = "Absender-Name: ".trim($_REQUEST["from_name"]). "\n\n".$msg; } $mail_result = @mail($to, $subject, $msg, $add_header."X-Mailer: Webform\r\n"); if ($mail_result === TRUE) { send_header_and_head(); ?> <H1>Nachricht erfolgreich gesendet.</H1> <P>Ihre Nachricht wurde erfolgreich gesendet.</P> <P>Zur Kontrolle hier nochmals der Inhalt der Nachricht: <PRE><?php print str_replace("<","&lt;", str_replace(">","&gt;", $nachricht)); ?> </PRE> </P> <?php send_footer(); } else { fehler('Ihre Nachricht konnte nicht versandt werden.'); } /* ******************************************************************* Ende ******************************************************************* */?>

55No Spam!

Page 56: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Beispiel-Kontaktformular

Im Iolgenden möchte ich Ihnen eine kleine HTML-Seite an die Hand geben,die Ihnen einen Eindruck vermittelt, wie das Kontaktformular erzeugt werdenkann. Von optischen Gestaltungsversuchen habe ich dabei bewusst Abstandgenommen – schließlich müssen diese zum Design der fertigen Seite passen.Außerdem werden Sie auf Ihrer Seite vermutlich auch noch andere Felder alsdie von mir genannten nutzen wollen.

Deutlich zu sehen ist, dass in dem Formular keine einzige E-Mail-Adresse ge-nannt wird. Stattdessen sind die verschiedenen möglichen Empfänger übereine Zahl codiert. Die Zahl entspricht dem Index in das Array $empfaenger imPHP-Script oben.

<HTML> <HEAD> <TITLE>Muster-Kontaktformular</TITLE> </HEAD> <BODY> <H1>Kontaktformular</H1> <FORM METHOD="POST" ACTION="./formmail.php"> <INPUT TYPE="HIDDEN" NAME="httpvars" VALUE="HTTP_USER_AGENT,REMOTE_ADDR" /> <INPUT TYPE="HIDDEN" NAME="vars" VALUE="telefon,telefax" /> <P>Wen m&ouml;chten Sie kontaktieren? <SELECT NAME="to"> <OPTION VALUE="0">Den Webmaster</OPTION> <OPTION VALUE="1">Den Autor</OPTION> <OPTION VALUE="0,1">Beide</OPTION> </SELECT> </P> <P>Ihr Name: <INPUT TYPE="text" NAME="from_name" /> </P> <P>Ihre E-Mail-Adresse: <INPUT TYPE="text" NAME="from" /> </P> <P>Ihre Telefonnummer: <INPUT TYPE="text" NAME="telefon" /> </P>

56

Page 57: eBook - No Spam

Verstecken mit HTML-Code

Meinungen zum Kontaktformular

Der Einsatz von Kontaktformularen ist umstritten – einige Anwender mögensie überhaupt nicht, da sie dann keine Kopie der verschickten Nachricht in ih-rem Mailprogramm haben und auch auf dessen gewohnte Funktionalität ver-zichten müssen. Auch können sich so leicht versehentlich Tippfehler in derAbsenderadresse einschleichen.

Andererseits setzt ein mailto-Link voraus, dass auf dem Rechner des Anwen-ders ein Mailprogramm installiert ist und dieses Mailprogramm so konfiguriertist, dass es auf solche Links reagiert.

Außerdem muss das Mailprogramm mit den richtigen Nutzerdaten konfigu-riert sein. Das ist häufig in Schulungsräumen, Internetcafés und Ähnlichemnicht der Fall. Da versendet der sorglose Anwender dann eine E-Mail mit demAbsender „PC15“ im Local-Part.

Viele Anwender nutzen heutzutage auch gar keine echten Mailprogrammemehr, sondern bearbeiten ihre Mails ausschließlich in Webmailern. Auch diestarten mit einem Klick auf einen mailto-Link nicht automatisch.

<P>Ihre Tefaxnummer: <INPUT TYPE="text" NAME="telefax" /> </P> <P>Betreff: <INPUT TYPE="text" NAME="subject" /> </P> <P>Ihre Nachricht: <TEXTAREA NAME="msg"></TEXTAREA> </P> <P><INPUT TYPE="SUBMIT" VALUE="Senden" /> <INPUT TYPE="Reset" VALUE="R&uuml;cksetzen" /> </P> </FORM> <P><SMALL>Mit freundlicher Unterst&uuml;tzung von <A HREF="http://www.eggendorfer.info" TARGET="_blank">www.eggendorfer.info</A>. </SMALL></P> </BODY></HTML>

57No Spam!

Page 58: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Aus meiner Sicht ist der Formmailer daher genauso nutzerfreundlich oder -un-freundlich wie ein mailto-Link: Es gibt jeweils Szenarien, in denen das eineoder das andere praktikabler ist. Ein Formmailer ist jedenfalls für alle Nutzerunmittelbar benutzbar, während ein mailto-Link die geeignete Konfigurationdes Browsers erfordert.

Aus Sicht des Webseitenbetreibers ist der Formmailer jedenfalls deutlich über-legen: Über ihn finden Harvester kein Futter.

Auf alle Fälle liefert der Formmailer auch einen Weg zur „schnellen, elektro-nischen“ Kontaktaufnahme und bietet eine Adresse der elektronischen Post. Erdürfte damit auch den Anforderungen des §6 Nr. 2 TDG genügen.

5.2.2 Tarnen mit HTML

Durch den Einsatz eines Kontaktformulars haben wir die Webseite nun so ge-staltet, dass Spammer keine mailto-Links mehr finden. Aber auch Zeichen-ketten nach dem Muster [email protected] lassen sichgut automatisiert finden. Dabei läuft zwar der Harvester Gefahr, auch Produkt-namen und Firmennamen, die ganz im Trend ein „@“ enthalten, zu finden undals E-Mail-Adressen zu deklarieren. Aber die wenigen so gefundenen, fehler-haften Adressen interessieren Spammer meist nicht – häufig gehen die erzeug-ten Fehlermeldungen wegen ungültiger Adressen an unbeteiligte Dritte, da dieAbsenderadressen der Spammails gefälscht werden.

Es stehen zahllose Möglichkeiten zur Verfügung, in einer HTML-Seite Text zuverdecken – es sind im Prinzip die gleichen Verfahren, die auch Spammer tag-täglich einsetzen, um Spamfilter zu umgehen. Wenn Sie deren Methoden auchdurchschauen wollen, lohnt sich ein Blick in [GRA04]. Was gibt es Schöneres,als den Gegner mit seinen eigenen Waffen zu schlagen?

Zeichen ersetzen

Eine dieser Methoden, die schon seit Jahren bekannt ist und daher durch ge-eignete Such- und Ersetzalgorithmen in Harvestern leicht umgangen werdenkann, ist das Ersetzen von „@“ durch „at“ und des Punkts „.“ durch „dot“. Sowird aus [email protected]:

user at example dot com

58

Page 59: eBook - No Spam

Verstecken mit HTML-Code

Für Menschen bleibt das lesbar und verständlich, Harvester finden auf Anhiebkeine gültige E-Mail-Adresse mehr.

Aus diesem Grund findet man diese Schreibweise auch mittlerweile sehr häu-fig im Netz. So werden z.B. die E-Mail-Adressen der Kommentatoren imPHP-Onlinehandbuch auf http://www.php.net so getarnt.

Allerdings gehe ich davon aus, dass diese Methode kaum mehr langfristig er-folgreich sein wird. Schließlich lässt sich über regular expressions28 mit gerin-gem Aufwand eine Ersetzung vornehmen.

reichen dafür bereits aus. Es ist dabei kaum wahrscheinlich, dass so übermäßigviele ungültige Adressen generiert werden: Dazu müsste nach Entfernen vonLeerzeichen und der Ersetzung von „dot“ durch den Punkt bzw. „at“ durch „@“ein Zeichenmuster herauskommen, das aussieht wie eine E-Mail-Adresse.

Spammer machen dasselbe, um beispielsweise Viagra-Spam an Spamfilternvorbei zuzustellen. Sie ersetzten den Markennamen durch den Wirkstoff-namen „Sildenafil“ in ihren Werbemails. Mittlerweile taucht auch der Wirk-stoffname in den Filtern auf, weshalb sie das „a“ in „Viagra“ durch @, das „i“durch „1“ ersetzen und Leerzeichen einfügen. Somit erhält man jetzt Angebotefür „V 1 @ G R @“.

Spamfilter können mittlerweile solche Tarnungen knacken. Auch Harvestersollten mit diesen Umschreibungen umgehen können.

HTML-Kommentare

Ebenso beliebt ist bei Spammern das Einfügen von HTML-Kommentaren, umtypische Filterbegriffe unkenntlich zu machen. Genauso lassen sich auchE-Mail-Adressen vor Harvestern verstecken. Aus

wird damit

28. Siehe z.B. [EGG05] oder auch [SEL02], [FRI02] oder [STU03]

s/[ \t\r\n]*at[ \t\r\n]*/@/gis/[ \t\r\n]*dot[ \t\r\n]*/./gi

<A HREF=“./kontakt.html“>[email protected]</A>

<A HREF="./kontakt.html">user<!-- h@h@h@ ->@<!-- soso -->example<!--dot ! -->.<!-- da war der dot -->com</A>

59No Spam!

Page 60: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Diese Kommentare werden von allen Browsern in der Darstellung unterdrückt,die E-Mail-Adresse wird fehlerfrei dargestellt. Aber auch diese Kommentarelassen sich theoretisch von Harvestern mit geringem Aufwand filtern, um sodie E-Mail-Adresse zu extrahieren: Es reicht aus, die Zeichenfolge „<!--“ biszum nächsten „-->“ zu suchen und durch eine leere Zeichenkette zu ersetzen.Das lässt sich wiederum einfach mit regular expressions bewerkstelligen. Oderman verwendet den Textbrowser lynx: Mit der Kommandozeilenoption -dumpverwandelt er HTML in Klartext und gibt das gerade richtig für Filter auf derStandardausgabe aus.

Fast alle vorgestellten Verfahren lassen sich übrigens knacken – die Frage istnur, in welchem Verhältnis der Aufwand zum erwarteten Nutzen steht. DerAufwand, HTML-Kommentare zu eliminieren und die oben beschriebenen Er-setzungen rückgängig zu machen, ist jedenfalls so gering und beide Verfahrensind so verbreitet, dass es sich für Spammer lohnen würde, sie in ihre Harves-ter zu implementieren.

Gesperrte Schreibweise

Eine ähnliche Idee ist, Adressen gesperrt anzugeben, also zwischen jedemBuchstaben ein Leerzeichen einzufügen:

u s e r @ e x a m p l e . c o m

Diese Schreibweise lässt sich nur schwer automatisch zusammenfügen: DasEntfernen der Leerzeichen stellt zwar kein Problem dar, allerdings müssenauch die Ränder der Adresse richtig erkannt werden. Es darf kein umstehenderText mit in die Mailadresse einbezogen werden, da sie dadurch ungültigwürde.

Spamfilter haben hier einen Vorteil: Ihnen reicht es aus, ein Teilwort wie z.B.„Viagra“ zu erkennen. Sie müssen keine E-Mail-Adressen in verwertbarerForm generieren. Daher ist diese Methode für Spammer in ihren Spammailszur Umgehung von Spamfiltern ineffizient; im Kampf gegen Harvester hinge-gen ist sie sehr effektiv, denn diese müssen gültige E-Mail-Adressen generie-ren. Der Aufwand, umgebende Wörter nicht versehentlich mit in die Adresseeinzubeziehen, steht in keinem Verhältnis zum Nutzen.

Markiert man die Leerzeichen durch geeignete Cascading Style Sheets (CSS)als unsichtbar, bemerkt der Besucher der Webseite noch nicht einmal diesenTrick, wie Abbildung 5.1 demonstriert.

60

Page 61: eBook - No Spam

Verstecken mit HTML-Code

Abb. 5.1: Darstellung einer gesperrten E-Mail-Adresse mit geeignetem CSS im Mozilla

Der zugehörige HTML-Code lautet:

Dabei können im HTML-Quelltext durchaus auch mehrere Leerzeichen, Zei-lenumbrüche oder sonstige so genannte Whitespace-Zeichen eingefügt wer-den. Die zusätzlichen Zeichen machen unter Umständen das Erkennen derMail-Adresse für einen Harvester aufwendiger, für den Nutzer bleiben sietransparent, da mehrere Whitespace-Zeichen im HTML-Code von Browsernin der Darstellung stets nur in ein Leerzeichen verwandelt werden.

<html> <head> <title>Gesperrte Darstellung</title> <style type="text/css"> div.in { visibility:hidden; display:none; } </style> </head> <body> u<div class="in"> </div>s<div class="in"> </div>e<div class="in"> </div>r<div class="in"> </div>@<div class="in"> </div>e <div class="in"> </div>x<div class="in"> </div>a<div class="in"> </div>m <div class="in"> </div>p<div class="in"> </div>l<div class="in"> </div>e <div class="in"> </div>.<div class="in"> </div>c<div class="in"> </div>o <div class="in"> </div>m </body></html>

61No Spam!

Page 62: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Die gesperrte Darstellung funktioniert mit allen Browsern und sollte auchohne Probleme mit speziellen Ausgabegeräten wie Braille-Zeilen kompatibelsein.

Ein ähnliches Verfahren wird unter dem Namen Microdot von Spammern ver-wendet: Anstatt Leerzeichen einzufügen, wird eine extrem kleine Schriftartgewählt und ein beliebiges, sonstiges Zeichen ausgegeben. Durch die kleineSchriftart und häufig auch durch die Wahl der Schriftfarbe ist dieses Zeichenunsichtbar.

Für Spammer ist die aufwendigere Methode notwendig, da Zeichenketten wie„Viagra“ auch nach dem Entfernen aller Leerzeichen aus einer Mail vonSpamfiltern erkannt werden. Durch den Microdot werden andere Buchstabeneingestreut, die das Wort unkenntlich machen.

Zum Verstecken der E-Mail-Adresse reicht die Leerzeichenmethode hingegenaus: Denn auch der reguläre Text auf der Webseite enthält Leerzeichen. Erwürde, entfernt man alle Leerzeichen, mit der Mailadresse verschmelzen undsie ungültig machen.

HTML-Entities

Eine andere, häufig empfohlene Möglichkeit ist die Verwendung von HTML-Entities (z.B. [CDT03]). Dabei werden die Zeichen durch ihre ASCII-Codesund spezielle HTML-Symbole ersetzt.

Der ASCII-Code weist jedem Zeichen in eindeutiger und umkehrbarer Weiseeine Zahl zu.

Aus

wird

Allerdings lassen sich auch diese Ersetzungen automatisiert rückgängigmachen und bieten damit allenfalls vorübergehenden Schutz. Schon mit einerZeile effektivem PHP-Code lässt sich diese Ersetzung automatisch auflösen:

<A HREF="./kontakt.html">[email protected]</A>

<A HREF=“./kontakt.html“>&#117;&#115;&#101;&#114;&#064;&#101;&#120;

&#097; &#109;&#112;&#108;&#101;&#099;&#111;&#109;</A>

62

Page 63: eBook - No Spam

Verstecken mit HTML-Code

Dieses kleine Script liest von der Standardeingabe (STDIN) HTML-Code mitASCII-Entities ein und gibt auf der Standardausgabe den Klartext aus. Es magungewöhnlich erscheinen, PHP von der Kommandozeile zu verwenden, aberPHP bietet den Vorteil, regular expressions mit Funktionen zu koppeln, in die-sem Fall mit der Funktion chr, die das Zeichen zu einem ASCII-Code ausgibt.Dadurch lässt sich die Ersetzung so einfach codieren.

Die ab PHP 4.3.0 verfügbare Funktion decode_html_entities() ersetzt zumin-dest in PHP bis Version 4.3.8 keine numerischen HTML-Entities und ist daherfür diesen Zweck ungeeignet.

Da das Script von STDIN liest und auf STDOUT ausgibt, kann es einfach inden oben beschriebenen Beispielharvester (Kapitel 3.2.1) eingesetzt werden,z.B. bevor sed ausgeführt wird.

Damit das Script an der Kommandozeile ausgeführt werden kann, muss PHPmit dem Command-Line-Interface (CLI) kompiliert werden. Das ist bei denmeisten RPM-Versionen standardmäßig der Fall. Die erste Zeile im Script gibtan, wo PHP auf dem jeweiligen System installiert ist. Dadurch muss beim Auf-ruf des Scripts nicht der PHP-Interpreter mit angegeben werden, sondern eskann direkt von der Kommandozeile aus gestartet werden.

Die Alternative ist wiederum lynx mit der Option -dump: Auch hier werden dieErsetzungen rückgängig gemacht und die E-Mail-Adressen im Klartext ausge-geben.

URL-Encoding

Genauso funktioniert das URL-Encoding – und es kämpft mit den gleichenRestriktionen. Spammer verwenden es gerne in Phishing-Mails, um die Iden-tität der aufgerufenen Webseite zu verschleiern.

Der Link, der eine E-Mail-Adresse verschleiert, sähe dann so aus:

#!/usr/local/bin/php<? echo preg_replace('/&#([0-9]+);/e',"chr('\${1}')", file_get_contents('php://stdin'));?>

<A HREF="mailto:%75%73%65%72%40%65%78%61%6D%70%6C%65%2E%63%6F%6D">

E-Mail senden</A>

63No Spam!

Page 64: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Die Manipulation erfolgt hier also zur Tarnung des Links selbst. Die auf derSeite angegebene Mailadresse müsste mit anderen Mitteln verdeckt werden.Auch hier ist es ein Leichtes, die Ersetzungen rückgängig zu machen – dermailto:-Vorspann, der sich noch dazu nicht verschlüsseln lässt, macht es noch-mals um einiges leichter, diese Zeichenkette als Mailadresse zu identifizieren.

Das folgende PHP-Script führt wiederum die Rückübersetzung durch:

Dabei lassen sich dieses Script sowie das obige Script sehr einfach zu einemScript vereinen, um damit sowohl URL-Encoding als auch HTML-Entitiesrückgängig zu machen. Beide Verfahren versprechen also nur vorübergehendSicherheit.

Tabellen

Erfolgversprechender erscheint die Verwendung von Tabellen: Man schreibteinen mehrzeiligen Text über mehrere Tabellenzellen verteilt. Betrachten wirdas an einem Beispiel:

#!/usr/local/bin/php<? echo urldecode(file_get_contents('php://stdin'));?>

<HTML> <HEAD> <TITLE>Tabellentest</TITLE> </HEAD> <BODY> <H1>Verdeckte Mailadresse</H1> <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"> <TR VALIGN="TOP"> <TD>M<BR />u</TD> <TD>e<BR />s</TD> <TD>i<BR />e</TD> <TD>n<BR />r</TD> <TD>e<BR />@</TD> <TD>&nbsp;<BR />e</TD> <TD>M<BR />x</TD> <TD>a<BR />a</TD> <TD>i<BR />m</TD> <TD>l<BR />p</TD>

64

Page 65: eBook - No Spam

Verstecken mit HTML-Code

Diese HTML-Seite erzeugt z.B. im Textbrowser Links die Ausgabe in Abbil-dung 5.2 (die Schriftgröße in der Terminalemulation wurde stark vergrößert).

Abb. 5.2: E-Mail-Adresse versteckt in einer Tabelle

In Mozilla sieht die Ausgabe etwas verbeult aus, denn Mozilla verwendet alsStandardschrift eine so genannte Proportionalschriftart. Dabei wird für jedenBuchstaben nur so viel Platz reserviert, wie er wirklich benötigt. Das „i“ istalso deutlich schmaler als das „m“. Genau diese beiden Zeichen stehen aber inunserem Beispiel übereinander.

Allerdings lässt sich das optische Problem durch die Wahl von Schriftartenund -größen, die Formatierung der Tabellenzellen und eventuell auch durch

<TD>a<BR />l</TD> <TD>d<BR />e</TD> <TD>r<BR />.</TD> <TD>e<BR />c</TD> <TD>s<BR />o</TD> <TD>s<BR />m</TD> <TD>e<BR />&nbsp;</TD> </TR> </TABLE> </BODY></HTML>

65No Spam!

Page 66: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

das Zusammenführen von zwei oder mehr Zellen zu einer größeren durchauslösen.

In dem Textbrowser Links fällt dieser Effekt nicht auf, da er mit festen Buch-stabenbreiten arbeitet – wie man in Abbildung 5.2 sieht.

Um das Tabellenlayout zu knacken, muss der Harvester HTML interpretierenkönnen, die tatsächliche optische Darstellung ermitteln und das Ergebnis die-ser Bearbeitung auswerten. Das setzt etwas mehr Know-how voraus, als ledig-lich Kommentare zu entfernen und ASCII-Codes zu ersetzen.

Meines Wissens gibt es derzeit kein Programm, das diese Übersetzung leistenkann. Mit dieser Art der Tarnung kämpfen ebenfalls die Spamfilter: Denn auchdiese Methode verwenden Spammer in ihren E-Mails, um Begriffe für dieSpamfilter unsichtbar zu machen.

Die Tabelle muss dabei immer mindestens zweizeiligen Text enthalten: Erstdadurch führt das einfache Entfernen aller HTML-Tags zu sinnlosem Buchsta-bensalat. In unserem Beispiel lautet der Text ohne HTML-Tags: „[email protected]“.

Zudem hat dieses Verfahren gegenüber allen anderen, die wir jetzt noch be-trachten werden, den Vorteil, auch mit Textbrowsern kompatibel zu sein. Na-hezu alle Browser, bis auf Lynx, können Tabellen darstellen. Somit kann die E-Mail-Adresse von (fast) allen Nutzern vernünftig erkannt werden. Ob auchspezielle Lesegeräte, wie eine Braille-Zeile, mit dieser Darstellung zurecht-kommen, ist mir nicht bekannt. Allerdings steht zu befürchten, dass sieSchwierigkeiten haben dürften.

Die E-Mail-Adresse kann auch hier wieder verlinkt werden – jedoch mit etwasmehr Aufwand, weil in jeder Tabellenzelle ein Link gesetzt werden muss.

5.2.3 Rechtliches

Sämtlichen Verfahren ist gemein, dass sie mit fast allen verfügbaren Browsernproblemlos funktionieren. Somit sind für jeden Besucher der Seite die E-Mail-Adressen unmittelbar lesbar. Damit wird eine Adresse der elektronischen Post,nämlich eine E-Mail-Adresse, dargestellt und dieser Bedingung des §6 Nr. 2TDG genüge getan. Somit dürften sich aus diesen Codierungsverfahren keineAngriffsmöglichkeiten für eine Unterlassungsaufforderung konstruieren las-sen.

66

Page 67: eBook - No Spam

Bilder und Ähnliches

Insbesondere die Lösung, die mit Einfügen von Leerzeichen arbeitet, ist auchbarrierefrei und zudem kaum zu knacken. Damit stellt das ein effektives Ver-fahren zur Tarnung der Mailadresse dar.

5.3 Bilder und Ähnliches

Die Codierung der E-Mail-Adresse mit HTML-Mitteln hat vor allem für denErsteller der Seite den Nachteil, sehr zeitaufwendig und umständlich zu sein.Weniger arbeitsaufwendig scheint die Verwendung von Bildern.

5.3.1 E-Mail-Adresse als Bild

Am einfachsten erstelle man dazu einmal die Seite mit einem richtigen Mail-link, um anschließend einen Screenshot29 der angezeigten Seite mit dem ech-ten Maillink zu machen und diesen Teil der Grafik auszuschneiden und in einerGIF-Datei zu speichern30. Es empfiehlt sich dabei, den Hintergrund transpa-rent zu wählen.

Dann ersetze man in der HTML-Datei den Maillink von

durch

Auf diesem Weg sieht man der E-Mail-Adresse auf der Seite (fast) nicht an,dass sie als Bild eingefügt wurde. Für den normalen Surfer, der mit einem gra-fikfähigen Browser unterwegs ist, der so konfiguriert ist, dass er Bilder an-zeigt, ist die Mailadresse sichtbar.

Für Anwender, die einen Textbrowser verwenden oder deren Browser per Kon-figuration so eingestellt ist, dass er keine Bilder anzeigt, bleibt die Mailadressedagegen verborgen. Auch dürften Anwender, die beispielsweise über eineBraille-Zeile surfen, ausgebremst werden.

29. Auf Windows-Rechnern mit der Taste „PrtScr“ bzw. „Druck“, auf Linux-Systemen z.B. mit The Gimp, erhältlich unter http://www.gimp.org.

30. JPEG ist für solche Grafiken unsinnig – der Kompressionsalgorithmus von JPEG ist eher auf Fotos optimiert, der von GIF auf solche Bilder.

<A HREF=“./kontakt.html“>[email protected]</A>

<A HREF=“./kontakt.html“><IMG SRC="mailadresse.gif"></A>

67No Spam!

Page 68: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

HTML-Hinweise

In jedem Fall sollte für dieses Bild – wie für jedes andere Bild auf einer Home-page auch – sowohl die Höhe als auch die Breite (HEIGHT=““, WIDTH=““)angegeben werden, damit der Browser die Seite von Anfang an richtig berech-nen und darstellen kann.

Außerdem sollte ein aussagekräftiger Alternativtext angegeben werden. Die-ser Text wird von Textbrowsern immer und von „normalen“ Browsern so langeangezeigt, bis das Bild geladen wurde. Die meisten grafikfähigen Browser zei-gen ihn auch an, wenn man mit dem Mauszeiger über das Bild fährt31. Aller-dings sollte der Alternativtext nicht die E-Mail-Adresse selbst enthalten –sonst beißt sich die Katze in den Schwanz.

Technische Bewertung

Das Verfahren ist sehr effizient: Würde ein Harvester alle Bilder einer Seite he-runterladen, steigt das zu übertragende Datenvolumen erheblich. Momentanbeschränken sich diese Programme daher auf das Auslesen von HTML-Seiten,die im Allgemeinen deutlich kleiner als Bilder sind.

Außerdem müsste der Harvester dann in der Lage sein, GIF-, PNG- und JPEG-Bilder richtig zu decodieren. Er müsste weiterhin über eine OCR-Software,also ein Programm zur Zeichenerkennung, verfügen, durch die er dann den inBildern enthaltenen Text automatisch extrahieren kann.

Geht man davon aus, dass ein Promille der Bilder im Netz E-Mail-Adressenenthalten, was wahrscheinlich bereits um einige Zehnerpotenzen zu hoch ge-griffen ist, dann müssen 1000 Bilder für eine E-Mail-Adresse analysiert wer-den. Der Rechenzeitaufwand ist gigantisch und nicht sonderlich erfolgverspre-chend: Die Erkennungsfehler der OCR-Software sind immer noch recht hoch.Zudem lässt sich die Erkennungsrate durch geschickte Gestaltung des Bildsweiter verschlechtern.

Außerdem spricht nichts dagegen, das Bild zu zerschneiden und durch mehre-re, kleine Bilder zu ersetzen. Spätestens jetzt ist die OCR-Software am Ende:Keines der Bilder enthält eine vollständige E-Mail-Adresse.

31. Ausführlicher dazu: http://www.teamone.de/selfhtml/ bzw. [MÜN02] und [MÜN02a]

68

Page 69: eBook - No Spam

Bilder und Ähnliches

Rechtliche Bewertung

Fraglich ist natürlich, ob diese Lösung mit §6 Nr. 2 TDG kompatibel ist: Dennnicht jeder bekommt das Bild zu sehen, die E-Mail-Adresse ist somit nicht im-mer angegeben. Andererseits kann man heutzutage davon ausgehen, dass dieSurfer in der Mehrheit über einen grafikfähigen Browser verfügen, wie mandiversen Statistiken (z.B. auf [WIL04d]) entnehmen kann. Das ist auch lo-gisch, denn auf vielen Seiten ist ohne Grafiken gar nichts zu erkennen. Damitwäre es wenig plausibel, dass ein Surfer ohne grafikfähigen Browser das Im-pressum und damit die scheinbar fehlende E-Mail-Adresse entdecken könnte.Somit dürfte sich der Versuch, einen entsprechenden Unterlassungsanspruchgerichtlich durchzusetzen, mit der Begründung, dass der Seitenbetreiber nichtfür technische Besonderheiten und daraus resultierende Probleme eines Ein-zelfalls verantwortlich sein kann, abschmettern lassen – wobei das in derrechtswissenschaftlichen Literatur durchaus umstritten ist ([AND04a]). Dennauch dem Nutzer eines solchen Browsers ist es nicht unmöglich, die über einenAlternativtext gekennzeichnete Grafik herunterzuladen und mit einem geeig-neten Programm zu betrachten.

Zudem kann der Forderung nach unmittelbarer Angabe der E-Mail-Adressedas schützenswerte Interesse des Seitenbetreibers entgegengehalten werden,seine E-Mail-Adresse nicht automatisch in die Listen von Spammern eintragenzu lassen.

Damit dürfte eine Darstellung der E-Mail-Adresse als Grafik meiner Ansichtnach gerade noch im Rahmen des rechtlich Vertretbaren liegen. Anders ist dieLage zu beurteilen, wenn die Seite gezielt barrierefrei gestaltet wurde.

5.3.2 PDF

Statt in eine Grafik lässt sich eine E-Mail-Adresse natürlich auch in eine PDF-Datei schreiben. Auf sie kann man mit einem Link hinweisen; anders als eineGrafik lässt sie sich jedoch nicht in die Webseite einbinden. §6 Nr. 2 TDG for-dert aber nur die Angabe einer E-Mail-Adresse. Über die Form ist nichts aus-gesagt.

Programme zur Darstellung von PDF-Dateien existieren für alle gängigenBetriebssysteme und Plattformen: Mittlerweile gibt es sogar PDF-Reader fürPalmOS und Symbian. PDF-Dateien können somit von fast allen Systemendargestellt werden, bei geeigneter Gestaltung können sie sogar über eine

69No Spam!

Page 70: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Braille-Zeile ausgegeben werden. Insofern dürfte die rechtliche Lage der fürGrafiken mindestens vergleichbar sein.

Von Nachteil ist jedoch, dass sich der Text aus PDF-Dateien problemlos extra-hieren lässt, die entsprechenden Funktionen sind beispielsweise im AcrobatReader zum Markieren und Kopieren von Text enthalten. Auch eine automati-sche Umsetzung ist möglich – so durchsucht Google auch PDF-Dateien undnimmt sie in den Index auf. Diese Extraktion ist dabei unabhängig von einereventuell in der PDF-Datei eingerichteten Sperre für „Cut-and-Paste“.

Da auf vielen Webseiten PDF-Dokumente abgelegt sind und viele dieser Do-kumente die E-Mail-Adresse des Autors enthalten, könnte es sich für Spam-mer durchaus lohnen, PDF-Dateien von einem Harvester automatisiert auszu-werten, auch wenn bisher noch kein Harvester bekannt ist, der das leistet.

Der Umweg über eine OCR-Software ist hier nicht notwendig, denn ein PDF-Dokument enthält eine Beschreibung der Seite. Dabei bleibt, ähnlich wie in ei-ner HTML-Datei, der Originaltext erhalten32.

Insofern wäre eine Lösung mittels einer PDF-Datei schlechter als die Grafik-variante und somit ungeeignet.

5.3.3 Flash

Viele Anwender haben heutzutage auch die Möglichkeit, Flash-Filme zu be-trachten. Diese Filme werden gerne als Intro für Homepages missbraucht undsollen damit wohl demonstrieren, dass der Gestalter der Seite auch mit Flashumgehen kann. Daher werden reine Flash-Seiten von erfahrenen Net-Citizenshäufig nicht sonderlich geschätzt, da dort Flash oft nur Selbstzweck ohne Zu-satznutzen ist.

Allerdings können Flash-Filme auch durchaus sinnvolle Anwendungen reali-sieren. So lassen sich beispielsweise komplexe, technische Zusammenhängeinteraktiv veranschaulichen. Auch kleine Spiele lassen sich in Flash verwirk-lichen und können damit ein nettes Gadget sein.

Flash ist interaktiv, insbesondere können in Flash-Filmen Aktionen aufMausklicks ausgelöst werden. Flash kann auch Links enthalten und damitebenfalls Links auf E-Mail-Adressen. Und Flash lässt sich problemlos inWebseiten integrieren.

32. Siehe dazu: http://partners.adobe.com/asn/tech/pdf/specifications.jsp

70

Page 71: eBook - No Spam

Bilder und Ähnliches

Damit könnte man Links auf E-Mails anklickbar mit mailto-Links in einenFlash-Film packen.

Der Haken an der Sache: Das offizielle Programm von Macromedia, um Flash-dateien zu generieren, ist sehr teuer. Allerdings gibt es mittlerweile im Netzzahlreiche Gratislösungen33, die, eventuell mit eingeschränktem Funktionsvor-rat, das kostenlose Erzeugen von Flash-Dateien ermöglichen.

Auch kann das kostenlose Office-Paket OpenOffice.org (http://www.open-office.org), dessen Funktionsumfang dem kommerzieller Konkurrenten ent-spricht und völlig ausreichend ist, um Dokumente wie dieses Buch zuerstellen, und sein für Forschung und Lehre kostenloser „großer“ Bruder Star-Office (http://www.sun.com) Präsentationen als Flash-Filme exportieren.

Jedoch setzt das Abspielen von Flash-Filmen die Verfügbarkeit des Flash-Players voraus. Den gibt es zwar mittlerweile für eine Vielzahl von Plattfor-men, aber er ist nicht standardmäßig auf allen Systemen verfügbar. Einige An-wender begründen ihre Weigerung, Flash zu installieren, mit daraus resultie-renden Sicherheitsrisiken34.

Damit dürfte – anders als bei Grafiken – der Vortrag eines eventuellen Unter-lassungsklägers aufgrund der Vorschriften des §6 Nr. 2 TDG mehr Substanzhaben und könnte damit auch eher zum Erfolg führen.

Und – zu guter Letzt – auch in Flash-Dateien werden Textinformationen35 imPrinzip als Text gespeichert. Sie lassen sich somit automatisiert extrahieren,auch wenn mir bislang keine Anwendung bekannt ist, die das tut.

Die Flash-Lösung hat also – bis auf die Möglichkeit, einen Link direkt einzu-tragen – keine Vorteile gegenüber einer eingebundenen Grafik, aber erheblicheNachteile. Insofern erscheint sie mir weder aus rechtlicher noch aus techni-scher Sicht empfehlenswert.

33. Beispielsweise auf http://www.openswf.org/, http://drawswf.sourceforge.net/, http://www.swfx.org/generator/index.jsp und dem gruselig gestalteten http://www.sophistronix.com/

34. Siehe dazu: [SCHWE04], von realen Fällen berichtet: [BAC04b]35. Siehe dazu: http://web.archive.org/web/19990210180754/www.macromedia.com/software/

flash/open/spec/

71No Spam!

Page 72: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

5.4 JavaScript

Eine andere Alternative ist es, mit JavaScript die E-Mail-Adresse auf derWebseite auszugeben. JavaScript kann derzeit von Harvestern noch nicht aus-geführt werden. Der Aufwand, einen Harvester entsprechend anzupassen,wäre schlicht zu hoch. Und das, obwohl man sich beispielsweise die Java-Script-Bibliotheken des OpenSource-Browsers Mozilla herunterladen und inseinen Harvester integrieren könnte. Da sich aber auf herkömmlichem Wegnoch ausreichend E-Mail-Adressen sammeln lassen, ist der Aufwand unver-hältnismäßig hoch.

Die meisten Browser können im Gegensatz zu Harvestern mit JavaScriptumgehen. Ausnahmen sind die textbasierten Browser wie Lynx und Links. Invielen Browsern deaktivieren außerdem Anwender aus SicherheitsgründenJavaScript. Gerade die Produkte von Microsoft, die JavaScript mit ActiveXkoppeln, weisen aufgrund von Programmierfehlern insbesondere im ActiveXerhebliche Sicherheitslücken auf. So sind ActiveX-Controls fast schon Stan-dard, um ohne Nutzerinteraktion 0190-Dialer zu installieren.

Leider kann man im Internet Explorer JavaScript nur zusammen mit ActiveXdeaktivieren.

Für JavaScript hege ich wegen der begründeten, eingeschränkten Verfügbar-keit daher grundsätzlich die gleichen Bedenken bezüglich der rechtlichen Im-plikationen wie ich sie oben für die Flash-Lösung (Seite 70) beschrieben habe.Allerdings ist JavaScript aus technischer Sicht sehr effektiv.

5.4.1 Das Grundprinzip

Mit JavaScript lässt sich eine E-Mail-Adresse relativ elegant tarnen. Der ein-fachste Ansatz ist dabei:

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE=“JavaScript“> <!-- mailadresse = '[email protected]'; //--> </SCRIPT> </HEAD>

72

Page 73: eBook - No Spam

JavaScript

Allerdings hat dieser einfache Ansatz gleich zwei Haken: Einmal steht die E-Mail-Adresse in lesbarer Form direkt in der Datei, zum anderen ist es relativumständlich, einen E-Mail-Link anzugeben.

Als Abhilfe für das erste Problem bietet es sich an, das Script aus einer exter-nen Datei nachzuladen. Das hat zudem den Vorteil, dass man für den Fall einerÄnderung der Mailadresse diese nur einmal für die gesamte Webseite ändernmuss.

Damit entsteht eine zweite Datei, die ich im Folgenden email.js nenne. Sie ent-hält die notwenigen JavaScripten. Zunächst besteht sie nur aus einer Zeile:

Die HTML-Datei ändert sich dann zu:

<BODY> .... <SCRIPT LANGUAGE=“JavaScript“> <!-- document.write('<A HREF=“mailto:'+mailadresse+'“>'+ mailadresse+'</A>'); //--> </SCRIPT> .... </BODY></HTML>

mailadresse = '[email protected]';

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY> .... <SCRIPT LANGUAGE=“JavaScript“> <!-- document.write('<A HREF=“mailto:'+mailadresse+'“>'+ mailadresse+'</A>'); //--> </SCRIPT> .... </BODY></HTML>

73No Spam!

Page 74: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Der Unterschied ist klein – aber effektiv: Harvester laden derzeit keine Java-Script-Dateien nach, denn den enthaltenen JavaScript-Code können sie nichtinterpretieren. Damit ist die Mailadresse versteckt.

Doch ist es prinzipiell kein Problem, einen Harvester so zu erweitern, dass erJavaScript-Dateien ebenfalls herunterlädt und nach E-Mail-Adressen durch-sucht. Damit wäre der Vorteil dahin.

Ein anderer Nachteil wiegt jedoch viel schwerer: Es ist nicht definiert, wannder Browser die JavaScript-Datei nachlädt. Damit kann es sein, dass der Brow-ser die JavaScript-Datei noch nicht geladen hat, wenn er zur Funktion docu-ment.write kommt und diese ausführt. Diese verwendet dann aber eine Variab-le, deren Wert noch nicht definiert ist, was zum einen zu einem JavaScript-Fehler führt, zum anderen aber auch dazu, dass keine Mailadresse ausgegebenwird.

Die Lösung mit der externen JavaScript-Datei ist so also noch unbrauchbar.

5.4.2 Eine stabilere Lösung

Es muss eine stabilere Lösung her – günstigerweise sogar so, dass die notwen-digen JavaScript-Befehle kürzer werden. Und so, dass das Ganze auch mit ei-ner externen JavaScript-Datei funktioniert – der Vorteil der einfacheren War-tung soll erhalten bleiben.

Dazu bietet es sich an, die Datei email.js wie folgt abzuändern:

Damit ändert sich auch die zugehörige HTML-Datei:

mailadresse='[email protected]';function mailMe() { document.location.href="mailto:"+mailadresse; }

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY> .... <A HREF="javascript:mailMe();">E-Mail senden</A>

74

Page 75: eBook - No Spam

JavaScript

Allerdings wird hier keine E-Mail-Adresse ausgegeben, sondern nur einE-Mail-Link angelegt. Möchte man die E-Mail-Adresse ausgeben, bleibt ent-weder das „document.write()“-Problem bestehen oder man müsste die Funk-tion mailMe() in jede HTML-Datei einfügen. Dann könnte man wiederum pro-blemlos mit document.write() arbeiten:

Ich favorisiere die Verwendung einer externen JavaScript-Datei – dadurchwird der Pflegeaufwand für die Gesamtseite kleiner – allerdings um den Preis,die E-Mail-Adresse nicht direkt mittels eines JavaScripts ausgeben zu können.

Möchte man nicht auf die HTML-Verfahren zurückgreifen, kann man die Aus-gabe in etwas anderer Form auch in JavaScript lösen. Dazu erweitert man dieDatei email.js um eine weitere Funktion:

.... </BODY></HTML>

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- mailadresse='[email protected]'; function mailMe() { document.location.href="mailto:"+mailadresse; } //--> </SCRIPT> </HEAD> <BODY> .... <A HREF="javascript:mailMe();"><SCRIPT LANGUAGE="JavaScript"> <!-- document.write(mailadresse); //--> </SCRIPT></A> .... </BODY></HTML>

75No Spam!

Page 76: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Dazu passt dann beispielsweise die folgende HTML-Datei:

Die E-Mail-Adresse wird jetzt in einem kleinen JavaScript-Popup angezeigt.Für welche Variante Sie sich letztlich entscheiden, bleibt Ihnen überlassen. Siekennen jetzt einige Beispielmethoden, die Grundlage für Ihre eigenen Weiter-entwicklungen sein können.

Ich gehe im Folgenden davon aus, dass eine Möglichkeit zur Verfügung steht,die E-Mail-Adresse auszugeben, und werde weiterhin mit einer Datei email.jsund einer HTML-Seite arbeiten, in der nur ein Link auf die E-Mail-Adresseexistiert.

5.4.3 Theoretische Informatik ausnutzen

Noch ist die bisherige Lösung nicht optimal: In der JavaScript-Datei steht im-mer noch eine E-Mail-Adresse im Klartext. Damit ist sie leicht von jedem Har-vester, der sich die Mühe macht, JavaScript-Dateien herunterzuladen, auf-zufinden. Der Harvester muss dazu noch nicht einmal JavaScript können – es

mailadresse='[email protected]';function mailMe() { document.location.href="mailto:"+mailadresse; }function showMail() { alert('Die E-Mail-Adresse lautet'+mailadresse+'.'); }

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY> .... <A HREF="javascript:mailMe();">E-Mail senden</A><BR /> <A HREF="javascript:showMail();">E-Mail-Adresse anzeigen</A> .... </BODY></HTML>

76

Page 77: eBook - No Spam

JavaScript

reicht aus, wenn er mit einer regular expression nach etwas sucht, das aussiehtwie eine Mailadresse.

Also wäre eine Lösung sinnvoll, die die Mail-Adresse nicht im Klartext ent-hält. Viele denken dabei sofort an Verschlüsselung – mit etwas Wissen aus dertheoretischen Informatik geht es aber auch einfacher: Denn grob zusammen-gefasst sagt der Satz von Rice, dass es kein Programm gibt, das erkennen kann,was ein anderes Programm macht. Eine Tatsache, die Sie leicht an IhremVirenscanner nachprüfen können: Der lädt regelmäßig Signatur-Updates her-unter, um auch neue Viren zu erkennen. Könnte er bestehende Programme aufihre Funktion untersuchen, würde er auch unbekannte Viren erkennen.

Also reicht es aus, zur Tarnung der Adresse den Harvester zu zwingen, Java-Script auszuführen. Am einfachsten geht das mit folgender email.js:

Dort wird die Mailadresse nach und nach aus ihren verschiedenen Teilen zu-sammengebaut. Das ist für uns Menschen leicht lesbar – ein Harvester müsste,um die Adresse zu finden, jedoch JavaScript beherrschen.

5.4.4 Mit Verschlüsselung

Um auch für Menschen die unmittelbare Lesbarkeit zu erschweren – ohne je-doch den Schutz vor Harvestern zu erhöhen –, lässt sich die E-Mail-Adresseauch mit JavaScript-Mitteln verschlüsseln.

Welches Verfahren dabei zum Einsatz kommt, ist de facto unerheblich: In derJavaScript-Datei stehen der komplette Dechiffrieralgorithmus und der notwen-dige Schlüssel. Damit kann jeder, der JavaScript ausführen kann, auch die ver-schlüsselte E-Mail-Adresse auslesen.

localpart='user';domain='example';toplevel='com';mailadresse=localpart;mailadresse+='@';mailadresse+=domain+'.'+toplevel;function mailMe() { document.location.href="mailto:"+mailadresse; }

77No Spam!

Page 78: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Das ist auch in Ordnung so, denn das Ziel ist, dass jeder Browser später die E-Mail-Adresse anzeigen kann. Es soll nur verhindert werden, dass Harvester dieAdresse auslesen können. Und das wird aufgrund der Annahme, dass Harves-ter kein JavaScript ausführen, erreicht.

Daher kann ein einfacher Verschlüsselungsalgorithmus angewandt werden,beispielsweise Cäsars Schiebealgorithmus36. Der wird in verschiedenen Aus-prägungen empfohlen – manche sagen, dass eine Verschiebung um ein Zei-chen genüge, da das im Notfall auch ohne JavaScript leicht im Kopf nachge-rechnet werden könne. Andere schlagen vor, das verbreitete ROT13-Verfahrenzu verwenden. Dabei wird das Alphabet um dreizehn Zeichen verschoben.

Abbildung 5.3 zeigt ein Schiebealphabet mit dem Schlüssel 3, also einer Ver-schiebung um drei Zeichen.

Eine weitere Möglichkeit, die nichts anderes leistet als das Schiebealphabet,sieht das Anwenden einer XOR-Verknüpfung auf jedes Zeichen vor. XOR istein logischer Operator37, der auf jedes Bit des ASCII-Werts des Zeichens an-gewandt wird und im Gegensatz zu den anderen booleschen Operatoren denVorzug hat, wieder eindeutig umkehrbar zu sein.

Im Ergebnis sind alle diese Verfahren äquivalent. Ich wähle für das Beispielhier wegen der einfachen Implementation XOR. Das Symbol für XOR in Java-Script ist der Circonflexe: ^.

Damit sieht die neue email.js mit dem Schlüsselwert 183 wie folgt aus:

36. Dazu einführend z.B. [EGG04e], detaillierter [BAU93], [BAU00], [BEU02], [BEU02a], [SIN04] oder auch [SCHWE02]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

X Y Z A B C D E F G H I J K L M N O P Q R S T U V W

Abb. 5.3: Beispiel für ein einfaches Schiebealphabet

37. Siehe dazu z.B. [EGG05], dort den Exkurs zur booleschen Algebra

local = new Array (194,196,210,197);local_part = '';domain = new Array (210,207,214,218,199,219,210,153,212,216,218);domain_part = '';

78

Page 79: eBook - No Spam

JavaScript

Die HTML-Datei selbst ändert sich nicht:

Die JavaScript-Datei definiert zwei Arrays: local und domain. local enthältalle Zeichen vor dem @-Symbol, in diesem Fall user, in verschlüsselter Form.domain umfasst alle Zeichen nach dem @-Symbol, in diesem Fall wieder ex-ample.com.

Die beiden for-Schleifen führen die Entschlüsselung der beiden Teile der Mail-adresse durch und schreiben die Ergebnisse in local_part bzw. domain_part.Anschließend werden local_part, das @-Symbol, das den ASCII-Code 64 hat,und domain_part zu einer E-Mail-Adresse zusammengefügt.

Die for-Schleifen sind in einer verkürzten Form geschrieben. Ausgeschriebensieht die Schleife für den Local-Part wie folgt aus, was auf den ersten Blickvielleicht leichter lesbar ist:

for (i=0; i<local.length; local_part += String.fromCharCode(local[i] ^ 183), i++) ;for (i=0; i<domain.length; domain_part += String.fromCharCode(domain[i] ^ 183), i++) ;mailadresse = local_part + String.fromCharCode(64) + domain_part;function mailMe() { document.location.href="mailto:"+mailadresse; }

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY> .... <A HREF="javascript:mailMe();">E-Mail senden</A> .... </BODY></HTML>

for (i=0; i<local.length; i++) { local_part += String.fromCharCode(local[i] ^ 183); }

79No Spam!

Page 80: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Damit bleibt ein letztes Problem bestehen: das Verschlüsseln. Denn schließlichmüssen die Zahlenwerte in die beiden Arrays eingefügt werden. Um Ihnen diedafür nötige Arbeit so leicht wie möglich zu machen, habe ich eine kleineHTML-Datei vorbereitet, die die notwendigen Funktionen zur Verschlüsse-lung bereitstellt:

<HTML> <HEAD> <!-- **************************************************************** XOR-Verschlüsselung in HTML und JavaScript Autor: Tobias Eggendorfer (c) 2004, 2005 **************************************************************** --> <TITLE>XOR-Verschl&uuml;sselung</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-- function validate_key() { /* Ueberprueft den Schluessel auf Plausibilitaet. */ schluessel = false; if ( (document.krypt.schluessel) && (isNaN(document.krypt.schluessel.value) == false) && (document.krypt.schluessel.value > 0) && (document.krypt.schluessel.value < 256) ) { schluessel = document.krypt.schluessel.value; } else { alert('Bitte geben Sie einen gueltigen '+ 'Schluessel ein.'); } return schluessel; }

80

Page 81: eBook - No Spam

JavaScript

function validate_msg() { /* Ueberprueft die Nachricht auf Gueltigkeit. */ nachricht = false; if ( (document.krypt.nachricht) && (document.krypt.nachricht.value != '') ) { nachricht = document.krypt.nachricht.value; } else { alert('Bitte geben Sie den zu '+ 'verschluesselnden Text ein.'); } return nachricht; } function encrypt(schluessel,nachricht) { numbers=''; for (i=0; i<nachricht.length; numbers+=(nachricht.charCodeAt(i) ^ schluessel)+", ", i++); return numbers; } function ausgabe(numbers) { if (document.krypt.ausgabe) { document.krypt.ausgabe.value = numbers; } else { alert('Ausgabefehler aufgetreten.'); } }

81No Spam!

Page 82: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Im Beispiel ist der JavaScript-Code in der Seite bewusst defensiv program-miert und er prüft alle erhaltenen Eingaben kritisch ab.

[TUCEK] implementiert eine ähnliche Lösung, verwendet jedoch einen wesent-lich aufwändigeren Verschlüsselungsalgorithmus: Kann der Harvester Java-Script ausführen, ist die Güte des Verschlüsselungsalgorithmus irrelevant, dasowohl Algorithmus als auch Schlüssel unmittelbar in JavaScript codiert sind.

function do_it() { if ( (schluessel = validate_key()) && (nachricht = validate_msg()) ) { numbers = encrypt(schluessel,nachricht); ausgabe(numbers); } return false; // Unterdruecke Form-Action } //--> </SCRIPT> </HEAD> <BODY> <H1>Verschl&uuml;sseln mit XOR</H1> <FORM METHOD="GET" ACTION="./xor_encrypt.html" NAME="krypt" > <P>Der Schluessel (Ganzzahl zwischen 1 und 255) <INPUT TYPE="text" NAME="schluessel" /> </P> <P>Der zu verschluesselnde Text: <INPUT TYPE="text" NAME="nachricht" /> </P> <P><INPUT TYPE="BUTTON" VALUE="Verschl&uuml;sseln" onClick='do_it(); return false;'/> <INPUT TYPE="Reset" VALUE="R&uuml;cksetzen" /> </P> <P>Das Chiffrat: <TEXTAREA NAME="ausgabe"></TEXTAREA> </P> </FORM> </BODY></HTML>

82

Page 83: eBook - No Spam

JavaScript

5.4.5 Harvester mit JavaScript

Wollte man auch JavaScript-fähige Harvester blockieren, müsste man denNutzer auffordern, den auf der Seite angegebenen Schlüssel in eine Dialogboxeinzugeben. Das würde eine einfache Mensch-Maschine-Erkennung imple-mentieren und damit den Harvester nachhaltig ausbremsen. Denn jetzt reichtes für den Harvester nicht mehr aus, „nur“ JavaScript zu lernen, er muss auchkorrekte Eingaben in eine Benutzerschnittstelle vornehmen können. Das wäredann doch etwas zu viel der künstlichen Intelligenz.

Die email.js für eine solche Lösung sieht wie folgt aus:

local = new Array (194,196,210,197);domain = new Array (210,207,214,218,199,219,210,153,212,216,218);function decode_mailadresse() { domain_part = ''; local_part = ''; schluessel = prompt('Bitte geben Sie die Zahl 183 ein, um die '+ 'Mail-Adresse zu erhalten.',''); if ( (isNaN(schluessel) == false) && (schluessel == 183) ) { for (i=0; i<local.length; local_part += String.fromCharCode(local[i] ^ schluessel), i++);

for (i=0; i<domain.length; domain_part += String.fromCharCode(domain[i] ^ schluessel), i++);

mailadresse = local_part + String.fromCharCode(64) + domain_part; } else { mailadresse = 'Ihre Eingabe war falsch. Bitte nochmal probieren.'; } return mailadresse; }

83No Spam!

Page 84: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Auch die HTML-Datei muss minimal geändert werden:

Jetzt wird der Besucher beim Aufruf der Seite aufgefordert, die Zahl 183 ein-zugeben, die dann unmittelbar als Schlüssel verwendet wird. Alternativ könnteman die Entschlüsselungsfunktion auch aus der Funktion mailMe() aufrufen.

5.4.6 JavaScript-freie Browser

[BELL03] hat einen interessanten Lösungsvorschlag, die JavaScript-Lösungzu Browsern kompatibel zu gestalten, die kein JavaScript unterstützen. DieIdee basiert darauf, einen Link auf die Kontaktseite bei verfügbarem Java-Script durch einen Link auf die E-Mail-Adresse zu ersetzen. Dadurch erhaltenNutzer, die ohne JavaScript surfen, die Kontaktseite angeboten. Bei Nutzern,die über JavaScript verfügen, wird ein mailto-Link ausgeführt.

Dazu muss die weiter oben beschriebene email.js wiederum nur minimal ge-ändert werden – ich verzichte hier wieder auf die Mensch-Maschine-Erken-nung, da ich sie für zu aufwendig halte.

function mailMe() { document.location.href="mailto:"+mailadresse; return false; }

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY onLoad='mailadresse=decode_mailadresse();'> .... <A HREF="javascript:mailMe();">E-Mail senden</A> .... </BODY></HTML>

local = new Array (194,196,210,197);local_part = '';domain = new Array (210,207,214,218,199,219,210,153,212,216,218);domain_part = '';

84

Page 85: eBook - No Spam

JavaScript

Die HTML-Seite ändert sich dann zu:

Dadurch, dass die Funktion mailMe() den Wert false zurückgibt, wird der Linkzum Kontaktformular von einem JavaScript-fähigen Browser nicht aufgeru-fen, sondern nur der mailto-Link ausgeführt. Möchte man dieses Verhalten än-dern, muss man lediglich den Rückgabewert von mailMe() auf true setzen.

Ein Browser ohne JavaScript ignoriert das JavaScript und linkt direkt zumKontaktformular.

Irreführend für den Nutzer könnte es noch sein, dass in der Statuszeile desJavaScript-fähigen Browsers der Link auf das Kontaktformular ausgegebenwird. Das lässt sich jedoch durch folgende Änderung des Links in der HTML-Datei beheben:

<A HREF="kontakt.html" onClick="return mailMe();" onMouseOver="self.status=mailadresse; return true;" onMouseOut="self.status=''; return true;">E-Mail senden</A>

Dieser Lösungsansatz dürfte sich auch günstig auf die oben dargestellte recht-liche Problematik bei der Verwendung von JavaScript auswirken. Dort stützte

for (i=0; i<local.length; local_part += String.fromCharCode(local[i] ^ 183), i++) ;for (i=0; i<domain.length; domain_part += String.fromCharCode(domain[i] ^ 183), i++) ;mailadresse = local_part + String.fromCharCode(64) + domain_part;function mailMe() { document.location.href="mailto:"+mailadresse; return false; }

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> <SCRIPT LANGUAGE="JavaScript" src="./email.js"> </SCRIPT> </HEAD> <BODY> .... <A HREF="kontakt.html" onClick="return mailMe();">E-Mail senden</A> .... </BODY></HTML>

85No Spam!

Page 86: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

sich die Argumentation im Wesentlichen darauf, dass viele Nutzer JavaScriptaus Sicherheitsgründen deaktivieren.

Diese Lösung bemüht sich aber auch um Surfer ohne JavaScript: Diesen wirdein Kontaktformular angeboten. Nutzern, die über JavaScript verfügen, wirddie E-Mail-Adresse unmittelbar ausgegeben. Durch die so gewährleistete hoheKompatibilität dürfte es schwer fallen, einen Unterlassungsanspruch wegender Verwendung eines unvollständigen Impressums durchzusetzen.

5.5 Weitere Verfahren

[GUN04] berichtet, dass Harvester in zunehmenden Maße auf Suchmaschinenzurückgreifen, um Webseiten mit E-Mail-Adressen zu finden, und gar nichtmehr die Links auf Webseiten verfolgen.

Dieses Verhalten konnte ich aber nicht bestätigen: Die von mir getesteten Har-vester verfolgten durchaus Links auf Webseiten. Auch die Zugriffe auf meineTeergrube, die ich in Kapitel 8 beschreibe, dokumentieren, dass Links gefolgtwird. Dieses Verhalten wird auch in den einschlägigen Diskussionsforen viel-fältig beschrieben.

Harvester nutzen zwar teilweise Suchmaschinen, um die Seiten „zielgruppen-gerecht“ ausfindig zu machen, die sie anschließend nach Mailadressen abgra-sen. Allerdings scheint es mir ineffizient, nur nach Mail-Links zu suchen.

Würde jedoch tatsächlich nur nach mailto-Links gesucht, dann ließen sichmailto-Links mit einem einfachen Redirect verstecken, wie es [WILLI02] vor-schlägt. Dazu muss serverseitig ein einfaches Script laufen, das aus einemübergebenen Parameter den passenden Redirect konstruiert.

Die einfachste Lösung dazu stellt [WILLI02] selbst vor – ohne jedoch eventu-elle Sicherheitsprobleme zu berücksichtigen. Nach seinem Vorschlag reichtdie folgende Seite aus:

<HTML> <HEAD> <TITLE>Beispielseite</TITLE> </HEAD> <BODY> .... <A HREF="mail.php?user=user">E-Mail senden</A> ....

86

Page 87: eBook - No Spam

Test auf echten Webseiten

Das aufgerufene PHP-Script mail.php soll die folgende Form haben:

Führt man eine kritischere Prüfung des Eingabenparameters über regular ex-pressions durch, überprüft man, ob der HTTP-Parameter Host tatsächlich ge-setzt ist, der erst ab HTTP/1.1 existiert, und erweitert man dieses Script mög-lichst so, wie den Formmailer im Kapitel „Programmbeispiel Formmailer“,der nur numerische Parameter akzeptiert, dann könnte dieser Ansatz funktio-nieren. Allerdings nur unter der falschen Annahme, dass Harvester keinenLinks folgen – ansonsten liefert man die Mailadresse auf dem Präsentierteller.Daher erscheinen mir die anderen in diesem Kapitel vorgeschlagenen Verfah-ren effizienter.

5.6 Test auf echten Webseiten

Um die Leistungsfähigkeit der beschriebenen Verfahren zu prüfen, führte icheinen Test durch. Dazu habe ich eine neue Webseite eingerichtet, die verschie-dene E-Mail-Adressen mit einigen der hier beschriebenen Verfahren tarnt.

Die dafür verwendeten Domains wurden meinen Recherchen zufolge vorhervon keinem anderen verwendet. Insofern ist davon auszugehen, dass unter die-ser Domain bis zum Start der Tests noch keine E-Mail-Adressen existierten, sodass die Ergebnisse durch solche Effekte nicht verfälscht sind.

Auf einfachen Webseiten, habe ich entsprechend der obigen Vorschlägecodierte E-Mail-Adressen versteckt. Dabei waren die entsprechenden Berei-che mittels geeigneter CSS für normale Besucher unsichtbar, um zu ver-hindern, dass ein Mensch „versehentlich“ die Adressen liest und sie bei News-lettern anmeldet.

Durch ebenso unsichtbare Verlinkung der Testseiten von vielen tausend Web-seiten weltweit habe ich sichergestellt, dass möglichst viele Harvester die Sei-ten besuchten. Das hat auch sehr gut geklappt. Durch die unsichtbaren Linkswar gewährleistet, dass hauptsächlich automatische Suchprogramme auf dieSeite gelangten und nur wenig Menschen.

</BODY></HTML>

<? header("Location: " . ($user? "mailto:[email protected]" : "http://$HTTP_HOST/"));?>

87No Spam!

Page 88: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Um die Mailmenge zu dokumentieren, konfigurierte ich einen Mailserver soum, dass er die eingehenden E-Mails sortiert nach der verwendeten E-Mail-Adresse in eine Datenbank einträgt. Für jede Tarnmethode habe ich natürlicheine gesonderte Mailadresse verwendet.

Der Test zeigte, dass im Klartext genannte E-Mail-Adressen bevorzugt be-spammt werden. Das geschah unabhängig vom Kontext der Seite: Auch eine ineinem JavaScript-Bereich genannte Klartextadresse wurde bespammt.

Daraus lassen sich zwei Erkenntnisse über das Verhalten von Harvestern ablei-ten:

1. Ob eine E-Mail-Adresse mit mailto: verlinkt ist oder im Klartext unmittel-bar angegeben wird, ist unerheblich. Harvester scheinen nach Zeichenket-ten vom Muster „[email protected]“ zu suchen.

2. Harvester ignorieren den Kontext der Seite.

Als Konsequenz folgt, dass E-Mail-Adressen also keinesfalls unmittelbar ge-nannt werden dürfen.

Interessant ist, dass auch an die per Entities getarnte Adresse Nachrichten ge-schickt wurden. Offensichtlich machen sich Harvester bereits die Mühe,HTML-Entities aufzulösen.

Die Ergebnisse stimmen mit den Ergebnissen aus [CDT03] überein. Spammersammeln offensichtlich die Adressen ihrer Opfer mittels Harvestern von Web-seiten ab.

Die im Vergleich zu [CDT03] zusätzlich getesteten Verschlüsselungs- undTarnverfahren erwiesen sich als effizient – gleichzeitig hat sich aber auch ge-zeigt, dass einfache Verfahren, die nur auf einer Zeichenersetzung beruhen,wie die Tarnung via HTML-Entities, bereits jetzt unsicher sind. Es ist davonauszugehen, dass in Zukunft bald alle Harvester damit umgehen können, wenndiese Verfahren zunehmende Verbreitung finden. Das dürfte auch für URL-en-coding gelten.

Das eigentlich einfache Verfahren, eine Mailadresse mit Leerzeichen aufzu-blähen, hat sich als zuverlässiger Schutz erwiesen. Es dürfte sich auch tech-nisch schwierig gestalten, es automatisch zu erkennen und zu entschlüsseln.

88

Page 89: eBook - No Spam

Test mit echten Harvestern

5.7 Test mit echten Harvestern

Um die Testergebnisse von oben zu bestätigen, habe ich auf einem Testrechnervoll funktionsfähige Demoversionen von vier kommerziell erhältlichen Har-vestern installiert.

Abb. 5.4: Screenshot von Harvester 1

Abb. 5.5: Ergebnis von Harvester 2

89No Spam!

Page 90: eBook - No Spam

5 – E-Mail-Adressen von Webseiten verbannen

Zwei der drei Programme (siehe Abbildung 5.4 und Abbildung 5.5) fanden nurdie im Klartext angegebenen E-Mail-Adressen. Dabei wurde scheinbar nurnach dem Muster einer E-Mail-Adresse gesucht, nicht nach dem Link-Beginnmailto:.

Die beiden anderen scheinen ausschließlich nach „mailto:“ gesucht zu haben:Sie fanden nur derart verlinkte E-Mail-Adressen (Abbildung 5.6). So wurdenauch die verlinkten, getarnten Adressen entdeckt. Jedoch verfügten beide Pro-gramme über keine Funktion, um die Entities bzw. die URL-Verschlüsselungin den Klartext zurückzuführen.

Damit sind zwei der drei von diesen beiden Programmen gefundenen mutmaß-lichen Mailadressen nicht als Zieladressen für Spam brauchbar, da die notwen-dige Entschlüsselung in RFC-konforme Mailadressen nicht durchgeführt wur-de, wie man in Abbildung 5.6 sieht. Allerdings ist der Entschlüsselungsschritt,wie ich in Kapitel 5.4.4 gezeigt habe, trivial.

Das überrascht, denn eines der Programme wird damit beworben, dass es aufden Internet Explorer aufsetzen würde und auch mit aufwendig und geschicktgetarnten Seiten keine Probleme habe.

Abb. 5.6: Ergebnis von Harvester 3

90

Page 91: eBook - No Spam

Test mit echten Harvestern

Im Ergebnis bestätigt sich dadurch der Test mit den Webseiten: Aufwendigergetarnte Adressen werden nicht gefunden. Auch wurde die externe JavaScript-Datei von keinem Programm nachgeladen.

Beide Tests bestätigen somit, dass die vorgestellten Verfahren zur Tarnung vonE-Mail-Adressen effizient sind und dass es unter dem Gesichtspunkt derSpamprävention sinnvoll ist, keine mailto-Links zu verwenden.

91No Spam!

Page 92: eBook - No Spam
Page 93: eBook - No Spam

6 Automatisch tarnen

[WHA01] schlägt für dynamisch generierte Webseiten vor, die Ausgabe derE-Mail-Adresse abhängig vom Besucher unterschiedlich zu gestalten: Besuchtein Harvester die Seite, soll keine Mailadresse ausgegeben werden, bei Men-schen jedoch schon. Die Unterscheidung soll dabei anhand des gesendetenUser-Agent, einer Identifikation des Browsers, erfolgen.

[WHA01] stellt dazu fertige Java-Server-Pages zur Verfügung, die das grobeFunktionsprinzip vorstellen sollen. Allerdings sind – wie er selbst in einerE-Mail-Diskussion sagte – bei seiner Lösung noch einige Verbesserungendenkbar, insbesondere wird bei Harvester-Verdacht stets ein Serverfehler„HTTP 500“ zurückgemeldet, der auf eine Misskonfiguration des Webservershinweist. Dadurch wird zwar keine E-Mail-Adresse ausgegeben, aber ein legi-timer Besucher der Seite erhält auch keine Informationen, sondern bekommtden Eindruck, dass der Betreiber des Servers einen Fehler gemacht hat.

Zudem ist die Unterscheidung von Mensch und Harvester wie in dem von ihmvorgelegten Vorschlag nur über den gesendeten User-Agent sehr fehlerträch-tig: Schon der von mir oben beschriebene Minimal-Harvester auf wget-Basis(Kapitel 3.2.1) meldet sich mit einem User-Agent, der keinen Verdacht erwe-cken soll. Das ist ein Vorgehen, von dem anzunehmen ist, dass es dem Stan-dard bei Harvestern entspricht. Das bestätigen auch meine Experimente mit re-alen Harvestern und der Teergrube. Bis auf wenige Ausnahmen senden sieunauffällige User-Agents.

Eine etwas elaboriertere Lösung, die jedoch auch nur anhand des User-Agenteine Mensch-Maschine-Unterscheidung vornimmt, stellt [GUN04] vor. Erblockiert die IP-Adresse des Harvesters automatisiert über eine stateless-Fire-wall auf Basis von ipchains38. Die Firewall wird dabei dynamisch über ein inPerl geschriebenes Apache-Modul aktualisiert.

Doch [GUN04] berichtet selbst, dass seine Sperrentscheidung ausschließlichanhand des User-Agent bereits durch einen geeignet modifizierten Harvesterumgangen wurde.

38. Eine Einführung in die Verwendung von ipchains liefert z.B. [ZIE99]

93No Spam!

Page 94: eBook - No Spam

6 – Automatisch tarnen

Dennoch hat die Idee ihren Reiz: Könnte man sicher Harvester von regulärenBenutzern unterscheiden, wäre es problemlos möglich, wieder seine E-Mail-Adresse auf der Webseite zu veröffentlichen, ohne Gefahr zu laufen, Opfer vonSpam zu werden. Doch gerade an der sicheren Erkennung scheitert das Verfah-ren. Der User-Agent beispielsweise ist nur bedingt geeignet: Er kann beliebigmanipuliert werden.

Möchte man weitere Verdachtsmomente nutzen, wie die Surfgeschwindigkeitoder den Abruf von Bilddateien, stößt man schnell an die Grenzen des verbin-dungslosen HTTP. Das Protokoll bietet keine Möglichkeit zur Identifizierungzusammenhängender Zugriffe. Da Harvester zur Tarnung teilweise erheblicheZeitspannen zwischen zwei Zugriffen abwarten, müsste man zudem giganti-sche Datenmengen durchsuchen.

Betrachtet man den Aufwand der Lösung, die sinnvoll mit gewichteten Krite-rien arbeitet, ist man kurz davor, einen eigenen, maßgeschneiderten Webserverentwickeln zu müssen, um eine halbwegs zuverlässige Lösung zu konstruieren– oder man modifiziert z.B. den Apache-Webserver39. Den Aufwand wirdwohl kaum jemand ernsthaft betreiben wollen, zumal dann auch Sicherheits-,Stabilitäts- und Kompatibilitätsfragen zu lösen sind.

Auch ist es häufig nicht möglich, auf einem angemieteten Webserver die Ser-versoftware auszutauschen oder nach eigenem Bedarf zu erweitern. Somitwäre eine solche Lösung nur für einen sehr kleinen Nutzerkreis tauglich.

6.1 Apache-Modul

Daher erscheint es einfacher, Webseiten standardmäßig mit getarnten Mail-adressen auszuliefern. Dabei sollten alle Seiten, die vom Webserver aus-geliefert werden, automatisch so verändert werden, dass die angezeigtenE-Mail-Adressen getarnt sind. Das sollte natürlich ohne Änderung der beste-henden Seiten möglich sein und auch mit dynamisch generierten Seiten funk-tionieren.

39. Ein verbreiteter, modular erweiterbarer OpenSource-Webserver. Zu finden unter http://httpd.apache.org

94

Page 95: eBook - No Spam

Apache-Modul

Mit einem Apache-Modul40 lässt sich das realisieren: Apache bietet zusammenmit mod_perl41 die Möglichkeit, Ausgabefilter42 zu schreiben. Diese Filter set-zen im Ausgabestrom an und sehen alle Daten, bevor sie endgültig zum Clientgesendet werden. Dadurch können auch dynamisch generierte Seiten automa-tisch modifiziert werden. Außerdem müssen die bestehenden HTML-Seitennicht verändert werden.

Da es sich dabei um einen Ausgabefilter handelt, funktioniert der Ansatz un-abhängig vom Dateityp und damit auch mit dynamisch erzeugtem Inhalt. DerFilter bearbeitet aber nur Ausgabedaten vom Typ „text/plain“ und „text/html“.

Ein solcher Filter kann nun mit regular expressions Mailadressen finden undsie dann mit einem der oben beschriebenen Verfahren tarnen.

6.1.1 Installation

Das weiter unten vollständig dargestellte Script sollte auf einem Linux-Systemin eines der Include-Verzeichnisse von Perl installiert werden, z.B. nach /usr/lib/perl5/site_perl/MyApache. Der Dateiname muss ObMail.pm lauten. Wiebei Perl-Modulen üblich, müssen Verzeichnisname und Dateiname dem Mo-dulnamen entsprechen.

Um den Filter zu aktivieren, müssen in die Konfigurationsdatei des Apache diefolgenden Zeilen aufgenommen werden:

Nach einem Neustart des Apache wird jede Ausgabe, bevor sie zum Client ge-sandt wird, durch diesen Filter geschickt. Der Webserver zerlegt dabei dieAusgabe in speichergerechte Happen, sucht nach Zeichenketten, die eineE-Mail-Adresse sein könnten, und ersetzt sie durch ihre getarnte Version.

40. Allgemein dazu: [STEI99]41. Siehe dazu: [FÖR05]42. Siehe auch: http://www.perl.com/lpt/a/2003/04/17/filters.html

SetHandler modperlPerlModule MyApache::ObMail

<Directory /var/www/html> PerlOutputFilterHandler MyApache::ObMail</Directory>

95No Spam!

Page 96: eBook - No Spam

6 – Automatisch tarnen

6.1.2 Programmierzauber

Da der Eingabepuffer wahrscheinlich kleiner als der zu bearbeitende Daten-strom ist, wird die Ausgabe in mehrere Teilen zerlegt bearbeitet. Diese Zerle-gung übernimmt der Webserver unabhängig vom Inhalt. Dadurch kann es auchpassieren, dass eine Mailadresse getrennt wird.

Um Mailadressen korrekt zu erkennen, zerlegt daher der Ausgabefilter die Puf-ferdaten anhand von Whitespaces: Eine E-Mail-Adresse enthält keine White-spaces. Alle Zeichen nach dem letzten Whitespace werden abgetrennt und demnächsten Datenhappen vorangestellt. Das geschieht über die Variable $left-over.

Dieser Überhang wird dem nächsten Puffer vorangestellt. Damit könnenE-Mail-Adressen auch über Puffergrenzen hinweg gefunden werden.

Ein kleines Beispiel erläutert das. Sei „Die Adresse lautet user@“ der erstePuffer und „example.com. Weitere Informat“ der Inhalt des Puffers im zweitenDurchlauf. Dann wird in der ersten Runde „Die Adresse lautet“ aus dem Pufferextrahiert und „user@“ nach $leftover verschoben. Für die zweite Runde wirdder Puffer „example.com. Weitere Informat“ vorne durch $leftover ergänzt, sodass jetzt „[email protected] Weitere Informat“ im Puffer steht. Nun kannder Filter eine E-Mail-Adresse eindeutig erkennen.

Für einen Angreifer könnte aber gerade dieser Zwischenspeicher eine geeig-nete Angriffsfläche bieten: Schafft er es, einen Datenstrom einzuschleusen,der keine Whitespaces enthält, wächst $leftover und damit auch der Puffer mitder Zeit über alle Grenzen. Es entsteht ein so genannter Pufferüberlauf, der ausSicherheitssicht zu erheblichen Gefahren führen kann.

Um das zu verhindern, darf der Puffer maximal doppelt so groß werden wie dieeingestellte Pufferobergrenze. Wird er zu groß, wird der Pufferinhalt unverän-dert ausgegeben. Dadurch könnten zwar Adressen versehentlich nicht getarntwerden, aber dafür ist das System vor solchen Angriffen geschützt.

6.1.3 Tarnfunktion

Die gesamte Tarnung der Adresse findet in der Funktion obfuscate statt. Da-durch können Sie das Script jederzeit einfach anpassen und andere Ersetzungs-muster integrieren oder das verwendete Muster weiter verfeinern.

96

Page 97: eBook - No Spam

Apache-Modul

Die E-Mail-Adressen werden dabei von der regular expression in der While-Schleife einzeln gefunden und stehen unmittelbar hinter dem Schleifenkopf inder Variablen $1.

Im Beispiel wird die Adresse mit Leerzeichen aufgebläht, das Verfahren hatsich wie oben dargestellt als besonders effektiv erwiesen.

6.1.4 Das Script selbst

Das folgende Script wurde mit Apache 2.0 und mod_perl 1.99 unter FedoraCore 2 und Core 3 erfolgreich getestet. Es sollte allerdings auch mit anderenVersionen zusammenarbeiten können. Vor einem Einsatz in einer Produk-tivumgebung empfiehlt sich in jedem Fall ein gründlicher Test.

Zusätzliche Hinweise in Ergänzung zu den obigen Erläuterungen finden sichin eingestreuten Kommentaren.

# Perl-Filter für Apache 2.0## Zur automatischen Tarnung von E-Mail-Adressen.## (c) 2004, 2005 Tobias Eggendorferpackage MyApache::ObMail;use strict;use warnings;use Apache::Filter ();use Apache::RequestRec ();use APR::Table ();use Apache::Const -compile => qw(OK DECLINED);use constant BUFF_LEN => 10240; # Die Groesse des Eingabepuffers ist die hauptsaechliche # Determinante der Performance des Scripts. Sie sollte durch # Tests z.B. mit ApacheBench individuell optimiert werden. # Ein zu kleiner Puffer bremst unnoetig, ein zu großer # erfordert swap-Speicher und bremst dadurch.sub obfuscate { # Hier wird die Mailadresse verschluesselt # Als Parameter wird ein Bufferinhalt übergeben, der # möglicher Weise Mailadressen enthält. my $line = shift;

97No Spam!

Page 98: eBook - No Spam

6 – Automatisch tarnen

my $mail_regexp = '[A-Za-z_0-9.-]+@([A-Za-z_0-9-]+\.)+[A-Za-z]{2,6}'; my $adr = undef; while ( $line =~ /($mail_regexp)/g ) { # Adresse in einzelne Zeichen zerlegen und # dann mit Leerzeichen dazwischen wieder # eintragen. # Hier kann nach Bedarf ein anderes Verfahren # eingesetzt werden. Die Adresse steht in $1.

$adr = join(' ',split(//,$1));

# Alle Vorkommen der Adresse in der Zeile # ersetzen. # Vorsicht: Wenn oben das Verfahren geaendert # wurde und dort mit einer RegExp gearbeitet # wurde, koennte $1 hier den falschen Wert haben! $line =~ s/(.*)$1(.*)/$1$adr$2/gi; } # end while mail_regexp return $line; }sub handler { # Diese Funktion wird vom Apache aufgerufen # und kuemmert sich um die blockweise # Bearbeitung der Daten. my $f = shift; unless ($f->ctx) { # Nur beim ersten Besuch pruefen unless ($f->r->content_type =~ m!text/(html|plain)!i ) { # Nur Text-Daten bearbeiten # Bei anderen Daten wird "abgelehnt" gemeldet. return Apache::DECLINED; } # end unless # Wir veraendern die bereits berechnete Content-Length # daher wird sie zurueckgesetzt. $f->r->headers_out->unset('Content-Length'); } # end unless

98

Page 99: eBook - No Spam

Apache-Modul

my $leftover = $f->ctx; while ($f->read(my $buffer, BUFF_LEN)) { $buffer = $leftover . $buffer if defined $leftover; if (length($buffer) > (2*BUFF_LEN)) { # Zu lange keine Leerzeichen gefunden => # Gefahr eines Bufferoverflow. $f->print(obfuscate($buffer)); $buffer = $leftover = ""; } else { $buffer =~ /(.*)(\s\S*)\z/gs; $leftover = $2; $buffer = obfuscate($1); $f->print($buffer); } # end if bufferoverflow } # end while read if ($f->seen_eos) { # Dateiende erreicht - Rest ausgeben. if (defined $leftover) { $leftover=obfuscate($leftover); $f->print(scalar $leftover); } } else { # Weitere Daten vorhanden, Rest an den # naechsten Aufruf uebergeben. $f->ctx($leftover) if defined $leftover; } # end if # Erfolgreiche Bearbeitung rückmelden return Apache::OK;}1;

99No Spam!

Page 100: eBook - No Spam

6 – Automatisch tarnen

6.2 Tuning

Erwartungsgemäß bremst der Filter die Auslieferung von Webseiten. Zwarwerden Apache-Perl-Module mit mod_perl beim Start des Webservers kompi-liert, so dass der Nachteil der interpretierten Sprache minimal ist, aber dasAnalysieren des Ausgabestroms beansprucht auch Rechenzeit und Speicher-platz.

Allerdings ist die Verzögerung selbst unter stärkster Belastung, wie man siemit dem in Apache 2.0 enthaltenen Benchmark Apache Bench simulierenkann, bei üblichen HTML-Dateigrößen kaum messbar: In einem Test habe ich1000 exakt parallele Zugriffe auf eine HTML-Datei simuliert, die Ausliefe-rungszeit für eine kleine Webseite verlängerte sich von 1,5 ms auf 2,3 ms. Dassind Schwankungen, die für normale Besucher nicht erkennbar sind, da zu vie-le weitere Faktoren, wie die verfügbare Netzwerkbandbreite, hineinspielen.

Dabei lässt sich die Performance des Ausgabefilters noch sehr gut entspre-chend des individuellen Systems tunen: Je nach Größe des Puffers, die in derKonstanten BUFF_LEN eingestellt wird, schwankt die Zugriffszeit. Das liegteinfach an der Speicherauslastung: Je größer der Puffer, desto mehr Speichermuss der Filter belegen. Je öfter der Filter parallel läuft, das heißt je mehr pa-rallele Zugriffe erfolgen, und je größer der Puffer, desto schneller ist der Ar-beitsspeicher des Systems voll und der Server muss anfangen, Speicher auf dielangsame Festplatte auszulagern.

Das Ziel ist nun, durch Testen die für den eigenen Server und die Zugriffszah-len optimierte Puffergröße zu ermitteln. Dazu sollten Sie sich zunächst überle-gen, wie viel parallele Zugriffe Ihr Server abarbeiten muss.

Die Auslastung des eigenen Servers lässt sich leicht anhand der Logfilesherausfinden: Viele Programme, die Webserver-Logs analysieren, gebendirekt die mittlere Anzahl paralleler Zugriffe aus.

Private Homepages haben kaum parallele Zugriffe – dazu sind die Zugriffs-zahlen einfach zu gering. Hier bietet es sich an, Performance-Tests mit zehnkonkurrierenden Zugriffen durchzuführen, da ist dann schon genug Luft nachoben enthalten. Anders sieht das bei großen Webportalen aus: Hier könnenleicht mehrere tausend parallele Zugriffe erfolgen.

100

Page 101: eBook - No Spam

Tuning

Um den Puffer jetzt sinnvoll anzupassen, lohnt es sich, nachzusehen, wie vielSpeicher aktuell frei ist. Die Information liefert z.B. das Programm top oder

Die Größe des freien Speichers dividiert durch die geschätzte Maximalzahl pa-ralleler Zugriffe liefert dann einen ersten Anhalt für die Puffergröße. Bei z.B.25 MByte freiem Speicher und 1000 parallelen Zugriffen wäre ein erster Test-wert 25 KByte.

Mit dem Wert und Apache Bench lässt sich dann die mittlere Zugriffszeit be-stimmen. Jetzt heißt es, alternative Werte zu testen. Dabei macht es Sinn, zu-nächst in jeder Richtung mit 5 und 10 KByte zusätzlichem oder verkleinertemPuffer zu testen, daraus lässt sich häufig schon die Richtung ableiten.

Dabei machen Puffergrößen über 64 KByte praktisch selten Sinn: Die wenigs-ten HTML-Dateien sind größer. Wenn die Seite sowieso schon komplett in denPuffer passt, dann ist auch durch einen größeren Puffer kein Performancege-winn mehr zu erwarten.

Auf meinem Testsystem war eine Puffergröße von 10 KByte optimal. Wurdedie Größe z.B. auf 1 KByte verkleinert, benötigte der Benchmark etwa fünfmalmehr Zeit. War jedoch eine größere Puffergröße von 20 KByte eingestellt,musste mein Testsystem bereits swappen und verlor durch die Festplattenzu-griffe Leistung – die Laufzeit des Benchmark verlängerte sich um etwa denFaktor 10.

Wichtig ist, dass nach jeder Änderung der Puffergröße der Apache selbst neugestartet werden muss, da das Perl-Modul kompiliert im Speicher liegt undÄnderungen in der Datei selbst sonst nicht erkannt werden.

Insgesamt lässt sich durch geschicktes Tuning die Verzögerung, die durch denFilter zwangsläufig entsteht, so weit reduzieren, dass Besucher der Seite sienicht mehr bemerken. Da der Filter sich auch um dynamisch, z.B. mit PHPoder Perl, erzeugte Seiten kümmert, ist der minimale Performance-Verlust imVerhältnis zum erzielten Spamschutz leicht vertretbar.

cat /proc/meminfo

101No Spam!

Page 102: eBook - No Spam
Page 103: eBook - No Spam

7 Missbrauch fertiger Scripten

Auf fast allen Webseiten findet sich mindestens ein serverseitiges Script: sei esentweder ein Kontaktformular, die Send-To-A-Friend-Funktion oder einGrußkarten-Script. Alle diese Scripte können unter Umständen als Spamming-Engines verwendet werden, also als Hilfsmittel, um Spam unerkannt zu ver-senden.

Die Problematik der Grußkarten ist in etwa der Send-To-A-Friend-Funktionvergleichbar – in beiden Fällen wird ein Teil der Webseite einem Dritten wei-terempfohlen: einmal in Form einer elektronischen Postkarte, im anderen Fallals Hinweis, dass diese Seite einen interessanten Beitrag enthält. Send-To-A-Friend findet sich entsprechend bei zahlreichen Online-Shops unter dem Be-griff „Einem Freund empfehlen“ oder bei Online-Magazinen.

In beiden Fällen kann eine Mitstörerhaftung43 des Seitenbetreibers an über die-se Funktionen versandtem Spam entstehen, da der Seitenbetreiber Nutznießerder E-Mail-Werbung ist: Seine Seite wird beworben. Böswillige Zeitgenossenkönnen also den Betreiber einer Seite massiv schädigen, indem sie gezielt alsspammerfeindlich bekannte Personen anschreiben und dann abwarten, dasseine Unterlassungsklage eingereicht wird. In einem der in Fußnote 43 zitiertenUrteile wurde dem Kläger dann auch eine Nachricht mit dem viel sagendenText „mit spammenswerten Grüßen“ zugesandt, wie man im Urteilstext nach-lesen kann.

Man mag das als mut- und böswillig bezeichnen, vielleicht auch den Verdachteines „Abmahnwahns“ unterstellen, andererseits ist ein solches Script tatsäch-lich hervorragend zu missbrauchen, um völlig anonym Spam zu versenden. Eserfüllt also die gleiche Funktion wie ein Open Relay oder ein Open Proxy. In-sofern ist verständlich, dass einem solchen Treiben durch die entsprechendeUnterlassungsverfügung Einhalt geboten werden soll.

43. Siehe dazu u.a.: LG München I, Urteil vom 5.11.2002, Az: 33 O 17030/02, LG München „Milch macht schön“, Urteil vom 15.04.2003, Az: 33 O 5791/03, OLG München, Urteil vom 12.02.2004, AZ: 8 U 4223/03, AG Hamburg, Urteil vom 04.03.2003, Az.: 36A C 37/03, LG Rostock, Beschluss vom 24.06.2003, Az.: 1 S 49/03 zu AG Rostock, Urteil vom 28.01.2003, Az.: 43 C 68/02

103No Spam!

Page 104: eBook - No Spam

7 – Missbrauch fertiger Scripten

Genau das Gleiche gilt für schlecht programmierte oder fehlerhaft konfigurier-te Kontaktformulare, die für den Versand von Spam missbraucht werden kön-nen. So ermöglichen es manche Formmailer, Dritte in CC zu nehmen oder las-sen sich gar als Versandprogramm für Spam missbrauchen.

Möglichkeiten, die eigenen Scripten vor solchem Missbrauch zu schützen undseine Seite so zu gestalten, dass auch Online-Grußkarten versandt werden kön-nen, stelle ich im Folgenden vor.

7.1 Missbrauch von Kontaktformularen

Ein Kontaktformular besteht typischerweise aus mehreren Eingabefeldern, indie der Absendername, die E-Mail-Adresse des Absenders, ein Subject und dieNachricht eingetragen werden können. Die Daten werden per HTTP zum Ser-ver übertragen, wo ein PHP oder Perl-Script aus ihnen eine E-Mail erzeugt undan eine definierte Adresse versendet. Dieses Script wird in Anlehnung an dasbekannte formmail.pl, das unter http://www.scriptarchive.com/formmail.htmlzum Download bereitsteht (von Matt Wright gerne „Formmailer“ genannt).

7.1.1 Empfänger als INPUT TYPE HIDDEN

Die erste Schwachstelle bei vorgefertigten Formmailern ist deren Flexibilität:Häufig wird das Script über zusätzliche, versteckte Eingabefelder in derHTML-Seite konfiguriert. Dort wird häufig auch der Empfänger der Nachrich-ten eingetragen.

Dieser Eintrag ist sehr einfach zu manipulieren: Entweder lädt man sich dieDatei auf den eigenen Rechner herunter und ersetzt dort die Zieladresse undkorrigiert den ACTION-Parameter des Forms oder man manipuliert die Seitedirekt „im Internet“. Dazu bietet sich z.B. der DOM-Inspector von Mozilla an.

Abbildung 7.1 zeigt die Manipulation eines Formulars am Beispiel des Bei-spiel-Kontaktformulars in Kapitel 8.2. Dort wird das verdeckte Eingabefeld„HTTP_VARS“ manipuliert. Analog könnte auch dort eine eingetrageneE-Mail-Adresse ersetzt werden und damit der Inhalt des Formulars an einenDritten gesandt werden.

Allerdings dürfte es relativ aufwendig sein, über diese Schwachstelle automa-tisiert zu spammen.

104

Page 105: eBook - No Spam

Missbrauch von Kontaktformularen

Abb. 7.1: Manipulation des Beispielkontaktformulars mit dem DOM-Inspector

Andererseits ist der Aufwand zur Behebung minimal: Das in Kapitel 5.2.1 vor-gestellte Beispiel-Formmail-Script in PHP verwendet anstatt der E-Mail-Adresse des Empfängers eine eindeutige Identifikationsnummer. Modifiziert

105No Spam!

Page 106: eBook - No Spam

7 – Missbrauch fertiger Scripten

die ein Angreifer, erreicht er entweder niemanden oder einen anderen eingetra-genen Empfänger. Insofern wird dadurch der potenzielle Schaden begrenzt, zu-dem verschwindet eine nicht verschlüsselte E-Mail-Adresse aus der Webseite.

7.1.2 Nutzereingabe im From-Feld

Häufig wird als Absender vom Formmailer die vom Surfer eingetrageneE-Mail-Adresse eingesetzt. Zusammen mit einer Manipulation des Adressatenkann so Spam über Bounces generiert werden: Eine fehlerhafte Empfänger-adresse (oder auch nur ein Problem auf dem Server des Empfängers) führt zueiner Fehlermeldung, die dem Opfer, dessen Adresse als From-Adresse einge-geben wurde, zugestellt wird.

Daher sollte der From-Header, so wie im Beispiel-Formmail-Script, mit einerdefinierten Adresse des Serverbetreibers im Script vorbelegt werden. Das hatallerdings den Nachteil, dass zum Beantworten einer Nachricht, die über dasFormular versandt wurde, die eingegebene E-Mail-Adresse des Absenders ausdem Body der Mail herauskopiert werden muss.

7.1.3 Nutzereingabe sonstiger Header-Felder

Offensichtlich spamfreundlich ist die unmittelbare Eingabe eines Cc- oderBcc-Felds. Daher dürfen diese Felder im Beispiel-Formmail-Script ebenfallsnur mit den eindeutigen Identifikationsnummern belegt werden.

Genauso ist ein Subject-Feld ein möglicher Angriffsort: Häufig wird das Sub-ject als Mail-Subject in den Header der Mail übernommen. Schafft der Angrei-fer es nun, in das Subject einen Zeilenumbruch einzutragen, kann er problem-los eine zusätzliche Header-Zeile einfügen.

Am einfachsten geht das Einfügen von Zeilenumbrüchen, indem der Angreiferdie Webseite notfalls lokal so modifiziert, dass anstelle eines einzeiligen Ein-gabefelds ein mehrzeiliges Eingabefeld verwendet wird. Der Angreifer mussalso

durch

ersetzen.

<input type="text" name="beispiel"/>

<textarea name="beispiel"></textarea>

106

Page 107: eBook - No Spam

Missbrauch von eCards

Um einen solchen Angriff zu erschweren, entfernt der Beispiel-Formmailersämtliche Zeilenumbrüche aus dem Subject, obwohl das in der aktuellen Ver-sion der PHP-Funktion mail() nicht notwendig ist: Sie eliminiert selbständigZeilenumbrüche. Allerdings findet sich der Fehler häufig in Perl-Scripten,weshalb hier bewusst etwas zu restriktiv programmiert wurde.

Zusätzlich verkürzt der Formmailer das Subject auf maximal 60 Zeichen.Letzteres soll im Wesentlichen Probleme mit Mailclients verhindern, die mitLängenobergrenzen für Subjects arbeiten und zudem die Darstellung der Mailsin einer Liste im Mailclient übersichtlicher gestalten.

7.1.4 Zusammenfassung

Diese typischen Angriffsmöglichkeiten finden sich in zahlreichen fertigenKontaktformularen wieder, teilweise auch in den von Providern im Rahmenvon „Standard-CGIs“ bereitgestellten Formularen, was aus haftungsrecht-licher Sicht interessante Fragen aufwirft – dazu allerdings mehr bei[SCHOE04].

Sind die typischen Angriffsszenarien bekannt, lassen sie sich relativ einfachblockieren – das zeigt das Script in Kapitel 5.2.1.

Um zu verhindern, dass ein Kontaktformular von einem Programm genutztwird, wird häufig der Einsatz eines Verfahrens empfohlen, das einen Menschvon einer Maschine unterscheidet. Nur Menschen können und dürfen das For-mular dann verwenden. Eine Auswahl solcher Verfahren stellt [CAPTCHA]vor. Allerdings arbeiten die meisten dieser Verfahren mit der Anzeige von Bil-dern, so dass Sehbehinderte in aller Regel von der Nutzung ausgeschlossenwerden.

Zudem sind findige Spammer bereits auf die Idee gekommen, die Auswahlfra-gen, die im Rahmen solcher Mensch-Maschine-Überprüfungen gezeigt wer-den, auf anderen Seiten als Preisausschreiben einzustellen und somit ahnungs-lose Dritte als Helfer einzusetzen.

7.2 Missbrauch von eCards

Elektronische Postkarten können unmittelbar an einen beliebigen Empfängergesandt werden. Das macht sie für Spammer äußerst nützlich: Lassen sich sol-che Postkarten scriptgesteuert versenden, ist der Spammer hervorragend ge-tarnt.

107No Spam!

Page 108: eBook - No Spam

7 – Missbrauch fertiger Scripten

Es wurden bereits verschiedene Verfahren erdacht, die diesen Missbrauch ver-hindern sollen. Typischerweise wird vom Seitenbetreiber eine Nutzerregistrie-rung gefordert, ohne die kein Versand möglich ist. Gibt es später Beschwer-den, lässt sich darüber zudem der Schädiger identifizieren, so dass gegen ihnvorgegangen werden kann.

Gleichzeitig kann der Anbieter bestimmten, unerwünschten Nutzern den Zu-gang zu seiner Seite verwehren. Allerdings ist das nur eine Krücke, schließlichlässt sich – wie auch das Wikipedia-Projekt zeigt – kaum sicherstellen, dassich Vandalen nicht wieder unter einem anderen Nutzernamen erneut anmel-den. Gerade da die Täter häufig mit dynamisch vergebenen IP-Adressen arbei-ten, lässt sich kein wirkungsvoller Schutz realisieren. Auch feste IP-Adressenlassen sich über Anonymisierdienste wie den Java Anonymous Proxy der TUDresden (http://anon.inf.tu-dresden.de) leicht verstecken, um IP-basierteSperren auszuhebeln. Wie das funktioniert, beschreibt z.B. [EGG05g].

Es bedarf also einer Lösung, die sicherstellt, dass eCards nicht zum Spammenmissbraucht werden können. Ein Grundprinzip dafür hat der bekannte Münch-ner Anwalt Freiherr Günther von Gravenreuth44 unter anderem in einem Ver-fahren vor dem AG München beschrieben: Er schlägt vor, den Versender dereCard diese auch tatsächlich selbst aus seinem Mailprogramm absenden zulassen, wodurch sich das Haftungsproblem des Webseitenbetreibers von selbstlöst, da dieser kaum für die Kommunikation Dritter verantwortlich gemachtwerden kann.

Die Idee dahinter ist einfach: Der Anwender wählt wie üblich zunächst die ge-wünschte Postkarte aus, gibt die Namen von Absender und Empfänger und dieNachricht ein und klickt auf Senden. Anstatt jedoch vom Server eine E-Mailgenerieren zu lassen, wird eine neue Webseite ausgegeben, auf der ein Link an-gegeben ist. Diesen Link muss der Absender von Hand in eine E-Mail kopie-ren, die er mit seinem eigenen Mailprogramm versendet.

Der Empfänger klickt in der E-Mail den Link an. Ein serverseitiges Script lie-fert dann seine Karte aus, genauso wie bei jeder anderen Grußkarte auch. Fürden Empfänger ist diese Lösung also völlig transparent. Als Nebeneffekt bleibtes ihm erspart, dass seine Adresse auf einer unbekannten Webseite eingetragenwird und dort möglicherweise in die Hände von Spammern gelangt.

44. Dessen Webseite sich unter http://www.gravenreuth.de findet.

108

Page 109: eBook - No Spam

Missbrauch von eCards

Ein Script, das die Grundfunktionalität dieser Lösung realisiert, möchte ich Ih-nen hier vorstellen. Dieses Script stellt ein Grundgerüst für den Versand vonspamfreien eCards zur Verfügung und bietet noch genügend Raum für eigeneErweiterungen.

7.2.1 Hinweise zur Umsetzung

Nutzer-freundlich

Da Mailprogramme Zeilen im Allgemeinen nach spätestens 72 Zeichen um-brechen, wie es unter anderem [RFC0821] und [RFC1855] empfehlen, sollteder ausgegebene Link kürzer sein, damit der Empfänger der Nachricht sichnicht die Mühe machen muss, den Link manuell zusammenzusetzen. Das er-reicht man am einfachsten, indem das Script im DocumentRoot eines virtuel-len Webservers läuft, den man gegebenenfalls mit einer eigenen Subdomainwie z.B. cards.example.com einrichten kann.

Die Abholkennung sollte auch möglichst kurz sein, darf aber nicht vorhersag-bar sein. Im Beispiel wird als Schlüssel ein md5-Hash verwendet, der schwervorherzusagen und mit 32 Zeichen auch ausreichend lang ist, um selbst demgeduldigsten Ratespielfan den Spaß zu nehmen.

Eine geeignete Adresse nach diesem Muster wäre dann z.B. mit exakt 70 Zei-chen Länge:

Admin-freundlich

Nicht nur das Leben des Besuchers soll leicht sein, sondern auch das des Ad-mins. Schließlich ist die Pflege des eigenen Webservers aufwendig genug, da-her findet das Script neue Bilder automatisch und stellt sie als Postkarte zurVerfügung. Es reicht also aus, ein neues Bild in das Bildverzeichnis zu kopie-ren.

Die Erkennung ist in der Funktion list_pics() implementiert. Sie sucht in einembestimmten Verzeichnis (Konstante IMG_PATH) alle Bilddateien und liefertsie als Liste zurück.

Dazu nutzt sie das PHP-Objekt dir, mit dem ein Verzeichnis vollständig auf-gelistet werden kann. Den jeweils nächsten Eintrag liefert die Funktion read().

http://cards.example.com/cards.php?id=12345678901234567890123456789012

109No Spam!

Page 110: eBook - No Spam

7 – Missbrauch fertiger Scripten

Wenn kein Eintrag mehr vorhanden ist, wird false zurückgegeben. Damit läuftdie while-Schleife genau so lange, bis alle Dateien gefunden wurden. In derSchleife wird zusätzlich überprüft, ob es sich bei der gefundenen Datei um einVerzeichnis handelt.

Mit der Funktion eregi, die reguläre Ausdrücke unabhängig von der Groß- undKleinschreibung prüft, testet die Funktion dann, ob die gefundene Datei einBild ist. Was ein Bild ist, steht in der Konstanten IMG_TYPE. Für diese Prü-fung wird eine regular expression verwendet, die die Dateiendung mit einervorgegebenen Liste von Dateiendungen von Bildern vergleicht.

Wurde ein Bild gefunden, liefert die PHP-Funktion GetImageSize die Höheund Breite in Pixel.

Grußkarten zwischenspeichern

Bis zur Abholung werden die Grußkarten auf dem Server in einer MySQL-Da-tenbank zwischengespeichert. Der SQL-Befehl zum Anlegen der notwendigenTabelle lautet:

Die Datenbank wird in der Konstanten DB_NAME eingetragen, Nutzernameund Passwort in DB_USER bzw. DB_PASS.

Nach einer bestimmten Frist (Konstante DAYS) werden die Karten auto-matisch gelöscht.

Das Eintragen der Karte erledigt die Funktion save_card(). Sie versucht, SQL-Injections45 durch mysql_real_escape_string zuvorzukommen, und verhindertdie Vergabe doppelter Kartennummern.

Es ist zwar sehr unwahrscheinlich, dass zwei Karten den gleichen md5-Hashhaben, denn die Wahrscheinlichkeit dafür, einen md5-Hash zu finden, deridentisch ist mit einem bereits vorhandenen, beträgt rechnerisch 3∗10–39.Reicht es aus, dass der md5-Hash mit einem beliebigen anderen, bereits vor-handenen md5-Hash identisch ist, hängt die Trefferwahrscheinlichkeit von der

CREATE TABLE karten (id varchar(32) NOT NULL default '!' PRIMARY KEY, von varchar(40) NOT NULL default '', an varchar(40) NOT NULL default '', pic varchar(255) NOT NULL default '', dat date NOT NULL default '0000-00-00', msg text NOT NULL);

45. Dazu z.B.: [PEI04] oder auch [SHI05]

110

Page 111: eBook - No Spam

Missbrauch von eCards

Menge der bereits vorhandenen Datensätze ab. Wie Sie die Wahrscheinlichkeitberechnen können, finden Sie in zahlreichen Stochastik-Büchern unter demStichwort „Geburtstagsparadoxon“ erläutert. Auch Wikipedia (http://www.wi-kipedia.de) bietet dazu einen sehr gut erklärten Artikel.

Praktisch ist es bei md5-Hashes trotzdem notwendig, dass sehr viele Karten inder Datenbank abgelegt sind, damit die Wahrscheinlichkeit für eine doppelteKarten-Id relevante Größenordnungen erreicht. Theoretisch kann es aber pas-sieren und würde dann zu einer unschönen Fehlermeldung führen. Möchteman Software ordentlich entwickeln, sollte man zumindest versuchen, alleFehlerquellen, die theoretisch denkbar und dem Entwickler bewusst sind, aus-zuschließen – es bleiben noch genügend, die man trotzdem übersieht und dannspäter Ursache gravierender Sicherheitslöcher sein können.

Daher und um jedes Restrisiko auszuschließen, prüft die Funktion „save_card“zusätzlich nach, ob die neue Id bereits in der Datenbank vorkommt. Dazu nutztsie aus, dass die Id in der Datenbank als Primärschlüssel verwendet wird.

Was ein Primärschlüssel ist, erläutert ausführlich [EGG05]. Ganz allgemeingilt: Er muss eindeutig sein, es darf auf keinen Fall zweimal den gleichen Pri-märschlüssel in einer Datenbanktabelle geben. Damit muss die Karten-Id inihrer Tabelle eineindeutig sein. Wenn das nicht der Fall ist, also eine doppelteKarten-Id vergeben wurde, liefert MySQL beim Einfügen eine Fehlermeldungzurück, den Fehler 1062.

Wenn dieser Fehler aufgetreten ist, wird eine neue zufällige Karten-Id gene-riert und ein neuer Eintrageversuch unternommen. Diese Prüfung und das ge-gebenenfalls notwendige Erzeugen einer neuen Karten-Id werden in der Do-While-Schleife so lange wiederholt, bis eine eindeutige Karten-Id gefundenwurde. Da die Wahrscheinlichkeit schon für eine doppelte Karten-Id äußerstgering ist, ist es praktisch unwahrscheinlich, dass bei mehreren Versuchen hin-tereinander doppelte Karten-Ids erwischt werden, zumal sie dank ihres Be-rechnungsverfahrens nicht vorhersagbar sind. Dennoch könnte das Programman dieser Stelle in eine Endlosschleife geraten, wenn es immer wieder bereitsvorhandene Karten-Ids generiert. Wegen des großen Vorrats an solchen Idsmüsste dafür allerdings jeder Mensch mehrere Milliarden Karten versenden,was als unrealistisch angenommen werden kann. Möchten Sie auch für diesenFall – ganz im Sinne einer ordentlichen Software-Entwicklung – vorsorgen,dann müsste die do-while-Schleife um eine zusätzliche Abbruchbedingung er-gänzt werden, die beispielsweise nach zehn Schleifendurchläufen greift. Diese

111No Spam!

Page 112: eBook - No Spam

7 – Missbrauch fertiger Scripten

Fehlersituation muss dann allerdings auch im weiteren Programmablauf abge-fangen werden.

Das Gegenstück zu save_card() ist get_card(). Mit der Funktion wird die Kartewieder aus der Datenbank geholt. Das ist wesentlich weniger spektakulär. DieKarte wird beim Abholen nicht automatisch gelöscht. Das ist auch sinnvoll,denn so kann sie der Absender mehrmals anschauen – aber auch der Empfän-ger.

Löschen alter Karten

Sollte das Script häufig genutzt werden, besteht deshalb irgendwann die Ge-fahr, dass die Datenbank überläuft. Schließlich wird jede jemals versandteKarte eingetragen. Damit das nicht passiert, wird in der Datenbank mitproto-kolliert, wann die Karte angelegt wurde. Nach Ablauf der in der KonstantenDAYS festgelegten Zeit werden Karten gelöscht. Diese Aufgabe übernimmtdie Funktion clean_db().

Hauptprogramm

Im Hauptprogramm wird anhand der Übergabeparameter entschieden, was zutun ist. Wurde z.B. eine Karten-Id übergeben, dann möchte der Nutzer sehrwahrscheinlich eine Karte abholen. Wurden Inhalte einer Karte übergeben,dann soll sie wohl angelegt werden und ohne alle Parameter wird angeboten,eine neue Karte zu erstellen.

Das Script geht davon aus, dass eine neuere PHP-Version zum Einsatz kommt,bei der aus Sicherheitsgründen die globale Einstellung register_ globals auf offgesetzt ist. Damit können Übergabeparameter nicht mehr wie normale Variab-len verwendet werden, sondern müssen aus einem assoziativen Array zunächstausgelesen werden. Das senkt das Risiko, dass durch fehlerhafte Variablenin-itialisierung Sicherheitslöcher46 entstehen.

Verbesserungen und Erweiterungen

Für den Produktiveinsatz sollte auf alle Fälle eine ordentliche Fehlerbehand-lung ergänzt werden, so dass der zuständige Webmaster mitbekommt, dassetwas nicht funktioniert. Momentan führen Fehler nur zu einem Abbruch des

46. Siehe dazu: http://de3.php.net/manual/de/security.registerglobals.php

112

Page 113: eBook - No Spam

Missbrauch von eCards

Scripts. Außerdem müssen die Eingabedaten auf Zulässigkeit geprüft werden.Entsprechende Hinweise sind jeweils als Kommentare im Script enthalten.

Die Benutzeroberfläche ist bewusst minimalistisch, lässt sich aber schnelldurch den Einsatz von CSS aufpeppen. Optisch schön wäre außerdem bei grö-ßeren Bildmengen eine thematische Gruppierung der Bilder in Unterverzeich-nissen, in denen dann automatisch wie in list_pics() gesucht wird. Auch einemehrseitige Darstellung bei sehr vielen Bildern wäre wünschenswert, um demNutzer kilometerlanges Scrollen zu ersparen.

Auch aus Sicherheitssicht besteht noch Potenzial für Verbesserungen: Einmalkann ein Kartenschreiber HTML- und JavaScript-Code in seine Karte ein-schleusen, der unter Umständen die Darstellung der zugehörigen Webseitestört oder eine so genannte Cross-Site-Scripting-Attacke ermöglicht. Zum an-deren wird nicht überprüft, ob das angegebene Bild wirklich auf dem Serverexistiert und eine Bilddatei ist. Damit besteht die Gefahr, dass ein Angreiferfremde Bilder oder gar Scripte in die Grußkarte einschleust.

Das Script

<? /* ***************************************************************** Spamfreie Grusskarten in PHP Autor: Tobias Eggendorfer (c) 2004, 2005 ***************************************************************** */ /* Konfiguration */ /* Einstellungen fuer die Datenbank */ define(DB_NAME,"karten"); /* DB-Name */ define(DB_HOST,"localhost"); /* MySQL-Server */ define(DB_PORT,"3306"); /* MySQL-Server-Port */ define(DB_USER,"karten"); /* MySQL-User */ define(DB_PASS,"gruss"); /* und sein Passwort */ define(DB_TAB,"karten"); /* verwendete Tabelle */ /* weitere Einstellungen */ define(IMG_PATH,"./images/"); /* rel. Pfad zu den Bildern */

113No Spam!

Page 114: eBook - No Spam

7 – Missbrauch fertiger Scripten

define(IMG_TYPE,"jpg|jpeg|gif"); /* was sind "Bilder" */ define(DAYS,5); /* Wieviel Tage bleibt eine Karte gespeichert? */ /* Funktionen */ function send_http_header() /* Sendet im Header, dass die Seite nicht gecached werden darf. */ { header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Expires: ".gmdate("D, d M Y H:i:s")." GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-Encoding: iso-8859-1"); } // end function function connect_db() /* Stellt Verbindung zur DB her. Im Fehlerfall brutal: die(). Rueckgabewert: conn_id */ { $connid = mysql_connect(DB_HOST.":".DB_PORT,DB_USER,DB_PASS); if ($connid==0) { /* Fehlerbehandlung einsetzen! */ die ("Fehler (1) aufgetreten."); } // end if if (!mysql_select_db(DB_NAME)) { /* Fehlerbehandlung einsetzen! - mysql_errno($connid) - mysql_error($connid) */ die ("Fehler (2) aufgetreten."); } // end if return $connid;

114

Page 115: eBook - No Spam

Missbrauch von eCards

} // end function function list_pics() /* Erzeugt eine Liste der Bilder mit - Dateiname - Width - Height */ { $folder = dir(IMG_PATH); unset($piclist); while ($entry = $folder->read()) { if ((!(is_dir($entry))) && (eregi("\.(".IMG_TYPE.")$",$entry))) { $pic[0] = $folder->path.$entry; $tmparr = @GetImageSize($folder->path.$entry); /* Mögliche Fehler abfangen! */ $pic[1] = $tmparr[0]; $pic[2] = $tmparr[1]; $piclist[] = $pic; } // end if } // end while return $piclist; } // end function function save_card($from, $to, $pic, $msg) /* Traegt eine Karte in die Datenbank ein. Rueckgabewert: Id der Karte oder FALSE wenn Eintragen fehlschlug. */ { global $connid; /* Datenbankverbindungsid */ /* Zeichenketten f_r die Query escapen. Bei 4.0.3 < PHP < 4.3.0 stattdessen: mysql_escape_string(string) verwenden. */ $qfrom = mysql_real_escape_string($from); $qto = mysql_real_escape_string($to); $qmsg = mysql_real_escape_string($msg); $qpic = mysql_real_escape_string($pic);

115No Spam!

Page 116: eBook - No Spam

7 – Missbrauch fertiger Scripten

/* Eindeutige Id erzeugen, die nicht vorhersagbar ist. */ $id = md5($from.",".$to.",".$msg); do { /* md5 ist potentiell nicht eindeutig! */ $query = "INSERT INTO ".DB_TAB. " (id, von, an, pic, msg, dat) VALUES (". "\"".$id."\",". "\"".$qfrom."\",". "\"".$qto."\",". "\"".$qpic."\",". "\"".$qmsg."\",". "\"".date("Y-m-d")."\")"; $res = mysql_query($query);

$errno = mysql_errno($connid);

if ($errno == 1062) { /* Doppelter Primaerschluessel => Neue Id berechnen */ $id = md5($from.",".$to.",".$msg.",". uniqid(rand(), true)); } // end if $errno == 1062 } while ($errno == 1062); $id = ($res === FALSE) ? FALSE : $id; return $id; } function get_card($id) /* Holt Karte mit Id aus der Datenbank. Rueckgabewert: Array mit (From, To, Pic, Msg), wenn Karte vorhanden, sonst false. */ { global $connid; /* Datenbankverbindungsid */

116

Page 117: eBook - No Spam

Missbrauch von eCards

/* $id: Eingabeparameter, also escapen. Siehe auche save_card(). */ $qid = mysql_real_escape_string($id); $query = "SELECT von, an, pic, msg FROM ".DB_TAB. " WHERE id = \"".$qid."\""; $res = mysql_query($query); if ($res === FALSE) { /* Fehlerbehandlung einsetzen! - mysql_errno($connid); - mysql_error($connid); */ die("Fehler (4) aufgetreten."); } $row = mysql_fetch_assoc($res); mysql_free_result($res);

return $row; } function clean_db() /* Loescht alte Karten aus der Datenbank */ { global $connid; /* Datenbankverbindungsid */

$query = "DELETE FROM karten WHERE dat < \"". date("Y-m-d", mktime(0, 0, 0, date("m"),date("d")-DAYS,date("Y"))). "\""; $res = mysql_query($query);

if ($res === FALSE) { /* Fehlerbehandlung einsetzen! - mysql_errno($connid); - mysql_error($connid); */ die("Fehler (5) aufgetreten."); }

117No Spam!

Page 118: eBook - No Spam

7 – Missbrauch fertiger Scripten

}

/* Hauptteil */ /* Variablen initialisieren. */ $abholen = false; $eingetragen = false; $ueberschrift = "Karte versenden"; $nachricht = "<p>Bitte w&auml;hlen Sie die Karte ". "unten.</p>";

/* _bergabeparameter abfragen. Annahme: register_globals off */ $card_id = $_REQUEST["id"]; $send = $_REQUEST["send"]; $from = $_REQUEST["from"]; $to = $_REQUEST["to"]; $msg = $_REQUEST["msg"]; $pic = $_REQUEST["pic"]; $connid = connect_db();

clean_db(); if (isset($card_id) && ($card_id != "")) { /* Nutzer moechte Karte abholen. */ $abholen = true; $karte = get_card($card_id); $ueberschrift = "Karte abholen"; $nachricht = ""; } if (isset($send) && ($send == "yes")) { /* Achtung! Keine Sicherheitspruefung der Eingabedaten. Sollte durchgefuehrt werden!

118

Page 119: eBook - No Spam

Missbrauch von eCards

Insbesondere: a) Steht in $pic ein gueltiger Dateiname eines Bildes? b) Enthaelt $msg, $from oder $to HTML-Tags? */ $card_id = save_card($from, $to, $pic, $msg); $eingetragen = ($card_id !== FALSE); if ($eingetragen === TRUE) { $ueberschrift = "Karte eingetragen."; $nachricht = "<p>Senden Sie den Link unten dem ". "Empfaenger per Mail. Er kann ". "sich damit die Karte abholen.</p>". "<p><A HREF=\"?id=".$card_id."\">". "http://".$HTTP_HOST. $SCRIPT_NAME."?id=".$card_id."</A></p>". "<p>Ihre Karte ist unten nochmal ". "angezeigt.</p>"; $karte = get_card($card_id); } else { $ueberschrift = "Fehler beim Eintragen."; $nachricht = "<p>Fehler beim Eintragen.</p>"; } } mysql_close($connid);

/* Damit beginnt HTML-Ausgabe. Dort gibt es drei grosse Richtungen: - Karte abholen - Karte versenden - Karte eingetragen. */ send_http_header();?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <head>

119No Spam!

Page 120: eBook - No Spam

7 – Missbrauch fertiger Scripten

<title>Grusskarten-Service</title> <!-- Hier ggf. geeignete CSS eintragen. --> </head> <body> <h1><? print $ueberschrift; ?></h1> <? print $nachricht; ?> <hr>

<? if (($abholen == true) || ($eingetragen == true)) { ?> <table> <tr> <td><img src="<? print $karte["pic"]; ?>"></td> <td><p>Von: <? print $karte["von"]; ?></p> <p>An: <? print $karte["an"]; ?></p> <p>Nachricht:</p> <p><? print nl2br($karte["msg"]); ?></p> </td> </tr> </table> <p>Noch eine Karte <A HREF="<? print $SCRIPT_NAME; ?>"> senden?</p> <? } else { /* Versenden. */ $pic_list = list_pics(); ?> <form method="post" action="<? print $SCRIPT_NAME; ?>"> <input type="hidden" name="send" value="yes"> <table> <? /* Ausgabe der Bilder */

120

Page 121: eBook - No Spam

Missbrauch von eCards

for ($i=0; $i<count($pic_list); $i++) { ?> <tr> <td><input type="radio" name="pic" value="<? print $pic_list[$i][0]; ?>"></td> <td><img src="<? print $pic_list[$i][0]; ?>" width="<? print $pic_list[$i][1]; ?>" height="<? print $pic_list[$i][2]; ?>"></td> </tr> <? } // end for i ?> </table> <p>Geben Sie hier Ihre Nachricht ein.</p> <table> <tr> <td>Von:</td> <td><input type="text" name="from" maxlength="40"></td> </tr> <tr> <td>An:</td> <td><input type="text" name="to" maxlength="40"></td> </tr> <tr> <td>Nachricht:</td> <td><textarea wrap="virtual" name="msg"></textarea></td> </tr> </table> <input type="submit" value="Senden"> </form> <? } // end if?> </body></html>

121No Spam!

Page 122: eBook - No Spam

7 – Missbrauch fertiger Scripten

7.3 Send-To-A-Friend

Eine ähnliche missbrauchsichere Lösung lässt sich auch für die „send to afriend“-Funktionalität konstruieren. Dabei wird dann ein geeigneter Mailto-Linkausgegeben. So ist das beispielsweise bei Mobile.de (http://www.mobile.de)gelöst. Dort enthielt die Funktion allerdings zum Zeitpunkt des Entstehens diesesBuchs noch Fehler: Das Fragezeichen in einer URL mit GET-Parametern mussgeeignet codiert werden, da es in einer mailto-URL eine eigene Bedeutung hat.

Will man also die Empfehlung „Besuchen Sie die Seite http://www.examp-le.com/?foo=bar“ aussprechen, sollte der zugehörige mailto-Link wie folgtlauten:

Nur dann wird auch der Link in der Mail unter allen Bedingungen korrekt wie-dergegeben. Beachtet man diese Kleinigkeit nicht, schneiden ihn einige Mail-programme ab dem Fragezeichen ab, was den GET-Parameter einleitet.

mailto:subject=Eine%20Empfehlung&body%3DBesuchen%20Sie%20die%20Seite%20http%3A//www.example.com/%3Ffoo%3Dbar

122

Page 123: eBook - No Spam

8 Harvester blockieren

Eine Möglichkeit, Harvestern und damit Spammern das Leben schwer zu ma-chen, ist es, E-Mail-Adressen für solche Programme unlesbar auf Webseitenanzugeben. Ein anderer Ansatz sieht vor, die Sammelgeschwindigkeit der Har-vester zu reduzieren. Denn dann würden sich zum einen die benötigte Zeit,zum anderen aber auch die Kosten zur Adressgewinnung durch die Spammerdeutlich erhöhen.

Als Nebeneffekt kann man, hält man Harvester überdurchschnittlich lange aufeiner Seite fest, erreichen, dass sich die High-Ports des Clients47 zuziehen undder Harvester auch andere Seiten außer der eigenen nicht absuchen kann. Manerreicht also einen doppelten Nutzen48.

8.1 Anforderungen

Die wesentliche Idee ist, den Harvester in einer Endlosschleife zu fangen, diezusätzlich die Webseite nur extrem verzögert ausliefert. Idealerweise soll dieFalle so konstruiert sein, dass sich der Harvester in ihr für immer verfängt.

Diese Anforderung lässt sich einfach realisieren durch ein Script, das eineHTML-Seite ausgibt, die n-mal unter einer anderen URL auf sich selbst ver-weist. Gleichzeitig gibt es jede Ausgabezeile mit einer Verzögerung aus, waseine sehr langsame Verbindung simuliert.

Doch wäre das allein zu gefährlich, denn Spider von Suchmaschinen, wie z.B.der Googlebot, sollen nicht durch die Falle blockiert werden.

Endlosschleifen bergen zudem noch die Gefahr, durch die generierte Server-last den eigenen Webserver zu überlasten. Daher muss die Zahl der parallelenInstanzen eines solchen Scripts limitiert werden.

47. Jede TCP-Verbindung von einem Client zu einem Server funktioniert so, dass sich der Client einen beliebigen, noch unbenutzten Port zwischen 1024 und 65535 (High-Port) aussucht und von diesem aus zum definierten Port verbindet, im Fall des HTTP wäre das der Port 80. So benötigt der Client für jede Verbindung einen eigenen Port.

48. Die ursprüngliche Idee habe ich in [EGG04a] veröffentlicht. Die Lösung hier ist etwas ver-feinert und enthält noch einige weitere Tricks, um die Teerfalle noch besser zu verbergen.

123No Spam!

Page 124: eBook - No Spam

8 – Harvester blockieren

8.2 Überlastungsprophylaxe

Dabei sollte eine Anfrage des Harvesters in einer Warteschleife gehalten undvom Server nicht schon wegen Überlastung abgewiesen werden. Insbesonderemuss der restliche Serverbetrieb ohne Komplikationen weiterlaufen. Das istinsbesondere wichtig für den Fall, dass auf dem Server noch weitere Websei-ten liegen, die von menschlichen Surfern abgefragt werden sollen.

Zu bedenken ist jedoch: Wer sich Spammer zum Feind macht, indem er derenHarvester blockiert, sollte sich durchaus überlegen, ob es sinnvoll ist, ausge-rechnet auf dem Server, der die Teerfalle beherbergt, gleichzeitig auch produk-tive Seiten zu betreiben. Denn dadurch vergrößert sich die Gefahr, dass derServer Ziel von Angriffen wird, wodurch Seiten Dritter potenziell gefährdetwerden können. Aber auch die Teergrube selbst muss gegen externe Angriffesehr gut abgesichert werden.

Wie man einen guten Schutz gegen solche Hacker-Angriffe erreichen kann,stellen unter anderem [KOZ04], [HOG04], [VIE01], [PEI04], [LOC04],[KIR00], [ANO01], [McN04] und [ZIE99] aus verschiedenen Blickwinkelndar, weshalb ich diese Frage hier offen lassen möchte.

Einzig der Frage, wie sich ein Denial-Of-Service der Teergrube durch Über-lastung mit Anfragen verhindern lässt, möchte ich mich hier widmen. Denndiese Frage ist nicht ganz trivial: Unmittelbar über eine Ausgabe des Pro-gramms ps lässt sich nicht erkennen, wie viele Anfragen die Teergrube aktuellbearbeitet, vor allem wenn die Teergrube ein PHP-Script ist.

PHP stellt auch intern keine Funktionen bereit, die es unmittelbar ermögli-chen, die Zahl parallel laufender Instanzen eines Scripts zu ermitteln. Somitmuss eine eigene Lösung konstruiert werden.

Als erster Ansatz könnten gemeinsam genutzte Dateien dienen, in denen einZähler hochgezählt wird, der die Zahl der aktuell laufenden Prozesse wieder-gibt. Das Problem ist hier der parallele Zugriff auf eine Datei: Die entstehen-den Konkurrenzsituationen müssen abgefangen werden.

Diesen Programmieraufwand könnte man an ein Datenbanksystem delegieren,das Transaktionen unterstützt und somit eine Prüfung und das fallweise Inkre-mentieren eines Zählers in einer unteilbaren Aktion ermöglicht.

Doch beide Verfahren scheitern an der Gefahr, dass Scripten, bevor sie denZähler wieder in einer atomaren Aktion dekrementieren, abnorm terminieren

124

Page 125: eBook - No Spam

Überlastungsprophylaxe

könnten. Günstig wäre es also, wenn man PHP oder dem Betriebssystem dieÜberwachung der laufenden Prozesse überlassen könnte.

Nebenbei belastet der Datenbank- bzw. Dateizugriff auch das System und ver-braucht relativ viel Ressourcen. Die Überwachung des aktuellen Zählerstandslässt sich nur durch ein Busy-Waiting realisieren: Der Prozess muss immerwieder den Zähler selbst kontrollieren. Das kostet Rechenleistung.

Sparsamer wäre es, wenn das System das Script selbständig aus einem Bereit-schaftszustand in den aktiven Zustand49 zurückholt, sobald der Zähler wiederunter der Obergrenze liegt. Damit würde keine Rechenleistung verschwendet.

Genau das ermöglichen Semaphoren, ein Mittel der Interprozesskommunika-tion: Die atomaren Dijkstra-Operationen P(s) und V(s), die auf einem Sema-phor s wirken, stehen für das Betreten und Verlassen eines so genannten kriti-schen Abschnitts50.

Da die P-Operation prüft, ob der Semaphor einen Wert größer null hat, und ihndann dekrementiert, kann man über die Initialisierung des Semaphors festle-gen, wie viele parallele Instanzen des Scripts gleichzeitig laufen können.

Der Einsatz von Semaphoren stellt sogar die eleganteste Möglichkeit zur Lö-sung dar: Das Betriebssystem kümmert sich um die Verwaltung der Sema-phoren, man erspart sich Busy-Waiting, das Rechenleistung fordert. Zudemwerden die Semaphoren für den Fall einer vorzeitigen, abnormen Terminie-rung eines Prozesses überwacht. Scheinbar unendlich laufende Geisterprozes-se, die die Oberschranke sukzessive verringern, können so nicht auftreten.

8.2.1 Semaphoren in PHP

Auch in PHP ist der Einsatz von Semaphoren möglich, jedoch muss PHP dazumit System V Semaphore Support kompiliert worden sein. Dies wird über dieconfigure-Option

49. Zu den verschiedenen Zuständen eines Prozesses in einem Betriebssystem siehe z.B. [TAN02]

50. Ausführlicher dazu z.B.: [TAN02], [SCHOA] und [WIE99]

--enable-sysvsem

125No Spam!

Page 126: eBook - No Spam

8 – Harvester blockieren

erreicht. Unter Umständen ist also eine Neuübersetzung von PHP nötig. Für ei-nige RPM51-Installationen gibt es Ergänzungs-RPMs, die die notwendigenFunktionen ftok, sem_get, sem_acquire, sem_release und sem_remove ohneNeukompilierung zur Verfügung stellen.

ftok generiert einen für die Verwendung von Semaphoren geeigneten, eindeu-tigen Schlüssel. Die PHP-Dokumentation empfiehlt, zur Generierung den Da-teinamen des Skripts als Parameter zu übergeben, was sich durch das Makro__FILE__ einfach realisieren lässt.

sem_get generiert auf Basis des Schlüssels dann den notwendigen Semaphor,allerdings nur, wenn er noch nicht existiert. Ansonsten wird ein Handle auf denbereits bestehenden Semaphor zurückgegeben. Für das verwendende Script istdies transparent.

sem_acquire führt die P-Operation auf den via sem_get erzeugten Semaphordurch, sem_release entspricht der V-Operation.

Mit sem_remove kann der Semaphor gelöscht werden. Allerdings ist das un-günstig, da alle anderen Prozesse, die diesen Semaphor zu dem Zeitpunkt be-reits mit sem_get angefordert haben, dann Fehlermeldungen generieren. Durchden parallelen Ablauf der Prozesse lässt es sich nicht vorhersagen, welcherProzess den Semaphor endgültig löschen darf. Die Löschung muss in dieserAnwendung also vom System veranlasst werden.

8.3 Die Lösung

Weiter unten ist ein einfaches PHP-Script dargestellt, das eine HTML-Dateiausgibt, die mehrere, unterschiedliche Links mit stets unterschiedlicher Be-schreibung enthält.

Zum Erzeugen der Links wird die PHP-Funktion uniq_id und deren md5-hashverwendet. Die md5-Hashes werden anschließend zufällig verkürzt, um realenLinks ähnlicher zu sein und nicht durch eine konstante Länge aufzufallen. Zu-dem werden die Dateinamenserweiterungen der Links zufällig aus einer Listeausgewählt. Die Wahrscheinlichkeit für mehrere unterschiedliche Links proSeite ist damit ausreichend hoch.

51. RPM: RedHat Package Manager

126

Page 127: eBook - No Spam

Ein Script – viele Namen

Für die Beschreibung der Links werden Wörter zufälliger Länge über einemdefinierten Alphabet generiert. Indem einige Symbole in diesem Alphabethäufiger verwendet werden, wird erreicht, dass die zufälligen Wörter natür-lichsprachigen Wörtern ähnlicher sind. Das Alphabet kann auch sinnvolleWörter und Buchstabenkombinationen enthalten, um eine noch bessere Täu-schung zu erreichen. Das Beispielscript unten deutet das an.

8.4 Ein Script – viele Namen

Als nächstes Problem stellt sich die Frage, wie einem Script unendlich vieleNamen zugeordnet werden können. Hierfür gibt es zwei zweckmäßige Mög-lichkeiten, die jeweils für den Besucher der Seite transparent sind.

Einmal kann die Konfiguration des Apache so gewählt werden, dass ein Aliasgesetzt wird. Dazu wird die Konfiguration des (Virtual-)Host in der httpd.conffür den Fall, dass das Script index.php heißt und im Verzeichnis /spamfight/liegt, wie folgt ergänzt:

Alternativ lässt sich auch mit einem ErrorDocument arbeiten – dann muss dieServerkonfiguration nicht verändert werden, eine zusätzliche Zeile in der.htaccess im gewählten Verzeichnis reicht aus:

Um den Eindruck zu erwecken, dass kein Fehler aufgetreten sei, überschreibtdas Beispielscript den HTTP 404-Status mit „HTTP/1.1 200 OK“.

404 ist die wohl bekannteste Fehlermeldung eines Webservers: “Document notfound“, auf Deutsch: „Datei nicht gefunden“. Für den Fall eines solchen Feh-lers ist es möglich, eine eigene Fehlermeldung zu hinterlegen, das erledigt dieEinstellung ErrorDocument. Die Fehlermeldung darf dabei auch ein vomWebserver ausführbares Programm sein, in diesem Fall eine PHP-Datei.

Der Trick ist nun, dass die von einem Programm zurückgemeldeten HTTP-Header und damit auch Stati Vorrang vor denen haben, die der Webserver au-tomatisch generiert. Das Argument für dieses Verhalten ist einfach: Das Pro-gramm wird für sich selbst besser als der Webserver wissen, warum es einenbestimmten Header wie setzt.

<Directory /spamfight> AliasMatch ̂ /spamfight/[A-Za-z0-9]+\.[A-Za-z0-9]+$ /spamfight/index.php</Directory>

ErrorDocument 404 /spamfight/index.php

127No Spam!

Page 128: eBook - No Spam

8 – Harvester blockieren

Genau das ermöglicht es uns, den HTTP-Status mit dem Wert „200“ zu über-schreiben. Dieser Wert steht für „Alles ok“.

8.5 Suchmaschinen schützen

Damit Suchmaschinen-Robots nicht in die Falle tappen, muss eine robots.txt(siehe dazu [KOS94] und [W3CAPPB]) angelegt werden, die im Hauptver-zeichnis des (virtuellen) Servers stehen muss. Sie könnte wie folgt aussehen:

Dabei macht man sich zunutze, dass die Harvester der Spammer in aller Regeldie robots.txt ignorieren, um mehr E-Mail-Adressen zu finden. Suchmaschi-nen halten sich jedoch an den Standard und riskieren damit nicht, in die Fallezu tappen.

8.6 Beispiel-Teergrube

Dieses Script implementiert eine einfache Harvester-Teerfalle, so wie ich sieoben beschrieben habe. Die wesentlichen Ideen sind oben erläutert – Hinweisezur Programmierung sind in den Quellcode in Form von Kommentaren einge-arbeitet.

Beachten Sie bitte, dass auch bei diesem Script das Error-Handling nur sehreinfach implementiert ist – für reale Anwendungen sollte es entsprechend er-weitert werden.

8.6.1 Konfiguration der Beispiel-Teergrube

Der Anfangswert der Semaphore wird über die Konstante MAX_CONCUR-RENT_USERS eingestellt und definiert damit gleichzeitig die maximale Zahlan parallelen Zugriffen auf das Script.

Die Wartezeit zwischen der Ausgabe zweier Links wird über sleep und dieKonstante TIME_WAIT in Sekunden recht grobkörnig definiert. Hier kann mitusleep und der Angabe der Verzögerung in µs in TIME_WAIT eine genauereAbstufung erreicht werden.

Die gesamte Laufzeit des Scripts ergibt sich damit grob aus dem Produkt derZahl der generierten Links, definiert in LINKS_GENERATED, und TIME_

User-agent: *Disallow: /spamfight/

128

Page 129: eBook - No Spam

Beispiel-Teergrube

WAIT. Für praktische Anwendungen sollte sie nach meinen Tests nicht mehrals 15 Sekunden betragen.

Das Alphabet, über das die Wörter erzeugt werden, kann in $alphabet variiertwerden. Je mehr sinnvolle Buchstabenkombinationen es enthält und je näherdie Buchstabenwiederholungen im Alphabet an die reale Buchstabenvertei-lung einer Sprache52 herankommen, desto wahrscheinlicher entstehen schein-bar sinnvolle Wörter53, desto weniger leicht lässt sich das Script erkennen.Dasselbe gilt für die Dateinamenerweiterungen, die in $extensions festgelegtwerden können.

Eine Erweiterung für den Wortgenerator sähe vor, nach einem Leerzeichen miteiner bestimmten Wahrscheinlichkeit mit einem Großbuchstaben zu beginnen.

Die maximale Länge eines Worts liegt zwischen den beiden KonstantenMIN_WORD_LEN und MAX_WORD_LEN. Gemessen wird sie in Symbo-len des Alphabets: Besteht ein Symbol aus mehreren Zeichen, kann so die ma-ximale Wortlänge überschritten werden.

8.6.2 Das Script

52. Dazu bietet jede kryptanalytische Literatur, beispielsweise auch [BAU00], Statistiken an.53. Nach dem Grundsatz der [RFC2795]

<? /* ***************************************************************** Teerfalle für Harvester in PHP Autor: Tobias Eggendorfer (c) 2004, 2005 ***************************************************************** */ /* Konfiguration */ define("LINKS_GENERATED",5); /* Wieviele Links werden pro Seite * erzeugt? */ define("TIME_WAIT",1); /* Zeit in Sekunden, die zwischen * der Ausgabe zweier Links * gewartet wird. */

129No Spam!

Page 130: eBook - No Spam

8 – Harvester blockieren

define("MAX_CONCURRENT_USERS",5); /* Wie oft das Script maximal parallel * laufen darf. */ define("SEM_PERMS",0660); /* Rechte der Semaphore, analog dem * Unix File-System. */ define("MIN_WORD_LEN",5); /* Die minimale Länge eines Wortes * über $alphabet */ define("MAX_WORD_LEN",30); /* Die maximale Länge eines Wortes */ $extensions = array ('php','php3','php4','phtml','shtml', 'html','htm','xhtml'); /* Mögliche Dateinamenserweiterungen * die das Script fuer seine * zufaelligen Links verwendet. */ $alphabet = array ('a','a','a','a', 'b','b','b', 'c', 'd','d', 'e','e','e','e','e','e', 'f','f', 'g','g', 'h','h', 'i','i','i','i','i', 'j', 'k','k','k', 'l','l', 'm','m','m', 'n','n','n','n','n', 'o','o','o','o','o', 'p','p', 'q', 'r','r','r','r','r', 's','s','s','s','s', 't','t','t','t', 'u','u','u','u','u', 'v',

130

Page 131: eBook - No Spam

Beispiel-Teergrube

'w', 'x', 'y', 'z', ' ',' ',' ',' ',' ',' ', '. ', ', ', ': ', 'der ', 'die ', 'das '); /* Alphabet, ueber dem Woerter fuer die Links * zufaellig generiert werden koennen. Durch * Wiederholung einzelner Zeichen wird deren * Auftretenswahrscheinlichkeit gesteuert. */ /* HTTP-Header ausgeben Die Anfrage liefert immer OK, falls Einsatz ueber Error-Handler Die Seite ist immer neu, um eventuelle Proxies zu umgehen. Zusätzlich werden entsprechende Header für Proxies mitgesandt, die Proxies anweisen, die Seite nicht zwischenzuspeichern. Content-Encoding wird wegen W3C-Konformitaet gesandt. */ header("HTTP/1.1 200 OK"); header("Status: 200 OK"); header("Expires: ".gmdate("D, d M Y H:i:s")." GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Content-Encoding: iso-8859-1"); /* HTML-Kopf ausgeben. Das META-Tag ergänzt nochmal die Angaben in der robots.txt und macht unmißverständlich klar, daß die Seite und alle Links auf ihr auf keinen Fall für Spider gedacht sind. Harvester ignorieren aber auch diesen Wink mit dem Gartenzaun fröhlich. */?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html><head>

131No Spam!

Page 132: eBook - No Spam

8 – Harvester blockieren

<title>Links zu vielen E-Mail-Adressen...</title> <META name="ROBOTS" content="NOINDEX, NOFOLLOW"></head><body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000"><H1>Willkommen in Spammer's Paradise.</H1><? /* Ausgabe erzwingen. Dadurch tröpfeln einige Bytes über die Leitung, für den entfernten Rechner entsteht der Eindruck einer langsamen Anbindung. Würde man nicht "flushen", würde der Webserver unter Umständen mit der Übertragung der Seite warten, bis sie vollständig generiert ist, was aufgrund der (gewünscht) langen Zeit zu einem Timeout beim Harvester führen könnte. Das wollen wir aber möglichst vermeiden. */ flush(); /* Key fuer Semaphore erzeugen. */ $sem_key = ftok (__FILE__,'T'); if ($semkey != -1) { /* Key wurde korrekt erzeugt. */ $sem_id = sem_get($sem_key,MAX_CONCURRENT_USERS,SEM_PERMS); if ($sem_id !== FALSE) { /* Eine Semaphore konnte erzeugt / gefunden werden. */ if ( sem_acquire($sem_id) ) { /* Kritischer Abschnitt. * P($sem_id) war erfolgreich. */ /* Erzeuge die Links */ for ($i=0; $i<LINKS_GENERATED; $i++) { /* Die Beschreibung des Links steht in $word */ $word = '';

132

Page 133: eBook - No Spam

Beispiel-Teergrube

for ($j=0; $j<=rand(MIN_WORD_LEN,MAX_WORD_LEN); $j++) { $word .= $alphabet[rand(0,count($alphabet)-1)]; } /* Bestimme den Ausschnitt des zufälligen md5-Hashs, * der als Dateinname verwendet werden soll. */ $basis = rand(0,15); print "<P><A HREF=\"". substr(md5(uniqid(rand(), true)), $basis,$basis+rand(5,27-$basis)). ".". $extensions[rand(0,count($extensions)-1)]. "\">". $word. "</A></P>\n"; flush(); /* Ausgabe erzwingen. */ sleep(TIME_WAIT); /* Verzögerung erzeugen */ } /* Kritischer Abschnitt Ende * V($sem_id) */ if ( !sem_release($sem_id) ) { /* Da passierte was, was nicht passieren sollte: * V($sem_id) ist fehlgeschlagen. * Hier sollte der Admin des Servers informiert * werden! */ die ('Internal Error'); } } // end if sem_acquire } // end if sem_id !== FALSE } // end if semkey != -1 /* HTML-Footer. */?> </BODY></HTML>

133No Spam!

Page 134: eBook - No Spam

8 – Harvester blockieren

8.7 Test

Auch diese Idee habe ich auf ihre Wirksamkeit untersucht. Ich habe dazu einenvirtuellen Root-Server bei einem großen, europäischen Hoster angemietet, ummeinen eigenen Server aus der Schusslinie von Angreifern zu nehmen. Zudemhatte dieser Provider – neben günstigen Preisen – den Vorteil, ein hohes, aberlimitiertes Transfervolumen und eine feste, sich nicht automatisch verlängern-de Vertragslaufzeit anzubieten.

Den Server habe ich – so weit das unter den Einschränkungen virtueller Root-Server möglich ist, gegen Angriffe gesichert. Insbesondere entfernte ich dazujede überflüssige Software von dem System. Denn jede zusätzliche Codezeileerhöht die Wahrscheinlichkeit eines Programmierfehlers, den ein Angreiferausnutzen könnte. Die Dienste, die ich unbedingt laufen lassen musste, kom-pilierte ich von Hand. Das hat den Vorteil, dass – zumindest in einem gewissenUmfang – Speicheradressen variieren und damit Angriffe wie Buffer undStack Overflows oder Format-String-Schwachstellen erschwert werden kön-nen.

Für den Server wurde eine eigene Domain registriert und die DNS-Einträgewurden so eingerichtet, dass jede beliebige Subdomain unter dieser Domainebenfalls auf den Server verwies.

Das vorgestellte Script habe ich zur zusätzlichen Tarnung so erweitert, dass derServername um eine zufällig gewählte Subdomain ergänzt werden konnte. Da-bei wurde die Ergänzung nicht immer, sondern zufallsgesteuert vorgenommen.Dadurch sollten Harvester weiter in die Irre geführt werden: Selbst wenn siedurch Zeitbeschränkungen oder sonstige Einstellungen eine Subdomain alsuninteressant einstufen würden, blieben sie in der Falle. Zudem wird so eineObergrenze für die Zahl der verfolgten Links pro Hostnamen umgangen, diehäufig zur Vermeidung von Endlosschleifen in Spider implementiert werden54.

Die Wartezeit pro Link habe ich für den Test auf 0,75 Sekunden beschränkt,um realen Harvestern, die teilweise mit Zeitgrenzen arbeiten, ausreichendschnelle Antworten zu liefern. Die Auslieferung einer Seite dauert so imSchnitt 15 Sekunden. Das bestätigten auch die Logfiles des Webservers.

54. Siehe dazu: [HEM03]

134

Page 135: eBook - No Spam

Weitere Verbesserungsmöglichkeiten

Auch diese Testseite wurde von zahlreichen Spamfeinden verlinkt. Viele ha-ben dabei das Konzept durchschaut, dass beliebige, zufällige Datei- und Host-namen möglich sind, und unterschiedliche Links auf den Server gesetzt.

Tatsächlich funktionierte die Teergrube auch in der Praxis: Die ausführlichenLogfiles des Webservers zeigten immer wiederkehrende Zugriffe von be-stimmten IP-Adressen. Von mehreren dieser IP-Adressen wurde in de.ad-min.net-abuse.mail unabhängig davon berichtet55, dass auf den entsprechen-den Rechnern Harvester laufen.

Bereits einen knappen Monat nach Inbetriebnahme der Seite verfingen sich dieersten Harvester. Sie waren zu diesem Zeitpunkt bereits 5 Tage in der Falle underzeugten dabei bis zu 700 Page-Impressions. Mit zunehmender Laufzeit derFalle wuchsen die Zugriffszahlen weiter: Bereits wenige Tage später verfingsich ein Harvester so gründlich, dass er innerhalb von zwei Tagen fast 14.000Zugriffe auf unterschiedliche Seiten versuchte.

Vier Monate nach dem Start war der Spitzenreiter immer noch derselbe Rech-ner mit fast 14.000 Zugriffen. Platz zwei erreichte gut die Hälfte: 7512 Abrufe.

Beim Schreiben des Buchs führte ein neuer Harvester mit 19.000 Zugriffen dieHitliste an.

Ich habe zudem meine Test-Harvester gegen die Testseite laufen lassen. Allehaben sich wie erwartet in den Fallen verfangen. Eines der Programme hattedabei zum Schutz vor unendlicher Rekursion eine maximale Linktiefe: DerWert war per Default auf 30 gestellt. Da jede Seite zwanzig Eigenlinks auslie-fert, stattet dieses Programm der Teergrube trotzdem 2030 = 1,07 ∗ 1039 Besu-che ab. Bei einer Besuchszeit von ca. 15 Sekunden pro Seite wäre dieser Har-vester 1,61 ∗ 1040 Sekunden beschäftigt gewesen.

Im Ergebnis ist also festzustellen, dass mit einer solchen Teerfalle tatsächlichHarvester gefangen werden können.

8.8 Weitere Verbesserungsmöglichkeiten

Für einen praktischen Einsatz wünschenswert wäre eine große Verteilung sol-cher Fallen im Netz, um eine hohe Trefferquote durch die Harvester zu errei-chen. Um ein Blacklisting dieser Server zu unterbinden, sollten die Fallen häu-

55. Siehe z.B. den Thread unter http://groups-beta.google.com/group/de.admin.net-abuse.mail/browse_thread/thread/2ae2304f4def109d

135No Spam!

Page 136: eBook - No Spam

8 – Harvester blockieren

fig umziehen und unter zahlreichen Domainnamen erreichbar sein. Wegen derzusätzlich wechselnden IP-Adressen wäre ihr Betrieb mittels eines Diensteswie DynDNS an einer DSL-Flatrate günstig.

Um die Anwender dieser Sammelprogramme nicht zu schnell auf die Falleaufmerksam zu machen, wäre es sinnvoll, wenn auf jeder Trefferseite einigeE-Mail-Adressen ausgegeben werden – die dann zu einer SMTP-Teergrubeführen, wie sie z.B. [DON04a] und [REHWWWa] beschreiben. Das ist vorteil-haft, weil die Programme während der Laufzeit die gefundenen E-Mail-Adres-sen an ihre Benutzer melden. Dadurch sieht der Spammer seine Adressen-sammlung wachsen, der Harvester liefert für seinen Benutzer scheinbarnützliche Daten aus.

Die so gefundenen Adressen sind jedoch für Werbezwecke unbrauchbar. Dasie zudem an SMTP-Teergruben hängen, wird der Spammer zusätzlich nochbeim Versand seiner Werbenachrichten blockiert.

Zu beachten ist dabei jedoch, dass einige Harvester Mengenlimits für die Zahlvon E-Mail-Adressen haben – vermutlich wegen der zunehmenden Verbrei-tung von Teergruben im Netz. Daher sollten pro Ausgabeseite nicht mehr alszwei E-Mail-Adressen angezeigt werden.

Je mehr solcher Teergruben existieren und je mehr Adressen durch geeigneteTarnung unsichtbar gemacht werden, desto uninteressanter wird es für Spam-mer, E-Mail-Adressen mit Hilfe von Spidern zu ermitteln, da der Zeitaufwandfür die Suche im Verhältnis zu den gültigen Mailadressen zu groß wird.

Tatsächlich gibt es immer wieder Meldungen, denen zufolge Spammer mittler-weile dazu übergehen, E-Mail-Adressbücher wurminfizierter Computer aus-zulesen und als Zieladressen ihrer Spammails zu nutzen. Allerdings lassen sichdiese Infektionen mit relativ geringem Aufwand ebenfalls vermeiden, so dassauch diese Quelle mittelfristig versiegen dürfte.

136

Page 137: eBook - No Spam

9 Absichern von Mailinglisten und Newslettern

Mailinglisten und Newsletter sind aus technischer Sicht relativ ähnlich. Mai-linglisten bieten allen Mitgliedern die Möglichkeit, Nachrichten per E-Mailauszutauschen, und ermöglichen damit eine Diskussion. Newsletter sind dage-gen eingeschränkte Mailinglisten: Hier dürfen nur ein oder wenige ausge-zeichnete Mitglieder Mails senden. Newsletter werden daher üblicherweisenicht zur Diskussion, sondern zum Einweg-Nachrichten-Versand genutzt. Ty-pische Newsletter enthalten Werbung für Produkte oder ein Unternehmen, ei-nige bieten auch aktuelle Informationen zu beliebigen Themen.

9.1 Sicherheitsziele

In jedem Fall werden über eine Mailadresse zahlreiche Empfänger erreicht.Kann ein Spammer also die Adresse eines Newsletters oder einer Mailinglistein seinen Besitz bringen und dorthin Nachrichten senden, erreicht er mit gerin-gem Aufwand zahlreiche Empfänger.

Aber auch die Liste der Adressaten allein ist für Spammer Gold wert: Sie ent-hält ausschließlich gültige, aktuell gelesene Mailadressen. Solche so genann-ten „verified“ Adressen werden unter Spammern zu deutlich höheren Preisengehandelt.

Damit ergeben sich zwei Sicherheitsziele bezüglich Mailinglisten und News-lettern: Einmal muss sichergestellt werden, dass nur berechtigte PersonenNachrichten an die Listen schicken dürfen, um einen Missbrauch der Listen-adresse durch Spammer zu verhindern. Zum anderen muss die Liste derE-Mail-Adressen vor unberechtigtem Zugriff wirkungsvoll geschützt werden.

Ein weiteres Problem habe ich weiter oben in Zusammenhang mit E-Cards undder Send-To-A-Friend-Funktion bereits angesprochen: Es kommt immer wie-der vor, dass versehentlich oder vorsätzlich Mailadressen von unbeteiligtenDritten bei solchen Diensten angemeldet werden. Für diesen Dritten stellt sichjede Nachricht aus der Mailingliste oder des Newsletters als UBE bzw. Spamdar. Vor solchen Bedienfehlern muss die Listensoftware auch schützen.

137No Spam!

Page 138: eBook - No Spam

9 – Absichern von Mailinglisten und Newslettern

9.2 Anmeldeverfahren

Zum Anmelden an Mailinglisten gibt es allgemein drei Verfahren, die sehrausführlich unter anderem in http://www.spamhaus.org/mailinglists.html und[GOO04] beschrieben sind: Das Spam-gefährlichste nennt man gemeinhin„Opt-Out“. Das heißt, man wird ohne eigenes Zutun angemeldet und muss sichexplizit abmelden, um keine weiteren Nachrichten mehr zu empfangen. DieAlternativen sind so genannte „Opt-In“-Verfahren, bei denen man sich explizitanmelden muss. Je nach Absicherung von Bedienfehlern spricht man von„Single-Opt-In“ oder „Double-Opt-In“.

Im ersten Fall wird die Anmeldung unmittelbar akzeptiert, im zweiten wird dieneue E-Mail-Adresse verifiziert, indem an sie eine E-Mail gesandt wird, diedann bestätigt werden muss. Erfolgt diese Bestätigung nicht, wird die Mail-adresse nicht in den jeweiligen Verteiler aufgenommen.

9.2.1 Opt-Out

Offensichtlich ist das Opt-Out-Verfahren bei Spammern beliebt: Die Anmel-dung ist überflüssig, man kann einfach geharvestete Adressen verwenden unddiese anmailen. Es besteht für den Empfänger kein Schutz vor unberechtigterEintragung. Die Existenz einer Opt-Out-Möglichkeit dokumentiert dabei häu-fig auch nur das Verständnis der Spammer vom amerikanischen CAN-SPAM-Act, der einen Abmeldelink fordert. Denn der Link ist entweder funktionslos,führt ins Leere oder er dient gar der Verifikation der Empfängeradresse.

Eine solche Art der Anmeldung an einem Newsletter ermöglicht es nach deut-schem Recht, den Betreiber des Newsletters abzumahnen und zur Unterlas-sung aufzufordern. Zusammen mit den allfälligen Beschwerden beim Providerdes Versenders und der typisch daraus resultierenden Zugangssperre, entstehtfür einen seriösen, aber schlecht beratenen Betreiber eines solchen Newsletterserheblicher Schaden – für den Spammer steigt das wirtschaftliche und rechtli-che Risiko erheblich.

9.2.2 Einfacher Opt-In

Daher bietet sich der Einsatz eines Opt-In-Verfahrens an. Denn dann hat derEmpfänger der Zusendung von E-Mails zugestimmt. Dabei ist Opt-In so zuverstehen, dass der Empfänger entweder durch Zusendung einer E-Mail an ei-

138

Page 139: eBook - No Spam

Anmeldeverfahren

nen Listserver oder aber durch Eingabe seiner Mailadresse auf einer Webseiteexplizit der Zusendung von E-Mail-Werbung zugestimmt hat. Manche Spam-mer fassen den Begriff „Opt-In“ dagegen sehr weit und verstehen unter Opt-Inauch die Eintragung einer Mailadresse durch einen Harvester, was man übli-cherweise eher als Opt-Out bezeichnen würde.

Beim einfachen Opt-In wird die Mailadresse des Empfängers nicht geprüft.Somit ist es jedem möglich, einen Dritten einzutragen. Das muss nicht mutwil-lig geschehen, auch versehentliche Tippfehler können eine falsche Eintragungzur Folge haben. So könnte der Besitzer der Adresse [email protected] vertippen und versehentlich z.B. [email protected] eingeben – dieeiner anderen Steffi gehört. Die erhält dann Nachrichten, ohne sie bestellt zuhaben.

Daher ist auch die Verwendung eines einfachen Opt-Ins gefährlich. Denn dieBeweislast für die korrekte Eintragung der Mailadresse in die Liste liegt beimVersender. Kann dieser nicht zweifelsfrei nachweisen, dass sich genau derje-nige angemeldet hat, der angemailt wurde, ist er unterlassungs- und gegebe-nenfalls auch schadensersatzpflichtig.

Dabei ist die Beweisführung für den Listenbetreiber extrem aufwendig: Diemeisten Internetsurfer verwenden dynamische IP-Adressen, über die sie nurmit hohem Aufwand, wenn überhaupt, zurückverfolgt werden können. Damitlässt sich aus den Daten, die der Webserver zur Verfügung hat, der tatsächlicheÜbeltäter kaum ermitteln.

9.2.3 Double-Opt-In

Diese Lücke schließt das Double-Opt-In-Verfahren. Manche Autoren bezeich-nen es auch als „confirmed Opt-In“ oder qualifiziertes Opt-In. Die Begriffesind synonym.

Der Ablauf der Anmeldung beginnt ähnlich wie beim Opt-In-Verfahren: DerInteressent trägt seine E-Mail-Adresse in ein Formular ein oder schickt an ei-nen Listenserver eine Anmeldemail. Um Tippfehler in der Mailadresse undAnmeldungen durch Dritte zu verhindern, wird vom Listserver eine E-Mail andie genannte Adresse generiert. Die E-Mail enthält eine interne, eineindeutige,nicht vorhersagbare Nummer, die der Empfänger dieser E-Mail wahlweise perE-Mail zurückschicken oder auf einer Webseite eintragen muss. Teilweise

139No Spam!

Page 140: eBook - No Spam

9 – Absichern von Mailinglisten und Newslettern

wird der Eintragevorgang erleichtert, indem ein Link mit dieser Nummer alsGET-Parameter mit gesandt wird.

Erst nach dieser Bestätigung wird die E-Mail-Adresse tatsächlich am Newslet-ter angemeldet.

Diese zusätzliche Bestätigung wird als sicher erachtet, weil zum Abrufen derE-Mail üblicherweise ein Passwort notwendig ist und somit nur der tatsächli-che Inhaber der Mailadresse die zugesandte Nummer kennen sollte.

Ein solches Anmeldeverfahren ist auch aus rechtlicher Sicht günstig: Es be-weist zumindest dem ersten Anschein nach, dass sich der Empfänger tatsäch-lich angemeldet hat. Der Empfänger muss nun diesen Beweis erschüttern.

Praktisch jedoch ist dieses Verfahren teilweise schwierig: Viele Anwendersind schlicht überfordert, die gewünschte Rückmail zu senden oder den not-wendigen Link anzuklicken. Als Betreiber einiger Mailinglisten habe ich zu-mindest diese Erfahrung machen müssen. Immer wieder erreichen mich Mailsvon potenziellen Teilnehmern, die diesen zusätzlichen Schritt nicht ausgeführthaben und sich wunderten, warum sie keine Mails bekommen.

Sinnvollerweise verifiziert man auch die E-Mail-Adressen solcher Teilnehmer– dann allerdings manuell durch wechselseitige Kommunikation, bevor mansie an der Liste anmeldet. Schließlich kann sich auch in die Absenderadresseeiner Mail ein Schreibfehler eingeschlichen haben.

Das Double-Opt-In-Verfahren ist meines Erachtens trotz der Schwäche, man-che Anwender zu überfordern, das einzig sinnvolle System für Anmeldungenbei E-Mail-Verteilern, denn es schützt den Betreiber effektiv vor Missbrauchseiner Infrastruktur. Dass das Verfahren manche Anwender überfordert, lässtsich vermutlich nie ganz vermeiden.

Man kann lediglich versuchen, diesen zweiten Opt-In-Schritt DAU-sicher zugestalten. Dabei scheint es günstiger, einen Link anzugeben, statt eine Ant-wort-E-Mail mit einem definierten Text zu fordern. Auch empfiehlt es sich,eine ausführliche Beschreibung auf Deutsch einzufügen, die erklärt, warumder Link angeklickt werden soll. Englischsprachige Texte scheinen von durch-schnittlichen DAUs generell ignoriert oder nicht verstanden zu werden.

Zudem sollte, sofern die Anmeldung über eine Webseite erfolgen kann, in derUmgebung des Anmeldelinks das Double-Opt-In-Verfahren erläutert werdenund eine Kontaktmöglichkeit angeboten werden, für den Fall, dass es Schwie-rigkeiten gibt.

140

Page 141: eBook - No Spam

Laufender Betrieb

Immer wieder werden aber auch Stimmen laut, die sich gegen ein zu einfachesAnmeldeverfahren aussprechen. Sie argumentieren, dass Personen, die nicht inder Lage sind, einfache Anweisungen in einer E-Mail zu befolgen, auch nichtin der Lage sein werden, sich später abzumelden, wozu wiederum der Versandeiner E-Mail notwendig wäre. Vielmehr würden sie sich, wenn sie den ehedembestellten Newsletter nicht mehr lesen wollen, über den Betreiber als ver-meintlichen Spammer beschweren. Reale Fälle belegen dieses Verhalten. Ge-rade in solchen Fällen ist die Beweiskraft eines Double-Opt-In nicht zu unter-schätzen.

9.2.4 Anmeldebestätigung

Viele Listserver bieten neben dem Double-Opt-In zusätzlich die Option, An-meldeanträge durch den Listmaster zusätzlich bestätigen zu lassen. Dabei wirdzuerst die übliche Double-Opt-In-Routine durchlaufen und anschließend derListmaster über den neuen Interessenten informiert. Der Listmaster muss nundiese Anmeldung manuell bestätigen.

Dieser letzte Schritt macht vor allem dann Sinn, wenn die Liste entweder nureinem geschlossenen Personenkreis zugänglich sein soll, von dem die E-Mail-Adressen bekannt oder nachfragbar sind, oder, wenn man die Mailadressen je-des Anmeldeantrags individuell prüfen möchte, um beispielsweise unliebsameMitglieder von Anfang an zu blockieren.

Diese Maßnahme ist allerdings nur bei kleineren Listen sinnvoll – prasseln täg-lich zahllose Anmeldungen auf den Listserver ein, ist diese zusätzliche Über-prüfung häufig nicht mehr realisierbar.

9.3 Laufender Betrieb

Die Liste der E-Mail-Adressen der Mitglieder muss im laufenden Betrieb vordem unberechtigten Zugriff Dritter geschützt werden. Gleichzeitig muss ver-hindert werden, dass Spammer an die Listenadresse ihre Werbemails schickenkönnen.

141No Spam!

Page 142: eBook - No Spam

9 – Absichern von Mailinglisten und Newslettern

9.3.1 Schutz der Mailadressen

Zum Schutz der Mailadressen der Mitglieder sollten sie keinesfalls veröffent-licht werden: In Zusammenhang mit dem jeweiligen Thema der Liste ist dassonst eine einfache Möglichkeit, zielgruppengerecht zu spammen.

Archivfunktion

Allerdings kollidiert das Ziel in vielen Fällen mit dem Wunsch nach einem Ar-chiv der Liste im WWW. In einem solchen Archiv werden die Nachrichten, dieüber die Liste ausgetauscht wurden, mit den wichtigsten Header-Informatio-nen angezeigt und durchsuchbar gemacht.

Solche Listenarchive können vielfältigen Nutzen stiften: Lassen sie sich mitSuchmaschinen durchsuchen, können auch Nicht-Listenmitglieder auf Ergeb-nisse der Diskussionen in der Liste zugreifen. So können Nachrichten aus denMailinglisten bei Securityfocus oder Insecure von Dritten gelesen werden, umstattgefundene Angriffe zu analysieren.

Durch das Archiv können so ständig wiederkehrende Standardfragen aus derListe ferngehalten werden, die Mailflut wird eingedämmt, die Teilnehmer derListe können sich auf wesentliche und bislang unbeantwortete Fragen konzen-trieren.

Für Dritte, die über eine Suchmaschine auf die Mailingliste stoßen, ist dabeiein vollwertiges Archiv wegen des erhaltenen Kontext in aller Regel günstigerals eine FAQ.

Lässt sich das Archiv von Suchmaschinen durchsuchen, ist es zwangsläufigauch für Harvester suchbar. Da Suchmaschinen erwünscht sind, bleiben Har-vester zwangsläufig nicht aus, daher sollten bei Ausgabe des Archivs die Mai-ladressen mit einem der weiter oben beschriebenen Verfahren für Harvesterunlesbar gemacht werden – oder man verwendet das derzeit bei Google-Groups verwendete Verfahren, bei dem E-Mail-Adressen durch Einfügen vondrei Punkten „...“ verkürzt werden, was sie für Spammer wertlos macht.

Allerdings ist es dann auch einem Leser des Archivs unmöglich, Kontakt zumUrsprungsposter aufzunehmen. Gerade bei ungewöhnlichen oder sehr aufwen-digen Fragen und Lösungsideen kann aber das eine gewünschte Funktion sein.Daher bietet es sich an, eines der in diesem Buch beschriebenen Verfahren zuverwenden.

142

Page 143: eBook - No Spam

Laufender Betrieb

Möchte man das Archiv nur für den internen Gebrauch nutzen, lässt sich dasviel einfacher realisieren: Man schützt die Archivseiten mit einem Passwort,das nur die Mitglieder der Liste kennen sollten.

Dieses Verfahren verwendet beispielsweise die Mailingliste Notfallrettung56.Das Passwort für den Mitgliederbereich wird dabei einmal monatlich geändertund vom Listmaster per E-Mail an die Listenmitglieder kommuniziert.

Ein Harvester sollte nicht im Besitz des Passworts sein und bleibt damit aus-gesperrt – vorausgesetzt, der Webserver wurde sinnvoll konfiguriert. Sinnvollist allerdings, das Passwort regelmäßig zu wechseln, damit Spammer nicht zueinfach in seinen Besitz gelangen können – auch wenn die HTTP-Basic-Au-thentication nicht gegen Brute-Force-Angriffe geschützt ist.

Adressenlisten

Der Listserver benötigt intern zur Weiterleitung einer Mail an alle Mitgliedereine Liste mit deren E-Mail-Adressen. Diese Liste sollte keinesfalls abrufbarsein – was jedoch zahlreiche Listserver in ihrer Standardkonfiguration ermög-lichen.

So muss in Majordomo57 der Befehl who, der die Mailadressen aller Listenmit-glieder ausgibt, zunächst in der Konfiguration gesperrt werden. Andere List-server, wie z.B. mailman58, bieten ähnliche Funktionen an, die auch deaktiviertwerden sollten.

Gleichzeitig muss sichergestellt sein, dass die Listen nicht über eine Webseite– womöglich über einen Directory-Traversal-Angriff – ausgelesen werdenkönnen. Daher sollte, wird die Liste auf einem Rechner betrieben, der gleich-zeitig auch als Webserver fungiert, das Listenverzeichnis nur für die Listen-software lesbar sein, keinesfalls jedoch für den Nutzer, unter dessen Rechtender Webserver läuft.

Haben verschiedene Nutzer Shell- oder FTP-Zugriff auf einen solchen Server,sollten auch diese aufgrund der Nutzerrechte keine Möglichkeit haben, dieMailinglisten auszulesen. Notfalls müssen Access Control Lists (ACL) imple-mentiert werden.

56. Zu finden unter http://www.mailingliste-notfallrettung.de 57. Siehe http://www.greatcircle.com/majordomo/ 58. Siehe z.B. [HEIN05] und [HEIN04]

143No Spam!

Page 144: eBook - No Spam

9 – Absichern von Mailinglisten und Newslettern

Hinweise zur allgemeinen Absicherung eines Servers geben unter anderem[ANO01], [TAN02], [McN04], [KIR00] oder auch [LOC04].

9.3.2 Schutz der Liste

Auch die E-Mail-Adresse der Liste selbst kann Ziel von Spam sein. Spam aneine Listenadresse ist aus Sicht des Spammers sehr effizient – je nach Listewerden so leicht mehrere hundert bis tausend Mitglieder mit einer einzigenMailadresse erreicht. Aber auch zufälliges Bespammen der Liste, weil die Lis-tenadresse beispielsweise von einem Harvester gefunden wurde, ist lästig undsollte vermieden werden.

Einschränken der Sender

Majordomo und auch Mailman bieten daher an, die Liste der Personen, dieNachrichten an die Liste schicken dürfen, zu beschränken.

In Diskussionslisten dürfen im Allgemeinen alle Mitglieder Nachrichten schi-cken, daher wird man diese Liste so konfigurieren, dass nur Mitglieder postendürfen. Das lässt sich bei Majordomo durch eine Zeile im Config-File der Listeeinrichten:

Dabei ist „beispiel“ der Name der Datei, in der die Mitglieder der Liste aufge-listet sind. Die Datei heißt dabei genauso wie die Liste.

Manche Listenmitglieder verfügen über mehrere Mailadressen und möchtenmit allen Adressen posten können, jedoch nur auf einer Adresse mailen. Daslässt sich durch eine zusätzliche Datei beispiel.zusatz realisieren, die dieseZweitadressen enthält. Die notwendige Direktive im Config-File lautet dann:

Einschränken der Inhalte

Einige Mailinglisten, z.B. die Bug-Mailingliste von MySQL, sollen nach De-finition für alle Nutzer offen stehen. Insbesondere darf auch jemand an dieseListen posten, der kein Mitglied ist. Das ist auch sinnvoll, denn die Fehler undProbleme, auf die Anwender von MySQL stoßen, sollen auf einfachem Weg andas MySQL-Entwicklerteam kommuniziert werden.

restrict_post = beispiel

restrict_post = beispiel:beispiel.zusatz

144

Page 145: eBook - No Spam

Laufender Betrieb

Um hier einen Schutz vor Spam zu erreichen, müssen Nachrichten häufig be-stimmte Code-Wörter enthalten. Im Fall der genannten Bug-Mailingliste istdas „How to reproduce:“. Enthält eine Nachricht nicht diesen Text, wird sie zu-rückgewiesen.

Dieser Schutz gegen Spam lässt sich allerdings bewusst aushebeln. Das setztaber immerhin voraus, dass der Spammer gezielt diese Mailingliste belästigenmöchte. Insofern erscheint diese Lösung als ein sinnvoller Kompromiss zwi-schen den Zielen: Zugänglichkeit für die Allgemeinheit und Schutz vor Spam.

Schutz des Alias

Majordomo nutzt die Funktion der Aliase für E-Mail-Adressen intensiv. Somüsste bei der Verwendung von Sendmail59 die /etc/aliases für eine Mailing-liste mit dem Namen „beispiel“ unter anderem um folgende Zeilen erweitertwerden:

Damit werden zunächst alle Mails, die auf dem lokalen Account „beispiel“eintreffen, an den Majordomo übergeben, der sie nach einer Prüfung an den lo-kalen Account „beispiel.out“ weiterleitet. Dieser Account ist ein Alias für dieE-Mail-Adressen, die in der Datei /path/to/majordomo/lists/beispiel stehen,der Liste der Empfänger der Mailingliste.

Ein Spammer, der gezielt diese Liste mit seinen Werbemails belästigen möch-te, könnte nun auf die Idee kommen, eine E-Mail direkt an „beispiel.out“ zusenden. Diese Adresse könnte er beispielsweise aus veröffentlichten Header-Daten in einem öffentlich zugänglichen Archiv der Mailingliste erlangt haben.

Selbst wenn diese Adresse über die „virtusertable“ nicht zugeordnet ist, kannsie von außen erreicht werden, indem eine Nachricht direkt an die [email protected] gesendet wird – wenn die Mailingliste auflists.example.com läuft.

Einen derartigen Angriff kann man zumindest dadurch erschweren, dass manin /etc/mail/virtusertable die folgende Zeile einträgt:

59. Siehe dazu http://www.sendmail.org und [COS97]

beispiel: "|/path/to/majordomo/wrapper resend -l beispiel beispiel.out"beispiel.out: :include:/path/to/majordomo/lists/beispiel

[email protected] :error:nouser User unkown

145No Spam!

Page 146: eBook - No Spam

9 – Absichern von Mailinglisten und Newslettern

Die Zeile muss gegebenenfalls für andere Hostnamen des Listservers zusätz-lich eingefügt werden. Damit kann zumindest nicht mehr mittels eines Bulk-mailers an diese Adresse gemailt werden.

Allerdings ist es noch möglich, sich direkt mit dem SMTP-Server auf demListserver zu verbinden und im SMTP-Envelope die Zeile „RCPT TO: bei-spiel.out“ anzugeben und damit die Mail an die Liste zuzustellen.

Auch dieser Angriff lässt sich noch weiter erschweren, indem in der /etc/mail/sendmail.cf zusätzliche Konfigurationsanweisungen gegeben werden, die an-hand von regular expressions den Header der Mail prüfen und nach bestimm-ten Mustern suchen, die vom Majordomo eingefügt werden, von einem An-greifer jedoch sehr wahrscheinlich nicht eingefügt würden.

Die genaue Darstellung dieser Konfiguration würde jedoch den Rahmen dieserDarstellung sprengen. Weitergehende Erläuterungen finden sich dazu aufhttp://www.sendmail.org/m4/anti_spam.html und in [COS97].

Ein geschickter Angreifer könnte auch diesen Schutz wiederum umgehen, in-dem er geeignete Header-Daten fälscht und mitliefert. Dazu müsste er natür-lich die relevanten Header-Informationen erraten. Der Aufwand dürfte jedochin aller Regel in keinem Verhältnis zum Nutzen für einen Spammer stehen.

Die Alternative ist, dass er eine Mail mit gefälschten Absenderdaten ver-schickt, so dass sie den Anschein erweckt, sie käme von einem Listenmitglied.Außer einer Moderation der Liste gibt es gegen diesen Angriff derzeit keineMöglichkeiten.

9.4 Zusammenfassung

Werden alle beschriebenen Maßnahmen umgesetzt, lassen sich Mailinglisten,die ohne Zweifel ein wichtiges Kommunikationsmittel im Internet darstellen,problemlos betreiben. Die Maßnahmen stellen in ihrer Kombination einerseitssicher, dass der Betreiber der Liste nicht versehentlich zum Mitstörer an Spamwird, andererseits garantieren sie, dass ein Spammer sich nicht auf einfacheWeise der Liste zur Aussendung seiner Werbung bemächtigen kann.

146

Page 147: eBook - No Spam

10 Zusammenfassung

Alle vorgestellten Methoden zielen darauf ab, Spam zu verhindern, bevor erMailboxen überfüllt und die E-Mail-Kommunikation unmöglich macht. Dazubiete ich Ihnen im Wesentlichen zwei verschiedene Verfahren an: Das ersteverfolgt das Ziel, Harvester am Auffinden von E-Mail-Adressen zu hindern.Das ist rein passiv.

Die Alternative ist ein aktives Bekämpfen der Harvester durch eine Teergrube,die die Harvester ausbremst und dadurch blockiert. Das ist deutlich aggressiverund sollte gründlich überlegt werden. Die vorgestellte Teergrube klammert da-bei ordentliche Spider durch eine geeignete robots.txt aus, wodurch sie diegängigen Standards respektiert – ein Verhalten, das leider längst nicht alleTeergruben im Netz an den Tag legen.

Da die Teergrube eine Art Angriff auf Harvester darstellt, läuft ihr Betreiberauch eher Gefahr, Opfer von Gegenangriffen zu werden. Sie sollten sich diesesProblems, falls Sie eine Falle betreiben wollen, stets bewusst sein und entspre-chende Sicherheitsvorkehrungen treffen.

Denkbar ist es auch, eine Teergrube noch aggressiver agieren zu lassen – sokönnte man über einen Cron-Job die Rechner, die am häufigsten auf die Fallezugreifen, aus den Logfiles heraussuchen und diese automatisiert einem Deni-al-of-Service-Angriff auszusetzen. Da die meisten Harvester unter Windowslaufen, eröffnen sich zahlreiche Möglichkeiten – sei es der Ping-of-death60

oder der kürzlich wieder aufgetretene LAND-Angriff auf Windows-XP-Syste-me61.

Allerdings begibt man sich mit solcherlei Selbstjustiz schnell in eine rechtlichbedenkliche Situation und läuft Gefahr, selbst wegen Straftaten verurteilt zuwerden. Nicht nur die Strafbarkeit, sondern auch moralische Erwägungensprechen gegen ein solches Vorgehen. Schließlich soll der eigene E-Mail-Ac-count vor Spam geschützt werden und nicht ein Rechner eines möglicherweiseunbeteiligten Dritten gehackt werden.

60. Dieses Beispiel ist bewusst gewählt – die meisten Systeme sind dagegen mittlerweile immun. Siehe dazu z.B. [PEI04], [ZIE99]

61. Siehe dazu z.B.: [KUC05] mit weiteren Quellen

147No Spam!

Page 148: eBook - No Spam

10 – Zusammenfassung

Dabei ist der rechtliche Rahmen nicht nur im aktiven Kampf gegen Spammerrelevant, sondern auch und erst recht beim passiven Tarnen der Mailadressen.Schließlich fordert das Gesetz die Angabe einer E-Mail-Adresse. Daher sinddie vorgestellten Verfahren alle vor dem Hintergrund der möglichen rechtli-chen Implikationen diskutiert worden.

Meine eigene Studie und [CDT03] belegen, dass eine effiziente Tarnung derE-Mail-Adressen auf einer Webseite die Zusendung von Spam nachhaltig ver-hindern kann. [CDT03] hat zudem herausgefunden, dass auch das nachträgli-che Entfernen einer E-Mail-Adresse von einer Webseite zu einer Spamreduk-tion führen kann.

Günstig ist die derzeitige Rechtsprechung in Deutschland, hat sich doch ein-mal eine Spammail in die eigene Mailbox verirrt: Es wird einheitlich ein so-wohl wettbewerbs- als auch haftungsrechtlicher Unterlassungsanspruch gegenden Spammer als gegeben angenommen. Dabei fühlt sich die deutsche Justizaufgrund des Begehungsortprinzips weltweit zuständig, lediglich die Zustel-lung ins Ausland könnte sich schwierig gestalten.

In Deutschland ist die strafrechtliche Relevanz von Spamming noch umstrit-ten62, auch wenn mittlerweile Gesetzesinitiativen existieren, die ähnlich demUS-amerikanischen CAN-SPAM-Act die Fälschung von Header-Daten unterStrafe stellen wollen.

Eben dieses Fälschen wurde in den USA mittlerweile einigen Spammern zumVerhängnis: Die ersten sind bereits verhaftet63.

Um einer Strafe zu entgehen und sich auch vor den vorgestellten Verfahrenbesser zu schützen, gehen Spammer leider mittlerweile vermehrt dazu über,Würmer und Trojaner einzusetzen, die auf den Festplatten der infiziertenRechner nach E-Mail-Adressen suchen.

Allerdings lässt sich der eigene Rechner mit minimalem Aufwand, durch dieInstallation geeigneter und vor allem korrekt konfigurierter Firewall-Systemeund Virenscanner, vor diesen Schadprogrammen schützen64.

62. Siehe z.B.: [FRA04] und [FRA04a]63. Siehe dazu: [LÖD04]64. Werfen Sie dazu einen Blick in: [EGG04d], [EGG05d] und [ZIE99].

148

Page 149: eBook - No Spam

Zusammenfassung

Insgesamt erscheint mir die Kombination aus sinnvoll gestalteten Webseiten,sicheren Systemen und einer harten Rechtsprechung wesentlich erfolgverspre-chender als die mühselige Einführung neuer, einschränkender Systeme zum E-Mail-Versand65 – das Internet ist schließlich nicht mehr das ARPANET, das ineiner Nacht auf das IP-Protokoll umgestellt werden konnte.

65. Siehe dazu z.B.: [BAG04]

149No Spam!

Page 150: eBook - No Spam
Page 151: eBook - No Spam

Literaturhinweise

[AND04a] Andresen, Fred, Recht einfach. Leser fragen, der Linux-Magazin-Ratgeber antwortet. Webimpressum als Grafik, 2004, in: Linux Magazin 10/2004, Linux New Media, München

[ANO01] Anonymous, Maximum Linux Security. A Hacker's Guide to protecting your Linux, Sams Publishing, Indianapolis, 2001

[BAC04b] Bachfeld, Daniel, Erste Fälle von Phishing-Opfern bekannt geworden [Update], 2004, http://www.heise.de/newsticker/meldung/50398

[BAG04] Bager, Jo, Fischer von Molland, Michael, Wider die E-Mail-Massen. Neue Verfahren gegen Spam, 2004, in: c't, Heise, Hannover

[BAU00] Bauer, Friedrich L., Entzifferte Geheimnisse. Methoden und Maximen der Kryptologie, Springer Verlag, Berlin, 2000

[BAU93] Bauer, Friedrich L., Kryptologie, Springer, Berlin, 1993

[BELL03] Bell, Keith, Obfuscating e-mail addresses, 2003, http://www.december14.net/ways/js/nospam.shtml

[BER03] Berbig, Frank, E-Post vom Sonderling. Ein Mailserver auf Basis von Qmail, 2003, in: Linux Magazin 05/2003, Linux New Media, München

[BER03a] Berbig, Frank, Safer Mail. Qmail abdichten, 2003, in: Linux Magazin 08/2003, Linux New Media, München

[BEU02] Beutelspacher, Albrecht, Kryptologie, Vieweg, Wiesbaden, 2002

[BEU02a] Beutelspacher, Albrecht, Geheimsprachen. Geschichte und Techniken, Beck, München, 2002

[CAPTCHA] von Ahn, Luis, Blum, Manuel, Hopper, Nicholas, Langford, John, The Captcha-Project. Telling Humans and Computer apart (Automatically), 2004, http://www.captcha.net

[CDT03] Center for Democracy and Technology, Why am I getting all this spam?, 2003, http://www.cdt.org/speech/spam/030319spamreport.pdf

[COS97] Costales, Bryan, Allman, Eric, Sendmail. Second Edition, O'Reilly, Sebastopol, 1997

151No Spam!

Page 152: eBook - No Spam

Literaturverzeichnis

[DON04a] Donnerhacke, Lutz, Teergrubing Wrapper, 2004, http://www.iks-jena.de/mitarb/lutz/usenet/antispam.html

[EGG04] Eggendorfer, Tobias, Privatadresse. Homepages spamsicher gestalten, 2004, in: Linux User 05/2004, Linux New Media, München

[EGG04a] Eggendorfer, Tobias, Ernte - nein danke. E-Mail-Adressenjägern auf Webseiten eine Falle stellen, 2004, in: Linux Magazin 09/2004, Linux New Media, München

[EGG04c] Eggendorfer, Tobias, Stop Spam, Eigenverlag der Münchner Volkshochschule, München, 2004

[EGG04d] Eggendorfer, Tobias, Safer Surfing, Eigenverlag der Münchner Volkshochschule, München, 2004

[EGG04e] Eggendorfer, Tobias, Sicher Mailen. Kryptographie im Internet, Eigenverlag der Münchner Volkshochschule, München, 2004

[EGG04f] Eggendorfer, Tobias, Adres zastrzezony. Projektowanie stron internetowych chronionych przed spamem, Linux New Media, München, 2004

[EGG04g] Eggendorfer, Tobias, Private address. Design spamproof homepages, Linux New Media, München, 2004

[EGG04h] Eggendorfer, Tobias, Fara spam - Tehnici prin care va puteti face adresa email invizibila pentru spidere, Linux New Media, München, 2004

[EGG05] Eggendorfer, Tobias, Datenbanksysteme für Wirtschaftsinformatiker. Eine Einführung, BoD, Norderstedt, 2005

[EGG05a] Eggendorfer, Tobias, Methoden der präventiven Spambekämpfung im Internet, 2005

[EGG05b] Eggendorfer, Tobias, Möglichkeiten der Prävention der Zusendung unerwünschter Werbe-E-Mails, 2005, in: Lecture Notes in Informatics, Köllen Verlag, Bonn

[EGG05c] Eggendorfer, Tobias, Spam proof homepage design. Methods and results of an ongoing study, ApacheCon Europe 2005

[EGG05d] Eggendorfer, Tobias, Gegengift. Virenscanner auf Linux-Servern: Fünf Hersteller im Vergleich, in: Linux Magazin Sonderheft 03/2005, Linux New Media, München, 2005

152

Page 153: eBook - No Spam

Literaturhinweise

[EGG05g] Eggendorfer, Tobias, Mix it, Baby. Mit dem Java Anonymous Proxy unbeobachtet surfen, 2005, in: Linux Magazin 08/2005, Linux New Media, München

[EGG05h] Eggendorfer, Tobias, Anonyme E-Mail, 2005, in: Linux Magazin 08/2005, Linux New Media, München

[FÖR05] Förtsch, Torsten, Eingriff ins Getriebe. Apache-interna mit mod_perl programmieren, Linux New Media, München, 2005

[FRA04] Frank, Thomas, You've got (Spam-)Mail. Zur Strafbarkeit von E-Mail-Werbung, 2004, in: Computer und Recht, Dr. Otto Schmidt Verlag, Köln

[FRA04a] Frank, Thomas, Zur strafrechtlichen Bewältigung des Spamming, 2004

[FREY02] Freyermuth, Gundolf S., Kommunikette 2.0, dpunkt, Heidelberg, 2002

[FRI02] Friedl, Jeffrey E. F., Mastering Regular Expressions, O'Reilly, Sebastopol, 2002

[GOO04] Goodman, Danny, Spam Wars. Our last best chance to defeat spammers, scammers, and hackers, Selected Books, New York, 2004

[GRA04] Graham-Cumming, John, Die Tricks der Spammer, 2004, in: Hackin9, Software-Wydawnictwo Sp. z.o.o, Warschau

[GRAV03] Freiherr von Gravenreuth, Günther, Kleinjung, Alexander J., Sind kostenpflichtige Mehrwertdienste-Rufnummern im Rahmen der Anbieterkennung gemäß §6 TDG zulässig?, 2003, http://www.jurpc.de/aufsatz/20030273.htm

[GUN04] Gunton, Neil, Stopping Spambots: A Spambot Trap. Using Linux, Apache, mod_perl, Perl, MySQL, ipchains and Embperl, 2004, http://www.neilgunton.com/spambot_trap/

[HEIN04] Heinlein, Peer, Das Postfix Buch. Sichere Mailserver mit Linux, Open Source Press, München, 2004

[HEIN05] Heinlein, Peer, Massenversand. Workshop: Mailinglisten mit Mailman sicher betreiben, 2005, in: Linux Magazin, Linux New Media, München

[HEM03] Hemenway, Kevin, Calishain, Tara, Spidering Hacks. 100 Industrial-Strength Tips & Tools, O'Reilly, Sebastopol, 2003

153No Spam!

Page 154: eBook - No Spam

Literaturverzeichnis

[HOG04] Hoglund, Greg, McGraw, Gary, Exploiting Software. How to break code, Addison-Wesley, Boston, 2004

[KIR00] Kirch, Olaf; Dawson, Terry, Linux Network Administrator's Guide, Second Edition, O'Reilly, Sebastopol, 2000

[KOS94] Koster, Martijn, A Standard for Robot Exclusion, 1994, http://www.robotstxt.org/wc/norobots.html

[KOZ04] Koziol, Jack et. al., The Shellcoder's Handbook. Discovering and Exploiting Security Holes, Wiley Publishing, Indianapolis, 2004

[KUC05] Kuch, Erich, Uralter LAND-Angriff funktioniert wieder im aktuellen Windows, 2005, in: Heise Newsticker, Heise, Hannover

[LOC04] Lockhart, Andrew, Network Security Hacks. 100 Industrial-Strength Tips & Tools, O'Reilly, Sebastopol, 2004

[LÖD04] Löding, Torge, Verhaftungswelle gegen Spammer in den USA, 2004, http://www.heise.de/newsticker/meldung/50375

[MAT97] Matzke, Sascha, Q-Mail - Eine echte Alternative, 1997, in: Linux Magazin 05/97, Linux New Media, München

[McN04] McNab, Chris, Network Security Assessment, O'Reilly, Sebastopol, 2004

[McW05] McWilliams, Brian, Spam Kings. The Real Story Behind the High-Rolling Hucksters pushing porn, pills, and @*#?% Enlargements, O'Reilly, Sebastopol, 2005

[MOR04] Morgenstern, Christian, Gedichte, Insel, Frankfurt, 2004

[MÜN02] Münz, Stefan, HTML & Web-Publishing Handbuch (Band 1). HTML - JavaScript - CSS - DHTML, Franzis, Poing, 2002

[MÜN02a] Münz, Stefan, HTML & Web-Publishing Handbuch (Band 2). XML - DTDs - Perl/CGI, Franzis, Poing, 2002

[PEI04] Peikari, Cyrus, Chuvakin, Anton, Security Warrior. Know Your Enemy, O'Reilly, Sebastopol, 2004

[REHWWW] Rehbein, Daniel, Adressensammler identifizieren – Ein Beispiel, o. A., http://spamfang.rehbein.net

[REHWWWa] Rehbein, Daniel, Gift für Harvester - Aus meiner Entwicklung, 2003, http://www.daniel-rehbein.de/spamgift.html

154

Page 155: eBook - No Spam

Literaturhinweise

[RFC0821] Postel, Jonathan B., Simple Mail Transfer Protocol, 1982, http://www.ietf.org/rfc/rfc0821.txt (u.a.)

[RFC1855] Hambridge, Sally, RFC 1855. Netiquette Guidelines, 1995, http://www.ietf.org/rfc/rfc1855.txt

[RFC2795] Christey, Steven M., RFC2795: The Infinite Monkey Protocol Suite (IMPS), 2000, http://www.ietf.org/rfc/rfc2795.txt

[SCHOE04] Schoengarth, Anita, Application Service Providing, Otto Schmidt, Köln, 2004

[SCHWE02] Schwenk, Jörg, Sicherheit und Kryptographie im Internet. Von sicherer E-Mail bis zur IP-Verschlüsselung, Vieweg, Braunschweig, 2002

[SCHWE04] Schwenk, Jörg, Visual Spoofing, 2004, http://www.nds.rub.de/forschung/gebiete/UI/VS/

[SEL02] Selig, Marc-André, Reguläre Ausdrücke. Nadel im Heuhaufen, 2002, in: Linux User, Linux New Media, München

[SHI05] Shiflett, Chris, PHP Security Briefing, 2005

[SIL01] Sill, Dave, The qmail Handbook, Apress, Berkeley, 2001

[SIN04] Singh, Simon, Geheime Botschaften. Die Kunst der Verschlüsselung von der Antike bis in die Zeiten des Internet, dtv, München, 2004

[STEI99] Stein, Lincoln D., MacEachern, Doug, Writing Apache Module with Perl and C, O'Reilly, Sebastopol, 1999

[STU03] Stubblebine, Tony, Regular Expression. Pocket Reference, O'Reilly, Sebastopol, 2003

[TAN02] Tanenbaum, Andrew S., Moderne Betriebssysteme, Pearson Studium, München, 2002

[TUCEK] Tucek, Jim, Email Protector Version 4.06. Download Email Protector, o. A. (Stand: 3.10.2004), http://www.jracademy.com/~jtucek/email/download.php

[VIE01] Viega, John, McGraw, Gary, Building Secure Software. How to Avoid Security Problems the Right Way, Addison-Wesley, Boston, 2001

[W3CAPPB] W3C, W3C Recommendations. Appendix B: Performance, Implementation and Design, o. A., http://w3.org/TR/REC-html40/appendix/notes.html

155No Spam!

Page 156: eBook - No Spam

Literaturverzeichnis

[WHA01] Whalley, Carl, Spam-free mailto:tags. How to use mailto: functionality whilst preventing web crawlers from leeching your email addresses, 2001, http://www.carmichael-data.com/art20011223.jsp

[WIE99] Wielsch, Michael; Prahm, Jens; Eßer, Hans-Georg, Linux intern. Technik, Administration und Programmierung, Data Becker, Düsseldorf, 1999

[WIL04d] Wilkens, Andreas, Internet Explorer dominiert weiter in Europa, 2004, http://www.heise.de/newsticker/meldung/47706

[WILLI02] Williams, Steve, Thwarting Spambots, 2002, http://www.sbw.org/spambot/

[WYM99] Wyman Carolyn, Spam: A Biography, Harvest Books, Fort Washington, 1999

[ZIE99] Ziegler, Robert L., Linux Firewalls, New Riders, Indianapolis, 1999

156

Page 157: eBook - No Spam

Stichwortverzeichnis

§6 Nr. 2 TDG 43, 66, 69, 710190-Dialer 72

AAbmahnung 46Absenderadresse, gefälschte 37ActiveX-Control 72Adresse der elektronischen Post 43, 44Adressen, „verified“ 137Adresshandel 31Alias 127Apache 95, 127Apache Bench 100Apache-Modul 95Ausgabefilter 95Ausgabestrom 95

BBCC 23, 33Beweislast 139Blind-Carbon-Copy-Funktion 23, 33

CCAN-SPAM-Act 138Cäsars Schiebealgorithmus 78Cascading Style Sheets (CSS) 60Catch-All 36Command-Line-Interface (CLI) 63Cross-Site-Scripting-Attacke 113

DDechiffrieralgorithmus 77Denial-Of-Service 124Dijkstra-Operationen 125document.write 74dodgeit 34DOM-Inspector 104Double-Opt-In 138

EeCard 107Eingabepuffer 96Elektronische Postkarte 107E-Mail-Anonymisierdienst 35E-Mail-Werbung, unerwünschte 20Endlosschleife 123ErrorDocument 127

FFilter 15Flash 71Formmailer 47Forum 33

GGästebuch 33Gesetz gegen den unlauteren Wettbewerb

(UWG) 21Gewerbsmäßigkeit 43Googlebot 123Google-Spam 19grep 27

HHarvester 25HTML-Kommentar 59HTTP 404 127HTTP 500 93HTTP/1.1 200 OK 127

IImpressum 45ipchains 93

JJava Anonymous Proxy 34JavaScript 72, 74JPEG 67

157No Spam!

Page 158: eBook - No Spam

Stichwortverzeichnis

KKontaktaufnahme, schnelle 43Kontaktformular 47, 56, 104

Llocal part 30lynx: 60

MMailingliste 137mailman 143Majordomo 143Microdot 62Mitstörerhaftung 103mod_perl 95Monty Python 19MyTrashMail 34

NNewsgroup 19, 28Newsletter 137

OOpenOffice.org 71Open-Relay-Blacklist 15Opt-In 138

confirmed 139qualifiziertes 139

Opt-Out 138Ordnungsgeld 41Ordnungshaft 41

PP(s) 125Papier-Spam 19PDF 69PGP-Key-Server 29P-Operation 125Proportionalschriftart 65Puffergrenzen 96

Qqmail 37

Rregister_ globals 112regular expression 26REMOVE_TO_MAIL_ ME 45robots.txt 27, 128

SSammelgeschwindigkeit 123Satz von Rice 77Schlüssel 77Screenshot 67sed 27Semaphor 125sendmail 36, 145Single-Opt-In 138sleep 128SMS 43SMTP-Teergrube 39SPAM 19Spamcop 15Spamfilter 15Spamgourmet 34Spamhole 34Spamming-Engine 103Spider 25, 123SQL-Injection 110Standardausgabe 63Standardeingabe 63StarOffice 71STDIN 63STDOUT 63

TTabelle 64Tarnen mit HTML 58Teerfalle 124Teergrube 40, 124Telefonnummer 44

UUBE 20UCE 20Unsolicited Bulk E-Mail 20

158

Page 159: eBook - No Spam

Stichwortverzeichnis

Unsolicited Commercial E-Mail 20Unterlassungsklagengesetz (UKlaG) 39URL-Encoding 63User-Agent 93usleep 128

VV(s) 125Verschlüsseln 77virtusertable 36, 145V-Operation 126

WWebseiten, dynamische 93Wegwerfadresse 34wget 27Whitespace 61Whois-Eintrag 29

XXOR 78

159No Spam!

Page 160: eBook - No Spam

Der Autor

Tobias Eggendorfer hat Wirtschaftsingenieurwesen, technische Informatikund Informatik studiert und jeweils mit Diplom sowie Computer Sciencemit einem Master of Science abgeschlossen. Darüber hinaus hat er einrechtswissenschaftliches Studium mit den Schwerpunkten Wirtschafts- undArbeitsrecht absolviert.

Er arbeitet freiberuflich als IT-Berater, hat einen Lehrauftrag im Bereich derInformatik an einer Fachhochschule und unterrichtet außerdem an einerFachschule für Datenverarbeitung.

Sein Forschungsschwerpunkt liegt derzeit im Bereich der Spambekämpfungund -vermeidung.

Ausführlichere Informationen über ihn finden sich auf seiner Webseitehttp://www.eggendorfer.info.

160