Aktualisierungen gibt es im Changelog, als RSS-Feed
oder im [matrix] Raum #prhdb-changes:nitro.chat

Privacy-Handbuch

Mit Javascript ist es möglich, viele Details des Browsers auszulesen und einen individuellen Fingerprint zu berechnen, der auch ohne Cookies/Evercookies das Tracking ermöglicht.

  1. Bildschirm: Informationen über die Größe des Monitors und des Browser­fensters werden am häufigsten für das Hardware­finger­printing genutzt. Es liegen keine wissen­schaftlichen Analysen zur Verbreitung dieser Tracking­methode vor, aber grob geschätzt werden diese Informationen von 30-50% der Webseiten ausgewertet. Insbesondere auf größeren Portalen wie heise.de, spiegel.de, zeit.de oder google.com findet man fast immer Tracking­scripte, die Bildschirm­größe und Größe des Browser­fensters für das Finger­printing des Browsers nutzen.

  2. Canvas Fingerprinting wurde 2012 in dem Paper Perfect Pixel beschrieben und 2016 auf 14.371 Webseiten als Tracking­verfahren nach­gewiesen. Der Canvastest auf Browser­leaks.com demonstriert das Verfahren. Als einfache Demo kann der Test Schluss­folgerungen über den verwendeten Browser und das Betriebs­system ableiten (und User-Agent Fakes enttarnen).

    Mit Javascript kann Text in ein Canvas Element geschrieben werden. Das Ergebnis wird als Grafik ausge­lesen und ein Hashwert der Grafik berechnet. Das Ergebnis unterscheidet sich von Browser zu Browser aufgrund installierter Schriften, Software für das Rendering usw.

    Canvas Font Fingerprinting wurde 2016 in dem OpenWPM Paper (PDF) beschrieben. Dabei wird das "CanvasRenderingContext2D" Objekt mit der Methode "measureText" genutzt. Der Text wird nicht in das Canvas Element geschrieben sondern es wird nur die Größe ermittelt, die ein Text mit unter­schiedlichen Schriftarten benötigen würde, wenn er geschrieben werden würde. Der ClientRects Test demonstriert das Verfahren.

    Auch dieses Trackingverfahren wird in-the-wild für das Browserfingerprinting eingesetzt.

    Das Add-on CanvasBlocker verhindert einen wiedererkennbaren Fingerprint durch geringfügige Modifikation der via Canvas-API oder DOM-Rect-API ausgelesenen Werte.

  3. WebGL und SVG Bilder werden ähnlich wie HTML5 Canvas Elemente angezeigt. Der Webserver schickt kein fertiges Bild sondern Befehle, um die Grafik lokal im Browser zu generieren. Das Ergebnis kann ausgelesen werden und ist ähnlich wie bei Canvas Elementen von Grafikhard- und -software abhängig. Mit dem Add-on CanvasBlocker können die Ergebnisse leicht modifiziert werden, um ein Fingerprinting mit diesen Elementen zu verhindern.
  4. AudioContext: Mit der Audio-API kann Javascript unhörbare Soundschnipsel im Audiobuffer generieren, manipulieren und die Ergebnisse wieder auslesen. Dabei unterscheiden sich die Ergebnisse in Abhängigkeit von der Audiohardware und -software. Die Daten können für das Fingerprinting genutzt werden, wie die AudioContext Fingerprint Test Page zeigt.

    Das Faken der Audio-API durch geringfügige Modifikationen mit den Add-ons JShelter oder CanvasBlocker ist unauffälliger und schwerer erkennbar als das Blockieren der API, was wieder ein seltenes Merkmal für den Browserfingerprint generieren würde.

  5. Timing APIs können von Webanwendungen zur Analyse des Ladens von Resourcen oder des Nutzerverhaltens missbraucht werden (siehe: Timing Attacks on Web Privacy, PDF).

    Die Leistungscharakteristik moderner Grafikkarten sind sehr individuell, so dass sie sich für das Fingerprinting der Hardware eignet. Man kann beispw. die komplexe GPU Operationen via WebGL ausführen und die Zeit messen, wie bei dem DrawnApart Angriff (PDF, 2022).

    Dieses Fingerprinting erfordert hochgenaue Timer in Javascript und man verhindert es, indem die Timing-APIs mit dem Add-on JShelter ungenauer gemacht werden.

  6. Gamepad: Die Gamepad-API kann Informationen über ein angeschlossenes Gamepad liefern. Da 99% der Nutzer kein Gamepad verwenden, liefert sie in der Regel keine Informationen. Aber wenn ein Gamepad angeschlossen wurde, ist es ein sehr eindeutiges Merkmal.

    Ein Deaktivieren der Gamepad-API wäre durch Trackingdienste ebenfalls erkennbar und würde ein besonderes Merkmal für den Browserfingerprint erzeugen, daher nicht empfehlenswert.

    Falls ein Gamepad angeschlossen sein sollte, verhindert das Add-on JShelter den Zugriff.

  7. Media Device Enumeration liefert Daten über Kamera und Mikrofon, die man für das Hardware Fingerprinting zu verwenden kann. Der Surfer muss dabei nicht um Zustimmung für den Zugriff auf Kamera oder Mikrofon gebeten werden. Der WebRTC Test demonstriert es:

    Firefox verwendet als Device-IDs einen gesalzenen Hash. Der Salt für die Berechnung des Hashes wird beim ersten Start festgelegt und immer erneuert, wenn Cookies und Cache Daten gelöscht werden. Außerdem ist der Salt in Surfcontainern unterschiedlich.

    Das Add-on JShelter verhindert einen Zugriff auf die Multimedia Geräte ohne das die API abgeschaltet werden muss. Das ist unauffälliger als das häufig empfohlen Deaktivieren der API bei anderen Projekten, die folgende Einstellung empfehlen:

    media.peerconnection.enabled = false (hier nicht empfohlen)
  8. HTML Beacons kann ein Browser beim Verlassen/Schließen einer Webseite Daten zur Analyse an den Webserver senden, die via Javascript gesammelte wurden. Statt die Beacon API zu deaktivieren, ist es unauffäliger, so zu tun als ob man sendet aber keine Daten zu schicken.

    Wenn man HTML5 Beacons nicht verschickt, kann es vorkommen, dass eine Webseite nach einem Klick nicht aktualisiert wird. eBay.com ist ein Beispiel dafür. Man muss oft den Reload Button klicken, um eine wirklich aktuelle Seite zu sehen.

Schutz gegen Javascript Fingerprinting

Die meisten oben genannten Javascript APIs könnte man deativieren, um ein Auslesen von Daten zu verhindern (was auch oft empfohlen wird). Da ein Tracking­script die Deaktivierung der APIs erkennt, schafft man damit wieder neue Merkmale für das Fingerprinting (ist also kontraproduktiv).

Besser ist es, die Ausgaben der Javascript APIs geringfügig zu manipulieren. Die Parameter für die Manipulation können von der Domain abhängen, die im Browser aufgerufen wird, so dass die Fakes innerhalb einer Domain konstant bleiben und sich nur beim Wechsel der Domain ändern. Damit wird eine Wieder­erkennung des Surfers anhand des Fingerprint über mehrere Webseiten unmöglich.

Es gibt mehrere Add-ons, die Javascript APIs faken können. An dieser Stelle wird eine Kombination von Canvas­Blocker und JShelter empfohlen. Der Funktions­umfang beider Add-ons über­schneidet sich in den Standard­einstellungen, so dass man die Konfiguration anpassen und darauf achten muss, welche Funktion welches Add-on übernimmt.

Die folgende Tabelle ist eine Empfehlung für die Kombination der beiden Add-ons Canvas­Blocker und JS Redirector, die man übernehmen oder variieren kann (bei mir funktioniert es gut):

CanvasBlockerJShelter
minimale Größe
vortäuschen
aktiviert
(ohne WebGL)
Localy generated
Images unprotected
aktiviert
aktiviert
aktiviert
WebGL API
Funktionen
deaktiviert
aktiviert
(Little lies)
1/10 sec mit
zus. Rauschen
Amplitude variieren
(Little lies)
keine Geräte
anzeigen
deaktiviert
(viele Probleme)
keine Geräte
anzeigen
keine Geräte
anzeigen
aktiviert (high)
aktiviert
max. 2 Einträge
Long Distance
Obfuscation
Zufällige Werte
zwischen min...8.0
aktiviert
(nichts senden aber
"ok" zurückgeben)
aktiviert, aber
nicht in iFrames

Für das Add-on CanvasBlocker steht diese Konfiguration zum Download bereit, im JShelter muss man einen eigenen Level mit diesen Eigenschaften definieren und als "Default" setzen.

Für Webseiten zum Onlinebanking (mit Flickercode) oder für Videokonferenzen kann man im Add-on JShelter den vordefinierten Level "0" und sie funktionieren dann i.d.R problemlos.

Lizenz: Public Domain