Saltar al contenido principal
de/blog/obscura/research/fingerprint-vectors-catalog/

obscura/research/fingerprint-vectors-catalog

12 Min. Lesezeit

Übersicht

Dieses Dokument katalogisiert alle bekannten Browser-Fingerprint-Vektoren, die durch die Analyse von FingerprintJS (27,7k Sterne, 44 Quellen), BrowserLeaks (15+ Tools), EFF Cover Your Tracks und anderen Forschungsarbeiten entdeckt wurden. Jeder Vektor ist nach Kategorie, Spoofbarkeit auf Proxy-Ebene und Entropiebeitrag klassifiziert.

Klassifikationslegende

Symbol Bedeutung
Spoofbar Auf Proxy-Ebene vollständig kontrollierbar (Header-Modifikation, DNS, TLS)
Teilweise Kann per JS teilweise modifiziert/injiziert, aber nicht vollständig kontrolliert werden
Nicht spoofbar Auf Hardware-Ebene oder bevor der Proxy eingreifen kann
Erkennbar Spoofing-Versuch kann vom Fingerprinting-Dienst erkannt werden

Schicht 1: Netzwerk & Protokoll (13 Vektoren)

Dies sind die Signale auf niedrigster Ebene, sichtbar vor jedem HTTP- oder JS-Zugriff.

1.1 TCP/IP-Stack-Fingerprint (JA4T)

Was es ist: Passives TCP-Fingerprinting liest SYN-Paket-Parameter, um das Betriebssystem zu identifizieren.

Signale:

  • Initialer TTL (64=Linux/macOS, 128=Windows)
  • Fenstergröße (64240=Chrome/Linux, 65535=macOS)
  • MSS (Maximum Segment Size)
  • TCP-Optionen (MSS, SACK_PERM, TIMESTAMP, WINDOW_SCALE, NOP-Reihenfolge)
  • IP-DF (Don't Fragment)-Flag
  • ECN-Unterstützung

Beispiel JA4T: 64240_2-4-8-1-3_1452_10

Bewertung: Teilweise – Der eigene TCP-Stack des Containers ersetzt den des Clients. Obscuras TCP-Stack wird gesehen, nicht der des Clients. Dies ist unvermeidbar.

1.2 TLS-Fingerprint (JA3/JA4)

Was es ist: TLS-ClientHello-Parameter offenbaren die Browser-Identität.

Signale:

  • Liste der Cipher Suites (Reihenfolge und Auswahl)
  • Liste der TLS-Erweiterungen (Reihenfolge und Auswahl)
  • Unterstützte Gruppen (Kurven)
  • EC-Punktformate
  • ALPN-Protokolle
  • TLS-Version
  • SNI-Präsenz

Beispiel JA3: 6734f37431670b3ab4292b8f60f29984 (Chrome 120 Win11)

Bewertung: Spoofbar mittels utls-Bibliothek (Go) oder eigener TLS-Implementierung (Rust).

Hinweis: Da Obscura TLS für MITM terminiert, kann der äußere TLS-Handshake zum Server vollständig kontrolliert werden. Dies ist ein kritischer Vektor – ohne Spoofing sieht der Server Go's/Chrome's TLS-Stack, was sofort einen Proxy verrät.

1.3 HTTP/2-Fingerprint (Akamai-Format)

Was es ist: HTTP/2-Verbindungspräambel und SETTINGS-Frames variieren je nach Browser.

Signale:

  • SETTINGS-Frame-Parameter (MAX_CONCURRENT_STREAMS, INITIAL_WINDOW_SIZE, MAX_FRAME_SIZE, etc.)
  • SETTINGS-Frame-Reihenfolge
  • PING-Frame-Verhalten
  • WINDOW_UPDATE-Timing
  • PRIORITY-Frame-Struktur
  • Magic-Octets (PRI * HTTP/2.0)

Bewertung: Teilweise – Spoofbar, wenn Obscura ein eigenes HTTP/2 implementiert, aber komplex. Bei Verwendung von Go's net/http sieht der Server Go's HTTP/2-Fingerprint.

1.4 QUIC / HTTP/3-Fingerprint

Was es ist: QUIC (HTTP/3) verwendet UDP und ist Ende-zu-Ende verschlüsselt – kann nicht abgefangen werden.

Signale:

  • QUIC-Transportparameter
  • Verbindungs-ID-Länge
  • Versionsaushandlung
  • TLS-1.3-Handshake über QUIC

Bewertung: Nicht spoofbar – QUIC umgeht den Proxy vollständig. Obscura muss QUIC blockieren (UDP 443), um HTTP/1.1 oder HTTP/2 über TCP zu erzwingen.

1.5 DNS-Fingerprint

Was es ist: DNS-Abfragemuster und Resolver-Auswahl.

Signale:

  • DNS-Resolver-IP (Cloudflare 1.1.1.1 vs. Google 8.8.8.8 vs. ISP)
  • DNS over HTTPS vs. DNS over TLS vs. normales DNS
  • EDNS0-Optionen
  • DNS-Abfrage-Zeitmuster
  • DNSSEC-Unterstützung

Bewertung: Spoofbar – Obscura kontrolliert die DNS-Auflösung vollständig.

1.6 WebRTC-IP-Leck

Was es ist: WebRTC kann die echte lokale und öffentliche IP preisgeben, selbst hinter VPN/Proxy.

Mechanismus:

const pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] })
pc.createDataChannel('')
pc.createOffer().then(offer => pc.setLocalDescription(offer))
// ICE-Kandidaten geben lokale und öffentliche IPs preis

Bewertung: Teilweise – Kann per JS-Injection blockiert werden (RTCPeerConnection-Überschreibung), aber das Blockieren ist erkennbar.

1.7 IP-Geolokalisierung

Was es ist: Die IP-Adresse offenbart Land, Stadt, ISP, ASN, Breiten-/Längengrad.

Bewertung: Spoofbar – Verwende einen VPN/Tor-Upstream vor Obscura oder leite durch einen Exit-Knoten.

1.8 Network Information API

Was es ist: navigator.connection gibt den Netzwerktyp preis.

navigator.connection.effectiveType  // "4g", "3g", "2g", "slow-2g"
navigator.connection.downlink       // Mbps-Schätzung
navigator.connection.rtt            // Umlaufzeit (ms)
navigator.connection.saveData       // Datensparmodus

Bewertung: Spoofbar per JS-Injection.

1.9 Timing-Angriffe (Netzwerklatenz)

Was es ist: Die Messung von Ressourcen-Ladezeiten offenbart Netzwerkcharakteristiken.

Mechanismus: Verwende performance.now() vor/nach dem Laden von Ressourcen, um die Latenz zu messen.

Bewertung: Teilweiseperformance.now()-Präzision kann reduziert werden, aber grobes Timing funktioniert weiterhin.

1.10 Proxy/VPN-Erkennung

Was es ist: Server erkennen Proxys über:

  • HTTP-Header (Via, X-Forwarded-For, X-Real-IP)
  • TLS-Fingerprint-Diskrepanz (Chrome-UA + Go-TLS)
  • DNS-Resolver-Inkonsistenz
  • IP in bekannten Proxy/VPN-Bereichen
  • Zeitzonen- vs. IP-Geolokalisierungs-Diskrepanz

Bewertung: Teilweise – Erfordert ein konsistentes Profil über alle Schichten hinweg.

1.11 Content-Filter-Erkennung

Was es ist: Erkennung von Werbeblockern und Datenschutztools über:

  • Blockierte Ressourcenmuster (EasyList-Erkennung)
  • CSS-Selektor-Tests
  • Timing blockierter Ressourcen
  • DOM-Element-Präsenz/Abwesenheit

Bewertung: Erkennbar – Wenn Obscura Domains blockiert, kann dies durch Testen bekannter Tracking-Domains erkannt werden.

1.12 HTTP/HTTPS-Caching-Verhalten

Was es ist: Cache-Timing / ETag-Tracking über Websites hinweg.

Bewertung: Teilweise – Cache-Header können über den Proxy gelöscht/deaktiviert werden.

1.13 OCSP/CRL-Verhalten

Was es ist: Zertifikatswiderruf-Prüfmuster.

Bewertung: Nicht spoofbar – Auf Proxy-Ebene schwer zu kontrollieren, ohne TLS zu brechen.


Schicht 2: HTTP & Header (12 Vektoren)

2.1 User-Agent

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ...

Bewertung: Spoofbar

2.2 Client Hints (Sec-CH-UA)

Sec-CH-UA: "Google Chrome";v="120", "Chromium";v="120", "Not?A_Brand";v="99"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Platform-Version: "15.0.0"
Sec-CH-UA-Model: ""  (Desktop) / "Pixel 7" (Mobil)
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Arch: "x86"
Sec-CH-UA-Bitness: "64"
Sec-CH-UA-Full-Version-List: "..."
Sec-CH-UA-WoW64: ?0

Bewertung: Spoofbar

2.3 Accept-Header

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate, br

Bewertung: Spoofbar

2.4 Content-Type / Content-Encoding

Bewertung: Spoofbar

2.5 Do Not Track / Global Privacy Control

DNT: 1
Sec-GPC: 1

Bewertung: Spoofbar

2.6 Upgrade-Insecure-Requests

Upgrade-Insecure-Requests: 1

Bewertung: Spoofbar

2.7 Referer / Origin

Bewertung: Teilweise – Kann entfernt/modifiziert werden, bricht aber einige Websites.

2.8 Cookie-Verhalten

Signale: Cookies aktiviert/deaktiviert, Third-Party-Cookie-Blockierung, Cookie-Ablaufpräferenzen.

Bewertung: Teilweise – Kann Cookies auf dem Proxy setzen, aber die eigenen Cookie-Einstellungen des Browsers werden per JS preisgegeben.

2.9 Cache-Header

ETag, If-None-Match, Cache-Control, Pragma

Bewertung: Spoofbar auf Proxy-Ebene.

2.10 Connection-Header

Connection, Keep-Alive, Upgrade

Bewertung: Spoofbar

2.11 Proxy-Header

Via, X-Forwarded-For, X-Real-IP, Forwarded

Bewertung: Spoofbar – Alle Proxy-Header entfernen.

2.12 Priority / Lade-Priorität

Sec-Purpose, Sec-Fetch-*, Priority

Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1

Bewertung: Spoofbar


Schicht 3: JavaScript / DOM-APIs (44 Vektoren von FingerprintJS)

Dies sind alle Signale, die von der Open-Source-Bibliothek von FingerprintJS gesammelt werden. Jedes ist eine .ts-Quelldatei.

# Quelldatei Gesammeltes Signal Spoofbar per JS-Injection
1 userAgentData navigator.userAgentData (Marken, Plattform, Mobil, Architektur, Bitanzahl, Modell, Plattformversion, Wow64, fullVersionList, formFactors) Ja
2 fonts Installierte Systemschriften (via CSS @font-face + Messung) Teilweise – kann einschränken, aber nicht fälschen
3 domBlockers Erkennung von Werbe-/Content-Blockern via Testressourcen Teilweise
4 fontPreferences Schriftdarstellungspräferenzen (Zeichenabstand, Schriftmetriken) Teilweise
5 audio AudioContext-Oszillator + DynamicsCompressor-Ausgabe-Hash Teilweise – kann Rauschen injizieren
6 screenFrame Bildschirmrahmenmaße (availTop, availLeft) Ja
7 canvas Canvas-2D-Render-Hash (Text + Formen) Teilweise – Rausch-Injektion
8 osCpu navigator.oscpu (Firefox) Ja
9 languages navigator.languages, navigator.language Ja
10 colorDepth screen.colorDepth Ja
11 deviceMemory navigator.deviceMemory Ja
12 screenResolution screen.width, screen.height Ja
13 hardwareConcurrency navigator.hardwareConcurrency Ja
14 timezone Intl.DateTimeFormat().resolvedOptions().timeZone Ja
15 sessionStorage Ob sessionStorage verfügbar ist Ja (Überschreibung)
16 localStorage Ob localStorage verfügbar ist Ja (Überschreibung)
17 indexedDB Ob indexedDB verfügbar ist Ja (Überschreibung)
18 openDatabase Ob window.openDatabase existiert Ja (Überschreibung)
19 cpuClass navigator.cpuClass (Legacy-IE) Ja
20 platform navigator.platform Ja
21 plugins navigator.plugins (Liste installierter Plugins) Teilweise
22 touchSupport navigator.maxTouchPoints, Touch-Ereignis-Unterstützung Ja
23 vendor navigator.vendor Ja
24 vendorFlavors navigator.vendorSub, navigator.productSub Ja
25 cookiesEnabled navigator.cookieEnabled Ja
26 colorGamut Farbraumunterstützung (sRGB, P3, Rec2020) via Media Query Ja
27 invertedColors Betriebssystem-Einstellung für invertierte Farben Ja
28 forcedColors Betriebssystem-Modus für erzwungene Farben Ja
29 monochrome Monochrom-Farbtiefe via Media Query Ja
30 contrast Kontrast-Präferenz via Media Query Ja
31 reducedMotion prefers-reduced-motion Media Query Ja
32 reducedTransparency prefers-reduced-transparency Media Query Ja
33 hdr HDR-Unterstützung via window.matchMedia Ja
34 math Gleitkomma-Mathe-Fingerprint (Präzisionsunterschiede) Nicht spoofbar – Hardware-FPU-Verhalten
35 pdfViewerEnabled navigator.pdfViewerEnabled Ja
36 architecture navigator.userAgentData.architecture (x86, arm) Ja
37 applePay Apple Pay-Verfügbarkeit Ja (Überschreibung)
38 privateClickMeasurement Private Click Measurement API-Unterstützung Ja (Überschreibung)
39 audioBaseLatency AudioContext-Basislatenz (hardwareabhängig) Nicht spoofbar – Hardware-Audio
40 dateTimeLocale Intl.DateTimeFormat aufgelöstes Gebietsschema Ja
41 webGlBasics WebGL-Renderer, Anbieter, Version, Shader-Präzision Teilweise – kann debug_info blockieren
42 webGlExtensions Liste unterstützter WebGL-Erweiterungen Teilweise – kann Auflistung blockieren
43 vendor (navigator) navigator.vendor (z. B. "Google Inc.") Ja
44 mimeTypes navigator.mimeTypes registrierte MIME-Handler Teilweise

Zusammenfassung der FingerprintJS-Vektoren:

Spoofbarkeit Anzahl
Vollständig spoofbar per JS-Injection 29
Teilweise spoofbar 13
Nicht spoofbar 2

Schicht 4: Browser-Features & Fähigkeiten (25+ Vektoren)

Von BrowserLeaks "Features Detection" werden folgende für Fingerprinting verwendet:

4.1 Web-Features-Unterstützung (Ja/Nein-Binärvektor)

Jedes unterstützte/nicht unterstützte Feature fügt ~1 Bit Entropie hinzu:

  • Canvas, Canvas Text
  • SVG (inline, als img, clip-path, SMIL, Filter, foreignObject)
  • WebGL, WebGL2
  • WebGPU
  • Web Audio API, Spracherkennung, Sprachsynthese
  • WebRTC, MediaStream Recording
  • WebSocket, WebSocket Binary
  • Service Workers, Service Worker Cache
  • Web Bluetooth, Web USB, Web NFC, Web Serial
  • Web Authentication (WebAuthn)
  • Web Cryptography API
  • Web Assembly (Wasm)
  • WebVR / WebXR
  • Web Animations
  • ResizeObserver, IntersectionObserver, MutationObserver
  • Fullscreen API, Pointer Lock API, Geolocation API
  • Battery API, Network Information API, Vibration API
  • PushManager, Notification API, Page Visibility API
  • History API, postMessage
  • Web Workers, Shared Workers
  • Fetch API, Beacon API, Server Sent Events
  • Filesystem API, File API, Blob API
  • GamePad API, Device Orientation, Device Motion
  • CSS-Features (Grid, Flexbox, Transforms 3D, backdrop-filter, etc.)

Gesamt: ~100+ Feature-Tests, aber die meisten sind stark korreliert (Chrome unterstützt X, Firefox nicht). Effektive Entropie: ~10-15 Bits.

Bewertung: Teilweise – Kann Feature-Erkennungs-Überschreibungen injizieren, aber sehr komplex zu warten.

4.2 CSS-Media-Query-Fingerprinting

Was es ist: Erzwungene Bildschirmabmessungen über CSS @media-Queries.

@media (width: 1920px) { ... }
@media (height: 1080px) { ... }
@media (device-width: 1920px) { ... }
@media (resolution: 1.5dppx) { ... }

Bewertung: Teilweise – CSS-basierte Erkennung läuft vor der JS-Injection.

4.3 ClientRects-Fingerprinting

Was es ist: Element.getClientRects() gibt unterschiedliche Werte für unsichtbare Elemente über Browser/OS hinweg zurück.

Bewertung: Nicht spoofbar vom Proxy – DOM-Layout ist browsertypisch.


Schicht 5: System & Hardware (15 Vektoren)

5.1 GPU-Fingerprint

Quellen:

  • WEBGL_debug_renderer_info.UNMASKED_RENDERER_WEBGL (genaues GPU-Modell)
  • WebGPU adapterInfo (Anbieter, Architektur, Gerät, Treiber, Backend)
  • Canvas-Rendering-Unterschiede
  • WebGL-Shader-Präzision
  • WebGL-Erweiterungsunterstützung

Entropie: Sehr hoch – genaues GPU-Modell ist stark identifizierend.

Bewertung: Teilweise – Kann UNMASKED_RENDERER_INFO und WebGPU-Adapterinfo blockieren, aber renderingbasierte Fingerprints bleiben bestehen.

5.2 CPU-Fingerprint

Quellen:

  • navigator.hardwareConcurrency (Kernanzahl)
  • FPU-Mathe-Präzision (Gleitkomma-Operationsunterschiede)
  • performance.now()-Auflösung
  • Wasm-basierte CPU-Feature-Erkennung (SIMD, AES-NI, etc.)

Bewertung: Nicht spoofbar für Mathe-Präzision und Wasm-CPU-Erkennung.

5.3 Speicher-Fingerprint

Quelle: navigator.deviceMemory (RAM in GB, nur in Chrome)

Bewertung: Spoofbar

5.4 Speicher-Fingerprint (Storage)

Quellen:

  • LocalStorage, SessionStorage, IndexedDB, Cache API-Verfügbarkeit
  • Quota Storage Management API
  • WebSQL-Verfügbarkeit

Bewertung: Spoofbar

5.5 Schriftarten-Fingerprinting

Quellen:

  • Installierte Systemschriften (via CSS @font-face messungsbasierte Aufzählung)
  • Schriftdarstellungsmetriken (Zeichenabstand, Höhe, Breite mit bestimmten Schriften)
  • Unicode-Glyphen-Bereichsunterstützung

Entropie: Sehr hoch – Schriftliste kann >1000 Schriften umfassen.

Bewertung: Teilweise – Kann die Schrifterkennung durch Überschreiben von Messfunktionen einschränken, aber Schriftdarstellungsunterschiede bleiben bestehen.

5.6 Bildschirm-Fingerprint

Quellen:

  • screen.width, screen.height, availWidth, availHeight, availTop, availLeft
  • screen.colorDepth, screen.pixelDepth
  • window.devicePixelRatio
  • window.outerWidth, window.outerHeight
  • window.innerWidth, window.innerHeight
  • screen.orientation
  • Multi-Monitor-Erkennung via ScreenDetailed API

Bewertung: Spoofbar per JS-Injection.

5.7 Eingabemethode-Fingerprint

Quellen:

  • navigator.maxTouchPoints
  • Touch-Ereignis-Unterstützung
  • Pointer-Ereignis-Unterstützung
  • Tastaturlayout / Eingabemethode

Bewertung: Spoofbar für Touch-Unterstützung. Nicht spoofbar für Tastaturlayout.

5.8 Audio-Hardware-Fingerprint

Quellen:

  • AudioContext-Abtastrate
  • AudioContext-Basislatenz
  • DynamicsCompressorNode-Ausgabe (hardwareabhängig)
  • Audio-Kanalanzahl
  • Echo-Unterdrückung, Rauschunterdrückungsunterstützung

Bewertung: Nicht spoofbar – Hardware-Audioverarbeitung.

5.9 Battery API

Quellen:

  • navigator.getBattery().level
  • navigator.getBattery().charging
  • navigator.getBattery().chargingTime
  • navigator.getBattery().dischargingTime

Bewertung: Spoofbar per JS-Injection.

5.10 Mediengeräte

Quellen:

  • navigator.mediaDevices.enumerateDevices()
  • Anzahl und Typ von Kameras, Mikrofonen, Lautsprechern

Bewertung: Spoofbar per JS-Injection (leere oder generische Geräteliste zurückgeben).


Schicht 6: Verhalten & Sitzung (8 Vektoren)

6.1 Maus-/Berührungsverhalten

Was es ist: Mausbewegungsmuster, Klick-Timing, Touch-Gesten.

Bewertung: Nicht spoofbar – Verhaltensbiometrie, keine Proxy-Kontrolle.

6.2 Tastendynamik

Was es ist: Tippgeschwindigkeit, Tastendruckdauer, Tastenintervalle.

Bewertung: Nicht spoofbar

6.3 Scrollverhalten

Was es ist: Scrollgeschwindigkeit, Beschleunigungsmuster.

Bewertung: Nicht spoofbar

6.4 Sitzungsdauer / Seiten-Timing

Was es ist: Zeit auf Seiten, Navigationsmuster.

Bewertung: Nicht spoofbar

6.5 Performance-Timing

Signale:

  • performance.now() feinkörniges Timing
  • performance.timeOrigin
  • Navigation Timing API (performance.getEntriesByType('navigation'))

Bewertung: Teilweiseperformance.now()-Präzision kann reduziert werden.

6.6 Multi-Window / Multi-Tab-Erkennung

Was es ist: BroadcastChannel, SharedWorker, localStorage tabübergreifende Kommunikation.

Bewertung: Teilweise per JS-Injection.

6.7 Service Worker-Persistenz

Was es ist: Erkennung, ob ein SW registriert ist, Cache-Zustand.

Bewertung: Teilweise – kann überschrieben werden, aber SW-Scope ist komplex.

6.8 Zeitzone / Clock Skew

Was es ist: Systemzeitzone + präziser Clock Skew von der Serverzeit.

Bewertung: Spoofbar für Zeitzone. Teilweise für Clock Skew.


Vektorenanzahl-Zusammenfassung

Schicht Kategorie Anzahl Proxy-spoofbar Teilweise Nicht spoofbar
1 Netzwerk & Protokoll 13 3 6 4
2 HTTP & Header 12 11 1 0
3 JavaScript / DOM-APIs 44 29 13 2
4 Browser-Features ~100+ 0 ~10 ~90+
5 System & Hardware 15 6 4 5
6 Verhalten & Sitzung 8 1 4 3
Gesamt (eindeutige Vektoren) ~60+ ~50 ~38 ~100+

Auswirkungen auf Obscura

  • ~50 Vektoren sind auf Proxy-/JS-Injection-Ebene vollständig kontrollierbar
  • ~38 Vektoren können teilweise gemildert, aber nicht perfekt verhindert werden
  • ~100+ Vektoren liegen außerhalb der Kontrolle von Obscura (Hardware, Verhalten, Feature-Flags)

Realistischer Schutz: Ein gut konfiguriertes Obscura kann ~55 % der Fingerprint-Oberfläche kontrollieren, aber die restlichen ~45 % geben weiterhin Informationen preis. In Kombination mit DNS-Blockierung bekannter Fingerprinting-Domains ist der effektive Schutz bedeutsam, aber nicht absolut.