Cross Browser Detection – totální mazec!

Totální mazec. Technologie, která vás dokáže trackovat napříč webovými browsery a to včetně anonymních oken. Na rootu o tom vyšel článek, který stručně popisuje základní metody, které slouží k detekci uživatele napříč browsery. My se na to podíváme trochu podrobněji.

Jak detekce probíhá, když se na ni podíváme hlouběji?

Na stránkách http://www.uniquemachine.org/ je k dispozici live proof of concept, odkaz na zdrojové kódy na githubu a také popis fungování v pdf.

Celý základní koncept cross-browser trackování vychází z myšlenky, že hardware počítače je unikátní a stejná úloha by měla být na stejném počítači zpracována stejně, nezávisle na tom, kdo o zpracování úlohy požádal. Tedy v tomto případě se jedná především o vykreslování grafických prvků, o které se stará grafická karta skrze technologie WebGL. Zpracování této výpočetní úlohy tedy není v režii webového prohlížeče, nýbrž grafické karty. Z toho vyplývá, že pošleme-li do grafické karty z různých prohlížečů identické úlohy k renderování, měli bychom vždy dostat totožný výsledek. Ten je však unikátní k naší kombinaci hardware a driverů. Což je parametr zjevně dostatečně unikátní.

Které browser-agnostic vlastnosti tato metoda používá? (seznam převzat z Root.cz)

Rozlišení obrazovky – Používá se při běžném fingerprintingu, ale je možné jej využít i v CBF. Když se k němu ještě přidá míra zvětšení (zoom) stránky, jedná se o velmi spolehlivý prvek.

Počet procesorových jader – Parametr prohlížeče nazvaný hardwareConcurrency je ve většině prohlížečů stejný, u některých je nutné provést triviální přepočet. Například v Safari jej vynásobíte dvěma. (poznámka Tuňáka: používá se spíše celkem komplexní knihovny, která zajišťuje polymorfismus pro hardwareConcurrency a počet jader odhaduje na základě paralelního běhu úloh WebWorkers).

AudioContext – Nabízí sadu funkcí pro zpracování signálů a využívá při tom rozhraní operačního systému i funkcí zvukové karty. Měřením výstupních hodnot je tak možné získat unikátní data.

Seznam fontů – Nová technika, která staví na tradičním postupu, se spoléhá na různé metody používané při vykreslování vektorových písem.

Renderování vektorů a anti-aliasing – Vědci (poznámka Tuňáka: 1 profesor, 1 doktorand a 1 student, který je již mrtvý) jsou schopni měřit, jak prohlížeč vykresluje čáry, křivky a jak provádí anti-aliasing. Používají k tomu HTML5 Canvas a WebGL, čímž zapojí do činnosti grafickou kartu, která podá jedinečný výsledek.

Vertex Shader – Vykreslování grafiky pomocí karty a jejich ovladačů využije vertex shadery pro zobrazení stínů a světel na 3D objektech ve WebGL.

Fragment Shader – Je možné je využít podobně jako vertex shadery.

Průhlednost pomocí alfa kanálu – Prohlížeče dnes používají grafickou kartu k aplikaci průhlednosti v obrázcích. Výstup je pak shodný ve všech prohlížečích, protože se používají stejné algoritmy.

Nainstalované jazyky – Čínština, korejština či arabština vyžadují doinstalování speciálních knihoven, které kvůli své velikosti nejsou součástí ostatních lokalizací. Prohlížeč k nim nenabízí API, takže není možné získat jednoduše jejich seznam, ale je možné použít postranní kanál: lze sledovat, zda se text v daném jazyce na konkrétním počítači vyrenderoval správně nebo jsou místo znaků třeba jen čtverečky. Výsledek se pak může snadno stát součástí fingerprintu.

Modeling a Multiple Models – Další technika, která zapojuje do práce grafickou kartu. Testuje se, jak počítač vykreslí připravené 3D modely.

Lighting a Shadow Mapping – Podobně touto metodou je možné měřit, jak počítač zpracovává světla a stíny v 3D obraze.

Kamera – Není tím myšlena web kamera v počítači, ale další technika související s 3D modelováním. Používá se k porovnávání různých 2D reprezentací 3D modelů.

Ořez roviny – Měří se, jak se počítač vyrovná s umístěním 3D objektů na omezené roviny. Ořezová operace WebGL je opět předána grafické kartě a prohlížeč ji sám neprovádí.

Odeslání dat z browseru na server

Tento seznam parametrů a různých hashů o vás váš počítač práskne za ani ne 15 sekund. Což je sice řádově více, než si označkovat browser permanentní cookies, ale zase máte o jednu krutě cennou informaci navíc. Při využití nějaké optimalizace, kdy tuto detekci použít, ted řekněme jen při prvním setkání se s browserem a následného značkování jen přes evercookie, pak zde máme nenáročné a celkem ultimátní řešení.

Některé parametry jsou jasné, některé je třeba prozkoumat blíže.

Detekce přes anomálie při vykreslování specifických fontů

Tyto fonty si script natáhne ze serveru a pak nad nimi zkouší různé paznaky a podle toho, zda je váš komp zvládne vykreslit, nebo po nich zbyde jen prázdný čtvereček, tak pozná, že to renderovala stejná mašina.

 

O fontech se na server posílá:

  • odesílá seznam systémových fontů – fontlist
  • odesílá výsledky z renderování písem – fonts

Co práskne grafárna a WebGL?

Nejdříve si řekněme, co je WebGL. Wiki postačí.

WebGL (Web Graphics Library) is a JavaScript API for rendering 3D graphics within any compatible web browser without the use of plug-ins.[2] WebGL is integrated completely into all the web standards of the browser allowing GPU accelerated usage of physics and image processing and effects as part of the web page canvas.

WebGL parametr

Takže to, jestli máme WebGl, záleží jen na tom, zda jej browser podporuje. Ale je to jen API, takže zde nehraje roli konkrétní implementace. To je důležité. Takže první parametr WebGL je true.

Co o ná je ochotné prásknout WebGL se můžete podívat třeba zde: https://browserleaks.com/webgl

inc parametr

Script se ptá na konstantu UNMASKED_VENDOR_WEBGL, která obsahuje hodnotu (Return the VENDOR string of the underlying graphics driver.):

Ten vrací hodnotu jako „Google Inc.„. Mozilla ji nevrací vůbec. Zjevně zde není ještě vše doimplementováno.

Není to tedy parametr, který by přímo něco sděloval o našem počítači, předpokládám tedy, že parametr může sloužit k nějakým korekcím na serveru, pokud jsou známy určité anomálie v implementacích.

gpu parametr

Script se ptá na hodnotu konstanty UNMASKED_RENDERER_WEBGL, která je mnohem zajímavější. Obsahuje poměrně hodně informací o našem železe.

ANGLE (Intel(R) HD Graphics 520 Direct3D11 vs_5_0 ps_5_0)

hash parametr

Ten si do canvasu vykreslí čtvereček 256 na 256, nechá si o něm vrátit objekt Uint8ClampedArray a z něj spočítá hash. Jeho obsahem jsou 0-255 rozsahy nad jednotlivými pixely obrázku s otisky prstů.  Finta je v tom, že obrázek na vstupu nemá 256 na 256, ale 610 na 458 pixelů a každý renderer jej tedy může vykreslit mírně odlišně. To následný hash rozezná. Tohle už je celkem cool detekce. A to se teprve rozjíždíme.

Husté parametry

Timezone – je stejný napříč browsery, resolution (monitor) je stejný (některé browsery jinak počítají rozlišení při zoomování, je třeba provést nějaké korekce).

cpu_cores – to už je velmi zajímavý údaj. Používají k detekci polyfill Core Estimator do navigator.hardwareConcurrency.

audio – zatím vrací jen základní informace o zvukovém zařízení, tedy vzorkovací frekvenci, počet kanálů, typ repráků a tak. Ale v dodávaných scriptech je naznačeno něco mnohem hustějšího a to pokus o propočet nějakého generovaného šumu a z něho vypočtený hash. Tato věc je ve scriptu zakomentovaná, ale jasně naznačuje dost zajímavý způsob detekce.

Nejkrutější parametry

gpuImg jsou výsledky série různých testů snažících se vykreslit nějaký 3D objekt, případně nějakou jinou složitou situaci v canvasu a z toho počítají hash.

Je libo renderovat bublinky nad obrázkem s přírodou?

Co třeba kostička v jehlanu s ořezem na dvou hranách?

Co třeba renderování průběhu matematických funkcí založené na iracionálních číslech? Renderování šíleného patvaru a potažené prahnusnou multibarevnou tapetou ve forme jpeg obrázku?

Jak vypadají tyto sripty řídící tento tanec?

Jsou to scripty v jazyce GLSL a dávají tak instrukce Shaderu.

 

Výstpu z takového programu se pak přepočítá jako HASH a ten se odešle na server.

Nepříliš zajímavé hodnoty

AdBlock – zde lze jen předpokládat, že uživatel použije AdBlock ve všech svých browserech. Jinak celkem bezvýznamný parametr. Možná taky slouží čistě pro autory tohoto PoC, ale alternativně servírovali reklamu přes self-hosted brány. Pro toto téma to není podstatné.

Plugins – tady upřímně nevím, k čemu to může být dobré pro tuto detekci. Napadá mě jen pokus o zneužití Flash cookie k přenosu ID do jiného browseru. Něco ve stylu Evercookie. Alternativně budou možná některé pluginy ve více prohlížečích. Ale nevím.

Cookie – to je také hodnota, která mi moc smysl nedává. Cookie is dead!

LocalStorage – to samé, nedává moc smysl.

Manufacturer, LangsDetected, video – není ve scriptu dosud implementovaný.

Možná to vše bude souviset s exludováním např. robotů, aby si šetřili místo v databázi na backendu a neplýtvali zdroji. Hloupý robot neumí cookies, nemá rozlišení a nemá pluginy. Takového můžeme z měření rovnou vyhodit a neplatit za výpočetní čas. Myslím si, že pokud by toto někdo chtěl nasadit masově, tak to bude výpočetně dost náročná služba v porovnání jakýchkoliv mně známých synchronizačních serverů.

Odpověď serveru

Firefox

Chrome

 

Tuhý kořínek linux má

Zkoušeli jsme i různé alternativy, jako browser Midori, browser Chromium, Firefox ve virtualizovaném Ubuntu a zde si Uniquemachine neporadil. Prý mu chybí WebGL. Firefox to zase nutilo otevírat VLC plugin. Takže šanci uspět to má zatím hlavně na Windows. I tak je to děsivé.

Další test na virtualizovaném stroji byl již s WebGL a otisky se neshodovaly s Windows, ze kterého virtualizace probíhala.

Závěr

Funkčnost a rafinovanost počítání unikátních otisků na základě hardwarových komponent počítače je dechberoucí. Toto je technika, která staví na hlavu komplet záležitosti ohledně soukromí na internetu. A i přes to, že se jedná jen o proof of concept, jsou zde poklidně použitelné komponenty pro produkční nasazení.

Informace o tom, že se uživatel připojuje ze stejného zařízení, je nejen mnohem trvalejší než třeba cookie uložená v browseru (a kolem které se dělá takový humbuk EU Cookie Law), ale také mnohem zajímavější.

Využít se dá k dobrým věcem, třeba k lepšímu ověřování přístupu uživatelů ke službám (tedy security) či třeba personalizace služeb (o kterou mám zájem).

Zneužít se dá též a to třeba k vysledování indetity, lepší cílení reklamy a celkově k mega špehování.

Staví to na hlavu hromadu bezpečnostních návyků, které jsme si osvojili k ochraně svých osobních údajů. Je to jednak používání několika webových prohlížečů, kdy jeden slouží např.: k osobním účtům, druhý pro pracovní účty, třetí na porno, čtvrtý do banky a TOR browser pro objednávání kokainu na darknetu.

Nyní je to jedno. Na vše stačí Internet Explorer.

Navíc autoři tohoto software zmiňují, že se z hlediska detekce uživatele stále jedná jen o verzi detekce 2.5, kde za verzi 3 označují Cross-Device detekci. Takovou detekci, kterou si mohou dnes dovolit jen největší hráči jako Facebook či Google a to tím, že se mu sami napráskáte svým uživatelským jménem.

Východisko

Jediné, co odolalo této technice, bylo spustit druhý browser ve Virtual Boxu. Což je trochu nepraktické. Praktičtejší využití by mělo třeba používat linuxovou distribuci CubesOS.

K tématu

Článek na rootu k identifikaci na základě User Agentu (článek r.v. 2010, panopticum) – https://www.root.cz/clanky/vas-prohlizec-je-identifikovatelny-i-bez-cookies/

Panopticlick od Electonic Frontier Foundation – https://panopticlick.eff.org/

Evercookie, kam se dá všude narvat cookie, cross browser detekce přes flash cookie – http://samy.pl/evercookie/

Projekt Am I Unique? – https://amiunique.org/

 

1 komentář: „Cross Browser Detection – totální mazec!

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.