~/docs/browser_fingerprint
这篇文章探讨了浏览器指纹识别技术的原理、应用及其对隐私和安全的影响。通过收集浏览器配置、硬件信息等数据生成唯一标识符,该技术被用于反欺诈和营销等领域。然而,它也可能被用于恶意追踪和攻击。文中还讨论了防御措施及WebGL指纹识别的新兴挑战。 2025-12-30 11:1:35 Author: blog.lobsec.com(查看原文) 阅读量:4 收藏

Prefazione

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.

Concetti base

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

Come funziona: La superficie di attacco

Il principio si basa sull’entropia: più informazioni riusciamo a estrarre, più il profilo diventa univoco. Le macro-aree di raccolta includono:

  • Attributi Standard: HTTP Headers (User-Agent, Accept-Language), fuso orario, risoluzione dello schermo, profondità del colore.
  • Enumerazione delle Risorse: Elenco dei font installati, plugin (ormai meno rilevante post-Flash), estensioni del browser e tipi MIME supportati.
  • Hardware Fingerprinting (API Web):
    • Canvas Fingerprinting: Il browser deve renderizzare una stringa di testo o una forma geometrica nascosta. A causa delle variazioni nei driver video e nell’anti-aliasing a livello hardware, il pixel-map risultante varia tra diverse macchine.
    • AudioContext Fingerprinting: Viene generata un’onda sinusoidale o applicato un filtro audio; le variazioni nel modo in cui lo stack audio elabora il segnale producono un’impronta distintiva.
    • WebGL: Informazioni dettagliate sulla GPU e sulle capacità di rendering 3D.
    • Battery Status API: (Sebbene limitata di recente) può fornire dati sui cicli di ricarica.
    • Network Info: Indirizzi IP locali (tramite WebRTC leak), latenza e throughput.

Contesti d’uso: Dual-use Technology

Come molte tecnologie di sicurezza, il fingerprinting è un’arma a doppio taglio:

Anti-Frode e Sicurezza (Il lato “buono”)

  • Account Takeover (ATO) Prevention: Se un utente accede solitamente con un fingerprint specifico e improvvisamente il profilo cambia radicalmente (nuovo OS, nuovi font, diversa risoluzione), il sistema può triggerare un’autenticazione a due fattori (2FA) aggiuntiva.
  • Bot Detection: Gli scraper e i bot spesso usano browser headless (come Puppeteer o Playwright). Sebbene possano camuffare lo User-Agent, spesso falliscono nel replicare perfettamente le risposte di un Canvas o la coerenza tra i parametri hardware dichiarati.
  • Prevention of Ad Fraud: Identificare click-farm che tentano di simulare migliaia di utenti unici partendo dalla stessa infrastruttura virtualizzata.

Tracciamento e Marketing (Il lato “oscuro”)

  • Cross-site Tracking: Poiché il fingerprint non può essere “cancellato” come un cookie, permette di tracciare un utente anche dopo che ha pulito la cache o se naviga in modalità incognito.
  • Shadow Profiling: Creazione di profili persistenti di utenti che non hanno mai prestato il consenso esplicito al tracciamento, eludendo le normative come il GDPR (sebbene legalmente sia una zona molto grigia).

La Superficie di Attacco: Estrazione di Entropia

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.

1. Hardware-Level Fingerprinting

Gli attaccanti sfruttano le API standard per inferire le specifiche fisiche della macchina:

  • Canvas & WebGL Rendering: Forzando il rendering di un frame complesso, l’attaccante può identificare il modello di GPU e la versione del driver. Differenze microscopiche nell’anti-aliasing dei font o nella rasterizzazione dei pixel creano un hash quasi univoco.
  • AudioContext Fingerprinting: Elaborando segnali audio nel browser, è possibile mappare come il processore e la scheda audio gestiscono i calcoli in virgola mobile, rivelando sottili discrepanze hardware.

2. Enumerazione e Side-Channel

  • Font Enumeration: Misurare la larghezza e l’altezza di stringhe di testo renderizzate con diversi font “fallback” permette di mappare l’intero set di caratteri installati nel sistema.
  • Clock Skew & Drift: Analizzando la micro-deriva temporale dell’orologio di sistema rispetto a un server NTP, è possibile distinguere due macchine identiche sulla stessa rete.

Il Fingerprinting come Vettore di Attacco

Mentre il marketing usa il fingerprinting per il tracking, un attaccante (o un attore malevolo sofisticato) lo utilizza per scopi più insidiosi:

Reconnaissance e Targeted Exploitation

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.

Session Hijacking e Bypass di Anti-Frode

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.

Tracking di Utenti sotto VPN/Tor

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.

Difesa e Contromisure: Canvas Poisoning

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.

  • Risultato: L’hash risultante è diverso a ogni sessione o a ogni richiesta, rendendo l’impronta digitale instabile e quindi inutile per il tracciamento a lungo termine.

Browser Anti-Detect: L’Evoluzione del Camuffamento

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:

  1. Isolamento Totale: Creano istanze separate con profili hardware unici e persistenti.
  2. Spoofing Nativo: Non si limitano a nascondere i dati, ma modificano il codice sorgente del browser (spesso basato su Chromium) per restituire valori hardware “reali ma diversi” (es. una diversa architettura della CPU o un diverso ID della GPU) in modo coerente su tutte le API.
  3. Gestione dei WebRTC: Impediscono i leak degli IP reali dietro VPN gestendo i parametri di rete a livello di kernel del browser.

Analisi Statistica: Pesare l’Entropia (Shannon’s Entropy)

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.

  • Se un attributo è comune (es. l’uso di Chrome su Windows 10), aggiunge pochi bit di entropia.
  • Se un attributo è raro (es. un font custom o una risoluzione dello schermo atipica), il valore di H aumenta drasticamente.

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.

Detective Work: Come rilevare il Fingerprinting aggressivo

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:

1. Hooking delle API Sensibili

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().timeZone
  • navigator.mediaDevices.enumerateDevices()

2. Analisi degli Script (Static & Dynamic Analysis)

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.

3. Esecuzione in Headless Mode

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

Proof of Concept: Generazione di un Hash tramite Canvas

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());

Analisi Tecnica del PoC

  1. Rendering Invisibile: L’elemento canvas non viene mai appeso al corpo del documento. L’utente non si accorge che il rendering sta avvenendo.
  2. Sovrapposizione e Alpha Blending: L’uso di colori con trasparenza (rgba) e il posizionamento di testo sfalsato costringono il motore grafico del browser a eseguire calcoli complessi di sub-pixel rendering.
  3. Variazioni Hardware: Su una macchina con GPU NVIDIA e una con Intel Integrated Graphics, anche a parità di browser, l’hash risulterà differente a causa del modo in cui i driver gestiscono l’anti-aliasing e il dithering.
  4. Hashing: Trasformare l’output DataURL (che è una stringa Base64 molto lunga) in un hash compatto rende il dato facilmente memorizzabile in un database lato server per future comparazioni.

WebGL Fingerprinting: La Nuova Frontiera del Tracciamento Hardware

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.

Cosa è WebGL?

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

Come funziona il WebGL Fingerprinting?

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:

  1. Vendor e Renderer: Nomi della GPU (es. “NVIDIA GeForce RTX 3080”) e del produttore.
  2. Versione del Driver: Dettagli sulla versione del driver OpenGL/DirectX installato.
  3. Capacità Hardware:
    • Max Texture Size: La dimensione massima delle texture supportate dalla GPU.
    • Max Viewport Dimensions: Le dimensioni massime del viewport.
    • Max Anisotropy: Il livello massimo di filtro anisotropico supportato.
    • Number of Vertex & Fragment Shaders: Il numero di istruzioni che la GPU può gestire simultaneamente per i calcoli di vertici e pixel.
    • Supported Extensions: Elenco di tutte le estensioni WebGL supportate dalla GPU (es. WEBGL_depth_texture, EXT_blend_minmax). Queste estensioni variano enormemente tra diverse GPU e driver.
  4. Floating-Point Precision: Come la GPU gestisce i calcoli in virgola mobile (es. MEDIUM_FLOAT, HIGH_FLOAT), che può variare tra vendor e modelli.
  5. Rendering di Forme 3D: Similmente al Canvas, anche il rendering di un complesso oggetto 3D può produrre differenze minime dovute a variazioni nel firmware della GPU, nei driver, o persino nei processi di fabbricazione del chip.

Perché gli Attaccanti lo Preferiscono?

  1. Maggiore Entropia e Unicità:
    • Canvas: Principalmente sensibile alle differenze nel rendering 2D (font, anti-aliasing) e allo stack CPU/OS. Entropia tipica: 12-18 bit.
    • WebGL: Espone centinaia di parametri hardware e driver specifici. Questo porta a un’entropia significativamente maggiore, spesso oltre i 20-25 bit anche in popolazioni ristrette. È molto più raro trovare due utenti con lo stesso fingerprint WebGL, anche con hardware simile.
  2. Difficoltà di Offuscamento:
    • Canvas: Le tecniche di “noise injection” sono relativamente semplici da implementare e sono integrate in molti browser orientati alla privacy.
    • WebGL: Alterare i dati restituiti da 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.
  3. Flessibilità e Persistenza: Il fingerprint WebGL è estremamente persistente. Non cambia con l’aggiornamento del browser (a meno che non venga aggiornato il driver GPU o sostituita la scheda video stessa). Ciò lo rende ideale per il tracciamento a lungo termine di un individuo, anche attraverso cambi di sistema operativo o browser.
  4. Basso Rilevamento: Molti utenti e persino alcuni software di sicurezza sono meno consapevoli del tracciamento tramite WebGL rispetto al più noto Canvas, rendendolo un vettore più “stealth”.

Implicazioni per la Sicurezza

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

CaratteristicaCanvas FingerprintingWebGL Fingerprinting
API UtilizzataHTMLCanvasElement.getContext('2d')HTMLCanvasElement.getContext('webgl')
Dati PrincipaliFont, risoluzione, anti-aliasing, stack di rendering CPUGPU Vendor/Renderer, driver, estensioni, capacità hardware
Livello di DettaglioPrincipalmente software/OSProfondamente hardware-specifico
Entropia TipicaMedio (12-18 bit)Alto (20-25+ bit)
Difficoltà OffuscamentoMedia (noise injection)Elevata (richiede virtualizzazione hardware/driver)
PersistenzaAltaMolto Alta
RilevabilitàPiù noto, spesso bloccatoMeno noto, difficile da bloccare senza impatti su funzionalità

Conclusioni

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


文章来源: https://blog.lobsec.com/2025/12/analisi-tecnica-browser-fingerprinting-webgl/
如有侵权请联系:admin#unsafe.sh