Kategorien

Navigation

Feeds/Meta

Blog RSS Feed 
Kommentare RSS Feed 

Bloggeramt.de 
Blogverzeichnis 
Add to Technorati Favorites 
SpamPoison

josupeit.com > Weblog > Informatik und Technik

Auf dem Weg zur Überwachungsgesellschaft?

Datum:   25.02.2010, 20:29 Uhr
Kategorie:   HTML, CSS und Web Feed dieser Kategorie abonnieren
Kommentare:   2

Dass Facebook mit bereits Anfang 2009 auf den Keks ging, habe ich ja bereits im Artikel Facebook Account löschen beschrieben. Abgesehen davon, dass ich mir trotz allen Löschens nur schwer vorstellen kann, dass die Daten angesichts aktueller Meldungen gerade bei Facebook "dauerhaft entfernt" werden, frage ich mich: Ändert das überhaupt was am Schutz meiner Daten?

Vor einiger Zeit habe ich bei Heise online gelesen, dass es mittlerweile möglich ist, sein Handyadressbuch mit Facebook zu "synchronisieren" und sein Mailkonto (nach Angabe von Benutzernamen und Passwort selbstredend [Achtung: Sarkasmus]) abgrasen zu lassen1, um direkt mit seinen Freunden verbunden zu werden. Wozu habe ich damals also mein Konto gelöscht, wenn Freunde, Verwandte, entfernte Bekannte oder Leute, denen ich aus irgendwelchen Gründen mal eine E-Mail gesendet habe meine Daten ohne Rückfrage an diese Datenschleuder versenden? X-O

Was mich, abgesehen davon, dass sehr viele Menschen, darunter vor allem junge Menschen, sehr sehr viele Informationen über sich sowieso bereitwillig durchs Internet jagen jedoch wirklick sorgt, ist  dass ich nun von allen "Interessenten" nicht bloß gegooglet oder "gefacebookt" werden kann, sondern dass diese stumpfsinnige Arbeit jetzt gleich biometrisch gestützt erledigt wird2. Der Firma "The Astonishing Tribe" (die Verlinkung spare ich mir an dieser Stelle bewusst) haben wir das Glück zu verdanken, dass bald jeder Besitzer eines Handys mit 5 Megapixel-Kamera bloß noch sein Objektiv auf ein Gesicht richten muss und die Software automatisch alle gesammelten Daten zu der geknipsten Person zurückgibt.

Bin ich der Einzige, der sich schon darauf freut, sich selbst zu knipsen?


1 Was Facebook über Nicht-Mitglieder weiß (Heise Online)
2 Handy identifiziert Fotografierte über Facebook & Co. (Heise Online)

SpamAssassin anhand von IMAP Flags lernen lassen

Datum:   30.01.2010, 14:38 Uhr
Kategorie:   Linux und Serversoftware Feed dieser Kategorie abonnieren
Kommentare:   0

All meine eingehenden E-Mails werden direkt meinem Homeserver zugestellt. Dort wird auch ein Großteil an Spam gefiltert. In der Vergangenheit trainierte ich den dort laufenden SpamAssassin durch bouncen der entsprechenden Mails an spezielle E-Mail Adressen, die die Mails dann an sa-learn pipeten. Da mir das immer wieder einmal auf den Keks ging fragte ich mich, ob es nicht viel einfacher möglich wäre, Spam anhand der Thunderbird Junk-Markierung lernen zu lassen.

Glücklicherweise bietet das IMAP4 Protokoll laut RFC 3501 die Möglichkeit, Mails mit Flags zu versehen. Von Hause aus gibt es beispielsweise Flags, wie \Seen oder \Deleted, die Kennzeichnen, ob eine Nachricht gelesen oder gelöscht wurde, jedoch erlaubt das Protokoll auch die Vergabe eigener Flags. Diese benutzerdefinierten Flags werden allerdings als Keywords bezeichnet. Thunderbird verwendet für die Markierung, ob eine Mail Spam oder Ham (also kein Spam) ist, die Keywords Junk und NonJunk, wobei nur Mails, die als Junk markiert wurden und explizit auf "Kein Junk" geklickt wurde, als NonJunk markiert werden.

Nun verwende ich ein Perl-Skript, das alle 15 Minuten als Cronjob gestartet wird, mit den Benutzerdaten des Administrators zu meinem Cyrus-IMAP Server verbindet und alle Ordner aller Benutzer auf Mails durchsucht, die entsprechend gekennzeichnet wurden und den Inhalt dann an SpamAssassin übergibt. Anschließend werden die Mails entsprechend als LernedJunk und LernedNonJunk gekennzeichnet. Dadurch werden automatisch alle Mails, die Thunderbird als Junk einstuft oder von Hand eingestuft werden bereits serverseitig gelernt und entsprechend stetig besser gefiltert.

Dieses Skript stelle ich hiermit unter GPLv3 zur Verfügung, vielleicht findet ja noch jemand Verwendung dafür:

#!/usr/bin/perl
use Mail::IMAPClient;
use MIME::Base64;

do('/etc/bayes_learn_spam.conf')
  or die "Unable to read configuration file /etc/bayes_learn_spam.conf";

my $imap = Mail::IMAPClient->new(
             Server => $host,
             Port => $port,
             Debug => 0)

  or die "Unable to connect to imap server";

$imap->has_capability("STARTTLS") and $imap->starttls;
$imap->tag_and_run("AUTHENTICATE PLAIN " . encode_base64("\0" . $authuser . "\0" . $password))
  or die "Unable to login to imap server with user " . $authuser;

my @folders = $imap->folders
  or die "Unable to retrieve user list from imap server";

my @users;

foreach $folder (@folders) {
  if ( $folder =~ /^user\..*$/i ) {
    $folder =~ s/^user\.([^\.]*).*/\1/i;

    if (! grep /$folder/, @users) {
      push (@users, $folder);
    }
  }
}

$imap->disconnect
  or die "Unable to close connection to imap server";

foreach $user (@users) {
  print "Processing messages for user " . $user . "...\n";
  undef($imap);

  my $imap = Mail::IMAPClient->new(
               Server => $host,
               Port => $port,
               Uid => 0,
               Peek => 1,
               Debug => 0)

    or die "Unable to connect to imap server";

  $imap->has_capability("STARTTLS") and $imap->starttls;
  $imap->tag_and_run("AUTHENTICATE PLAIN " . encode_base64($user . "\0" . $authuser . "\0" . $password))
    or die "Unable to do plain auth";

  foreach $folder ($imap->folders) {
    print "Processing folder " . $folder . "...\n";
    $imap->select($folder)
      or die "Unable to select imap folder " . $folder . " for user " . $user;

    @spam = $imap->search("UNDELETED KEYWORD " . $junktag .    " UNKEYWORD " . $learnedjunktag);
    @ham  = $imap->search("UNDELETED KEYWORD " . $nonjunktag . " UNKEYWORD " . $learnednonjunktag);

    # Process spam
    print "Learning " . @spam . " spam messages...\n";
    foreach (@spam) {
      $imap->store($_, "-FLAGS", $learnednonjunktag)
        or die "Unable to flag message " . $_ . " in folder " . $folder . " for user " . $user;

      @msg = $imap->message_string($_)
        or die "Unable to fetch spammy mail " . $_ . " from folder " . $folder . " for user " . $user;

      open(my $sa, "| " . $salearn . " --spam")
        or die ("Unable to pipe to sa-learn");

      print $sa @msg;
      close($sa);
      undef($sa);

      $imap->store($_, "+FLAGS", $learnedjunktag)
        or die "Unable to flag message " . $_ . " in folder " . $folder . " for user " . $user;
    }

    # Process ham
    print "Done. Learning " . @ham . " ham messages...\n";
    foreach (@ham) {
      $imap->store($_, "-FLAGS", $learnedjunktag)
        or die "Unable to flag message " . $_ . " in folder " . $folder . " for user " . $user;

      @msg = $imap->message_string($_)
        or die "Unable to fetch hammy mail " . $_ . " from folder " . $folder . " for user " . $user;

      open(my $sa, "| " . $salearn . " --ham")
        or die ("Unable to pipe to sa-learn");

      print $sa @msg;
      close($sa);
      undef($sa);

      $imap->store($_, "+FLAGS", $learnednonjunktag)
        or die "Unable to flag message " . $_ . " in folder " . $folder . " for user " . $user;
    }

    print "Done learning messages from folder " . $folder . ".\n";
  }

  $imap->disconnect;
  print "All messages for user " . $user . " have been processed.\n";
}


Die Konfiguration erfolgt über die Datei /etc/bayes_learn_spam.conf, die (entsprechend Zugriffsgeschützt) folgende Daten enthält:

$host              = 'localhost';
$port              = 143;
$authuser          = 'cyrus';
$password          = 'passwort';

$salearn           = '/usr/bin/sa-learn';

$junktag           = 'Junk';
$nonjunktag        = 'NonJunk';
$learnedjunktag    = 'LearnedJunk';
$learnednonjunktag = 'LearnedNonJunk';

 
Viel Spaß beim Trainieren. :-) Übrigens: Thunderbird bietet die Möglichkeit, benutzerdefinierte Schlüsselworte zu definieren und farbig hervorzuheben, so hat man immer und überall den Überblick, was gelernt wurde und was nicht...


GPLv3

Phishing als Geschäftsmodell

Datum:   07.11.2009, 19:53 Uhr
Kategorie:   HTML, CSS und Web Feed dieser Kategorie abonnieren
Kommentare:   2

Heute, beim Kaffee mit zwei meiner Informatiker-Kollegen habe ich zum ersten Mal von einer durchaus populären Dienstleistung im Web erfahren: der Sofortüberweisung. Als die zwei mir davon erzählten dache ich zunächst, dass sie mich aufs Korn nehmen wollen: Da gibt es so einen Bezahldienst, der, wenn man ihn benutzt, um in Online-Shops zu zahlen den Shop-Betreiber veranlasst, die Ware sofort loszuschicken. Dabei wird der zu zahlende Betrag aber nicht wie bei Paypal vom Konto eingezogen, sondern direkt an den Händler überwiesen. Und jetzt der Hammer: Vom eigenen Konto. Wie aber kann das funktionieren, wenn nicht ich selbst den Betrag von meinem Konto überweise? Ganz einfach: Ich gewähre einem Webdienst direkt Zugriff auf mein Onlinebanking und soll dazu wahrhaftig meine Zugangskennung, PIN und eine Transaktionsnummer (TAN) angeben! Im Normalfall heißt sowas Phishing!

Der Anbieter loggt sich also automatisch mit den Zugangsdaten beim Onlinebanking ein, Überweist das Geld auf das Konto des Empfängers und bestätigt dem Anbieter, dass die Überweisung angewiesen wurde. Da aber die Bank in diesem Fall keine Haftung übernimmt, springt Sofortüberweisung mit irgendeiner Versicherung ein. Ich muss gestehen, bereits da habe ich aufgehört zu lesen und vor Empörung angefangen diesen Beitrag hier zu verfassen. Die interessante Frage ist doch: Wieso zum Geier haftet die Bank nicht mehr? Ganz einfach: Weil sie sich von Ihnen aus gutem Grund hat unterschreiben lassen, dass sie von der Haftung entbunden wird, wenn Sie Ihre Zugangsdaten weitergeben!

Selbst wenn Sie "Sofortüberweisung" vertrauen und ich frage Sie, wieso sollten Sie das tun? Vielleicht wegen der TÜV Zertifizierung, dass Ihre Daten nicht gespeichert werden und ganz sicher sicher sind? Wie auch immer: Selbst wenn Sie "Sofortüberweisung" vertrauen, bereits in der Praxis wurde eine SSL Verschlüsselung wegen unsicherer Zertifikate ausgehebelt, vertrauen Sie dem Zertifikat? Fällt Ihnen sicher auf, falls die Seite überhaupt nicht SSL verschlüsselt ist und Sie vielleicht bereits bei "Sofortüberweisung" auf einer Phishing-Seite landen, die Originalgetreu nachgebildet wurde? Wenn Sie nicht den geringsten Zweifel hegen, dann schicken Sie mir bitte einfach Ihre EC-Karte und Ihre Geheimnummer an die Adresse im Impressum, ich werde mich künftig um Ihre Finanzen kümmern, doch sein Sie versichert: Sie können mir vertrauen...

Zu guter Letzt bleibt also festzuhalten, dass es nicht genügt, dass die Banken auf Ihren Onlinebanking-Portalen darauf hinweisen, dass man niemandem seine Daten geben sollte. Statt dessen sollten endlich alle Institute das TAN, iTAN, mTAN oder Irgendein-Buchstabe-davor-und-trotzdem-unsicher-TAN Verfahren durch bekannte, sichere Verfahren, wie HBCI über Chipkarte ablösen, damit weniger technikversierte Menschen gar nicht erst in die Versuchung kommen, solche Dienste zu nutzen...

Windows Konsolenfenster maximieren

Datum:   03.11.2009, 22:07 Uhr
Kategorie:   Informatik und Technik Feed dieser Kategorie abonnieren
Kommentare:   0

Ich arbeite auf meinen Desktop PCs und Notebooks seit Jahren mit Windows. Und mindestens genauso lange habe ich mich darüber geärgert, dass Kommandozeilenfenster (ab Windows XP über Start/Ausführen/cmd zu öffnen) in der Größe oder zumindest in der Breite fixiert sind. Spätestens seit Windows XP gibt es jedoch einen Trick, über den sich die Größe des Fensters leicht anpassen lässt.

Dazu gebt Ihr auf der Kommandozeile wmic ein. Ehrlich gesagt habe ich keinen Plan, um was für ein Konsolentool es sich dabei handelt, aber jetzt kann man sein Fenster maximieren :-). Die Eingabe von exit beendet wmic. Nachdem das geschehen ist, könnt Ihr über das Systemmenü des Konsolenfensters die Eigenschaften ändern und im Register Layout die Fensterpuffergröße ändern. Wer wie ich in der Breite nicht scrollen möchte, kann dort die selbe Zahl eingeben, wie nun bei Fenstergröße steht. Voíla, beim nächsten öffnen der Kommandozeile ist das Fenster nun schön groß...

Spamannahme verweigern mit Postfix und Postprox

Datum:   22.10.2009, 20:03 Uhr
Kategorie:   Linux und Serversoftware Feed dieser Kategorie abonnieren
Kommentare:   0

Wenn Sie einen eigenen Mailserver betreiben, haben Sie sich vielleicht auch schon gefragt wie es möglich ist, die Annahme von Spam oder mit Viren infizierter Nachrichten direkt zu verweigern, denn jede zurückgewiesene Mail ist dann nicht mehr Ihr Problem, sondern das des versendenden Mailservers.

Der Mail Transfer Agent (MTA) Postfix bietet hierfür geeignete Schnittstellen an, wie z.B. sogenanntes Pre-Queue Filtering. Dabei wird die eingehende Mail bevor sie in die Mail-Warteschlange aufgenommen wird bereits an einen SMTP-Proxy weitergegeben, das heißt, Postfix stellt die Mail einem anderen Mailserver zu, der idealerweise auf dem selben Host läuft. Dieser auf einen Anwendungsfall spezialisierte Mailserver ist jedoch nicht dafür zuständig, die Mail letztlich zuzustellen, sondern agiert als sogenannter Proxy. Er führt auf der ihm zugestellten Mail seine "Arbeit" aus, wie z.B. die Untersuchung auf Spam mittels SpamAssassin und gibt die Mail dann wahlweise wieder an Postfix zurück oder weist sie mit einem entsprechenden Statuscode ab. In letzterem Fall wird dann schließlich die Annahme verweigert.

Der in diesem Beispiel verwendete SMTP-Proxy nennt sich postprox. Postprox ist ein Programm, dass vom Standardeingabestream die eingehende E-Mail-Kommunikation erwartet und an einen anderen Server (eine weitere "Instanz" von Postfix) direkt weiterleitet, mit Ausnahnme des DATA Blocks (siehe auch: Funktionsweise des SMTP-Protokolls bei Wikipedia). Dieser Block wird nach Beendigung zunächst an ein über das Kommandozeilenargument -c angegebenes Programm weitergegeben. Der Rückgabewert dieses Programms soll im fehlerfreien Fall 0 und im Fehlerfall 1 sein, denn basierend auf diesem Rückgabewert wird der MTA die Mail annehmen (0) oder verweigern (1). Dabei wird der gesamte DATA Block zuvor in einer temporären Datei gespeichert, die das von Postprox aufgerufene Programm über die Umgebungsvariable $EMAIL öffnen kann (weitere Umgebungsvariablen finden sich in der Manpage von Postprox).

Möchte man, wie oben angedeutet, die Nachricht mit SpamAssassins spamc untersuchen, eignet sich folgendes Skript, dass beispielsweise unter /usr/bin/postprox_spamc_wrapper gespeichert wird:

#!/bin/sh
SPAMC=/usr/bin/spamc

$SPAMC -E <$EMAIL > $OUTFILE 2>/dev/null
STATUS=$?

if [ $STATUS -eq 1 ] ; then
  echo 550 Message is considered to be spam 1>&2
  exit 1
fi

exit 0


Nun muss postprox in den MTA eingebunden werden. Dazu wird Postfix' Konfigurationsdatei main.cf um folgende Zeile ergänzt:

smtpd_proxy_filter = 127.0.0.1:10024


Dadurch wird Postfix versuchen, eingehende Mails bereits vor der Warteschlange an den Proxy weiterzugeben, der lokal auf Port 10024 lauscht. Damit dort jedoch überhaupt jemand lauscht, muss nun noch die Date master.cf angepasst werden:

[127.0.0.1]:10024 inet n     n     n     -     20     spawn
        user=cyrus argv=/usr/lib/postfix/postprox -r -c /usr/bin/postprox_spamc_wrapper 127.0.0.1:10025


In dieser Zeile muss ggf. noch der Benutzername, sowie der Pfad zu postprox angepasst werden. Diese Zeile bewirkt, dass Postfix dafür sorgt, dass Postprox selbst nun auf Port 10024 auf eingehende Daten wartet und diese an den SMTP-Server auf dem lokalen Port 10025 weiterleitet. Auf diesem Port muss nun Postfix selbst wieder lauschen, dafür genügt folgender Eintrag in der Datei master.cf:

[127.0.0.1]:10025 inet n     -      n     -     -     smtpd
        -o smtpd_proxy_filter=
        -o mynetworks=127.0.0.1/32
        -o smtpd_authorized_xforward_hosts=127.0.0.1/32
        -o smtpd_client_restrictions=
        -o smtpd_data_restrictions=
        -o smtpd_end_of_data_restrictions=
        -o smtpd_helo_restrictions=
        -o smtpd_recipient_restrictions=permit_mynetworks,reject_unauth_destination
        -o smtpd_sender_restriction=
        -o receive_override_options=no_unknown_recipient_checks


Nach einem Neustart von Postfix wird dieser nun die Mais zunächst annehmen und an Postprox weiterreichen. Postprox wird mittels SpamAssassin prüfen, ob es sich um Spam handelt (Konfiguration von SpamAssassin beachten) und die Mail entweder zurückweisen oder über Port 10025 wieder an Postfix zurückgeben. Erst danach wird die Mail der Warteschlange zugeführt. Als Spam erkannte Mails werden so garnicht erst angenommen.

Auf diesem Weg lassen sich z.B. auch durch Viren infizierte Mails mit Clam AntiVirus überprüfen und früh abweisen. Falls Sie noch weitere Ideen haben, an welche Tools Postprox den DATA Block delegieren kann, bin ich für Kommentare dankbar. :-)


[1] [2] [3] [4] [5]