Open Source im professionellen Einsatz
Linux-Magazin 02/2009
© Windrose, Pixelio.de

© Windrose, Pixelio.de

Perl-Skript zeichnet Spam-Karten nach Webserver-Logs

Spam kartieren

Eine Kombination aus IP-Adressen-Datenbank und Googles Chart-Service verrät, aus welchen Regionen die Link-Spammer einer Webseite kommen.

624

Ich fände es äußerst befriedigend, könnte ich das Büro eines Spammers oder Telemarketingers aufspüren, hinfahren und den PC des Fernwerbers in Kleinholz verwandeln. Eigentlich genau so, wie in dem amerikanischen Werbespot der Firma Snickers [2]. Leider ist das aus legalen und logistischen Gründen oft nicht möglich. Im wahren Leben erledigen außerdem nicht die Gauner selbst die Drecksarbeit, sondern Botnetze infizierter PCs. Trotzdem wäre es interessant, einmal grafisch darzustellen, aus welchen Regionen der Welt die meisten Spammer-Aktivitäten so kommen.

Fährte aufnehmen

Das Internet ist die ideale Plattform für anonyme Gaunereien, aber eine Spur hinterlassen die Verbrecher dennoch: Jeder eingehende Request führt die IP-Adresse des Senders mit sich (Abbildung 1). Die lässt sich zwar auch manipulieren, aber das ist nicht ganz so einfach und den meisten Spammern zu umständlich.

Abbildung 1: Link-Spammer hinterlassen im Access-Log des Webservers eine IP-Adresse.

Das DNS, das Hostnamen ihre IP-Adresse zuweist, versteht sich auch auf die umgekehrte Zuordnung. Falls der Provider alles ordnungsgemäß aufgesetzt hat, nimmt ein so genannter DNS-Reverse-Lookup eine IP-Adresse entgegen und gibt - wie beispielsweise das Skript »revlookup« (Listing 1) in Abbildung 2 - einen qualifizierten Hostnamen aus, der auf den Provider schließen lässt.

Listing 1:
»revlookup«

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Socket;
04
05 my $host = $ARGV[0] or
06   die "usage: $0 ipaddr";
07
08 print reverse_lookup($host) || "unknown",
09       "n";
10
11 ###########################################
12 sub reverse_lookup {
13 ###########################################
14   my ($ip) = inet_aton $_[0];
15
16   return (gethostbyaddr($ip, AF_INET))[0];
17 }

Abbildung 2 zeigt, dass die beim Spammen erwischte IP 69.162.110.146 dem Provider Lstn.net gehört. Eine freundliche E-Mail an dessen Webmaster mit genauer Angabe der Adresse, der Uhrzeit (wichtig, da diese Adressen unter Umständen dynamisch vergeben werden) bringt mit etwas Glück den Spammer zum Schweigen.

Abbildung 2: Ein Reverse-DNS-Lookup bringt oft die einer IP-Adresse zugeordnete Domain zum Vorschein.

Wer bist du?

Die Funktion »inet_aton()« aus dem Modul Socket nimmt eine IP-Adresse in String-Darstellung (»x.x.x.x«) entgegen und gibt eine Datenstruktur für einen Aufruf der Perl-Funktion »gethostbyaddr()« zurück. Letztere führt den DNS-Reverse-Lookup aus und liefert im Erfolgsfall einen String mit dem Hostnamen, im Fehlerfall »undef«. Der Vorgang kann allerdings einige Sekunden dauern, je nachdem, wie beschäftigt der genutzte DNS-Server gerade ist und wie viele Kollegen er zur Beantwortung der Frage konsultiert.

Das Kommandozeilen-Utility »whois« verkraftet auch IP-Adressen als Argumente. Abbildung 3 zeigt, dass der Provider Limestone Networks gleich eine E-Mail-Adresse für Beschwerden angibt, an die sich Spam-Opfer wenden können. Das Ganze geht auch in Perl, etwa mit dem CPAN-Modul Net::Whois::Raw, doch erfolgt der Lookup dabei über die Server der Firma Network Solutions, die nach etwa 100 Lookups in kurzer Folge den Zugang sperrt.

Abbildung 3: Der Whois-Eintrag für die ertappte IP-Adresse zeigt die Daten des Internetproviders des Spammers.

Viele Spammer arbeiten jedoch mit IP-Adressen, die keinen Reverse-Eintrag im DNS-System aufweisen. Aber auch dann ist eine Lokalisierung in gewissen Grenzen möglich, denn Service-Provider bekommen die Adressen in Blöcken zugewiesen und es existieren Datenbanken, die die geografische Lage der Provider verraten, denen eine bestimmte Adresse zugeteilt wurde.

Die Firma Maxmind bietet unter [3] eine Datenbankdatei an, die sich für nicht-kommerzielle Zwecke kostenlos nutzen lässt. Die genauen Lizenzbedingungen liegen im selben Ordner wie die Datenbank. Das CPAN-Modul IP::Country::MaxMind stellt ein passendes API zur Verfügung, damit niemand mit den Binärdaten direkt herumfuhrwerken muss. Die in der Datenbank gespeicherten IP-Zuweisungen ändern sich nur sehr langsam, sodass Updates nur alle paar Monate nötig sind.

Nach der Installation des Moduls, das zusätzlich noch ein weiteres CPAN-Mudul namens Geo::IP::PurePerl verlangt, liest der Konstruktor »open()« die angegebene lokale Datenbank ein und die Methode »inet_atocc()« liefert zu einer IP-Adresse den Ländercode zurück, zum Beispiel »DE« für Deutschland.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Torte statt vieler Worte

    Diagramme machen naturgemäß optisch mehr her als spröde Zahlenkolonnen. In der grafischen Aufbereitung erkennt das Auge außerdem leicht Muster und Tendenzen. Das Chart-API des Webgiganten Google visualisiert Daten mit wenig Aufwand.

  • Datenmaler

    Googles Chart-Service zeichnet optisch ansprechende Diagramme, ganz gleich, woher die Daten dafür stammen. Ein CPAN-Modul gibt die Zeichenanweisungen dafür in objektorientiertem Perl weiter, statt vom Programmierer URL-Fitzelei zu verlangen.

  • Leserbriefe
  • Schneckenpost

    Seit Spammer immun gegen das einstige Wundermittel Greylisting sind, suchen Mailadmins nach neuen Wirkstoffen, um die Dreckschleudern bereits vor der Mailzustellung zu bekämpfen. Das Linux-Magazin stellt zwei neue Techniken vor, die Spammer geduldig in die Flucht treiben.

  • Müllvermeidung

    Während Spamfilter den elektronischen Müll, der täglich die Inbox flutet, mühsam aussortieren, vermeiden einige Techniken von vornherein, dass Spammer eine E-Mail-Adresse belästigen. Welche tatsächlich helfen, verrät diese Analyse. Sie gibt auch gleich ein praktisches Beispiel.

comments powered by Disqus

Ausgabe 07/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.