Der Sound-Fingerabdruck des Computers über die AudioContext-API



Unternehmen, die Benutzeraktivitäten im Internet verfolgen, benötigen eine zuverlässige Identifizierung jeder Person ohne deren Wissen. Fingerabdrücke über einen Browser passen perfekt. Niemand wird es bemerken, wenn die Webseite fragt, ob ein Grafikfragment durch die Leinwand gezeichnet werden soll, oder ob ein Tonsignal mit einer Lautstärke von Null erzeugt wird, das die Antwortparameter misst.

Die Methode funktioniert standardmäßig in allen Browsern mit Ausnahme von Tor. Es sind keine Benutzerberechtigungen erforderlich.

Gesamtverfolgung


Kürzlich entdeckte der Journalist der NY Times, Kashmir Hill, dass eine wenig bekannte Firma, Sift , 400-seitige Dossiers darauf gesammelt hatte . Es gibt eine Einkaufsliste für mehrere Jahre, alle Nachrichten an Hosts auf Airbnb, Coinbase Wallet-Starts melden sich auf einem Handy an, IP-Adressen, iPhone-Pizzabestellungen und vieles mehr. Eine ähnliche Sammlung wird von mehreren Bewertungsunternehmen durchgeführt. Sie berücksichtigen bis zu 16.000 Faktoren bei der Erstellung einer „Vertrauensbewertung“ für jeden Benutzer. Siebtracker sind an 34.000 Standorten und in mobilen Anwendungen installiert.

Da das Verfolgen von Cookies und Skripten auf dem Client nicht immer gut funktioniert oder deaktiviert ist, wird das Verfolgen von Benutzern durch Fingerabdrücke ergänzt. Hierbei handelt es sich um eine Reihe von Methoden, um einen eindeutigen „Fingerabdruck“ des Browsers / Systems zu erhalten. Die Liste der installierten Schriftarten, Plugins, Bildschirmauflösung und anderen Parameter enthält insgesamt genügend Informationen, um eine eindeutige ID zu erhalten. Fingerabdrücke auf der Leinwand funktionieren gut.

Fingerabdruck über die Canvas-API


Die Webseite weist den Browser an, ein Grafikobjekt aus mehreren Elementen zu zeichnen.

<canvas class="canvas"></canvas> 

  const canvas = document.querySelector('.canvas'); const ctx = canvas.getContext('2d'); // Maximize performance effect by // changing blending/composition effect ctx.globalCompositeOperation = 'lighter'; // Render a blue rectangle ctx.fillStyle = "rgb(0, 0, 255)"; ctx.fillRect(25,65,100,20); // Render a black text: "Hello, OpenGenus" var txt = "Hello, OpenGenus"; ctx.font = "14px 'Arial'"; ctx.fillStyle = "rgb(0, 0, 0)"; ctx.fillText(txt, 25, 110); // Render arcs: red circle & green half-circle ctx.fillStyle = 'rgb(0,255,0)'; ctx.beginPath(); ctx.arc(50, 50, 50, 0, Math.PI*3, true); ctx.closePath(); ctx.fill(); ctx.fillStyle = 'rgb(255,0,0)'; ctx.beginPath(); ctx.arc(100, 50, 50, 0, Math.PI*2, true); ctx.closePath(); ctx.fill(); 

Das Ergebnis sieht ungefähr so ​​aus:



Eine Canvas-API- Funktion mit dem Namen toDataURL () gibt einen URI mit Daten zurück, die mit diesem Ergebnis übereinstimmen:

  console.log(canvas.toDataURL()); /* Ouputs something like: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby mblAAAWDElEQVQImWNgoBMAAABpAAFEI8ARexAAAElFTkSuQmCC" */ 

Dieser URI ist auf verschiedenen Systemen unterschiedlich. Es wird dann gehasht und zusammen mit den anderen Datenbits verwendet, die den eindeutigen Fingerabdruck des Systems ausmachen. Unter anderem:

  • installierte Schriften (ca. 4,37 Bit an identifizierenden Informationen);
  • im Browser installierte Plugins (3.08 Bit);
  • HTTP_ACCEPT-Header (16,85 Bit)
  • User-Agent;
  • sprache
  • Zeitzone;
  • Bildschirmgröße
  • Kamera und Mikrofon;
  • Betriebssystemversion
  • usw.

Der Canvas-Fingerabdruck-Hash fügt zusätzliche 4,76 Bit an identifizierenden Informationen hinzu. Der WebGL-Fingerabdruck-Hash beträgt 4,36 Bit.

Fingerabdrucktest

Kürzlich wurde zusätzlich zu einer Reihe von Parametern eine weitere hinzugefügt: ein Audio-Fingerabdruck über die AudioContext-API .

Bereits im Jahr 2016 wurde diese Identifikationsmethode von Hunderten von Websites wie Expedia, Hotels.com und anderen verwendet.

Fingerabdruck über die AudioContext-API


Der Algorithmus der Aktionen ist derselbe: Der Browser führt die Aufgabe aus, und wir zeichnen das Ergebnis der Ausführung auf und berechnen einen eindeutigen Hash (Fingerabdruck). Nur in diesem Fall werden die Daten aus dem Audiostapel extrahiert. Anstelle der Canvas-API wird auf die AudioContext-API zugegriffen. Es ist die Web-Audio-API, die von allen modernen Browsern unterstützt wird.

Der Browser generiert ein niederfrequentes Audiosignal, das unter Berücksichtigung der auf dem Gerät installierten Audioeinstellungen und Geräte verarbeitet wird. In diesem Fall wird kein Ton aufgenommen oder wiedergegeben. Lautsprecher und Mikrofon sind nicht beteiligt.

Der Vorteil dieser Fingerabdruckmethode besteht darin, dass sie browserunabhängig ist und den Benutzer auch nach dem Wechsel von Chrome zu Firefox, dann zu Opera usw. verfolgen kann.

Fingerabdrucktest über AudioContext API



So erhalten Sie einen Fingerabdruck, exemplarische Vorgehensweise :

  1. Zuerst müssen Sie ein Array erstellen, um die Frequenzwerte zu speichern.

      let freq_data = []; 

  2. Anschließend werden ein AudioContext-Objekt und verschiedene Knoten erstellt, um ein Signal zu generieren und Informationen mithilfe der integrierten Methoden des AudioContext-Objekts zu sammeln.

      // Create nodes const ctx = new AudioContext(); // AudioContext Object const oscillator = ctx.createOscillator(); // OscillatorNode const analyser = ctx.createAnalyser(); // AnalyserNode const gain = ctx.createGain(); // GainNode const scriptProcessor = ctx.createScriptProcessor(4096, 1, 1); // ScriptProcessorNode 

  3. Schalten Sie die Lautstärke aus und verbinden Sie die Knoten miteinander.

      // Disable volume gain.gain.value = 0; // Connect oscillator output (OscillatorNode) to analyser input oscillator.connect(analyser); // Connect analyser output (AnalyserNode) to scriptProcessor input analyser.connect(scriptProcessor); // Connect scriptProcessor output (ScriptProcessorNode) to gain input scriptProcessor.connect(gain); // Connect gain output (GainNode) to AudioContext destination gain.connect(ctx.destination); 

  4. Mit ScriptProcessorNode erstellen wir eine Funktion, die Frequenzdaten während der Audioverarbeitung sammelt.
    • Die Funktion erstellt ein typisiertes Array Float32Array mit einer Länge, die der Anzahl (Häufigkeit) der Datenwerte in AnalyserNode , und füllt es dann mit Werten.
    • Diese Werte werden dann in das Array kopiert, das wir zuvor erstellt haben ( freq_data ), damit wir sie einfach in die Ausgabe schreiben können.
    • Schalten Sie die Knoten aus und zeigen Sie das Ergebnis an.

        scriptProcessor.onaudioprocess = function(bins) { // The number of (frequency) data values bins = new Float32Array(analyser.frequencyBinCount); // Fill the Float32Array array of these based on values analyser.getFloatFrequencyData(bins); // Copy frequency data to 'freq_data' array for (var i = 0; i < bins.length; i = i + 1) { freq_data.push(bins[i]); } // Disconnect the nodes from each other analyser.disconnect(); scriptProcessor.disconnect(); gain.disconnect(); // Log output of frequency data console.log(freq_data); }; 

  5. Wir beginnen, den Ton zu reproduzieren, damit der Ton entsprechend der Funktion erzeugt und verarbeitet wird.

      // Start playing tone oscillator.start(0); 
Das Ergebnis ist ungefähr so:

  / *
 Ausgabe:
 [
 -119.79788967947266, -119.29875891113281, -118.90072674835938,
 -118.08164726269531, -117.02244567871094, -115.73435120521094,
 -114.24555969238281, -112.56678771972656, -110.70404089034375,
 -108.64968109130886, ...
 ]
 * / 

Diese Kombination von Werten wird gehasht, um einen Fingerabdruck zu erstellen, der dann mit anderen Identifikationsbits verwendet wird.

Zum Schutz vor solchen Nachverfolgungen können Sie Erweiterungen wie AudioContext Fingerprint Defender verwenden , die zufälliges Rauschen in den Fingerabdruck mischen.

NY Times stellt E-Mail-Adressen bereit, unter denen Sie Tracking-Unternehmen kontaktieren und sie bitten können, die über Sie gesammelten Informationen anzuzeigen.

  • Zeta Global : Online-Formular
  • Einzelhandelsgleichung : returnactivityreport@theretailequation.com
  • Riskiert : privacy@riskified.com
  • Kustomer : privacy@kustomer.com
  • Sift : privacy@sift.com, das Online-Formular wird nach Veröffentlichung des Artikels deaktiviert




Source: https://habr.com/ru/post/de475586/


All Articles