Anonymní režim Chromu je iluze. Můžete ho obejít

Analytik Sam Greenhalgh chytře zneužil jednu z bezpečnostních technik prohlížečů a dokázal vytvořit jedinečný ID, který vás identifikuje i v takzvaných anonymních a inkognito režimech.

Jedním z velkých témat webu posledních let je sledování. Nemám teď ale na mysli ani tak sledování ze strany vládních agentur, jak tak činí třeba nechvalně proslulá americká NSA, jako spíše monitorování naší činnosti – zpravidla zaznamenávání navštívených stránek – pro reklamní účely.

Není sledování jako sledování

Společnost na podobnou aktivitu reaguje různými způsoby. Surfaři instaluji všemožné doplňky, které blokují skripty běžící na pozadí webových stránek, vložené widgety Facebooku aj., autoři webových prohlížečů integrují do svých programů anonymní režimy, kdy po sobě nezanecháte ani stopu, a establishment se snaží přijímáním nových legislativ více zprůhlednit alespoň práci se sušenkami cookies. I proto se na webech provozovaných v EU stále častěji setkáváte s informací, že stránky ukládají některá data právě do této paměti prohlížeče, jak můžete podobné cookies vymazat a co všechno to způsobí – často nefunkčnost samotného webu, poněvadž cookies jsou esenciální složkou moderního webu.

198543443
Pokud se rádi šťouráte v kódu a na českých stránkách objevíte skript, který se načítá z polské domény, opravdu to automaticky neznamená, že se jedná o malware.

Zaznamenávání údajů o návštěvníkovi není vždy na škodu. Provozovatel může například lépe optimalizovat web podle toho, na jakém zařízení surfaři navštěvují jeho stránky nejčastěji. Je tedy obecně kontraproduktivní, pokud lidé ve snaze o absolutní anonymitu blokují měřící skripty Google Analytics nebo třeba polský Gemius, což je poměrně typické pro mnohé české surfaře. Jistě, leckdo se může podivit, proč tuzemský web načítá Javascript z jakési polské domény, což opravdu může na první pohled vypadat podezřele, ale vysvětlení je prosté. Díky tomuto měřícímu skriptu, který mimochodem najdete na drtivé většině velkých českých webů včetně zpravodajských portálů, máme veřejné výstupy Rankings.cz i veřejná a metodicky jednotná data o návštěvnosti v rámci projektu NetMonitor.cz.

Pak tu jsou ale pochopitelně i techniky, které mohou být na hraně a i daleko za ní. Takové skripty se pokoušejí pomocí nejrůznějších způsobů vypočítat relativně unikátní identifikátor vašeho webového prohlížeče. Pokud se jim to podaří a kód bude umístěný na hromadě webů, může vás tímto způsobem sledovat a postupně odhalit třeba i vaši skutečnou identitu.

Technologie HSTS chrání před mužem uprostřed

Jednu z těchto technik nedávno popsal bezpečnostní analytik Sam Greenhalgh z webu RadicalResearch. Nezůstal přitom pouze u teorie, ale naprogramoval i prakticky test (k dispozici i na JSFiddle), který funguje v Chromu, Safari a starších verzích Firefoxu.

Greenhalghův test vypočítá jedinečný ID vašeho prohlížeče a to i v případě, že budete mít aktivovaný anonymní režim. Greenhalgh jej přitom dokázal překonat pomocí jedné chytré technologie, která má paradoxně sloužit k vyššímu zabezpečení surfaře.

Jmenuje se HSTSHTTP Strict Transport Security a momentálně ji podporuje většina webových prohlížečů vyjma Internet Exploreru, který je tak vlastně v tomto konkrétním případě bezpečnější (podpora HSTS nejspíše přibude v další verzi IE).

HSTS je ve své podstatě velmi potřebný systém, který vynucuje šifrované HTTPS spojení a brání tak třeba častému útoku typu SSLStrip. Jedná se o zranitelnost z rodiny man-in-the-middle (MITM), kdy útočník přesměruje komunikaci mezi vámi a cílovým webem přes prostředníka (zpravidla sebe) a pozmění v kódu webové stránky text https:// za http://. Pokud není web správně bezpečnostně ošetřený, podobný útok povede třeba k tomu, že se data z přihlašovacího formuláře neodešlou šifrovanou cestou, ale v prostém textu a útočník tak snadno získá vaše přihlašovací jméno a heslo. Loni v květnu jsem tento útok demonstroval na přihlašovacím formuláři Seznamu a to pomocí hackerské linuxové distribuce Kali, která vytvořila prostředníka MITM v lokální síti (firemní síť, Wi-Fi v kavárně apod.), aniž by si toho někdo všiml.

259077854 841008517
SSLStrip útok v praxi. Vlevo snímek běžného kódu přihlašovací stránky Seznamu a vpravo tatáž stránka pod útokem, kdy speciální program zachytil v lokální síti HTML kód a pozměnil jej, do prohlížeče oběti tedy dorazila stránka, která nyní odešle formulář nešifrované skrze klasický protokol HTTP.

Webové servery, které nabízejí plně šifrovaný chod (vše se načítá skrze HTTPS) naštěstí mohou webovému prohlížeči při úvodní komunikaci poslat speciální HTTPS hlavičku, která vypadá třeba takto:

Strict-Transport-Security: max-age= 2592000; includeSubDomains

Pokud webový prohlížeč podporuje technologii HSTS (občas se ji říká pouze STS), přeloží si výše vypsaný řádek způsobem, že má s touto doménou komunikovat výhradně šifrovaně a to po dobu nejvýše jednoho měsíce (2 592 000 je počet sekund). Toto pravidlo má zároveň aplikovat na všechny případné subdomény. Pokud by se tedy v HTML kódu stránky objevil odkaz, který začíná na http:// a vedl by na stejnou doménu, prohlížeč jej musí sám převést na https:// a tím vlastně zamezí jakémukoliv pokusu o útok SSLStrip. I když by totiž útočník pozměnil kód stránky, prohlížeč vše opět opraví.

HSTS je tedy opravdu technologie, která přispívá k vyššímu zabezpečení, ale přesto všechno ji lze docela efektivně zneužít.

Zákeřná HSTS Supersušenka 

HSTS nastavení pro jednotlivou doménu je vlastně jednobitová hodnota. HSTS je buď aktivní, nebo není. Buď je to 1, nebo 0 a tento údaj lze programově zjistit.

Z jedné jediné jedničky, nebo nuly žádný jedinečný identifikátor samozřejmě nespočítáte, ale co když jich budete mít více a zkombinujete je dohromady? Greenhalgh tedy na svém serveru spustil 32 dalších speciálních subdomén, se kterými se na pozadí běhu stránky Javascript postupně spojí a náhodným způsobem se informace o HSTS buď uloží, nebo nikoliv. Namísto jedné nuly, nebo jedničky tedy vznikne číselná řada, která může mít třeba tuto podobu 01001011010110110101011001010111. Je to vlastně 32bitové číslo, které v desítkové soustavě reprezentuje hodnotu 1 264 277 079.  Číslo můžeme ještě zkrátit některou z kódovacích technik. V případě algoritmu Base 36 by pak tedy hodnota odpovídala řetězci KWPUFR. Vyzkoušet si to můžete třeba v tomto webovém převodníku.

182175302
Surfař si ničeho nevšimne, ale například program Fiddler odhalil, že se skript na stránce při výpočtu ID spojil s hromadou subdomén webu RadicalResearch a vytvářel tak nastavení HSTS, ze kterého pak mohl spočítat definitivní unikátní ID.

Heuréka, právě jsme naprosto novým způsobem získali relativně unikátní identifikátor a celý výpočet nám zajistil drobný Javascript na pozadí, který vše na běžné lince zpracuje nejvýše během několika málo sekund.

785698204
Javascriptový test na webu Sama Greenhalgha. Skript právě spočítal ID a5t27d, který odpovídá mému prohlížeči. Když skript spustím na jiném webu, v jiný den apod., opět získám hodnotu a5t27d. Někdo mě tedy může začít sledovat a pokoušet se mě identifikovat.

Celá pointa přitom spočívá v tom, jak je tento identifikátor, takzvaná HSTS Supercookie sušenka, uložený na straně prohlížeče. Je uložený ve formě 32 samostatných bitových hodnot – nastavení HSTS pro jednotlivé domény, nikoliv ve formě jedné sušenky cookies.

K datům v sušence cookies může přistupovat pouze doména, která ji sama vytvořila. To je základní bezpečnostní pravidlo – web X se nesmí dostat k citlivým datům webu Y. To ale o našem identifikátoru neplatí, skript k jeho výpočtu tedy může zvesela spouštět libovolný web.

Stejné ID ve veřejném i anonymním režimu

A konečně to nejpikantnější. Všechny prohlížeče s podporou HSTS vyjma Firefoxu 34 a vyšších používají tuto techniku i ve svých anonymních režimech. Skript na stránce tedy spočítá stejný identifikátor v běžném režimu i v tom anonymním a web by tedy poznal, že jste to stále vy. Žádná anonymita!

182943580
Výpočet ID prohlížeče v běžném režimu a v tom anonymním. V obou případech se web dozvěděl stejnou hodnotu a o skutečnou anonymitu se tedy nejedná. 

Jako první krátce po zveřejnění dokumentu zareagovala právě Mozilla a její Firefox 34 a vyšší už v anonymním režimu nastavení HSTS ignorují, ostatní se k tomu ale zatím nemají. Jelikož Internet Explorer HSTS nepodporuje, platí to zejména o Chromu a Safari a to včetně jejich mobilních verzí.

37705556 774476136
Stejné hodnoty ID vypočítá i mobilní Chrome v běžném a inkognito režimu, čili i v tomto případě jsem přišel o skutečnou anonymitu.

Technika Sama Greenhalgha, ať už ji skutečně někdo masově použije v praxi, nebo zůstane zajímavou libůstkou bezpečnostních analytiků, především v plné nahotě ukazuje často bezzubý boj o anonymitu, poněvadž elegantním způsobem obchází veškeré dosavadní bezpečnostní technologie. A i když bude mít třeba jen jepičí život, než autoři prohlížečů zareagují a zranitelnost opraví, bude jen otázkou času, než se objeví zase něco nového.

Až tedy budete příště mazat nějaké údajné trackovací sušenky, mějte na paměti, že ti, kteří nás chtějí opravdu sledovat, jsou zpravidla o krok před námi i autory webových prohlížečů a všemožných doplňků. 

Diskuze (44) Další článek: ADATA má oboustranné a rychlé USB 3.1 v SSD a flashdisku [CES]

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,