Archivi tag: temporizzazione

HTTP Cache-Control user tracing exploited

dscf1673.jpg Nel pomeriggio di ieri, a seguito del post di commento all’articolo del Corriere su come “aggirare Google”, ho messo su un piccolo script php che vorrebbe dimostrare quanto rapido e veloce sia tracciare gli utenti di un sito web senza dover usare i cookies (sui quali si concentrano molti dei sistemi per migliorare la “privacy” degli utenti).

Tanto per rendere l’idea di quanto semplice sia lo script, qui ne trovate il codice sorgente, che vedo di commentare nelle prossime righe.

Il concetto sul quale si basa questo breve script, è che il sistema di gestione dei files in cache può essere agevolmente utilizzato per correlare tra loro le sessioni di uno stesso utente, anche dopo che questi ha chiuso ed riaperto il browser (magari a distanza di tempo) e senza dover necessariamente mantenere in memoria un cookie, facilmente identificato per altro da una serie di strumenti, o disabilitabile da parte dell’utente in questione (che può per l’appunto rifiutarlo al momento di caricare la pagina).

Lo script php quindi, comunica (inviando un apposito header di sessione HTTP) al browser che la pagina che sta caricando deve essere mantenuta in cache, e che questi dovrà perciò provvedere a validare nuovamente la pagina (alla quale viene per questo motivo associato un codice univoco, l’ETag) alla prossima visita. Il meccanismo della cache è utile perché nel caso in cui la pagina non venga modificata tra le due visite, al browser potrà essere inviato solamente un header con codice 302 (Pagina non modificata), evitando che questi debba andare a ricaricare tutti i componenti della pagina, sprecando tempo e banda. Come tutte le umane cose però, l’ETag (o la data di modifica, o qualsiasi altro parametro della pagina) può essere utilizzato (come nel nostro esempio) per correlare le sessioni, impostandolo ad un valore univoco e differente utente per utente (nel nostro caso impostato banalmente ad un valore casuale di 4 cifre).

Se volete verificare che il sistema effettivamente funzioni, non dovete far altro che cancellare i vostri cookie, chiudere e riaprire il browser, e tornare alla pagina in questione.

Inutile dire che esistono molti altri modi per tenere traccia delle sessioni degli utenti senza dover ricorrere ai cookies, ma ho voluto esplorare in pratica questa possibilità perché l’unico sistema che conosco che rimuova e sostituisca l’ETag è Privoxy (o l’uso di altri proxy appositamente configurati) ed è allo stesso tempo particolarmente semplice da attuare.

Un’estensione per la privacy online?

seleneQuesta mattina un cliente mi ha scritto una mail segnalandomi un interessante (e lodevole per qualità e completezza) articolo del Corriere, che spiegava quali tecniche si possono utilizzare per navigare “al sicuro” dalla profilazione da parte di Google (o in ogni caso da parte degli altri operatori della rete). Mi occupo, purtroppo, di privacy e sicurezza online da troppo tempo per credere che basti un’estensione di firefox per “navigare sicuri”.

Colgo allora l’occasione della risposta inviata per riportare un’analisi delle tecnologie riportate nell’articolo anche in queste pagine, perché nonostante l’articolo sia interessante e non fondamentalmente errato (anzi), penso che un po’ di precisazioni in materia possa essere d’aiuto per coloro che abbiano letto quell’articolo (soprattutto, che possa contribuire ad innalzarne il livello di paranoia :P).
Per coloro che invece fossero interessati ad approfondire anche tecnicamente l’argomento, consiglio vivamente il libro di Zalewski recensito su queste pagine qualche giorno fà, assolutamente abbordabile anche per coloro che non fossero proprio esperti in materia di informatica (Zalewski dimostra in questo libro una chiarezza davvero sorprendente per un tema così complesso).

Tanto per cominciare, è indubbio che sia è impensabile smettere di usare Google per evitare di essere da esso profilati. Non tanto perché è uno strumento completo e funzionante (esistono altri motori di ricerca, naturalmente, che fanno egregiamente il loro mestiere), quanto perché con una penetrazione in rete che sfiora l’80% (tra referrer e link su pagine che contengono script javascript che fanno capo a Google, su tutti AdSense e Analitycs), è ben difficile, tecnicamente parlando, aggirarne i tentacoli.

Cominciando poi dalle cose meno utili, breve accenno all’estensione scroogle: sposta banalmente il problema da Google ad un’altra entità (meno affidabile per altro, visto che non è così grosso ed importante da essere soggetto alle leggi di scala a cui invece si trova ad essere esposta l’azienda di Montain View), facendo filtrare tramite quest’ultima le richieste al Grande Motore. Se posso pensare di dare io la mia fiducia a Daniel Brandt (che “nel giro” gode certamente di una fama non indifferente, visto l’ottimo lavoro condotto da Google Watch) non si può certo pensare che per vincere la (sana) paranoia da tracciamento, spostare il target in questa direzione possa sortire qualche effetto.

Sicuramente più valida è l’opzione di usare in maniera correlata Tor e Privoxy, che insieme sono in grado di rendere effettivamente casuali la provenienza delle varie richieste nei confronti del web, rendendo inutili le tecniche di tracciamento fatte tramite cookie et simili. Una trattazione approfondita della tecnologia di Tor sarebbe fuori luogo in questo frangente, quindi lascerò l’approfondimento alla vostra discrezione: dirò solo che oltre all’esposizione ad un uso sbagliato di questa tecnologia (che ne vanifica l’utilità) gli utenti meno esperti, l’uso di Tor ha come suo punto debole i punti d’uscita della rete di “randomizzazione”, aspetto sul quale sono in corso alcune interessanti ricerche.

Analogamente, l’idea proposta da Track Me Not è indubbiamente interessante (e per altro incarna una delle strade che si stanno battendo proprio in questi mesi per combattere la profilazione): generare richieste “random” al motore di ricerca di turno per tentare di camuffare le richieste reali tra una certa quantità di “rumore” casuale è indubbiamente valida: il problema sta tutto nel riuscire a rendere credibili (e non distinguibili da quelle  reali) le richieste generate dall’estensione. Il fattore “caso” infatti è una delle cose più complicate da riprodurre tramite un computer, mentre viene spaventosamente bene ad un essere umano: quanto difficile sarebbe “filtrare” le richieste dell’estensione se venissero fatte a cadenza regolare, o con un generatore di numeri non sufficientemente casuale, o avessero un pattern di ricerca banale, riconoscibile, o semplicemente poco attinente con la tipologia media delle ricerche dell’utente? Analogamente, quanto difficile è riconoscere una persona mascherata a partire dalla voce, dal modo di muoversi, dai comportamenti? Questo è l’aspetto difficile del gioco, non certo la generazione di rumore…
La soluzione potrebbe essere nella generazionen di un pool remoto di pattern di ricerca (a cui ognuno dovrebbe contribuire inviando automaticamente le proprie) che possa essere poi replicato da tutti gli utenti che usino quella stessa estensione, introducendo un reale rappordo di casualità nella generazione dei pattern di ricerca. Rimarrebbe il problema della temporizzazione delle richieste “false”, ma sarebbe già un problema minore.

In questo modo cerca di agire, per quel che riguarda i cookies di tracciamento, da un’altra estesione interessante segnalata dall’articolo, Scookies (non per niente scritta dal buon Bakunin): questa estensione è effettivamente in grado di vanificare il tracciamento fatto a mezzo cookie, scambiando i cookie dei vari utenti in modo dinamico. Analogamente al caso di Tor/Privoxy però, questa tecnica è si in grado di rendere vano l’uso dei cookie di tracciamento, ma lascia aperte altre strade che rischiano di vanificare tutto il lavoro fatto (analogamente, in un certo senso, al rifiuto banale di usare i cookie, funzionalità già disponibile in moltissimi browser).

Con un po’ di attenzione e poca fatica infatti, si potrebbe differenziare comunque i vari utilizzatori indipendentemente dal cookie di tracciamento, facendo riferimento ad esempio a pattern ripetitivi di ricerche (difficile che il sottoscritto si trovi a fare ricerche su certi argomenti, molto più facile che cerchi qualcosa che riguardi l’informatica), alle temporizzazioni, al fetch dei dati dalle cache.
Quest’ultima tecnica è a mio avviso il vero problema chiave da risolvere nei prossimi anni per quel che riguarda la privacy online: ogni browser infatti è sperimentalmente identificabile a seconda dei dati che ha memorizzato tra i “files temporanei” (la cache appunto). Se un utente ha visitato una certa pagina in un certo momento, in cache verranno salvati certi files (con certi orari) e non altri. Se invece l’utente ha già visitato la pagina, il browser non richiederà tutti i files, ma solo alcuni (quelli che non ha in cache, o quelli che sono marcati come “non cachabili”); l’analisi di quali files sono richiesti, in quale ordine, con quali parametri (ad esempio la richiesta potrebbe arrivare per un file “solo se non è stato modificato dalle ore 23:53 del 24/08/2008”, rendendo facilmente identificabile addirittura l’ora di ultima visita di quello specifico utente), è in grado non solo di correlare le varie sessioni di uno stesso utente indipendentemente dal cookie di tracking, ma addirittura identificare la tipologia di browser che utilizza (ad esempio analizzando l’ordine con cui vengono richiesti i vari files che compongono una pagina web, che differisce da browser a browser, come Zalewski dimostra nel libro precedentemente citato).

Tutto questo senza considerare che è sperimentalmente dimostrato che si è oggi in grado di identificare un utente (perfino remotamente) dal modo con cui digita sulla tastiera (al punto che un’università americana ha messo a punto un sistema di login biometrico che si basa proprio su questo genere di analisi): velocità di battitura, errori più comuni, temporizzazioni.

Insomma, alla fine della fiera si torna sempre allo stesso concetto: quando si vuole difendere qualcosa, bisogna controllare tutto il fronte. Quando si attacca, basta trovare una falla, una dimenticanza…