Anti-Spam: Hi, Spam – Preisanfragen

Eine neue Masche der Spammer, automatische Übersetzungen.

Spammer und Anti-Spam-Maßnahmen liefern sich stets einen Wettlauf. Wir kennen das Problem von unserer Software DA-FormMaker, einer Software zur Erstellung von HTML-Formularen.

Der Spam

Eine typische Spammail sieht in etwa so aus:

Der Text variiert in verschiedenen Sprachen, daher ist eine automatische Erkennung schwierig. Folgende Texte kommen, unter anderem, zum Einsatz.

Hai, saya ingin tahu harga Anda.
Sveiki, a norjau suinoti js kain.
Hola, qudría saber tu precio..
Salut, ech wollt Are Prais wessen.
Ndewo, achr m mara naha g.
Hola, quería saber tu precio..
Hi, ego volo scire vestri pretium.
Hallo, ek wou jou prys ken
Zdravo, htio sam znati vašu cijenu.
Ciao, volevo sapere il tuo prezzo.
Hi, I wanted to know your price.
Ola, queria saber o seu prezo.
Hi, kam dashur te di cmimin tuaj

Die Spammer scheinen hier einfach eine „Preisanfage“ zu simulieren, in verschiedenen Sprachen. Hierbei kommen auch recht viele exotische Sprachen zum Einsatz.

Das Ziel der Spammer

Die wenigsten dürften mit der Sprache etwas anfangen können und das vermutliche Ziel dürfte am Ende auch nur ein, die Leute zu animieren auf die E-Mail zu antworten. Dies habe ich mit zahlreichen Mail-Adressen ausprobiert. Die meisten blieben unbeantwortet. Vermutlich, weil die E-Mail-Adressen schnell von den Anbietern gesperrt werden.

In den Fällen einer Antwort wurden dann irgendwelche Bitcoin-Systeme beworben.

Antispam-Maßnahmen

Durch die Übersetzungen ist es nicht so einfach den Spam zu klassifizieren. Mein Ansatz war dies mit einem RegEx zu erschlagen.

^(([a-z,A-Z]{2,8}),)(\s+\w+){4,6}\.?\.?$

Der RegEx prüft auf das Anfangswort (die Begrüßung), dann folgt ein Komma und 4 bis 6 Wörter. Optional mit einem Satzzeichen (Punkt am Ende).

In PHP habe ich ich die Funktion dann wie folgt umgesetzt:

function spam_check_hi_spam($subject) {
    $startWords = ["Hai,", "Ola,", "Sveiki,", "Ndewo,", "Hola,", "Salut,", "Hi,", "Hallo,", "Ciao,", "Zdravo,"];

    $boolStarts = false;
    $isSpam = false;

    foreach ($startWords as $words) {
        if (startsWith($subject, $words)) {
            $boolStarts = true;
        }
    }

    if ($boolStarts === true) {
        if (preg_match('/^(([a-z,A-Z]{2,8}),)(\s+\w+){4,6}\.?\.?$/m', $subject)) {
            $isSpam = true;
        }
    }

    return $isSpam;
}

Neben der Überprüfung des regulären Ausdrucks prüfe ich hier noch den Anfang, ob die spezielle Begrüßungsfloskel vorkommt. Dies sollte sicherstellen, dass es weniger falsch positive Ergebnisse gibt. Je nachdem zu welchen Sprachen die Spammer noch ausweichen, muss das Array entsprechend erweitert werden.

Fazit

Derzeit läuft der Filter recht zufriedenstellend. Allzu exotische Begrüßungsfloskeln lassen sich auch recht leicht mittels Blacklist blockieren.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht.