Kategorie: Browser-Engine / Web-Plattform
1. Beschreibung
Jede Browser-Engine (Blink/Chrome, Gecko/Firefox, WebKit/Safari) implementiert eine andere Teilmenge von Web-APIs und CSS-Features. Darüber hinaus hat jede einzigartige Rendering-Eigenarten, Standardeinstellungen und Verhaltensmuster. Diese sind dem Browser inhärent – kein Proxy kann sie ändern, da sie in die Browser-Binärdatei kompiliert sind.
2. Vektoren
2.1 Web-API-Feature-Unterstützung
Der Browser legt ~100+ Feature-Tests offen, die Fingerprinting-Skripte aufzählen:
Hochwertige Features zur Identifikation:
| API | Chrome | Firefox | Safari | Anmerkungen |
|---|---|---|---|---|
| WebGL 2 | Alle modern | |||
| WebGPU | (Flag) | Nur Chrome | ||
| WebUSB | Nur Chrome | |||
| Web Bluetooth | Nur Chrome | |||
| Web NFC | Android | Nur Chrome | ||
| Web Serial | Nur Chrome | |||
| Web Share | Variiert je nach Plattform | |||
| Battery API | Nur Firefox | |||
| Speech Synthesis | Variiert je nach Stimme | |||
| GamePad API | Teilweise | Safari eingeschränkt | ||
| MathML | Nur Firefox/Safari | |||
| Web Workers | Alle, aber Shared Workers variieren | |||
| Service Workers | Alle modern | |||
| CSS Container Queries | Safari spät übernommen | |||
| CSS Subgrid | Safari spät übernommen |
Entropie: ~10-15 Bits (aber stark korreliert – reduziert auf Browser-Familie + Version)
2.2 CSS-Feature-Unterstützung
Hunderte von CSS-Eigenschaften und -Werten variieren je nach Browser:
/* Test via @supports */
@supports (backdrop-filter: blur(1px)) { /* Chrome + Safari */ }
@supports (-webkit-backdrop-filter: blur(1px)) { /* Safari Legacy */ }
@supports (accent-color: red) { /* Chrome 93+, Firefox 92+, Safari 15.4+ */ }
@supports (container-type: inline-size) { /* Chrome 105+, Firefox 110+, Safari 16+ */ }
Entropie: ~8-12 Bits (identifiziert Browser-Engine + Hauptversion)
2.3 Browser-Implementierungs-Eigenarten
Jeder Browser hat einzigartiges Rendering-Verhalten:
| Eigenart | Beispiel | Browser |
|---|---|---|
| Scrollbalkenbreite | 12px vs. 15px vs. 0px (Overlay) | OS-abhängig* |
| Formularelement-Styling | Button-Padding, Border-Radius | Engine-spezifisch |
| Unicode-Darstellung | Emoji-Unterstützungsversion | OS+Browser abhängig |
<details>-Verhalten |
Öffnen/Schließen-Animation | Engine-spezifisch |
Date()-Parsing |
Nicht standardisierte Datumsformate | Engine-spezifisch |
JSON.stringify()-Reihenfolge |
Eigenschafts-Aufzählungsreihenfolge | Engine-spezifisch (in ES6 behoben) |
performance.now()-Auflösung |
5μs vs. 100μs vs. 1ms | Chrome vs. Firefox vs. Safari |
*Scrollbalkenbreite verrät OS: Windows=12-17px, macOS=variabel (dünn/Overlay), Linux=variiert
2.4 Schriftdarstellungsmetriken
Selbst mit denselben installierten Schriften rendern unterschiedliche OS/Browser-Kombinationen Text unterschiedlich:
const span = document.createElement('span')
span.textContent = 'mmmmmmmmmmlli'
document.body.appendChild(span)
const width = span.getBoundingClientRect().width
// Breite variiert je nach OS-Schriftdarstellungs-Engine (FreeType, CoreText, DirectWrite)
Entropie: ~4-6 Bits
2.5 Standard-Browserkonfiguration
Browser werden mit unterschiedlichen Standardeinstellungen ausgeliefert:
| Einstellung | Chrome | Firefox | Safari |
|---|---|---|---|
| Standardschrift | Times New Roman | Times New Roman | Times |
| Standardschriftgröße | 16px | 16px | 16px |
| Minimale Schriftgröße | 0px | 0px | 12px (variiert) |
| Standardsprache | OS-Gebietsschema | OS-Gebietsschema | OS-Gebietsschema |
| Automatisches Bildladen | An | An | An |
| JavaScript | An | An | An |
| Cookies | Erlaubt | Erlaubt | Erlaubt (im privaten Modus blockiert) |
2.6 Chrome-spezifisch: User-Agent-Reduzierung
Chrome reduziert schrittweise User-Agent-Informationen. Die neue navigator.userAgentData-API bietet strukturierte Daten:
- Markenliste (z. B.
"Google Chrome";v="120") - Plattform (z. B.
"Windows","macOS") - Mobil-Flag
- Architektur, Bitanzahl, Modell, Plattformversion (kann zurückgehalten werden)
Bemerkenswert: Safari implementiert userAgentData nicht, und Firefox hat erst vor Kurzem damit begonnen. Dies ist selbst ein Signal.
3. Stärken des Angreifers
| Stärke | Erklärung |
|---|---|
| Kann nicht geändert werden | Browser-Features sind in den Browser kompiliert |
| Keine Berechtigung erforderlich | Feature-Tests werden still ausgeführt |
| Schnelle Aufzählung | 100+ Features in <10ms getestet |
| Stabil über Versionen | Features ändern sich selten innerhalb einer Browserversion |
| Binärer (Ja/Nein)-Vektor | Kann leicht zu einem eindeutigen Hash kombiniert werden |
4. Schwächen des Angreifers
| Schwäche | Erklärung | Ausnutzbar? |
|---|---|---|
| Niedrige individuelle Entropie | Einfache Browser-Identifikation; kein einzelner Benutzer | Nein |
| DNS-blockierbar | Feature-Erkennungsskripte müssen vom Server geladen werden | Ja |
| Korreliert | Alle Chrome-120-Benutzer sehen gleich aus | Nein |
| Ändert sich mit Updates | Browser-Updates ändern Feature-Sets | Gelegentlich |
| Privatsphärenmodus beeinflusst | Privat/Inkognito modifiziert einige Features | Teilweise |
5. Erkennung von Manipulation
| Technik | Funktionsweise |
|---|---|
| Feature-Inkonsistenz | Chrome-Features behaupten, aber Firefox-Feature-Set zurückgeben |
| Fehlende erwartete Features | Chrome ohne WebUSB ist verdächtig |
| Timing-Anomalien | Dauert die Feature-Aufzählung zu lange? |
| Zu sauberer Feature-Vektor | Echte Browser haben einige seltene Features nicht |
6. Abschwächungen für Obscura
6.1 Was Obscura tun kann
| Abschwächung | Effektivität | Erkennbarkeit | Implementierung |
|---|---|---|---|
| DNS-Blockierung von Fingerprinting-Domains | Hoch (verhindert Aufzählung) | Niedrig | Blocklisten-Verwaltung |
| Feature-Override-JS injizieren | Niedrig (zu viele Features) | Hoch | Einzelne APIs überschreiben |
| Akzeptieren – Browser-Features sind niedrige Entropie | Passiv | Keine | Restrisiko dokumentieren |
6.2 Was Obscura nicht tun kann
| Kann nicht | Warum |
|---|---|
| Features hinzufügen, die der Browser nicht hat | Kann Firefox nicht dazu bringen, WebUSB zu unterstützen |
| Features entfernen, die der Browser hat | Kann Features nicht vom Proxy deaktivieren (Benutzer kann per Flags) |
| CSS-Rendering ändern | Rendering ist in der Browser-Engine |
| Schriftmetriken ändern | Schriftdarstellung ist im OS/Browser |
6.3 Empfohlener Ansatz
1. DNS-Blockierung von Fingerprinting-Domains (verhindert Feature-Aufzählung – beste Verteidigung)
2. Profilkonsistenz (zumindest behaupteter Browser sollte echten Features entsprechen)
3. Restrisiko akzeptieren (Feature-Vektor identifiziert hauptsächlich Browserversion, nicht Benutzer)
7. Forschungsreferenzen
- Eckersley, P. (2010). "How Unique Is Your Web Browser?" PETS 2010.
- Mulazzani, M. et al. (2013). "Fast and Reliable Browser Fingerprinting." ACSAC 2013.
- Laperdrix, P. et al. (2020). "Browser Fingerprinting: A Survey." ACM TOIT.
- Modernizr (2026). "Feature detection library." github.com/modernizr/modernizr.
- BrowserLeaks (2026). "Features Detection." browserleaks.com/features.