Ich habe in den letzten Tagen immer wieder einmal Spamkommentare einer ganz besonderen Machart gehabt. Diese Spams sind – wenn man so ein Wort für Spam überhaupt benutzen mag – intelligenter als das gegenwärtig überwiegende Vollkleistern der Kommentare mit irgendwelchen Texten, und sie können, wenn das Verfahren der Spammer noch etwas verbessert, auch schwierig als Spam zu erkennen sein.
Symptom
Ein „Kommentar“ wurde abgegeben, der einem bekannt vorkommt. Und in der Tat, wenn man etwas sucht, findet sich, dass genau der gleiche Kommentar vor einigen Wochen schon einmal als echter Kommentar eines Lesers abgegeben wurde. An dieser Stelle hatte der Kommentar auch einen Bezug zum kommentierten Text, was bei seiner Zweitverwertung nicht mehr der Fall war.
Geändert hat sich die angegebene Mailadresse und natürlich die angegebene „Homepage“ des Kommentators, denn diese soll den Spamlink platzieren. Der Link führt auf typische „Angebote“ der Spammer, vom Casino über den Scareware-Schocker (ihr PC ist infiziert!) bis hin zum Betrugsapotheker. Manchmal wird der ursprünglich angegebene Name des Kommentators beibehalten, manchmal auch nicht. Allzu plumpe SEO-Keywords für Google werden zurzeit vermieden.
Spekulationen
Offenbar bemerken im Moment auch die Spammer, dass ihre plumpen und oft idiotischen Skripten kaum noch durch die Spamfilter kommen. Leider bedeutet das für einen Spammer nicht, dass er sich hinsetzt und sich überlegt, wie er sich auf weniger asoziale Weise seine Brötchen verdienen könnte, sondern er denkt darüber nach, wie er denn in Zukunft anderer Leute Websites zu Linkschleudern auf seine kriminellen Angebote umbauen kann.
Also hat sich einer dieser Spammer einen neuen Bot geschrieben. Dieser holt sich Kommentare, die schon einmal als Kommentare „durchgekommen“ sind – eine Möglichkeit, dies zu tun, ist etwa ein RSS-Feed für Kommentare und kommentiert mit diesen Texten einfach noch einmal in dem Blog, in dem sie schon einmal „durchkamen“. Davon verspricht sich der Spammer, dass er höhere Chancen hat, von einem Dienst wie Akismet nicht automatisch als Spam erkannt zu werden und vielleicht auch beim Betreiber des Blogs durchzukommen.
In jedem Fall ist festzustellen, dass Spammer zurzeit ein Skript zu benutzen scheinen, um systematisch echte Kommentare in Blogs zu sammeln, um die nächste Generation der Kommentarspam vorzubereiten.
Ausblick
Im Moment ist die Spam mit alten Kommentaren noch primitiv. Zum Beispiel gibt es nicht einmal eine oberflächliche Analyse des kommentierten Textes, so dass der „Kommentar“ in der Regel einfach nicht passt. Das löst natürlich Misstrauen aus, wenn so eine Spam doch einmal durch den Spamfilter kommt.
Das kann allerdings besser gemacht werden, und die einfachsten Verbesserungen wären sehr wirkungsvoll und sind darüber hinaus eine schnell zu programmierende Sache. Wenn etwa die Kategorien und Schlüsselwörter (neudeutsch: Tags) zu einem kommentierten Artikel ausgewertet würden, die ja freundlicherweise von vielen Bloggern gesetzt werden und in technisch leicht auswertbarer Weise zur Verfügung stehen, denn können derartige Kommentare so „gelegt“ werden, das sie häufiger thematisch passen. Diese Verbesserung ist nicht schwer zu implementieren, und sie erfordert auch nicht, dass Text in einer natürlichen Sprache mit seinen vielen Unschärfen durchgeparst werden muss; es ist eher eine kleine Fingerübung. Vermutlich werden auch die Spammer darauf kommen, wenn sie an künftigen Verbesserungen arbeiten.
Eine weitere Schwäche des derzeitigen, primitiven Standes dieser Vorgehensweise ist es, dass die Kommentare im gleichen Blog „recycelt“ werden, in dem sie schon einmal als echte Kommentare erschienen. Bei einem Blog mit geringem Kommentaraufkommen fällt das dem Betreiber auf und erweckt starkes Misstrauen. Dies gilt vor allem im Moment, denn die bei mir zum Spammen missbrauchten Kommentartexte sind niemals älter als zwei Monate gewesen – so alt scheint auch das Skript ungefähr zu sein, mit dem die Kommentare abgegrast wurden (und vermutlich noch werden). Wenn die Verbesserung mit der Verwendung der Kategorien und Schlagwörter programmiert wird, können derartige Kommentare durchaus auch in anderen Blogs gesetzt werden, und dann werden die Kommentartexte oft recht natürlich wirken, so dass nur der gesetzte Link den Spamcharakter des Kommentars verrät. Dieser Link (neben der IP-Adresse des spammenden Bots) verbleibt dann auch als einziges Spammerkmal für einen Spamfilterdienst wie Akismet. Die Filterung von Spam und ihre Erkennung durch einen menschlichen Leser wird also in Zukunft erschwert. Darüber hinaus kann die an Akismet weitergeleitete Spam-Einordnung derartiger Kommentare zur Folge haben, dass in der nächsten Zeit vermehrt echte Kommentare fälschlich als Spam erkannt werden.
Abhilfe
Es scheint fast, als könnte sich die relativ bequeme Zeit einer deutlich über 99%igen Spamerkennung durch Akismet dem Ende zuneigen. Aber natürlich heißt das nicht, dass die Spammer schon gewonnen hätten, sie machen uns allen nur das Leben schwerer. Die folgenden technischen Abhilfen sind selbst dann noch möglich, wenn Akismet signifikant unzuverlässiger wird:
- Captchas und vergleichbare Verfahren
Ich würde von Captchas abraten, weil sie auch viele Menschen aussperren, aber dennoch keinen wirklich zuverlässigen Schutz bieten. - Sperren ganzer IP-Bereiche
Ungefähr 80 Prozent meiner Kommentarspam kommt über IP-Adressen aus Russland und China, der Rest zum großen Teil aus Südamerika. Nur ein Bruchteil stammt von Rechnern aus Westeuropa. Bei einem Blog in deutscher Sprache ist es durchaus eine Möglichkeit, für die Kommentarfunktion weiträumig IP-Bereiche auszusperren, auch wenn auf diese Weise einige echte Leser behindert werden. Auch dieser Schutz ist nicht zuverlässig, da die Skripten der Spammer relativ einfach Proxies benutzen könnten. - Keine Homepage-Angabe mehr
So lange der Spamlink nur als „Homepage“ angegeben wird, kann dieses Feld einfach in den Kommentaren und im Kommentarformular nicht mehr dargestellt werden – es ist sowieso bei Spammern beliebter als bei Menschen. (Ja, ich betrachte Spammer nur im biologischen Sinne als Menschen!) Es wäre zwar nur eine Frage der Zeit, bis die Spammer den Link wieder in den Text setzen, aber bis dahin ist bei jedem Kommentar mit einer angegebenen Homepage klar, dass es sich um eine Spam handelt. - JavaScript-Lösungen
Möglich sind auch technisch aufwändigere Lösungen, die in JavaScript realisiert werden. Der Preis dafür wäre allerdings, dass ausgerechnet jene vernünftigen Leser ausgesperrt werden, die angesichts der schier unbegrenzten Gier nach Tracking Wert auf ihre Privatsphäre im Internet legen und deshalb unter anderem JavaScript abschalten. Diesen Lesern mag zumindest ich keine Steine in den Weg legen. - Kommentieren nur mit manuell bestätigter Registrierung zulassen
Dies kann wirksam sein, baut allerdings eine sehr hohe Hürde vor einer an sich simplen Funktion, und ich würde mich niemals bei jemanden registrieren (und dafür womöglich noch Daten und eine Mailadresse angeben), nur um einen Kommentar verfassen zu können. Mein Postfach ist schon voll genug! - Versuchen, es den Skripten der Spammer schwerer zu machen
Zum Beispiel könnten die Eingabefelder für einen Kommentar andere Namen bekommen, die auch regelmäßig wechseln. (Die Uhrzeit der Erstellung muss dann zusammen mit den Feldern angegeben werden.) Für den menschlichen Anwender ist kein Unterschied feststellbar, aber der Spambot steht vor einem gewissen Problem, da er die Bedeutung der Felder nicht „erraten“ kann. Leider ist dieses Verfahren in WordPress nur schwierig mit einem Plugin durchzuführen. Andere Verfahren, bei denen schwierig reproduzierbare Zusatzinformationen unsichtbar transportiert werden, sind grundsätzlich auch in Form eines Plugins machbar und sollten einen guten Schutz gegen Spambots ergeben, so lange diese nicht lernen, auch damit umzugehen.
Vielleicht ein WordPress-Plugin?
Eventuell werde ich mich in den nächsten Tagen (realistische Leser denken hier: Wochen) mal ans Schreiben eines Plugins machen, das in zwei Zusatzfeldern im Kommentarformular voneinander abhängige Informationen transportiert, die nur anhand eines im Blog hinterlegten (und nach einem Angriff leicht zu änderdem) Geheimschlüssels überprüft werden können. Damit könnten einfache Bots ausgesperrt werden. Das grundsätzliche Verfahren sieht so aus.
- Der Blogbetreiber setzt in der Konfiguration einen geheimen Schlüssel ganz nach seinem Geschmack, etwa das Wort „ganzgeheim666″ – natürlich nicht dieses… 😉
- Im Idealfall erzeugt das Plugin bei seiner Installation aus Systemzeit, Blogname und einigen Merkmalen in der WordPress-Datenbank einen Vorgabeschlüssel, der nicht vorhersagbar ist. (Diese Aufgabe ist schwieriger, als man denken mag.) So stünde es sofort nach seiner Installation in sicherer Konfiguration zur Verfügung. Dem leicht zu machenden Fehler, dass ein derartiges Plugin unkonfiguriert verwendet wird, wäre wirksam begegnet.
- Wenn ein Kommentarformular erzeugt wird, denn hängt das Plugin an dieses Formular zwei unsichtbare Felder an: Ein Feld mit dem gegenwärtigen Timestamp bei der Erzeugung des Formulares (ja, es gibt Caching-Plugins, an die man wegen der bescheidenen Performanz einer WordPress-Installation denken muss), und ein zweites Feld, das aus Timestamp und Schlüssel einen Hash generiert, der nur reproduzierbar ist, wenn der Schlüssel bekannt ist.
- Wenn ein Kommentar eingetragen werden soll, denn prüft das Plugin, ob diese beiden Felder konsistent belegt sind – es kennt ja den Schlüssel und kann damit den Hash reproduzieren. Wenn dies nicht der Fall ist, denn handelt es sich immer um einen Spamkommentar. Ansonsten geht es weiter in der ganz normalen Kommentarverarbeitung.
Leider hat auch diese Idee einen Nachteil: Nichts hält einen Spambot davon ab, ebenfalls das gesamte Formular anzufordern und diese beiden Felder ebenfalls zusammen mit dem Spamkommentar abzusenden. Bislang sind die meisten Spambots „dumm“, aber das kann sich ändern, wenn bestimmte Abwehrmaßnahmen Verbreitung finden. Die Möglichkeit, dass die Artikelseite wegen der bescheidenen WordPress-Performanz optional auch aus einer Cache-Datei ausgeliefert werden könnte, macht es leider unmöglich, im Hash für das Kontaktformular die IP-Adresse des Lesers zu verbauen und beim Kommentar zu prüfen, was übrigens auch keine völlig Sicherheit geben würde. Eine sichere Abwehr von Kommentarspam scheint mir unmöglich, wenn sie ohne JavaScript funktionieren soll.
Wenn jemand eine gute Idee hat: Immer nur her damit!