Firefox: Decentraleyes – Firefox-Kompendium Teil3

1. Content Delivery NetworkDecentraleyes

Die Grundlage des WWWs ist die Hyper-Text Markup Language (HTML), die es erlaubt, digitale Dokumente (logisch) zu strukturieren. Sofern eine Webseite einmal im Browser geladen wurde, ist sie durch die verwendete HTML-Technik grundsätzlich nicht mehr veränderbar und somit rein statisch. Um ein wenig mehr Flexibilität zu erreichen, wurde daher Mitte der 90er Jahre die Skriptsprache JavaScript entworfen, die es erlaubt, HTML-Dokumente während der Anzeige im Browser dynamisch zu verändern.

Einige der verwendeten JavaScript-Bibliotheken sind allerdings so bandbreitenintensiv, dass Webseitenbetreiber Content Delivery Networks (CDN) einsetzen, um das JavaScript von dort nachzuladen. Für andere Webseitenbetreiber ist es schlichtweg »bequem«, eine JavaScript-Bibliothek von einer externen Quelle einzubetten, ohne sich die Mühe zu machen, die für die Funktionalität der Webseite benötigen Ressourcen selbst zu hosten.

Im vorliegenden Beitrag der Serie »Firefox-Kompendium« möchte ich euch das Addon Decentraleyes vorstellen. Das Addon kann das Risiko für Sicherheit und Privatsphäre beim Surfen minimieren, das mit der Einbindung externer JavaScript-Ressourcen via CDNs einhergeht.

Dieser Beitrag ist Teil einer Artikelserie:

2. Decentraleyes

Bevor wir uns mit der Installation und Konfiguration von Decentraleyes befassen, möchte ich kurz anhand eines Beispiels aufzeigen, was das Addon (im Hintergrund) leistet.

Du kannst den Blog aktiv unterstützen!

Unabhängig. Kritisch. Informativ. Praxisnah. Verständlich.

Die Arbeit von kuketz-blog.de wird vollständig durch Spenden unserer Leserschaft finanziert. Sei Teil unserer Community und unterstütze unsere Arbeit mit einer Spende.

Mitmachen ➡

2.1 Webseitenaufruf ohne Decentraleyes

Ein jeder von uns dürfte heutzutage mindestens einmal am Tag mit seinem Browser im Internet surfen. Allerdings sind wir uns oftmals nicht bewusst, was bei dieser eigentlich für uns alltäglichen Tätigkeit technisch geschieht. Nach der Eingabe einer Domain in die Adresszeile des Browsers wird die entsprechende Webseite vom Browser aufgerufen. Nach dem Erreichen der Webseite erhält der Browser entsprechende Informationen, welche Inhalte er laden soll. Nachdem der Ladevorgang abgeschlossen ist, stellt der Browser den Inhalt der Webseite in einer für den Nutzer lesbaren Form dar.

Welche komplexen Prozesse im Hintergrund notwendig sind, um eine Webseite im Browser darzustellen, können die meisten Nutzer vermutlich nicht einmal erahnen. Die dahinterliegende Technik arbeitet vielmehr meist völlig »geräuschlos«. Dabei ist nur den wenigsten bewusst, wie Webseitenbetreiber durch das Einbinden von externen Ressourcen, wie bspw. JavaScript oder Social-Media-Buttons, die Privatsphäre und insbesondere die Sicherheit ihrer Besucher leichtfertig aufs Spiel setzen.

Viele Webseiten binden bspw. JavaScript-Bibliotheken von Drittquellen (CDNs) wie Google oder Cloudflare ein – hosten diese also nicht selbst. Bei einem Besuch einer Webseite wird daher bspw. eine Verbindung zu

  • ajax.googleapis.com
  • code.jquery.com
  • […]

aufgebaut und dort die entsprechende JavaScript-Ressource (bspw. jQuery) nachgeladen. Durch das Nachladen innerhalb des Browsers wird eure IP-Adresse oder auch HTTP-Headerinformationen an die Drittquelle übermittelt, die diese Informationen gerne zum Browser Fingerprinting »missbraucht«:

Ohne Decentraleyes

Beim Aufruf unserer Beispielwebseite hat der Betreiber externes JavaScript [1] vom Host »ajax.googleapis.com« in den Kontext der Webseite eingebunden. Der Browser wird diese Anfrage im Hintergrund bearbeiten und eine Verbindung zur Adresse »ajax.googleapis.com« aufbauen [2], um das JavaScript von Google nachzuladen. Bei diesem Vorgang übersendet der Browser eine ganze Reihe von Metadaten [3], wie die aktuell besuchte Webseite und die IP-Adresse, an die externe Quelle. Zum Schluss wird die Anfrage des Browsers bearbeitet und das JavaScript vom Host »ajax.googleapis.com« in den Kontext der Webseite [4] nachgeladen.

Insbesondere die Metadaten (Referer, IP-Adresse, usw.) nutzen CDNs oder Giganten wie Google, um den Anwender seitenübergreifend zu tracken bzw. durch das Internet zu verfolgen.

Hinweis

Welche negativen Auswirkungen mit der Einbindung externer Ressourcen (Bilder, JavaScript, etc.) einhergeht, könnt ihr im Detail in folgendem Beitrag nachlesen: Das kranke WWW: Stop using Google Web-Services.

2.2 Webseitenaufruf mit Decentraleyes

Schauen wir uns den Verlauf nach der Installation von Decentraleyes noch einmal an:

Mit Decentraleyes

Beim Aufruf unserer Beispielwebseite hat der Betreiber externes JavaScript [1] vom Host »ajax.googleapis.com« in den Kontext der Webseite eingebunden. Der Browser wird diese Anfrage im Hintergrund bearbeiten und eine Verbindung zur Adresse »ajax.googleapis.com« aufbauen [2], um das JavaScript von Google nachzuladen. Decentraleyes wird diesen Verbindungsaufbau allerdings »abfangen« und die JavaScript-Ressource lokal [3] zur Verfügung stellen. Anschließend wird der Browser das JavaScript in den Kontext der Webseite [4] nachladen – wie aufgezeigt allerdings von einer lokalen Quelle.

Zusammengefasst: Decentraleyes erkennt das Nachladen von JavaScript-Ressourcen via CDNs, kappt diesen Verbindungsversuch und lädt die Ressource lokal nach (sofern sie vorhanden ist). Das Addon beinhaltet neben einer Verbindungserkennung also eine ganze Reihe an JavaScript-Bibliotheken (bspw. jQueryScriptaculous oder AngularJS), die es dann ausliefert, sobald ein Request erkannt wird.

Die Vorteile von Decentraleyes kurz zusammengefasst:

  • Privatsphäre: Zum Schutz der Privatsphäre kappt Decentraleyes die Verbindung zu CDNs, die JavaScript-Ressourcen ausliefern und darüber in der Lage sind, Nutzer seitenübergreifend zu Tracken.
  • Geschwindigkeit: Das lokale Ausliefern von JavaScript ist erheblich schneller, als die Quellen über ein CDN zu laden.
  • Benutzbarkeit: Kann Seiten (wieder) benutzbar machen, bei denen man bspw. das Nachladen von »ajax.googleapis.com« blockiert hat – und es jetzt wieder erlaubt, da die Ressource lokal eingebunden werden kann.

Version 2.0.3 von Decentraleyes erkennt den Verbindungsaufbau zu folgenden CDNs und liefert (falls vorhanden) die angefragte JavaScript-Ressource lokal aus:

  • Google Hosted Libraries
  • Microsoft Ajax CDN
  • CDNJS (Cloudflare)
  • jQuery CDN (MaxCDN)
  • jsDelivr (MaxCDN)
  • Yandex CDN
  • Baidu CDN
  • Sina Public Resources
  • UpYun Libraries

3. Decentraleyes: Anfänger

Bevor wir mit der Installation und Konfiguration von Decentraleyes beginnen, möchte ich euch noch ein paar Hinweise mit auf den Weg geben:

  • Grüne Wiese: Im Idealfall habt ihr euren Firefox neu installiert (oder ein neues Profil angelegt) und habt bisher lediglich den ersten Teil und zweiten Teil der Artikelserie umgesetzt.
  • Ausmisten: Wer hingegen sein bestehendes Firefox-Profil als Ausgangspunkt nimmt, der sollte vor der Installation von Decentraleyes wissen, dass insbesondere die Nutzung von Adblockern dazu führen kann, dass Decentraleyes nicht wie vorgesehen funktioniert. Unter Ziffer 4.1 definieren wir (Fortgeschrittene) daher Ausnahmeregeln für uBlock Origin, dass ihr bereits im zweiten Teil der Serie kennenlernen durftet.

3.1 Installation

Wie bei Firefox üblich wird Decentraleyes am besten direkt über die Addon-Seite von Mozilla installiert. Folgt einfach diesem Link und klickt auf »+ Zu Firefox hinzufügen«.

Installation

Anschließend muss die Installation mit einem Klick auf »Hinzufügen« bestätigt werden:

Addon hinzufügen

Nach einer erfolgreichen Installation wird das Icon von Decentraleyes in der Symbolleiste (rechts oben im Eck) auftauchen:

Nach Installation

Die Installation ist damit abgeschlossen und Decentraleyes ist bereits voll einsatzbereit. Über eine Test-Seite könnt ihr dies verifizieren:

Testing-Utility

Wer es ganz einfach haben möchte, muss keine weiteren Anpassungen vornehmen. Wer allerdings im zweiten Teil der Artikelserie uBlock Origin den Schritt zum »medium mode« gewagt hat, der sollte unbedingt weiterlesen.

4. Decentraleyes: Fortgeschrittene

Zur Erinnerung: Durch den Wechsel zum »medium mode« bei uBlock Origin verhindern / blockieren wir das Nachladen von JavaScript aus Drittquellen. Damit die in Decentraleyes integrierten JavaScript-Ressourcen ausgeliefert werden können, ist daher eine Anpassung von uBlock Origin notwendig. Wenn wir dies nicht tun, wird das Nachladen der lokalen JavaScript-Ressourcen von uBlock Origin einfach blockiert.

4.1 uBlock Origin anpassen

Öffnet zunächst das Dashboard von uBlock Origin und navigiert zum Tab »Meine Regeln«. Ergänzt rechts (Temporäre Regeln) folgende Zeilen:

* ajax.googleapis.com * noop
* ajax.aspnetcdn.com * noop
* ajax.microsoft.com * noop
* cdnjs.cloudflare.com * noop
* code.jquery.com * noop
* cdn.jsdelivr.net * noop
* yastatic.net * noop
* yandex.st * noop
* apps.bdimg.com * noop
* libs.baidu.com * noop
* lib.sinaapp.com * noop
* upcdn.b0.upaiyun.com * noop
* cdn.bootcss.com * noop
* sdn.geekzu.org * noop
* ajax.proxy.ustclug.org * noop

Anschließend klickt ihr zunächst auf »Speichern« und zum Schluss auf »<-Dauerhaft speichern«. Auf der linken Seite (Permanente Regeln) sollte es dann folgendermaßen aussehen:

Permanente Regeln

Hinweis

Eine Liste mit aktualisierten Einträgen / Regeln könnt ihr hier finden.

4.2 Decentraleyes anpassen

Mit der Anpassung von uBlock Origin erlauben wir den Verbindungsaufbau zu diversen CDN-Adressen. Diese Verbindungsversuche werden im Normalfall von Decentraleyes gekappt und die JavaScript-Ressource lokal an den Browser ausgeliefert – es kommt also keine Verbindung zu einer externen Quelle zustande.

Es gibt aber noch einen Sonderfall, den wir beachten müssen: Für den Fall, dass Decentraleyes eine JavaScript-Ressource nicht ausliefern kann (da schlicht nicht vorhanden / mitgeliefert), wird es eine Verbindung zu den in uBlock Origin erlaubten CDNs aufbauen und die JavaScript-Ressource von dort nachladen. Das möchten wir allerdings verhindern, da wir in Teil 2 via uBlock Origin definiert hatten, dass JavaScript aus Drittquellen nicht nachgeladen wird.

Öffnet daher die Einstellungen von Decentraleyes und aktiviert folgendes Häkchen:

  • Blockiere Anfordern fehlender Inhalte: Abgefangene Anforderung unterbinden, falls angeforderte Datei nicht lokal verfügbar ist.

4.3 Erklärung der Anzeige

Abschließend werfen wir noch einen Blick auf die Anzeige von Decentraleyes, die sich mit einem Klick auf das Icon in der Symbolleiste aufrufen lässt:

Dashboard

Direkt am Icon in der Symbolleiste können wir oben rechts erkennen, wie viele JavaScript-Ressourcen Decentraleyes auf der jeweiligen Seite lokal ausliefert. In unserem Beispiel handelt es sich um die JavaScript-Ressource jQuery (v. 2.1.4), die die Webseite über das Google CDN (ajax.googleapis.com) nachladen würde.

5. Fazit

Angesicht der im WWW vorherrschenden Praxis, Ressourcen wie JavaScript von Drittanbietern einzubinden, wirft sich die Frage auf, ob sich Webseitenbetreiber mit den daraus resultierenden Konsequenzen für die Sicherheit und die Privatsphäre für sich und insbesondere ihrer Besucher ausreichend auseinandergesetzt haben.

Decentraleyes kann die »Verantwortungslosigkeit« der Webseitenbetreiber durch das lokale Ausliefern häufig verwendeter JavaScript-Ressourcen zumindest ein Stück weit minimieren. CDNs wie Google bieten ihre Dienste nicht aus reiner Nächstenliebe un­ent­gelt­lich an, sondern (meist) mit dem Ziel, die Nutzer im Internet seitenübergreifend zu tracken bzw. weitere Erkenntnisse aus den (Nutzer-)Daten zu gewinnen.

In den nachfolgenden Teilen der Serie »Firefox-Kompendium« werde ich euch weitere Firefox-Addons und Einstellungen vorstellen und diese aufeinander abstimmen.

Über den Autor | Kuketz

Mike Kuketz

In meiner freiberuflichen Tätigkeit als Pentester / Sicherheitsforscher (Kuketz IT-Security) schlüpfe ich in die Rolle eines »Hackers« und suche nach Schwachstellen in IT-Systemen, Webanwendungen und Apps (Android, iOS). Des Weiteren bin ich Lehrbeauftragter für IT-Sicherheit an der Dualen Hochschule Karlsruhe, sensibilisiere Menschen in Workshops und Schulungen für Sicherheit und Datenschutz und bin unter anderem auch als Autor für die Computerzeitschrift c’t tätig.

Der Kuketz-Blog bzw. meine Person ist regelmäßig in den Medien (heise online, Spiegel Online, Süddeutsche Zeitung etc.) präsent.

Mehr Erfahren ➡

SpendeUnterstützen

Die Arbeit von kuketz-blog.de wird zu 100% durch Spenden unserer Leserinnen und Leser finanziert. Werde Teil dieser Community und unterstütze auch du unsere Arbeit mit deiner Spende.

Folge dem Blog

Wenn du über aktuelle Beiträge informiert werden möchtest, hast du verschiedene Möglichkeiten, dem Blog zu folgen:

Bleib aktuell ➡


Diskussion

20 Ergänzungen zu “Firefox: Decentraleyes – Firefox-Kompendium Teil3”

  1. Comment Avatar Stefan sagt:

    Hallo Mike,

    vielen Dank für diesen abermals grandiosen Beitrag. Solche erklärten Übersichten helfen vor allem Leute wie mir, welche sich die Browser- und Addonkonfiguration oftmals ein wenig halbherzig (und stellenweise leider mit Wissenslücken behaftet) zusammengeklickt haben. Danke dafür.

    Eine kurze Frage zu den von dir vorgeschlagenen Ausnahmen für uBlock Origin: Reicht es, falls man zusätzlich NoScript verwendet, dort bei diesen Ausnahmen nur die Option „Script“ zu erlauben? Oder können/sollen auch weitere Elemente (object, frame, etc) für diese Ausnahmen zugelassen werden?

    Danke und viele Grüße,
    Stefan

    • Comment Avatar Mike Kuketz sagt:

      Eine kurze Frage zu den von dir vorgeschlagenen Ausnahmen für uBlock Origin: Reicht es, falls man zusätzlich NoScript verwendet, dort bei diesen Ausnahmen nur die Option „Script“ zu erlauben? Oder können/sollen auch weitere Elemente (object, frame, etc) für diese Ausnahmen zugelassen werden?

      Ich bin mir aktuell unsicher, ob ich NoScript im Zuge der Serie überhaupt vorstellen werde oder auf die Kombination aus uBlock Origin und uMatrix setze. Die Frage kann ich dir aktuell nicht beantworten, da müsste ich mich selbst nochmal explizit damit befassen. Vielleicht weiß ein aktiver NoScript-Nutzer hier Rat.

  2. Comment Avatar Jenny sagt:

    Zu Punkt 3 Anfänger:
    Es scheint, als ob beide Addons zusammen Komplikationen verursachen.
    Sollte man sich nun entscheiden, ober man einen Adblocker ODER Decentraleyes nutzen sollte?
    Oder kann man beides benutzen?

  3. Comment Avatar Thomas sagt:

    Hallo,

    auch hier vielen herzlichen Dank für die tolle Anleitung :).

    Ich hätte auch noch einige Fragen zu

    Decentraleyes erkennt das Nachladen von JavaScript-Ressourcen via CDNs, kappt diesen Verbindungsversuch und lädt die Ressource lokal nach (sofern sie vorhanden ist).

    Woher kommen die lokalen Ressourcen?
    Muss ich die runterladen und speichern oder wird das beim ersten Aufruf von decentraleyes selbst gemacht?
    Wie sieht es aus, wenn die Ressourcen geupdatet werden? Muss ich das dann manuell machen?

    Viele Grüße
    Thomas

    • Comment Avatar Mike Kuketz sagt:

      Du musst nichts machen. Die JavaScript-Ressourcen sind alle in Decentraleyes integriert (daher ist der Download auch vergleichsweise groß). Du musst nur eines tun: Decentraleyes regelmäßig (automatisch) updaten.

  4. Comment Avatar Jörg Sommer sagt:

    Vielen Dank für den Beitrag und die guten Erklärungen für den Einsatz der Erweiterung.

    CDNs liefern ja nicht nur Javascript, sondern auch Bilder oder Schriften. Kann diese Erweiterung auch irgendwie gegen fonts.googleapis.com helfen?

  5. Comment Avatar romes sagt:

    Hi, danke für den Betrag.

    Ein Frage hätte ich dennoch: wenn ich uMatrix in „hard mode“ betreibe, will ich nicht unbedingt die Regeln aus „noop“ dazu setzen und würde dementsprechend die einzelne Quellen nach und nach selbst in uMatrix erlauben. Komme ich dann damit auf das gleichen Ergebnis?

    Grüße
    romes

    • Comment Avatar chegl sagt:

      Die Testseite von Decentraleyes* verhält sich bei mir genau so, wie du es beschreibst:

      – Sie meldet einen Fehler, wenn uMatrix eine Resource von ajax.googleapis.com blockt.
      – Wenn ich uMatrix eine Ausnahme dafür gebe, meldet die Testseite Erfolg, und die Google-Resource wird in Decentraleyes als „lokal nachgeladen“ angezeigt.

      * https://decentraleyes.org/test/

  6. Comment Avatar Danilo sagt:

    Reicht es, falls man zusätzlich NoScript verwendet, dort bei diesen Ausnahmen nur die Option „Script“ zu erlauben? Oder können/sollen auch weitere Elemente (object, frame, etc) für diese Ausnahmen zugelassen werden?

    Das Addon «NoScript» hat sich mit dem Wechsel auf «Firefox Quantum» leider negativ verändert und ist unübersichtlich und unkomfortabel geworden. Vom ursprünglichen Funktionsumfang ist nur ein Bruchteil übrig geblieben und die Benutzerfreundlichkeit hat sehr gelitten. Selbst die von «NoScript» mitgebrachte „Positivliste“ muß unter Quantum umständlich Eintrag für Eintrag abgearbeitet werden, wenn der Nutzer die Standardeinstellungen nachbessern möchte. Kurz: Unter «Firefox Quantum» ist die Verwendung von «NoScript» im derzeitigen Zustand keine Option.

  7. Comment Avatar Zaza sagt:

    @Danilo Der Wechsel zu Quantum hatte zumindest den Vorteil, dass nunmehr ScriptSafe erreichbar ist. Ich finde, dass ScriptSafe dem Add-on NoScript überlegen ist (man muss sich aber bei ScritpSafe die Optionen näher anschauen und den sonstigen Browsereinstellungen entsprechend ändern).

  8. Comment Avatar radomei sagt:

    Vielen Dank Mike für die wiederum tolle Anleitung.

    Was mir nicht klar ist:

    Du hattest im Dezember 2017 noch empfohlen beim FF esr zu bleiben.
    Da lässt sich Decentraleyes aber nicht installieren (V. 52.x.x).

    Die Zeiten ändern sich bekanntlich, daher die Frage, ob jetzt der Wechsel auf Quantum und Co.inzwischen doch die bessere Wahl ist – wenn man denn dort auch NoScript sinnvoll ersetzt. Oder welche Möglichkeit gäbe es als Ersatz für Decentraleyes bei FF esr?

    • Comment Avatar Mike Kuketz sagt:

      Klar lässt es sich installieren. Steht sogar direkt auf der Addon-Seite als Hinweis:

      *** Using Firefox 52 ESR? Please click „Older versions“, and install the latest compatible release.

      Im Mai erscheint der Firefox ESR auf Basis von Quantum.

  9. Comment Avatar Anonymous sagt:

    Danke für die super Anleitung!

    Eine Nachfrage habe ich:

    Die beiden Regeln, die wir in Teil 2 unter 3.2 [4] noch in uBlock Origin definiert hatten, werden nun in Teil 3 durch die Regeln unter 4.1 bzw. 4.2 ersetzt, richtig? Zumindest kann ich die beiden Zeilen in deinem Screenshot nicht mehr erkennen.

  10. Comment Avatar Izzy sagt:

    Hat außer mir noch jemand das Problem, dass das DE Icon nicht wie in 3.1 beschrieben in der Symbolleiste erscheint – und auch nicht via „Anpassen“ hinzugefügt werden kann, da dort ebenfalls nicht aufgeführt? Aufruf der Testseite bestätigt zwar das einwandfreie Funktionieren des Addons, aber die Details/Statistiken entgehen mir dadurch (ja, ich weiß dass ich die auch über die „Preferences“ einsehen kann ;).

  11. Comment Avatar Aleister Lavey sagt:

    Gerne würde ich Decentraleyes nutzen, aber ich habe den Firefox für *Android* und dementsprechend auch uBlock Origin (hard mode) für *Android*. Bei „Meine Regeln“ gibt es weder die Felder „speichern“ und „dauerhaft speichern“ noch vermag ich zu erkennen *wie* man die von Ihnen genannten Regeln hinzufügen kann (damit Decentraleyes lokales Javascript beschaffen kann). Im WWW habe ich diesbezüglich keine Hilfe gefunden. Ich bitte um Rat!

  12. Comment Avatar Nils sagt:

    Ein super Artikel! Ich finde NoScript für Quantum auch gewöhnungsbedürftig und umständlich. Du hast dich aber in der Artikelserie dafür entschieden, wäre es möglich trotzdem mal einen Artikel über uMatrix zu schreiben, um dessen Funktionen zu erklären. Falls man eine Alternative zu NoScript möchte. Vielen Dank!

HilfeWenn du konkrete Fragen hast oder Hilfe benötigst, sind das offizielle Forum oder der Chat geeignete Anlaufstellen, um dein Anliegen zu diskutieren. Per E-Mail beantworte ich grundsätzlich keine (Support-)Anfragen – dazu fehlt mir einfach die Zeit. Kuketz-Forum

Abschließender Hinweis

Blog-Beiträge erheben nicht den Anspruch auf ständige Aktualität und Richtigkeit wie Lexikoneinträge (z.B. Wikipedia), sondern beziehen sich wie Zeitungsartikel auf den Informationsstand zum Zeitpunkt des Redaktionsschlusses.

Kritik, Anregungen oder Korrekturvorschläge zu den Beiträgen nehme ich gerne per E-Mail entgegen.