Nel panorama moderno della cybersecurity, l’identificazione univoca di un client è diventata una sfida tra guardie e ladri. Mentre i meccanismi di persistenza tradizionali (Cookie, IDFA, LocalStorage) vengono progressivamente castrati dalle policy dei browser e dalle normative sulla privacy, il Browser Fingerprinting emerge come la tecnica regina per il tracciamento stateless.
In questo articolo analizzeremo come questa tecnica possa essere armata da potenziali attaccanti e come le tecnologie di “anti-detect” tentino di contrastarla.

Il browser fingerprinting è una tecnica di tracciamento “stateless” che non si affida alla memorizzazione di dati sul lato client (come i cookie o il LocalStorage), ma sulla raccolta di attributi di configurazione del browser e del sistema operativo per creare un identificatore unico (o quasi unico).
Il principio si basa sull’entropia: più informazioni riusciamo a estrarre, più il profilo diventa univoco. Le macro-aree di raccolta includono:
Come molte tecnologie di sicurezza, il fingerprinting è un’arma a doppio taglio:
Il fingerprinting non è un singolo exploit, ma un processo di aggregazione di dati. L’obiettivo è massimizzare l’entropia combinando attributi che, presi singolarmente, sembrano banali.
Gli attaccanti sfruttano le API standard per inferire le specifiche fisiche della macchina:
Mentre il marketing usa il fingerprinting per il tracking, un attaccante (o un attore malevolo sofisticato) lo utilizza per scopi più insidiosi:
Un fingerprint dettagliato permette di mappare con precisione lo stack software della vittima. Se un attaccante rileva una specifica versione di un plugin o un particolare set di font associato a software vulnerabile, può personalizzare il payload (ad esempio un exploit per il motore JavaScript V8) aumentando il tasso di successo e riducendo il rischio di rilevamento da parte degli EDR.
Molti sistemi di banking online usano il fingerprinting come “secondo fattore invisibile”. Un attaccante che riesce a esfiltrare il profilo di fingerprinting della vittima può tentare di emulare esattamente quel profilo (User-Agent, risoluzione, GPU, set di font) per far apparire la propria sessione come “conosciuta” al sistema di prevenzione frodi, facilitando il takeover dell’account.
Il fingerprinting è il principale nemico dell’anonimato di rete. Anche se un bersaglio cambia IP tramite VPN o rete Tor, il fingerprint rimane costante, permettendo a un attaccante (o a un ente di sorveglianza) di correlare attività diverse allo stesso individuo.
Per contrastare il tracciamento basato su Canvas, la tecnica più efficace è il Canvas Poisoning.
Invece di bloccare del tutto il rendering (cosa che renderebbe il browser “sospetto” e facilmente identificabile), le estensioni di sicurezza o i browser orientati alla privacy iniettano del rumore (noise) nei dati dei pixel. Ogni volta che un sito richiede il toDataURL() di un canvas, il browser restituisce una versione leggermente alterata in modo casuale.
Per i professionisti che necessitano di gestire più identità digitali senza correlazione (es. attività di OSINT o penetration testing), sono nati i Browser Anti-Detect (come Multilogin, AdsPower o GoLogin).
A differenza di un browser standard con estensioni, questi software:
Dal punto di vista matematico, l’efficacia di un fingerprint si misura in bit di entropia. Secondo la teoria dell’informazione di Shannon, l’entropia H di un set di dati è calcolata come:

In questo contesto, P(xi) è la probabilità che una specifica configurazione (es. una particolare combinazione di font e risoluzione) appaia nella popolazione globale degli utenti.
Un attaccante non ha bisogno di identificare ogni singolo dettaglio; gli bastano circa 33 bit di entropia per identificare univocamente un individuo tra l’intera popolazione mondiale (poiché 2^33 è superiore alla popolazione globale). Questo spiega perché anche leak di dati apparentemente insignificanti, se aggregati, risultano deterministici.
Per un esperto di sicurezza, identificare se un sito sta raccogliendo fingerprint non è sempre banale, poiché le chiamate avvengono tramite API JavaScript standard. Tuttavia, ci sono dei segnali rivelatori (red flags) che possono essere monitorati tramite strumenti di debugging o proxy come Burp Suite:
L’uso di script che effettuano il “loop” di enumerazione è il segnale più chiaro. Puoi utilizzare estensioni come CanvasBlocker (in modalità report) o iniettare uno script di monitoraggio in console per tracciare le chiamate a:
HTMLCanvasElement.toDataURL() e getImageData()AudioContext.createOscillator()Intl.DateTimeFormat().resolvedOptions().timeZonenavigator.mediaDevices.enumerateDevices()Molti script di fingerprinting sono offuscati per evitare la signature-based detection. Cerca pattern che richiamano costanti matematiche specifiche usate nei test di rendering o array massivi di nomi di font. Librerie popolari come FingerprintJS (nella versione open o pro) sono facilmente riconoscibili analizzando il traffico di rete: spesso inviano un payload POST verso endpoint di telemetria contenente un hash alfanumerico di 32 caratteri o un JSON pesantemente strutturato.
Un test rapido per verificare l’aggressività di un sistema di detection è navigare il sito con un browser Headless (es. Puppeteer senza modifiche). Se il sito blocca immediatamente l’accesso o presenta un grado di sfida (CAPTCHA) superiore, significa che sta effettuando una cross-reference tra le capacità dichiarate dal browser e il comportamento reale delle API (come la discordanza tra navigator.webdriver e il rendering effettivo dei font).
Per comprendere come un attaccante possa trasformare un rendering grafico in un identificatore univoco, analizziamo questo snippet JavaScript. Il codice crea un elemento canvas “fantasma” (non visibile nel DOM), vi disegna del testo con font specifici e forme geometriche, e infine ne estrae l’hash.
// PoC: Estrazione di un Canvas Fingerprint
function getCanvasFingerprint() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// Testo con fallback di font per massimizzare l'entropia dei driver di rendering
const txt = 'BrowserFingerprinting_PoC_2025_!@#';
ctx.textBaseline = "top";
ctx.font = "14px 'Arial'";
ctx.textBaseline = "alphabetic";
ctx.fillStyle = "#f60";
ctx.fillRect(125,1,62,20);
ctx.fillStyle = "#069";
ctx.fillText(txt, 2, 15);
ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
ctx.fillText(txt, 4, 17);
// Estrazione dei dati in formato Base64
const result = canvas.toDataURL();
// Funzione di hashing rapida (es. MurmurHash3 o semplice string hash)
return cyrb53(result);
}
// Esempio di semplice funzione di hashing a 64-bit (cyrb53)
const cyrb53 = (str, seed = 0) => {
let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed;
for (let i = 0, ch; i < str.length; i++) {
ch = str.charCodeAt(i);
h1 = Math.imul(h1 ^ ch, 2654435761);
h2 = Math.imul(h2 ^ ch, 1597334677);
}
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
return (h2 >>> 0).toString(16).padStart(8,0) + (h1 >>> 0).toString(16).padStart(8,0);
};
console.log("Il tuo Canvas Hash unico è:", getCanvasFingerprint());
canvas non viene mai appeso al corpo del documento. L’utente non si accorge che il rendering sta avvenendo.rgba) e il posizionamento di testo sfalsato costringono il motore grafico del browser a eseguire calcoli complessi di sub-pixel rendering.DataURL (che è una stringa Base64 molto lunga) in un hash compatto rende il dato facilmente memorizzabile in un database lato server per future comparazioni.Mentre il Canvas Fingerprinting ha rappresentato un’evoluzione significativa rispetto ai metodi basati sui font, la sua efficacia è stata in parte mitigata da contromisure come il “noise injection”. Oggi, gli attaccanti più sofisticati si sono spostati sul WebGL Fingerprinting, che offre un livello di dettaglio hardware molto più profondo e difficile da offuscare.
WebGL (Web Graphics Library) è un’API JavaScript che consente il rendering di grafica 3D interattiva all’interno di qualsiasi browser web compatibile, senza l’uso di plugin. Si basa sulle specifiche OpenGL ES (Embedded Systems) e dialoga direttamente con la GPU (Graphics Processing Unit).
A differenza del Canvas, che testa il rendering 2D attraverso il CPU o una pipeline grafica più generica, WebGL interroga la GPU su centinaia di parametri specifici del suo hardware e del suo stack driver. Questi includono:
WEBGL_depth_texture, EXT_blend_minmax). Queste estensioni variano enormemente tra diverse GPU e driver.MEDIUM_FLOAT, HIGH_FLOAT), che può variare tra vendor e modelli.gl.getParameter() o alterare il comportamento dei shader richiederebbe modifiche a livello del browser o del driver grafico, il che è enormemente più complesso. Gli strumenti “anti-detect” devono compiere acrobazie per falsificare questi parametri in modo coerente.Per i professionisti della sicurezza, la crescente adozione del WebGL fingerprinting significa che le tecniche di offuscamento basate sul “noise” per il Canvas potrebbero non essere più sufficienti. È essenziale che i browser anti-detect evolvano per gestire la complessità e la quantità di dati esposti da WebGL, offrendo un vero “sandbox” hardware virtualizzato per ogni profilo.
Tabella Comparativa: Canvas vs. WebGL Fingerprinting
| Caratteristica | Canvas Fingerprinting | WebGL Fingerprinting |
| API Utilizzata | HTMLCanvasElement.getContext('2d') | HTMLCanvasElement.getContext('webgl') |
| Dati Principali | Font, risoluzione, anti-aliasing, stack di rendering CPU | GPU Vendor/Renderer, driver, estensioni, capacità hardware |
| Livello di Dettaglio | Principalmente software/OS | Profondamente hardware-specifico |
| Entropia Tipica | Medio (12-18 bit) | Alto (20-25+ bit) |
| Difficoltà Offuscamento | Media (noise injection) | Elevata (richiede virtualizzazione hardware/driver) |
| Persistenza | Alta | Molto Alta |
| Rilevabilità | Più noto, spesso bloccato | Meno noto, difficile da bloccare senza impatti su funzionalità |
Il browser fingerprinting rappresenta il punto di convergenza tra la potenza delle API moderne e l’ineluttabile esposizione dell’hardware sottostante. Come abbiamo analizzato, non si tratta più di una semplice curiosità statistica, ma di uno strumento di precisione chirurgica nelle mani di chi sa correlare i dati. Per i professionisti della sicurezza, la sfida è duplice: da un lato, dobbiamo imparare a identificare e monitorare queste tecniche per scopi difensivi e di analisi delle frodi; dall’altro, dobbiamo essere consapevoli che la “superficie di tracciamento” è ormai così vasta che l’anonimato assoluto nel Web 2025 è quasi un’utopia tecnica.
Il passaggio dai metodi legacy come l’enumerazione dei font a tecniche hardware-level come il WebGL fingerprinting dimostra che la battaglia per la privacy non si vincerà con semplici liste di blocco, ma con una profonda comprensione degli stack driver e della virtualizzazione delle risorse. In un mondo in cui i cookie stanno svanendo, il browser non è più solo un visualizzatore di contenuti, ma una firma biometrica digitale che portiamo sempre con noi. La domanda per il futuro non è più se veniamo tracciati, ma con quale grado di accuratezza e per quali scopi la nostra impronta hardware verrà utilizzata.
EOF