[Netzwelt] Browser-Tracking: Erste Websites verwenden Canvas Fingerprinting statt Cookies

Cookies zu setzen, um bestimmte Benutzer wiederzuerkennen, das ist im Internet bereits jetzt gang und gäbe. Forscher der Universitäten Princeton (USA) und Leuven (Belgien) fanden nun heraus, dass einige Websites mittlerweile auf eine bisher kaum beachtete Methode setzen, um Benutzer wiederzuerkennen: Canvas Fingerprinting.

Diese Technik ist bereits seit 2012 bekannt, und findet nun bereits auf Anwendung. Laut den Forschern greifen unter anderem auch die Werbeanbieter von T-Online.de, Kinox.to und YouPorn zu dieser Methode. Fast alle der betroffenen Websites lassen sich derzeit auf einen einzelnen Werbeanbieter zurückführen: addthis.com

Canvas-Elemente sind seit HTML5 Standard in der Auszeichnungssprache. Jeder einzelne Browser erzeugt beim Rendering von Canvas-Elementen und -Texten minmalste Unterschiede - kaum bemerkbar für den Benutzer aber dennoch messbar. Über Javascript lässt sich aus der Darstellung von Canvas-Elementen so ein eindeutiger Fingerabdruck für jeden einzelnen Browser generieren. So lassen sich Besucher auch abseits von Cookies wiedererkennen.

Problem bei Canvas-Fingerprinting: Man kann nicht einfach, wie bei Cookies, den Fingerabdruck löschen. Das Rendering des Browsers bleibt weiterhin das selbe, es sei denn, man wechselt den kompletten Browser. Die einzige Abhilfe dürfte derzeit sein, Javascript auf den betroffenen Websites abzuschalten bzw. die Fingerprint-Skripts zu blocken, damit kein Fingerabdruck mehr errechnet werden kann.


Quelle: /
 
  • Thread Starter Thread Starter
  • #2
Meine Meinung dazu: Es wird wohl immer schwieriger, mit seinem Browser anonym im Netz unterwegs zu sein. Cookies sind ja schon jahrelang bekannt, Flash-Cookies und andere lokale Speichermöglichkeiten werden mittlerweile auch schon ein paar Jährchen benutzt. Dazu kommen unterschiedliche Betriebssysteme, Browser, Auflösungen, Add-Ons, usw. Wenn es jemand darauf anlegt, dann schafft er es wohl immer, einen Benutzer wiederzuerkennen.

Nicht mal die Verwendung eines Textbrowsers würde hier Abhilfe schaffen - durch den geringen Verbreitungsgrad ist dieser dann ebenfalls schon fast wieder eindeutig, obwohl er die meisten der neuen Techniken nicht unterstützt.


Grüße
Thomas
 
Ich weiß zwar, was Canvas sind, kenne mich aber in der Rendering-Geschichte nicht wirklich aus.
Warum werden 1. auf jedem PC/Browser die Überschriften anders dargestellt (ist bei Auszeichnungssprachen nicht das Ziel, dass ALLES auf allen Rechnern gleich aussieht?) und warum wird 2. nicht einfach das Canvas-Element/Funktion (oder wie das genau genannt wird) nicht einfach programmier/skripttechnisch so umgeschrieben/überarbeitet/erneuert, dass dies eben nicht mehr der Fall ist? Ist das von Javascript so gewollt? Stecken da evtl. größere Firmen dahinter (ACHTUNG: Verschwörugnstheorie!)?

HanZ
 
Jeder einzelne Browser erzeugt beim Rendering von Canvas-Elementen und -Texten minmalste Unterschiede - kaum bemerkbar für den Benutzer aber dennoch messbar.
Auch bei der schieren Masse an Usern? Ich meine heutzutage tummeln sich ja hunderte von Millionen Menschen im Internet. Da muss es doch jede Menge Überschneidungen gaben. Alleine schon wenn man sich mal überlegt wie viele Menschen einen Baugleichen Rechner mit Standardbrowser benutzen.

Gibt es denn eine Möglichkeit sich diese Elemente bzw. deren Output irgendwie anzeigen zu lassen? Per PHP, JavaScript o.Ä.?
 
Wie genau hat man sich denn so ein Script vorzustellen?

Etwa so:
Starte Zeitmessung
Rendern Element 1
Zeit nehmen
Rendern Element 2
Zeit nehmen
usw.
Und je nach Hardware und Browser dauert das Rendern der unterschiedlichen Elemente dann unterschiedlich lange, sodass die Zeiten eine eindeutige Identifizierung zulassen.

Kann mir gar nicht vorstellen, dass das so klappt. Wie genau wird denn da gemessen? Und hängt das dann nicht auch noch von den im Hintergrund ausgeführten Programmen ab? Wenn ich im Hintergrund all meine Kerne noch mit Videos kodieren beschäftige, verzögert das dann nicht?
 
Hm ich denke einfach mal, dass es möglich wäre sowas über Plugins dennoch zu umgehen.
Es sollte nach meinem Verständnis theoretisch machbar sein das Rendering zu manipulieren. Minimal reicht ja schon.
 
Wer adblock edge verwendet, ist davor generell sicher weil diese Grafiken gar nicht erst geladen werden.
Und selbst wenn, scheitert das Script an NoScript/Ghostery.

Oder übersehe ich da was?
 
  • Thread Starter Thread Starter
  • #8
Warum werden 1. auf jedem PC/Browser die Überschriften anders dargestellt (ist bei Auszeichnungssprachen nicht das Ziel, dass ALLES auf allen Rechnern gleich aussieht?)
Nein, das ist noch nie das gewesen und wird es auch nie sein. Bei HTML geht es -im Grunde- rein darum, Text zu strukturieren. Dass es in allen Browsern gleich aussehen muss/soll, ist ein Irrglaube vieler Webmaster/Webdesigner, der spätestens dann kaputtgemacht wird, wenn jemand mit anderen Schriftarten (keine MS-Fonts), anderer Schriftgröße oder gar mit einem Textbrowser auf die Seite geht.

Auch bei der schieren Masse an Usern? Ich meine heutzutage tummeln sich ja hunderte von Millionen Menschen im Internet. Da muss es doch jede Menge Überschneidungen gaben.
"The fingerprint is primarily based on browser, operating system, and installed graphics hardware, so does not uniquely identify users."

Daher muss man hier versuchen, möglichst viele Dinge in seinen Fingerprint mit hineinzunehmen, um eine möglichst eindeutige Identifikation zu bekommen. Wobei selbst Fertigcomputer immer noch gewisse Unterschiede aufweisen, wie z. B. unterschiedliche Versionsstände von Betriebssystem(-updates) und Grafikkartentreiber, unterschiedliche Browser, Browser-Addons (Adblocker) oder gar unterschiedliche Auflösungen und Designs (da sehen die Buttons im Browser teilweise anders aus).

Wie genau hat man sich denn so ein Script vorzustellen?
Nunja, entsprechende Skripts sind auf der oben verlinkten Seite verlinkt, daher braucht man sie sich nur anzuschauen. :)

Ich hab mir mal das am weitesten verbreiteste von addthis.com genauer angeschaut, mit meinem rudimentären Javascript-Verständnis hätte ich gesagt:

  • URL in der Adresszeile ermitteln, ist für den Werbetreibenden wichtig, von welcher Website man nun kommt.
  • User-Agent des Browsers ermitteln.
  • Betriebssystem und Browser-Version+Rendering-Engine des Browsers ermitteln.
  • Objekt (Random-Pattern) in den "Local Storage" des Browsers eintragen.
  • Dann wird wohl *irgendwie* der Fingerprint erstellt, leider kann ich mangels JS-Verständnis nicht mehr dazu sagen. :(
  • Zu guter Letzt wird noch ein Cookie gesetzt.


@ Pleitengeier
Solange es sich nur um Werbeanbieter handelt, vielleicht schon. Nun stell Dir aber mal vor, ein normaler Webseitenbetreiber möchte Dich tracken. Damit es nicht so auffällt, versteckt er das Canvas-Fingerprinting-Skript in seinem Javascript-Schnippsel für irgendein Dropdownmenü. Blockst Du das dann auch?


Grüße
Thomas
 
@ Pleitengeier
Solange es sich nur um Werbeanbieter handelt, vielleicht schon. Nun stell Dir aber mal vor, ein normaler Webseitenbetreiber möchte Dich tracken. Damit es nicht so auffällt, versteckt er das Canvas-Fingerprinting-Skript in seinem Javascript-Schnippsel für irgendein Dropdownmenü. Blockst Du das dann auch?
Derjenige müsste aber viele Seiten betreiben damit er einen Tracken kann.
Bei den Werbefritzen funktioniert das doch nur, weil ihre Scripts auf sehr vielen Seiten eingebunden sind.

Und selbst die benutzen dass wohl eher um Mehrfachbesucher aus ihrer Werbestatistik rauszurechnen, anstatt Leute durch das Netz zu verfolgen

Edit: Aber selbst wenn - die Leute mit Adblocker und Scriptblocker sind wohl eine so kleine Minderheit dass es sich nicht lohnt für <1% mehr User ein Vielfaches des Aufwands zu treiben.
Und gerade Scriptblocker können normaler Nutzer nicht einsetzen, da sonst keine Webseiten mehr funktionieren...
 
  • Thread Starter Thread Starter
  • #10
Derjenige müsste aber viele Seiten betreiben damit er einen Tracken kann.
[Verschwörungstheorie-Modus]
Tante Google hätte bestimmt die Kapazitäten und Onkel NSA freut sich bestimmt darüber, wenn er verstecktes Tracking bei allen US-Webpräsenzen anordnen kann.
[/Verschwörungstheorie-Modus]

Wobei ein Fingerprinting auf einer einzelnen Website auch für manche Betreiber interessant sein könnte. Eventuelle Störenfriede könnte man auch abseits der Cookies (löschbar) und IP (änderbar) weiterhin erkennen und zuverlässiger aussperren.


Grüße
Thomas
 
Das addthis.com-Script versucht, so viele Eigenarten des individuellen Browsers zusammenzutragen und anhanddessen ein einmaliges Profil zu erstellen. Hier ein Auszug:

[src=javascript]var E = d || [], C, G = "", B, D;
if (!d) {
E.push(navigator.userAgent);
E.push(navigator.language || navigator.userLanguage);
E.push(screen.colorDepth);
B = i();
if (typeof B !== "undefined") {
E.push(i().join("x"));
} else {
E.push("000");
}
E.push(x());
E.push(new Date().getTimezoneOffset());
E.push(z());
E.push(r());
E.push(!!window.indexedDB);
E.push(!!window.WebGLRenderingContext);
E.push((navigator.battery ? "n" : "0") + (navigator.mozBattery ? "m" : "0"));
E.push(typeof _1);
E.push(typeof (window.openDatabase));
E.push(navigator.cpuClass);
E.push(navigator.platform);
E.push(navigator.doNotTrack);
E.push(f());
// ... [/src]
Da sammelt er schon mal:
  • User-Agent
  • Sprache
  • Farbtiefe
  • Bildschirmauflösung
  • Unterstützung von Shockwave, PDF, Quicktime, RealPlayer, Skype
  • Zeitzone
  • Unterstützung vom sessionStorage
  • Unterstützung von indexedDB
  • Browserspezifische Batterie-Angaben
  • Browserspezifische Angaben zum CPU-Typ
  • Betriebssystem
  • Angabe, ob man getrackt werden möchte (schön paradox, dass addthis diese Präferenz mit in das Profil einbaut :D)
  • Durch den Aufruf von [kw]f()[/kw] wird dann endlich das Canvas-Fingerprinting gestartet.

[src=javascript]function f() {
if (!window.HTMLCanvasElement) {
return 0;
}
try {
var D = "", A = document.createElement("canvas"), B = A.getContext("2d");
A.style.display = "none";
B.textBaseline = "top";
B.textBaseline = "alphabetic";
B.fillStyle = "#f60";
B.fillRect(125, 1, 62, 20);
B.fillStyle = "#069";
h(A, "11pt no-real-font-" + (Math.floor(Math.random * 1000)), 2, 15);
B.fillStyle = "rgba(102, 204, 0, 0.7)";
h(A, "18pt Arial", 4, 17);
try {
document.body.appendChild(A);
} catch (C) {
}
D = A.toDataURL ? A.toDataURL() : "xxx";
try {
B.globalCompositeOperation = "screen";
D += (B.globalCompositeOperation === "screen") ? "gco" : "000";
} catch (C) {
D += "grr";
}
try {
B.clearRect(0, 0, 30, 30);
B.rect(0, 0, 10, 10);
B.rect(2, 2, 6, 6);
D += (B.isPointInPath(5, 5, "evenodd") === false) ? "ppn" : "ppy";
} catch (C) {
D += "prr";
}
try {
B.clearRect(0, 0, 30, 30);
B.textBaseline = "top";
B.font = "32px Arial";
B.fillText("\ud83d\ude03", 0, 0);
D += (B.getImageData(16, 16, 1, 1).data[0] !== 0) ? "emo" : "eno";
} catch (C) {
D += "irr";
}
} catch (C) {
return D + "1";
} finally {
try {
A.parentNode.removeChild(A);
} catch (C) {
} finally {
return D;
}
}
}[/src]

Falls der Browser Canvas unterstützt, wird ein unsichtbarere Canvas angelegt und ein paar Einstellung zur Darstellung von Text gemacht. Es wird mehrfach der Text Cwm fjordbank glyphs vext quiz in verschiedenen Farben gerendert, einmal in Arial und einmal in einer Schriftart, die definitiv nicht existiert. Das erzeugte Bild wird in einem String gespeichert. Der dient nun quasi als Prüfsumme der gerenderten Schrifteigenschaften.

Anschließend wird noch ermittelt, ob der Browser globalCompositeOperation für den canvas unterstützt und ob er die neuartigen Unicode-Emoticons darstellen kann (kennen ja alle aus WhatsApp).

Wer seinen eigenen Canvas-Fingerprint sehen möchte, kann ja gerne mal das angehängte Script in die Javascript-Konsole seines Browsers pasten und das Ganze auf verschiedenen Geräten testen:
 

Anhänge

  • Thread Starter Thread Starter
  • #12
epiphora, vielen Dank für die sehr ausführliche Aufschlüsselung! :)

Angabe, ob man getrackt werden möchte (schön paradox, dass addthis diese Präferenz mit in das Profil einbaut :D)
Was diese Angabe bereits wieder ins ad absurdum treibt. Trackbare Browser sind wohl deutlich verbreiteter, als Browser bei denen die DoNotTrack-Option aktiviert ist. Mit der aktivierten Option liefert man dem Trackingskript daher bereits einen sehr eindeutigen Ansatzpunkt. Um in der Menge besser unterzugehen, kann es daher sogar fast besser sein, die Option zu deaktivieren.


Grüße
Thomas
 
Das ist nicht ganz richtig. Da auch erfasst wird, um welchen Browser es sich handelt, ist es am sinnvollsten, den Standard des Browsers beizubehalten, um eben nicht herauszustechen. Bei den neueren Internet Explorer Versionen ist das Do Not Track-Flag standardgemäß gesetzt und ich könnte mir vorstellen, dass so etwas auch bei anderen Browser zukünftig umgesetzt werden könnte.
 
  • Thread Starter Thread Starter
  • #15
Bei den neueren Internet Explorer Versionen ist das Do Not Track-Flag standardgemäß gesetzt und ich könnte mir vorstellen, dass so etwas auch bei anderen Browser zukünftig umgesetzt werden könnte.
Wer diesen Browser benutzt, der hat imho größere Probleme, als dass er irgendwo per Tracking verfolgt werden könnte.

Aber prinzipiell hast Du Recht. :)


Grüße
Thomas
 
Ich bin mir zwar gerade nicht sicher, ob es das gleiche ist, aber wer will kann ja mal hier nachgucken wie sein Browser so abschneidet. Die Seite ermittelt auch anhand der verfügbaren Informationen des Browsers wie eindeutig man identifizierbar ist. Mit deaktiviertem JS kann man da schon einiges machen.
 
Meine Meinung dazu: Es wird wohl immer schwieriger, mit seinem Browser anonym im Netz unterwegs zu sein. Cookies sind ja schon jahrelang bekannt, Flash-Cookies und andere lokale Speichermöglichkeiten werden mittlerweile auch schon ein paar Jährchen benutzt. Dazu kommen unterschiedliche Betriebssysteme, Browser, Auflösungen, Add-Ons, usw. Wenn es jemand darauf anlegt, dann schafft er es wohl immer, einen Benutzer wiederzuerkennen.
Das Problem dürfte wohl eher mit Drittanbieter-Technologien zusammen hängen und mit einer Sprache, die man über Nacht designed hat und die ungefähr so durchdachte ist, wie meine Idee meine verschwitzten Socken mit Hilfe der Nachbarskatze zu entsorgen.
Flash-Cookies, dazu muss man eben Flash aktiviert haben, genauso für Silverlight, JavaApplets etc hier sind eben kaputte Drittanbieter-Plugins Schuld, dass Sicherheitslücken aufgerissen werden. Seien das nun Sicherheitslücken, die das Betriebssystem angreifbar oder Lücken, die die Identifikation/ Verfolgbarkeit von Nutzern möglich machen. JavaScript trägt dann eben auch noch seinen Teil dazu bei Daten aus dem Browser heraus zu tragen und Unfug anzustellen. Dass man mit JavaScript viel Scheiße machen kann, ist ja auch nicht erst seit gestern bekannt. Warum zeitgemäße Browser die Möglichkeit JavaScript zu deaktivieren immer weiter in den Hintergrund verbannen, verstehe ich nicht. Klar, ajax, jquery-Spielereien usw sind schön und witzig, aber nicht schön genug um über konzeptionelle Probleme von JavaScript hinweg zu trösten.
 
Klar hat Javascript einige Schwächen, aber das Problem ist - wie Du schon sagst - eigentlich ein anderes. Die konzeptionellen Probleme sind meiner Meinung nach schon im Griff. Javascript muss sehr wohl in der Lage sein, Daten im Hintergrund an Drittanbieter zu übertragen. Das ist für manche Dienste einfach erforderlich. Auch die Browser-Hersteller sind meiner Meinung nach nicht die Bösen (mal abgesehen von Microsoft, bei denen die Sicherheit der User nicht oberste Priorität zu haben scheint). Als Internetnutzer fordert man zurecht, dass die Browser die neusten Technologien unterstützen. Dadurch wird ein Druck ausgeübt, der eben Vor- und Nachteile hat. Aber wenn das anders wäre, würden wir auch heute noch vor Netscape oder dem IE6 sitzen und hätten kein dynamisches Web.

Das Problem ist aus meiner Sicht viel eher das Vertrauensverhältnis zwischen Nutzer und Websitebetreiber. Der Nutzer muss sich darauf verlassen, dass der Websitebetreiber die ihm zur Verfügung stehenden Technologien nicht ausnutzt. Das Problem ist eben, dass die Browser ohne ein Hilfsmittel ausgeliefert werden, das dem User hilft, die Vertrauenswürdigkeit einer Website zu bewerten. Da gibt es dann aus meiner Sicht zwei Wege:

NoScript - verhindert halt generell erst mal jede Art von ausführbaren Dritt-Ressourcen. Verhindert oft, dass manche Features richtig funktionieren, schützt dafür aber sehr zuverlässig.
Ghostery - Verhindert nur den Zugriff auf Dritt-Ressourcen, die sich als unerwünscht erwiesen haben. Schränkt die Funktionsweise der Website fast gar nicht ein, schützt aber dafür auch nur vor bekannten Gefahren.

Ich bevorzuge Ghostery, weil ich NoScript zu lästig finde und weil ich anhand der Liste von unerwünschten Drittanbietern gerne selbst abwäge, ob ich die Website als vertrauenswürdig einstufe.

Wie will man das Problem aber lösen? Wie bei vielen Dingen sollte da meiner Meinung nach ein Umdenken der Nutzer vorstellen. Das Web ist kein übermenschliches System, auf das wir keinen Einfluss haben. Durch unser Konsumverhalten können wir ganz klar bestimmen, welche Art von Trackung wir tolerieren und welche nicht. Man sollte sich klar machen, dass Nutzer eine Art Markt sind, deren Vertrauen man sich verdienen kann.
 
Wie bei vielen Dingen sollte da meiner Meinung nach ein Umdenken der Nutzer vorstellen. Das Web ist kein übermenschliches System, auf das wir keinen Einfluss haben. Durch unser Konsumverhalten können wir ganz klar bestimmen, welche Art von Trackung wir tolerieren und welche nicht. Man sollte sich klar machen, dass Nutzer eine Art Markt sind, deren Vertrauen man sich verdienen kann.
Das kannst du aber vergessen...
0,1% aufgeklärte Nutzer die irgendwas boykottieren spielen keine Rolle wenn 99,9% sagen "Tracking? Yolo!"
 
wäre es denn nicht möglich sich zu tarnen? Man kann doch sicherlich mit VMware eine Umgebung erschaffen die viele andere auch nutzen würden, dann würde man nicht auffallen.
 
Zurück
Oben