Device fingerprinting - sledenje brez piškotkov
11 naročnikov
11 naročnikov
Pozdravljeni!
Pravkar zaključujem svoje diplomsko delo, kjer preučujem sledenje spletnim uporabnikom brez uporabe piškotkov. Zadeva temelji na browser (device) fingerprintingu, ideja pa izhaja od tule.
Naredil sem algoritem, ki zbere informacije o obiskovalčevem sistemu in brskalniku, ter iz njih naredi hash ki potem služi kot identifikator obiskovalca.
Sedaj moram zbrati čim večje število fingerprintov, da lahko ocenim kako uspešen je moj algoritem, za to pa potrebujem vašo pomoč. Obiskati je potrebno spletno stran http://fingerprinting.comyr.com in klikniti na gumb "Create my fingerprint", vse skupaj traja 10 sekund. :)
Tisti bolj zagnani lahko poskusite tudi z različnimi browserji, da vidite če se Hash ujema, saj je trenutno nastavljen identifikator (naredim jih več z različnimi natančnostmi). Pod zavihkom Linked fingerprints lahko tudi vidite zgodovino vaših obiskov.
Lastnosti identifikatorja:
- neobčutljiv na Private browsing mode
- neobčutljiv na Clear all browsing history funkcijo
- neobčutljiv na update pluginov
- Cross-browser
- Javascript only, ne potrebuje Flasha, Silverlighta za detekcijo (vseeno sta vključena na stran za zbiranje informacij in boljšo natančnost ostalih identifikatorjev)
Kako deluje:
Algoritem zbira informacije (kot so):
- user agent string
- screen resolution
- seznam uporabnikovih fontov (Flash in Javascript)
- seznam pluginov
- timezone
- Flash info
- Silverlight info
- OS in browser info
- ...
in iz njih poskuša izvleči čim več uporabnih podatkov. Nato iz njih naredi hash, ki služi kot identifikator za kasnejšo prepoznavo uporabnika.
Ugotoviti želim, koliko podatkov potrebujem, če želim generirati enoličen hash za vsakega uporabnika, pri čemer pa želim sistem ohraniti čimbolj preprost in odporen na spremembe (update).
Če koga zanima več o tem, naj prosim obišče stran (v angleščini) http://fingerprinting.comyr.com, kjer je tudi bolj razloženo vse skupaj. So pa poleg tudi linki do teoretičnega ozadja, podobnih strani in demotov ter bolj detajlni opis podatkov, ki jih zbiram.
Seveda so dobrodošli tudi komentarji oziroma vprašanja.
Najlepša hvala vsem, ki boste sodelovali. :)
18 odgovorov
Zanimiva ideja. Trenutna resolucija nebi smela vplivati na hash. Ko sem browser odprl na drugem monitorju se je zgeneriral drugačen hash. Računaj, da lahko obiskovalec pride z mobile napravo na stran v landscape mode, naslednjič pa odpre v pokončnem modeu.
Jaz sem v drugem browserju dobil drug hash, izpiše mi poleg browserja tudi različno število zaznanih fontov.
Jaz sem nekaj podobnega zasledil že enkrat prej in sicer tule: https://github.com/carlo/jquery-browser-fingerprint
Zdi se zanimivo.
Hvala za komentar in odziv.
Ja ta problem drugega monitorja mi je znan, ampak sem resolucijo vseeno vključil, ker je takih uporabnikov sorazmerno malo. Podatek o resolucija vsebuje tudi dokaj veliko količino informacije, sploh na mobile napravah, kjer je veliko variacij.
Glede landscape mode-a sem pa zaenkrat naredil kar tako, da je vedno daljša stranica prva, krajša pa druga. (768x1024 se vedno spremeni v 1024x768).
Največji problem takega sistema je ravno to, da pri toliko različnih napravah in parametrih in variacijah hitro pride do napake, zlo težko ga je nardit bulletproof :) Bolj kot je natančen, manj odporen je na napake. Ravno zato potrebujem večjo množico podatkov, da vidim kako se sistem obnaša.
@Mika
Ja, določene verzije Firefoxa včasih prepoznajo napačne fonte. Delam na tem da to popravim. :) seznam fontov vsak brskalnik vrne drugačen, zato ga potem v backendu normaliziram (odstranim fonte, ki so specifični za posamezne brskalnike) - zgleda bom moral množico posodobiti :)
Zanimiv projekt oz. celoten koncept. Evo, med browserji zadeva prepozna računalnik (Chrome, Safari). Fonti določeni z JavaScriptom se med browserji ujemajo, tisti s Flashom se pa ne, ostalo vse ok. Z izjemo št. jeder v CPUju, to piše vedno N/A.
Ga pa zmede če gledam zadevo na drugem ekranu, torej na drugi resoluciji, na sicer istem računalniku. Se ne da to nekako naredit da pri določitvi dominira IP - vsaj, če se vsi ostali podatki ujemajo?
Če ima uporabnik ActiveX vključen za vse strani, lahko pridobiš dodatne podatke, celo serisko številko CPUja. Ko imaš enkrat to, ti že ni potrebno več spremljati drugega :D
Poglej malo glede dostopa do serijskih številk opreme ... :D
Bilo je kar nekaj odziva, okoli 100 fingerprintov. :) super, hvala! ;)
Kot ste nekateri že napisali, se včasih tako JS kot Flash fonti ne ujemajo. Ker sem imel sedaj po vaši zaslugi večjo množico primerov in fontov, sem uspel izločiti te fonte in posodobit program. Na novo sem izračunal tudi hashe za fingerprinte, ki sem jih ze dobil.
Za hash, ki se vam pokaze na strani sem tudi malo spremenil algoritem in sicer tako, da ne upošteva resolucije, ker kot ste ugotovili se hash spremeni če imaš dodaten monitor. Upoštevam jo za naslednje bolj natančne hashe (ki pa se ne pokazejo na strani). Zato se zna v redkih primerih pojaviti false positive identifikacija, ker je parametrov manj.
@ž, ja za CPU core mora biti vključen Silverlight plugin. Obstaja pa tud ena zanimiva rešitev v JS demo, samo traja predolgo :)
@carli, ja sem bral o tem, ampak je bil cel kup težav, pa tudi malo sem moral omejiti temo :)
Obstaja pa še par zanimivih pristopov, ki pa jih žal nisem vključil:
- Canvas fingerprinting, kjer iščeš male razlike v grafičnih karticah preko HTML5 canvasa
- clock skew (zamik ure) - z zaporednimi timestampi ugotoviš konstanto, s katero se računalnikov internal clock spreminja