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 | Sì | Sì | Sì | Tutti moderni |
| WebGPU | Sì (flag) | No | No | Solo Chrome |
| WebUSB | Sì | No | No | Solo Chrome |
| Web Bluetooth | Sì | No | No | Solo Chrome |
| Web NFC | Android | No | No | Solo Chrome |
| Web Serial | Sì | No | No | Solo Chrome |
| Web Share | Sì | Sì | Sì | Varia per piattaforma |
| Battery API | No | Sì | No | Solo Firefox |
| Speech Synthesis | Sì | Sì | Sì | Varia per voce |
| GamePad API | Sì | Sì | Parziale | Safari limitato |
| MathML | No | Sì | Sì | Solo Firefox/Safari |
| Web Workers | Sì | Sì | Sì | Tutti, ma Shared Workers variano |
| Service Workers | Sì | Sì | Sì | Tutti moderni |
| CSS Container Queries | Sì | Sì | Sì | Safari in ritardo |
| CSS Subgrid | Sì | Sì | Sì | 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 | Sì |
| 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.