{"id":79,"date":"2012-06-02T08:15:12","date_gmt":"2012-06-02T07:15:12","guid":{"rendered":"http:\/\/www.kolja-engelmann.de\/blog\/?p=79"},"modified":"2013-04-28T14:12:17","modified_gmt":"2013-04-28T13:12:17","slug":"anonym-im-internet-der-webbrowser","status":"publish","type":"post","link":"https:\/\/www.kolja-engelmann.de\/blog\/2012\/06\/anonym-im-internet-der-webbrowser\/","title":{"rendered":"Anonym im Internet &#8211; Der Webbrowser"},"content":{"rendered":"<p>Wenn man versucht im Internet so anonym wie m\u00f6glich zu sein, dann reicht es bei Weitem nicht die IP zu verbergen, FlashCookies zu blockieren oder das &#8222;Private Browsing&#8220; (oder auch Pornomode \ud83d\ude09 ) im Webbrowser anzuschalten. Der Webbrowser ist die gr\u00f6\u00dfte Datenschleuder und erm\u00f6glicht es beinahe ausnahmslos einen User \u00fcber Webseiten hinweg nur anhand seines einzigartigen Fingerabdrucks zu identifizieren. Aber der Reihe nach.<\/p>\n<h3>Identifikation durch den Browser<\/h3>\n<p>Um eine Person zu identifizieren braucht man, ganz abstrakt gesprochen, Informationen \u00fcber sie, die wir durch Interpretation von Daten gewinnen. Und da Daten in der Informationstechnologie als Bits mit den Werten &#8222;0&#8220; und &#8222;1&#8220;\u00a0repr\u00e4sentiert werden, macht es Sinn auch hier fortan von Bits zu sprechen. M\u00f6chte man theoretisch alle ~7,01 Milliarden Menschen der Erde eindeutig identifizieren, so br\u00e4uchte man dazu 33 Bits an Informationen. (2<sup>33<\/sup>=8.589.934.592). Diese Informationen lie\u00dfen sich bspw. aus Daten \u00fcber das jeweilige Geschlecht, Alter, Name, Herkunft,&#8230;extrahieren. In unserem Fall sollen jedoch keine Menschen, sondern Browser, bzw. Computer eindeutig identifiziert werden und dann darauf folgend geschlossen werden, dass meistens die gleiche Person einen einmal identifizierten Browser verwendet. Laut <a title=\"World Internet Usage Statistics\" href=\"http:\/\/www.internetworldstats.com\/stats.htm\" target=\"_blank\">offiziellen Sch\u00e4tzungen<\/a> nutzten Ende 2011 etwa 2,1 Milliarden Menschen das Internet. Mit 31 Bits an Informationen\u00a0\u00a0(2<sup>31<\/sup>=2 147 483 648) lie\u00dfe sich jeder einzelne davon eindeutig identifizieren. Aber welche Daten nehmen wir nun und wie effektiv sind diese Daten zur Identifizierung?<\/p>\n<p>Mein Browser teilt einer Webseite z.B. mit in welcher Zeitzone ich mich befinde (GMT+1) oder auf welche Sprache er eingestellt ist (de_DE). Aus obigen Sch\u00e4tzungen geht hervor, das Ende 2011 etwa\u00a0500.723.686 Menschen in Europa das Internet nutzen, also etwa jeder Vierte. Das gibt uns ungef\u00e4hr zwei Bits an Information &#8211; nicht besonders hilfreich. Nicht viel besser steht es da mit meinen Bildschirmeinstellungen (1680x1050x32), diese Settings nutzt etwa jeder 20. Internetnutzer und beschwert uns nur etwas mehr als 4 weitere Bits an Information. Deutlich mehr erz\u00e4hlt mein USER_AGENT:\u00a0<\/p>\n<pre class=\"lang:default highlight:0 decode:1 inline:1 \" >Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko\/20100101 Firefox\/13.0<\/pre>\n<p>, denn diese spezielle Kombination aus Betriebssystem und Browser-Version nutzen schon deutlich weniger Menschen (nur etwa jeder\u00a013.325 Browser) und bringt deshalb deutlich mehr, n\u00e4mlich etwa 13.7 Bits an Information.<\/p>\n<div id=\"attachment_82\" style=\"width: 510px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-82\" class=\"size-large wp-image-82\" title=\"User Agent Explained\" src=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained-500x262.png\" alt=\"\" width=\"500\" height=\"262\" srcset=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained-500x262.png 500w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained-300x157.png 300w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained.png 714w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-82\" class=\"wp-caption-text\">Entstanden auf http:\/\/www.useragentstring.com\/<\/p><\/div>\n<p>Leider kann man nicht ohne weiteres einfach fortfahren, Daten zusammentragen und die gewonnenen Informationsbits addieren, bis wir den Browser eindeutig identifiziert haben. Hier macht uns die Entropie einen Strich durch die Rechnung.<\/p>\n<p>Entropie ist unter anderem ein Begriff aus der <a title=\"Entropie in der Wikipedia\" href=\"http:\/\/de.wikipedia.org\/wiki\/Entropie_(Informationstheorie)\" target=\"_blank\">Informationetheorie<\/a>. Ich versuche gar nicht erst diesen Begriff bis ins kleinste zu erkl\u00e4ren, das habe ich selbst auf der Uni nie komplett begriffen. Grob umrissen kann man jedoch sagen, dass die Entropie die Menge an Information (Informationsdichte) bestimmt, die aus bestimmten Daten gewonnen werden k\u00f6nnen. Wenn ich nun sage, dass mein Geburtstag der 17.10.1980 war, dann enthalten diese Daten vielerlei Informationen, die man interpretieren kann. Z.B. wurde ich an einem Freitag geboren, ich bin in diesem Augenblick 31 Jahre alt, mein chinesisches Tierkreiszeichen ist der Affe und an eben jenem Tag empfing Papst Johannes Paul II. im Vatikan die britische K\u00f6nigin Elisabeth II. Die Daten meines Geburtstags enthalten also viel Information, sie haben eine hohe Entropie oder Informationsdichte.<\/p>\n<p>Teile ich nun direkt danach mit, dass mein Sternzeichen Waage ist, hat diese Aussage dann einen hohen Informationsgehalt? Nein, denn diese Information h\u00e4tte ja bereits aus den vorangegangenen Daten meines Geburtstags interpretiert werden k\u00f6nnen, sie ist in diesem Fall nutzlos. Auch bei den Daten, die ein Browser verr\u00e4t gibt es vielerlei Daten, die zu Informationen mit geringer Entropie werden.<\/p>\n<p>Die Webseite <a title=\"Panopticlick Browser identification\" href=\"https:\/\/panopticlick.eff.org\" target=\"_blank\">Panopticlick<\/a>\u00a0hat ein Beispiel f\u00fcr das &#8222;Browser-Fingerprinting&#8220; online gestellt und sich genau mit diesen Problemen befasst. Wenn man seinen Browser dort analysieren l\u00e4sst wird mit allen bekannten Methoden versucht, dem Browser Daten \u00fcber sich und das zu Grunde liegende System, zu entlocken. Die Menge an Informationen ist erschreckend und erstaunlich zugleich.<\/p>\n<div id=\"attachment_85\" style=\"width: 510px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/panopticlick_before.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-85\" class=\"size-large wp-image-85\" title=\"Panopticlick Before\" src=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/panopticlick_before-500x85.png\" alt=\"\" width=\"500\" height=\"85\" srcset=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/panopticlick_before-500x85.png 500w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/panopticlick_before-300x51.png 300w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/panopticlick_before.png 1090w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-85\" class=\"wp-caption-text\">Gek\u00fcrzte Fassung des Panopticlick Berichts<\/p><\/div>\n<p>Den gr\u00f6\u00dften Teil der gewonnenen Information bezieht Panopticlick also aus Daten wie dem USER_AGENT, der Liste der Browser Plugins und den installierten Systemschriftarten und schafft es anhand der eigenen Datenbasis von bisher ~2 Millionen getesteten Systemen mich eindeutig zu identifizieren.<\/p>\n<h3>Was geschieht mit den gewonnenen Informationen?<\/h3>\n<p>Unabh\u00e4ngig von Cookies, IP oder Pornomodus k\u00f6nnte ein in verschiedene Webseiten eingebundenes Skript meinen Browser und damit meinen Weg im Internet dokumentieren, mir zielgerichtete Werbung ausliefern, oder einfach nur Dritten mitteilen, was ich gerade so treibe. Ich mache mir gar keine Illusionen dar\u00fcber, dass Werbenetzwerke diese Technik bereits ausnutzen und bin mir auch bewusst dar\u00fcber wie ich dieses Problem vollst\u00e4ndig l\u00f6sen k\u00f6nnte: Niemals wieder online gehen. Aber mal ehrlich, 2012 ist das nur noch schwer m\u00f6glich, nicht wahr?<\/p>\n<h3>M\u00f6gliche L\u00f6sungsans\u00e4tze gegen das Browser Fingerprinting<\/h3>\n<p>Sofort schweben mir zwei L\u00f6sungans\u00e4tze vor, n\u00e4mlich <strong>die Daten\u00fcbermittlung blockieren<\/strong> oder <strong>in der Masse verstecken<\/strong>.\u00a0In der Masse verstecken klingt dabei zun\u00e4chst einfacher als es ist sobald man sich im Klaren dar\u00fcber ist welche Daten die meisten Informationen preisgeben.<\/p>\n<p>Eine der sinnvollsten L\u00f6sungen die mir spontan einfiel und die wenig Aufwand bedeutet ist das surfen \u00fcber mobile Endger\u00e4te. iOS, Android und Co. besitzen oft innerhalb eines Produktzyklus die selbe Ausstattung an System-Fonts, Plugins und USER_AGENT. Ein kurzer, nicht repr\u00e4sentativer Versuch mit drei Samsung Galaxy SII und zwei Ipad 3 bewies, dass diese Annahme nicht g\u00e4nzlich falsch sein kann. Keines der Ger\u00e4te konnte innerhalb seiner Ger\u00e4teklasse eindeutig erkannt werden.<\/p>\n<p>Auf den PC ist diese Uniformit\u00e4t nat\u00fcrlich sofort dahin. Aber wie w\u00e4re es mit einem Browserpaket, welches alle Plugins und Fonts selbst mitbringt? Eine kritische Masse an Nutzern vorausgesetzt w\u00fcrden diese alle wie ein und derselbe Browser identifiziert werden. Leicht k\u00f6nnte man die technischen Grundvoraussetzungen auch mit einer frei zur Verf\u00fcgung gestellten virtuellen Maschine oder bootbaren Linux-Live-CD schaffen. Aber seien wir ehrlich, wer macht sich denn die M\u00fche jedesmal solch eine Umgebung zu starten, nur um mal schnell etwas zu googeln? Und wie lange w\u00fcrde es dauern, bis gen\u00fcgend Leute diese L\u00f6sung nutzen?<\/p>\n<p>Also doch lieber blockieren? Auch das blockieren der zur Identifizierung herangezogenen Daten ist ein Kampf gegen Windm\u00fchlen. Schlie\u00dft man eine T\u00fcr, wird eine neue irgendwo ge\u00f6ffnet. Aber mit etwas Arbeit k\u00f6nnte man einen Browser zumindest f\u00fcr einen kurzen Augenblick abschotten (und sp\u00e4ter ggf. nachbessern). Dabei gilt es jedoch zu beachten, dass ein Surfen noch immer m\u00f6glich sein muss, ohne dass die Sperren dem Browsingvergn\u00fcgen zu stark im Wege stehen.<\/p>\n<p>Als besonders guten Ansatz erachte ich das &#8222;Click to play&#8220; Feature, welches, urspr\u00fcnglich von Opera entwickelt, mittlerweile den Weg in den Chrome Browser (Einstellungen&#8211;&gt;Erweiterte Einstellungen anzeigen&#8211;&gt;Inhaltseinstellungen&#8211;&gt;Plugins&#8211;&gt;Click To Play)\u00a0und auch in die ersten Nightly Builds vom Firefox 14 geschafft hat (about:config &#8211;&gt; plugins.click_to_play). Im Gegensatz zu NoScript &#8211; das mir pers\u00f6nlich etwas zu restriktiv ist, da es erstmal alle Skripte einer Webseite blockiert und von mir als Nutzer eine Einsch\u00e4tzung erfordert, ob die angesteuerte Webseite jetzt nicht geht, weil ein Skript fehlt, oder weil sie schlecht programmiert ist &#8211; erfordert das &#8222;Click To Play&#8220;-Feature von mir nur einen Klick, um gew\u00fcnschte Plugins wieder zu aktivieren.<\/p>\n<div id=\"attachment_148\" style=\"width: 510px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/06\/click_to_play_flash.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-148\" class=\"size-large wp-image-148\" title=\"Click To Play\" src=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/06\/click_to_play_flash-500x307.png\" alt=\"\" width=\"500\" height=\"307\" srcset=\"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/06\/click_to_play_flash-500x307.png 500w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/06\/click_to_play_flash-300x184.png 300w, https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/06\/click_to_play_flash.png 644w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-148\" class=\"wp-caption-text\">Das Youtube Video wird erst nach einem Klick angezeigt.<\/p><\/div>\n<p>Dann w\u00e4re da noch diese Social Networking und Shared Services Daten &#8211; Epidemie. Solange ich bei Twitter\/Facebook\/Google+ und Co. angemeldet bin und auf Webseiten ein &#8222;Share&#8220; oder &#8222;Like&#8220; zu sehen ist, wei\u00df der entsprechende Dienst nat\u00fcrlich sofort wo ich mich befinde und wer ich bin. Da hilft nur eins: Abmelden, alle Tabs schlie\u00dfen, Cache und Cookies leeren. Und im Google Chrome nicht vergessen sich aus dem Konto auszuloggen, ne? Wer hat denn gesagt dass Unidentifizierbarkeit benutzerfreundlich oder &#8222;sozial&#8220; sein muss?<\/p>\n<h3>Browser Fingerprinting im Firefox erschweren<\/h3>\n<p>Im Firefox kann man noch einen Schritt tiefer in die Materie einsteigen und bestimmte Sprachelemente der Javascript Runtime blockieren oder den HTTP Anfrageheader modifizieren. Diese M\u00f6glichkeiten schreibe ich nur der Vollst\u00e4ndigkeit halber auf. Auf die daraus resultierenden Nachteile gehe ich anschlie\u00dfend ein.<\/p>\n<p>Mittels einer user.js Datei, die man im Profilordner ablegt (z.B. unter <code>\"C:\\Benutzer\\&lt;username&gt;\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\&lt;profilordner&gt;\\user.js\"<\/code>), kann bspw. der Zugriff auf das <a href=\"http:\/\/de.selfhtml.org\/javascript\/objekte\/plugins.htm\">Plugins Objekt<\/a>, die erlaubten <a href=\"http:\/\/de.selfhtml.org\/javascript\/objekte\/mimetypes.htm\" target=\"_blank\">MimeTypes<\/a>, o.a. verboten werden. Das ganze nennt sich CAPS (Configurable Security Policies) und kann <a href=\"http:\/\/www.mozilla.org\/projects\/security\/components\/ConfigPolicy.html\" target=\"_blank\">hier<\/a> nachgelesen werden.<\/p>\n<pre class=\"lang:default decode:true\">user_pref(\"capability.policy.default.Navigator.appVersion.get\", \"noAccess\");\r\nuser_pref(\"capability.policy.default.Navigator.plugins.get\", \"noAccess\");\r\nuser_pref(\"capability.policy.default.Navigator.mimeTypes.get\", \"noAccess\");\r\n...<\/pre>\n<p>Dann g\u00e4be es da noch die M\u00f6glichkeit den HTTP Header zu modifizieren und bestimmte Elemente herauszufiltern. Mit der Erweiterung <a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/addon\/modify-headers\/\" target=\"_blank\">Modify Headers<\/a>\u00a0ist das z.B. relativ simpel. Anhand regul\u00e4rer Ausdr\u00fccke werden bestimmte Elemente des Headers ver\u00e4ndert, hinzugef\u00fcgt oder gel\u00f6scht. Eine Liste der Header Elemente findet sich z.B. <a href=\"http:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_header_fields\" target=\"_blank\">hier<\/a>.<\/p>\n<h3>Fazit:<\/h3>\n<p>Diese \u00c4nderungen wirkten bei einem Skript wie Panopticlick Wunder, es werden fast keinerlei Daten mehr \u00fcbertragen, so dass auch kaum noch Informationen gewonnen werden k\u00f6nnen. Aber zu welchem Preis? Nat\u00fcrlich f\u00fchrt eine Webseite nicht stets B\u00f6ses im Schilde, wenn die Browserversion oder ein Plugin abgefragt wird. Meistens wird dies schlicht und einfach ben\u00f6tigt, damit die Seite auf all den vielen Ger\u00e4ten da draussen korrekt angezeigt werden kann. Verwehre ich den Zugriff auf Daten durch eine oder mehrere der oben genannten Methoden, so muss ich stets damit rechnen, dass anderswo eine gutm\u00fctige Webseite nicht mehr korrekt angezeigt werden kann.<\/p>\n<p>Um in der Masse schwerer identifizierbar (aber nicht unentdeckbar) zu bleiben, verwende ich nur final Versionen der Browser, habe stets Adblock und Ghostery installiert, um den Gro\u00dfteil dieser Schn\u00fcffler von mir fern zu halten und habe (so denn verf\u00fcgbar) das Click To Play &#8211; Feature aktiviert. Bisher habe ich kaum eine Webseite gefunden, deren Funktionalit\u00e4t ich dadurch zerst\u00f6rt h\u00e4tte. Unidentifizierbar werde ich dadurch jedoch nicht und muss abschlie\u00dfend feststellen: Das Internet zu genie\u00dfen UND unsichtbar zu sein ist eine Illusion die ich nur erzeugen kann, wenn ich Offline bleibe.<\/p>","protected":false},"excerpt":{"rendered":"<p>Wenn man versucht im Internet so anonym wie m\u00f6glich zu sein, dann reicht es bei Weitem nicht die IP zu verbergen, FlashCookies zu blockieren oder das &#8222;Private Browsing&#8220; (oder auch Pornomode \ud83d\ude09 ) im Webbrowser&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":82,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[9],"tags":[23,24],"class_list":["post-79","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheit","tag-anonym","tag-webbrowser"],"jetpack_featured_media_url":"https:\/\/www.kolja-engelmann.de\/blog\/wp-content\/uploads\/2012\/05\/user_agent_explained.png","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts\/79","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/comments?post=79"}],"version-history":[{"count":0,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/posts\/79\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/media\/82"}],"wp:attachment":[{"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/media?parent=79"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/categories?post=79"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kolja-engelmann.de\/blog\/wp-json\/wp\/v2\/tags?post=79"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}