Thursday, 29. October 2009
Werden meine E-Mails heimlich mitgelesen?
Solange eine Mail nicht verschluesselt ist, kann sie praktisch von jedem, der irgendwie Zugriff auf die Systeme und Netze die die Mail auf ihrem Weg vom Absender zum Empfaenger durchlaeuft hat, gelesen werden. Das ist nichts neues, aber um diese Moeglichkeit geht es mir in dem Gedankenspiel nicht. Mir geht es um Personen, die generell nicht mit den an mich gerichteten Mails in Beruehrung kommen sollten.
Ob man da nun den Arbeitgeber oder den/die Lebenspartner/in in vorsichtigem Verdacht hat oder durch generelle Paranoia getrieben wird, man kann die Frage nur sehr schwer beantworten und sich daher nicht sicher sein. Ich habe mir vor einiger Zeit mal Gedanken darueber gemacht, ob und wie man vielleicht feststellen kann ob jemand mitliest. Die Ueberlegungen sind sicher nicht neu, trotzdem spiel ich das Thema hier mal durch.
Man kann nie mit absoluter Sicherheit ausschliessen, dass jemand mitliest. Ebensowenig kann man sicher sein, dass niemand mitliest, wenn das gleich gezeigte kein Ergebnis liefert. 100% gibt es in dem Bereich nicht.
Bevor ich meine Schritte (fuer Ottonormalverbrowser etwas ausfuehrlicher beschrieben als fuer Admins des eigenen Servers) moegliche Mitleser zu entlarven und mein Fazit hier bespreche, muessen ein paar Dinge bedacht werden.
Willst du es ueberhaupt wirklich wissen? Die Frage sollte man sich IMHO unbedingt als erstes stellen, denn wenn das alles im schlimmsten Fall zu dem Ergebnis kommt, dass jemand mitliest und dieser jemand vielleicht sogar genau identifiziert werden kann, stellt sich schnell die Frage nach dem weiteren Vorgehen. Still akzeptieren und nichts machen? Diejenige Person drauf ansprechen? Gleich den Arbeitsrechtler oder gar den Scheidungsanwalt einschalten? Scheiss Situation. Wer sich dem nicht stellen will sollte sowas gar nicht erst anfangen.
Weiht jemanden ein. Besonders wenn es um die Frage "Liest der Arbeitgeber mit?" geht. Auf eigene Faust "ermitteln" kann ins Auge gehen. Also gebt euch einen Ruck und vertraut mal irgendwem da draussen bevor ihr loslegt. Dokumentieren was man macht kann auch nicht schaden.
Ebenfalls, zumindest fuer mich, ganz wichtig: IANAL! Ich bin kein Anwalt. Auch wenn ich mit meinem halbwegs intakten gesunden Menschenverstand davon ausgehe hier nichts illegales zu beschreiben - schliesslich verschaffen wir uns keine unberechtigten Zugaenge zu irgendwas und beschaeftigen uns eigentlich nur mit uns selber - kann ich nicht ausschliessen, dass man in einigen Faellen versuchen koennte jemandem einen Strick aus all dem zu drehen. Gesunder Menschenverstand und Rechtsprechung bzw. Rechtsauffassung haben geruechteweise teils keinerlei Schnittmenge mehr. An den Stellen an denen ich diese Gefahr sehe weise ich aber auch nochmal ausdruecklich drauf hin.
Um einen unerwuenschten Mitleser zu entlarven wuerde ich versuchen ihn in eine Falle zu locken. Eine Art Honeypot aufstellen. Dazu wuerde ich mir selber eine Mail schicken und diese derart interessant gestalten, dass sie beim Mitleser eine Aktion ausloest: Das oeffnen eines angehaengten Dokuments oder das anklicken eines Links.
Also z.B. vom privaten Mailaccount eine Mail an den eigenen Account auf der Arbeit mit dem Thema "User und Passwortliste der Kollegen" oder eine Mail von einem neu erstellen Mailaccount bei einem Freemailer (GMail, Web.de, GMX, whatever) wie "schakkeline79" und als Thema "Bilderserie fuer dich :*". Je nachdem wen man eben im Verdacht hat. Wie plump oder offensiv man das Thema waehlt ist vermutlich ebenfalls nicht unwichtig. Es soll nicht zu offensichtlich sein aber auch interessant genug, dass der Koeder geschluckt wird.
Das ist dann auch schon das ganze Prinzip nach dem ich die "Falle" aufstellen wuerde. Ohne die Mitarbeit des Mitlesers wird es kaum moeglich sein etwas herauszufinden. Man sollte nicht davon ausgehen, dass sich alle beim spionieren so dappig anstellen wie die Dame von der CDU hier.
Jetzt kommt es nur noch drauf an welche Kenntnisse und Mittel einem zur Verfuegung stehen. Ottonormalverbrowser ohne grosses Hintergrundwissen oder passionierter (Hobby)Admin mit eigenem Server. Auch wenn sich die Frage nach Mitlesern im privaten Umfeld vermutlich haeufiger stellt konzentrier ich mich in den Beispielen auf die Frage ob Geschaeftliches mitgelesen wird, da es dort IMO einiges zu beachten gilt. Das Vorgehen ist letztendlich bei beiden Faellen identisch.
Gedankenspiel fuer normale User ohne eigenen Server.
Gedankenspiel fuer Admins mit eigenem Server.
Fazit
Vorgehen fuer normale User
Wenn man selber keine eigenen Server betreibt sind die Moeglichkeiten etwas eingeschraenkter aber nicht hoffnungslos. Der einfachste Weg in diesem Fall ist es, an die Mail die als Falle dient ein Dokument anzuhaengen, welches beim oeffnen Daten aus dem Internet abfragt. Es sollte also ein HTML Dokument sein, quasi eine ganz einfach Version einer Webseite. Klingt kompliziert, ist es aber gar nicht.
Normalerweise erklaert man Verbindungen beim Austausch von Mails mit den fiktiven Personen/Synonymen Alice (Absender), Bob (Empfaenger), Eve (Lauscher/Eavesdropper) und weiteren. Da Alice und Bob bei uns ja ein und dieselbe Person sind lasse ich Bob weg und nehme Big Brother hinzu.

Alice schickt sich in diesem Beispiel eine Mail mit angehaengtem HTML-Dokument an ihren Mailaccount auf der Arbeit (1). Der Mailserver dort nimmt die Mail an, stellt sie an Alices Postfach zu (2) und schickt gleichzeitig eine Kopie an das Postfach von Big Brother (3). Der liest die Mail, wird neugierig und oeffnet das Attachment im Browser (4) woraufhin eine Anfrage an einen Server im Internet geschickt (5) wird und dieser einen Zaehlerstand erhoeht. Alice kann sie den Zaehlerstand jederzeit ablesen und sieht so eventuell ob jemand mitgelesen hat. Will Alice wissen ob z.B. ihre Privaten Mails mitgelesen werden ist der Ablauf recht aehnlich.
Diese Zaehler gibt es zuhauf im Netz. Normalerweise werden sie auf privaten Homepages oder Blogs eingesetzt, um zu sehen wieviele Besucher die Seite hatte. In dem Beispiel hier nehme ich den Service von Statcounter.com. Nachdem man sich bei Statcounter registriert hat legt man ein neues Projekt an indem man auf den dicken blauen "Add a statcounter project" Pfeil klickt. Auf der naechsten Seite gibt man dem Projekt einen Namen (Website Title) und traegt unter Website URL irgendwas ein (http://example.com). Als Kategorie "Private Homepage" auswaehlen und unten rechts auf "next" klicken. Danach gibts den dicken blauen "configure & install code" Pfeil. Auf der naechsten Seite "invisible counter" auswaehlen und wieder auf "next" klicken. Nun die Auswahl auf "Default installation guide" lassen und einen Haken bei der Option "HTML only counter" setzen. Und wieder "next". Jetzt kommt endlich der eigentliche Counter den man in sein Dokument einbaut. Bei mir sah der Code z.B. so aus:
<a title="blogger visitor counter"Darunter gibts es noch eine ausfuehrliche Anleitung wie der Code zu verwenden sein. Gleichzeitig bekommt man ihn auch an die bei der Registrierung angegebene Mailadresse geschickt. Man kopiert sich den Code nun in die Zwischenablage und erstellt im Texteditor (Notepad, nicht Word) eine Datei mit z.B. folgendem Inhalt:
href="http://www.statcounter.com/blogger/"
target="_blank"><img
src="http://c.statcounter.com/5257513/0/c0d115d4/1/"
alt="blogger visitor counter"
border="0"></a>
<html><head></head><body>Den Inhalt (hier die angeblichen und selbstverstaendlich frei erfundenen Namen und Passworter) sollte man natuerlich entsprechend der Art der Falle anpassen. Letztendlich ist es zwar theoretisch scheissegal was an Text enthalten ist, aber wir wollen Big Brother ja in dem Glauben lassen er sei unentdeckt geblieben. Die Datei dann also z.B. als kollegenpasswoerter.html abspeichern und sich von einem entsprechenden Mailaccount selber an die Arbeit schicken. Wenn nun jemand die Mail liest und das Attachment oeffnet sieht eine einfache Liste im Browser:
Usernamen und Passwoerter der Kollegen<br>
Peter internet<br>
Silvia leberwurst<br>
Schakkeline geheim<br>
Sven schakkeline<br>
<a title="blogger visitor counter"
href="http://www.statcounter.com/blogger/"
target="_blank"><img
src="http://c.statcounter.com/5257513/0/c0d115d4/1/"
alt="blogger visitor counter"
border="0"></a></pre>
</body></html>
Usernamen und Passwoerter der KollegenIst der Computer auf dem die Datei geoeffnet wuerde mit dem Internet verbunden, verbindet der sich im guenstigsten Fall auch mit Statcounter und der Zugriff wird gezaehlt und taucht in der Statistik auf. Genauere Daten findet man unter dem jeweiligen Project (das was vorhin als Website title angegeben wurde) bei Statistics -> Recent Visitor Activity.
Peter internet
Silvia leberwurst
Schakkeline geheim
Sven schakkeline

Wie weit man jetzt mit diesen Informationen kommt haengt wohl immer vom konkreten Fall ab. Wenn der Zugriff ueber einen Proxy erfolgte wirds alles etwas vager. Das sind Themen die man eher angehen kann wenn man ueber einen eigenen Server verfuegt.
Vorgehen fuer Admins
Eigentlich koennen Admins mit eigenem Webserver einen aehnlichen Weg waehlen. Statt auf einen Dienst wie Statcounter greift man auf die eigenen Logs zurueck. Statt einem Attachment kann man eine "normale" HTML Mail mit Links auf den eigenen Server schicken.
Interessant wir der eigene Server besonders an dem Punkt an dem man genauer herausfinden will wer geklickt hat. Spielt man das Spiel z.B. in einem grossen Unternehmen sind fast immer Proxies bzw. NAT-Gateways irgendwo zwischen MUA/Browser und Server. Hier faengt dann allerdings IMHO auch so langsam die rechtlich kritische Ebene an. Man koennte noch versuchen HTTP_X_FORWARDED_FOR auszulesen und so an die Client IP zu kommen, aber oftmals wird die vom Proxy gar nicht mehr durchgereicht bzw. es kommt 127.0.0.1 oder gleich mehrere IPs. Ausserdem benoetigt man wieder selbstgeschriebene Skripte und ich persoenlich moechte den ganzen Aufbau so simpel wie moeglich halten. Schon allein um hinterher nicht in Erklaerungsnot zu kommen ("So, sie hatten da also selbstgeschriebene Skripte laufen. Was haben die denn sonst noch alles gemacht?").
Der naechste Schritt waer dann in der Mail auf ein per .htaccess passwortgeschuetztes Verzeichnis zu verlinken und so indirekt social engineering ins Spiel zu bringen. Das haette den Vorteil, dass man nicht mal irgendwelche gefakten Inhalte erzeugen muesste und mit etwas Glueck versucht sich Big Brother ja direkt mit seinem Namen bzw. anderen verwertbaren Credentials zu authentifizieren.
[Fri Oct 30 14:33:56 2009] [error] [client 1.2.3.4] user bbrother not found: /bak/pwd_a-k.html
[Fri Oct 30 14:33:58 2009] [error] [client 1.2.3.4] user bbrother not found: /bak/pwd_a-k.html
Stop. Hier wird das Eis jetzt IMHO sehr duenn. Zwar haben wir immer noch dieselbe Ausgangssituation: Es wurde nur eine Mail von mir an mich selber geschickt. Aber jetzt werden ploetzlich noch reale Benutzerkennungen und Passwoerter uebertragen. Auch wenn eigentlich klar zu erkennen ist, dass es sich nicht um Phishing handelt denn niemand wurde gezielt angesprochen und aufgefordert irgendwo seine Kennungen abzugeben wuerde mich nicht drauf verassen, dass das jeder so sieht.
IMHO (remember: IANAL) sollte man ab hier vor allem zwei Dinge beherzigen: Schoen die Baelle flach halten und verschluesseln. Also bloss nicht versuchen einen "offiziellen" Eindruck zu hinterlassen indem man am Ende noch eine Passwortabfrage im Corporate Design bastelt. Die 08/15 Passwortabfrage die durch die .htaccess erzeugt reicht aus und legt nicht den Verdacht nahe, man haette die eingegebenen Passwoerter gleich mitgesichert. Aus dem Grund auch die Links auf HTTPS setzen und vorsichtshalber zusaetzlich SSL erzwingen, denn die Authentifizierungsversuche lassen sich natuerlich auch mitsniffen:
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4Und von da ist es dann auch nur noch ein kleiner Schritt hin zum Klartext:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cache-Control: max-age=0, max-age=0
Authorization: Basic YmJyb3RoZXI6Z2VoZWlt
$ echo YmJyb3RoZXI6Z2VoZWlt | base64 -d -Ich wuerde keinerlei Angriffsflaeche bieten indem ich die Daten unverschluesselt durchs Netz rauschen lasse. Um Big Brother nicht durch Warnungen bezueglich eigener CA und self-signed certificate foo zu verwirren kann man sich ja eins von StartSSL holen.
bbrother:geheim
Problematisch wird es jetzt allerdings wenn man nur ein Verzeichnis des Webservers per .htaccess zu Authentifizierung und SSL zwingen will, denn zuerst kommt eine Authentifizierungsaufforderung unverschluesselt per HTTP. Erst wenn die erfolgreich ist schlaegt mod_rewrite zu und es erfolgt eine erneute Abfrage von Username und Passwort. Man hat genau nix gewonnen.
Leider kann man (bzw. kenn ich keinen Weg) mittels .htaccess nicht zuerst SSL erzwingen und dann erst authentifizieren. Entweder man baut mod_rewrite schon in den Virtual Host auf Port 80 ein und dann die Authentifizierung im Virtual Host fuer Port 443 bzw. in die .htaccess oder aber man verzichtet ganz auf mod_rewrite und setzt einfach ein SSLRequireSSL in die .htaccess des zu schuetzenden Verzeichnisses. Kommt ein Client dann ohne SSL bekommt er ein "403 forbidden" zurueck. Die .htaccess koennte also beispielsweise so aussehen:
# Without SSL you shall not passWenn jetzt versucht wird ohne SSL eine Verbindung aufzubauen bekommt der User den Hinweis es mit SSL zu versuchen und wenn die Authentifizierung abgebrochen wird gibts ein "Invalid user.".
SSLRequireSSL
# Auth
AuthType Basic
AuthName "Geschuetzter Bereich. Bitte einloggen."
AuthUserFile /path/to/.htpasswd
Require valid-user # Falls es nicht mehrere User in der .htpasswd gibt
# Custom error pages
ErrorDocument 401 "<h1>Invalid user.</h1>"
ErrorDocument 403 "<h1>SSL required. Please use HTTPS instead of HTTP.</h1>"
Fazit
Mit Sicherheit feststellen oder ausschliessen ob jemand mitliest kann man nicht. Zumindest nicht mit der beschriebenen Methode. Wer relativ sicher sein will muss, so wie ich, verschluesseln. Auch wenn Thawte keine kostenlosen S/MIME Zertifikate mehr anbietet bleiben immer noch Anbieter wie StartSSL oder Secorio (beide Class 1). Verisign bietet Class 1 Zertifikate fuer $20/Jahr an. Ausser S/MIME ist natuerlich auch noch PGP bzw. GnuPG verbreitet. Es gibt freie Versionen von PGP 8 (Bis Windows XP) und auch von PGP Desktop (30 Tage Trial, danach eingeschraenkte Funktionen). Oder man greift gleich zum voelleig freien GnuPG im GPG4Win-Paket. UNIX Versionen verlink ich jetzt nicht extra - ich gehe davon aus, dass ihr eure Paketverwaltung selber im Griff habt.
Selber ausprobiert habe ich das Beschriebene noch nicht. Ich verlass mich auf Verschluesselung und gehoere wohl auch eher zu den Leuten die nicht genau wissen wie sie reagieren sollten wenn etwas bei rauskommt. Ausserdem ist ab und zu etwas Vertrauen ganz gut find ich
Greylisting Fail Nachschlag
Greylisting fail
First Fail
Google macht jetzt auch DNS schoen
Admin Giggle
Selbstschutz vor (staatlicher) Ueberwachung
Unbedenklichkeitsbescheinigung Internet
Ich loese also Paranoia aus. Gut. Besser als "Ich hab nichts zu verbergen."
Die Sicherheitsbehoerden warnen. Mal wieder.
verchromte Paranoia















Was wegfällt ist dieses Dingens da... dieses... da wo sich ein Haufen Nerds an 'nem Linux Stammtisch treffen und sich gegenseitig die Hucke voll signieren... wie nannte sich das doch gleich? Achja, Web of Trust. Oh welch Verlust