Saltar al contenido principal
it/blog/obscura/research/uncontrollable/browser-features-quirks/

obscura/research/uncontrollable/browser-features-quirks

7 min di lettura

Categoria: Motore Browser / Piattaforma Web


1. Descrizione

Ogni motore del browser (Blink/Chrome, Gecko/Firefox, WebKit/Safari) implementa un sottoinsieme diverso di API Web e funzionalità CSS. Inoltre, ognuno ha stranezze di rendering uniche, impostazioni predefinite e modelli di comportamento. Questi sono inerenti al browser: nessun proxy può cambiarli perché sono compilati nel binario del browser.


2. Vettori

2.1 Supporto Funzionalità API Web

Il browser espone ~100+ test di funzionalità che gli script di fingerprinting enumerano:

Funzionalità ad alto valore per l'identificazione:

API Chrome Firefox Safari Note
WebGL 2 Tutti moderni
WebGPU Sì (flag) No No Solo Chrome
WebUSB No No Solo Chrome
Web Bluetooth No No Solo Chrome
Web NFC Android No No Solo Chrome
Web Serial No No Solo Chrome
Web Share Varia per piattaforma
Battery API No No Solo Firefox
Speech Synthesis Varia per voce
GamePad API Parziale Safari limitato
MathML No Solo Firefox/Safari
Web Workers Tutti, ma Shared Workers variano
Service Workers Tutti moderni
CSS Container Queries Safari in ritardo
CSS Subgrid Safari in ritardo

Entropia: ~10-15 bit (ma altamente correlato: si riduce a famiglia browser + versione)

2.2 Supporto Funzionalità CSS

Centinaia di proprietà e valori CSS variano per browser:

/* Test tramite @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+ */ }

Entropia: ~8-12 bit (identifica motore browser + versione principale)

2.3 Stranezze Implementative del Browser

Ogni browser ha un comportamento di rendering unico:

Stranezza Esempio Browser
Larghezza scrollbar 12px vs 15px vs 0px (overlay) Dipendente dal SO*
Stile elementi modulo Padding pulsanti, raggio bordo Specifico del motore
Rendering Unicode Versione supporto emoji Dipendente da SO+browser
Comportamento <details> Animazione apertura/chiusura Specifico del motore
Parsing Date() Formati data non standard Specifico del motore
Ordine JSON.stringify() Ordine enumerazione proprietà Specifico del motore (fisso in ES6)
Risoluzione performance.now() 5s vs 100s vs 1ms Chrome vs Firefox vs Safari

*La larghezza scrollbar rivela il SO: Windows=12-17px, macOS=variabile (sottile/overlay), Linux=variabile

2.4 Metriche Rendering Font

Anche con gli stessi font installati, diverse combinazioni SO/browser renderizzano il testo in modo diverso:

const span = document.createElement('span')
span.textContent = 'mmmmmmmmmmlli'
document.body.appendChild(span)
const width = span.getBoundingClientRect().width
// La larghezza varia per motore di rendering font del SO (FreeType, CoreText, DirectWrite)

Entropia: ~4-6 bit

2.5 Configurazione Predefinita del Browser

I browser vengono forniti con impostazioni predefinite diverse:

Impostazione Chrome Firefox Safari
Font predefinito Times New Roman Times New Roman Times
Dimensione font predefinita 16px 16px 16px
Dimensione font minima 0px 0px 12px (variabile)
Lingua predefinita Locale SO Locale SO Locale SO
Caricamento automatico immagini On On On
JavaScript On On On
Cookie Consentiti Consentiti Consentiti (bloccati in privato)

2.6 Specifico di Chrome: Riduzione User-Agent

Chrome riduce progressivamente le informazioni dello User-Agent. La nuova API navigator.userAgentData fornisce dati strutturati:

  • Elenco brands (es. "Google Chrome";v="120")
  • Piattaforma (es. "Windows", "macOS")
  • Flag mobile
  • Architettura, bitness, modello, platformVersion (possono essere nascosti)

Notabile: Safari non implementa userAgentData, e Firefox solo recentemente ha iniziato. Questo è di per sé un segnale.


3. Punti di Forza dell'Attaccante

Forza Spiegazione
Non può essere cambiato Le funzionalità del browser sono compilate nel browser
Nessun permesso richiesto I test di funzionalità vengono eseguiti silenziosamente
Enumerazione rapida 100+ funzionalità testate in <10ms
Stabile tra versioni Le funzionalità raramente cambiano all'interno di una versione del browser
Vettore binario (sì/no) Può essere facilmente combinato in un hash unico

4. Debolezze dell'Attaccante

Debolezza Spiegazione Sfruttabile?
Bassa entropia individuale Identificazione base del browser; non singolo utente No
Bloccabile via DNS Gli script di rilevamento funzionalità devono caricarsi dal server
Correlato Tutti gli utenti Chrome 120 appaiono uguali No
Cambia con aggiornamenti Gli aggiornamenti del browser cambiano i set di funzionalità Occasionale
La modalità privacy influisce La navigazione privata/incognito modifica alcune funzionalità Parziale

5. Rilevamento della Manipolazione

Tecnica Come Funziona
Incoerenza funzionalità Dichiarare funzionalità Chrome ma restituire set funzionalità Firefox
Funzionalità attese mancanti Chrome senza WebUSB è sospetto
Anomalie di temporizzazione L'enumerazione delle funzionalità richiede troppo tempo?
Vettore funzionalità troppo pulito I browser reali hanno alcune funzionalità rare mancanti

6. Mitigazioni per Obscura

6.1 Cosa Può Fare Obscura

Mitigazione Efficacia Rilevabilità Implementazione
Blocca DNS dei domini di fingerprinting Alta (previene enumerazione) Bassa Gestione blocklist
Inietta override funzionalità JS Bassa (troppe funzionalità) Alta Sovrascrivi API individuali
Accetta: le funzionalità browser sono a bassa entropia Passivo Nessuna Documenta rischio residuo

6.2 Cosa Non Può Fare Obscura

Non Può Perché
Aggiungere funzionalità che il browser non ha Non può far supportare WebUSB a Firefox
Rimuovere funzionalità che il browser ha Non può disabilitare funzionalità dal proxy (l'utente può tramite flag)
Cambiare il rendering CSS Il rendering è nel motore del browser
Cambiare le metriche dei font Il rendering dei font è nel SO/browser

6.3 Approccio Raccomandato

1. Blocco DNS dei domini di fingerprinting  (previene enumerazione funzionalità: miglior difesa)
2. Coerenza del profilo                     (almeno fai corrispondere il browser dichiarato con le funzionalità reali)
3. Accetta rischio residuo                  (il vettore funzionalità identifica principalmente la versione del browser, non l'utente)

7. Riferimenti di Ricerca

  • 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.