Fakin – Unbeatable trackin‘

FuckOff

Začátkem září 2018 jsme s borcema z Optimicsu naprogramovali proof-of-concept JavaScriptového trackeru Fakin, který se snaží dokázat, že pokud chceme, nelze trackování (v tomto případě do Google Analytics) zablokovat nástroji jako Ghostery, Privacy badger, uBlock origin, Firefox – Anonymní okno s ochranou proti sledování a další.

Tento koncept jsem představil na nekonferenci MeasureCamp v Brně, kde si tato přednáška odnesla nejvíce hlasů a proto si zaslouží podrobnější popis, než jen pár slajdů z Impressu. Také bych chtěl uvést, že si moc vážím zájmu o toto téma a děkuji za Google Daydream, které jsem si tímto získal. Své místo mají v Optimicsu.

Proč jsme vůbec programovali Fakina?

Na internetu lze dohledat mnoho statistik ohledně blokování reklamy a analytických scriptů v internetu a jejich závěry jsou různé. Vstupuje do toho rozsah analyzovaných technologií, demografie, uživatelská zařízení a další proměnné. Některé statistiky hovoří o 11% blokovaných scriptů, některé až o 60%. Souhrnnější studie se potkávají na cca 25% blokovaných reklam a analytiky v internetu.

Zdroje:

Kde jsou mý data?

Fajn, takže vy se snažíte dělat závěry nad daty z Google Analytics (Adobe SiteCatalyst, Piwik, whatever software), ale chybí vám 25% dat.  V tento moment už lze doporučit ke zpřesnění dat použití magické koule (zde k prodeji za 999,-), nebo použití současně nejpopulárnějšího řešení, a to je smířit se s tím.

Někteří provozovatelé webu vytáhli do boje a používají nějakou z forem vydírání, jako např. detectadblock.com, kdy uživateli s AdBlockem zobrazí otravný overlay zamezující konzumaci obsahu. Ten, dokud nepovolí na webu reklamy, má utrum. Svým způsobem toto řešení chápu, ale o eleganci se nedá vůbec mluvit. Rozhodně to není řešení, jelikož takovéto AdBlock Wally lidi vysloveně serou.

Máš problém

Ať se na situaci koukneme z jakékoliv strany, pokud jste konzumentem dat, máte problém. A ten jednoznačně nemá klesající tendence (viz.  https://neilpatel.com/blog/intelligent-tracking-prevention/ | https://www.techrepublic.com/article/how-to-enable-tracking-protection-in-firefox-quantum/ | https://techcrunch.com/2018/04/12/firefox-updates-its-ios-web-browser-to-turn-tracking-protection-on-by-default/ | https://brave.com/).

Proto jsme napsali Fakina, abychom dokázali, že blokování není cesta. Chceme dokázat, že cesta je umírněné a transparentní využívání dat. Takové, se kterým uživatelé nebudou mít problém a sbíraná data jim mohou být kuprospěchu.

Nechceme podporovat „špehovací histerii“, kdy jsou všichni podělaní z trackování, takže si blokují kde jaké statistické scripty (včetně naprosto neškodných měření), ale pak na sebe vše nabonzují na Facebooku, mají cracklá Wokna s hromadou spywaru a čumí na péčko v „Anonymním okně„.

Nám, analytikům, statistikům, data-minerům a marketérům to kazí práci.

Proof-of-concept

https://dataretard.cz

Na celé doméně https://dataretard.cz/ sídlí jen Proof-of-concept trakaře do Google Analytics Fakin. Ten web nedělá nic jiného. Pokud kliknete na tlačítko Debugga buttona, v konsoli si s vámi Fakin začně povídat. Vzhledem k tomu, že se o vás nesbírají žádná osobní data, ani IP adresa a nic se nesdílí s 3rd party doménami, chybí tam břečka o cookies a paranoia z GDPR. Web bez JavaScriptu nejede.

Základní koncepty Fakina

URLs – adresy

Každá méně, či více populární služba (API pro sběr dat) má nějakou URL adresu, kam posílá data. K jejímu zablokování stačí trapný regulární výraz v BlackListu a máte po ptákách.

Namátkou:

  • google-analytics.com/collect – Googles API for data collection
  • googletagmanager.com – CDN for container delivery
  • omntrdc.net – Adobe SiteCatalyst
  • assets.adobedtm.com – Adobe Dynamic Tag Manager
  • track.adform.net – trakaří API Adformu
  • facebook.com/tr/ – trakaří API Faceboku
  • doubleclick.net – Google Doubleclick Ad network
  • hit.gemius.pl – trakaří API Gémia
  • … a kilometr dalších

Takže první věc, co potřebujeme pořešit je skrytí těchto adres. K tomu nám pomáhej CNAME, nebo PROXY.

Vlastní domény, CNAME záznamy, PROXY servery

Jsme chytří a svůj tracking přesměrujeme z adresy https://google-analytics.com/collect na adresu https://tr.dataretard.cz/ (zde tr figuruje jako zkratka pro tracking či trakař).

Chvilku nám to asi bude šlapat, ale jen do doby, než přijde nějaký šulín z AdBlocku a přidá nás na blacklist. Ne proto, že bychom někoho špehovali, nýbrž jen proto, že si dovolujeme sbírat data o užívání svojí služby. Chápete? Jsou to fašisti. Pro ilustraci doporučuji přečíst diskusi pod tímto článkem.

Adresa tr.dataretard.cz či dataretard.cz/t/ má dvě slabiny.

  1. šulín z AdBlocku
  2. generický název tr (ad, analytics…) a může být blokován mnohem obecnějšími pravidly.

Takže druhá věc, co potřebujeme řešit je skrytí těchto PROXY. K tomu nám pomáhej router.

Fakin Router

Tady už to začíná být skutečně zajímavé. Víte co mají tyto tři adresy (a dalších pár miliard) společné?

Jsou to adresy trakaře do Google Analytics, lépe řečeno adresy PROXY. Ano, jsou to náhodné řetězce. A v čem je to cool? Z těchto adres lze samozřejmě též tahat obsah webu.
Takže ne jen, že si mohu vymyslet libovolnou adresu, mohu použít i adresu obsahu a k ní přilepit analytiku.
V praxi to pak může vypadat elegantněji, např.:

Pojďme si třeba postavit generátor náhodných řetězců ze slovníků českých spisovných výrazů (1.8 MB).

Zde prostě nevím, jak strojově odlišit HTTP request na analytiku a legitimní traffic. Museli byste zablokovat celou doménu dataretard.cz. Toto řešení je populární v např. Lidově demokratické republice Čína, či v nebeské říši Kim Čong Una.
Toto řešení tedy pro Fakina považuji za dostačující a pojďme se podívat na další slabinu trackování.

 

Soubory

Znáte alespoň jeden z nich?
  • analytics.js
  • appmeasurement.js
  • satellite.*\.js
  • event.js
  • piwik.js
  • gtm.js
  • ga.js
  • hotjar.*\.js
  • a kilometr dalších?

Asi si dovedete představit, že zablokovat je nebude problém, opět pomocí nějakého trapného blacklistu. Takže je musíme přejmenovat. Ale co když přijde šulín z AdBlocku a zablokuje nám náš script? Je to jasné, musíme randomizovat.

Hádanka pro bystré. Co je toto za adresy?

Ano, jsou to adresy scriptů obsahující trakař Fakina. A ano, je jich konečně mnoho.

Další alternativa je mrsknout trakař třeba k souboru načítající jQuery nebo jakýkoliv jiný nebohý script. K zablokování trakaře byste museli killnout třeba celý web. Nic moc řešení. Pokud nejste číňan. Tam killnutí celého webu chápu.

Trakař sám

Paráda, máme bezpečnou cestu ze serveru ke klientovi, máme bezpečnou cestu z klienta na server, ale co samotné běhové prostředí?

Potřebujeme dosáhnout několika úrovní skrytí.

  1. Randomizovat JavaScript na serveru ze šablon.
    1. měnit jména globálních proměnných
    2. přidávat zbytečné konstrukce
    3. přeskupovat bloky kódu
  2. Obfuskovat. Ideálně pro každý request mít jiný seed obfuskátoru.
  3. Skrývat se v dynamicky měněných jmenných prostorech

Ukázka rané verze fakina (bez seedů v obfuskátoru, bez randomizace).

DataLayer

Aby se neřeklo, že je Fakin nepoužitelná magořina, má plnou podporu dataLayeru z Google Tag Manageru.

Akorát když použijete dataLayer, tak jste v čoudu, jelikož stačí, aby nějaký trapný adblocker udělal:

Pápá šmudlinko. Nemáme dataLayer.

Ok, jestli jste to dočetli až sem, pak vás asi napadne změnit název dataLayeru, což by na nějakou dobu mohlo zabrat, ale dataLayer se celkem dobře hledá. Jednak se na něj budou odkazovat event listenery, jednak bude mít metody push, set, get, reset a další znaky, podle kterého jej poznáme.

Takže co s tím?

  1. na serveru opět musíme randomizovat názvy globálních proměnných
  2. musíme randomizovat namespace, ve kterém se bude dataLayer nacházet a tuto šablonu pak použít i u event listenerů v aplikaci, kterou chceme trackovat.
  3. dále můžeme dataLayer skrýt za wrapper a nenechat jej číst z venčí
  4. můžeme cyklicky ověřovat, zda dataLayer existuje a pokud ne, můžeme se jej pokusit znovu vygenerovat z konstruktoru

To by snad mohlo zabrat, ne?

Cookies, localStorage

Leckdo zná cookies názvů:

  • _ga
  • _gat
  • _gid
  • _utma, _utmb,_utmc,_utmt,_utmz
  • _dc_gtm
  • svid
  • AMCV_
  • mbox

Ty lze přeci taky snadno detekovat a ničit, takže i zde musíme mlžit. Vzhledem k jejich persistenci jsou zranitelnější, ale pro začátek bude stačit, když je budeme kryptovat.

Cookie named: heverzmazdy (aGV2ZXJ6bWF6ZHk_) is setted to: true (dHJ1ZQ==)

Ano, zde je použito triviální base64 a heverzmazdy je _ga cookie. Zde by se určitě dalo více šifrovat a randomizovat názvy. Zároveň by se dalo při každém znovunačtení stránky vzít staré cookies a přegenerovat je do nových jmen.

Payload

Posledním slabým místem je samotný payload do Google Analytics. Ten je definován podle vzoru jménem Measurement Protocol a tudíž je dopředu známý.

Ve Fakinovi jsme obsah zprávy pouze zakódovali v base64, opět se tedy jedná v tomto konceptu o slabý článek (jelikož base64 není žádná šifra, jen forma encodování), ale pro ilustraci stačí. V ostřejším řešení bychom použili silnější šifrování, či přidali nějakou server-side generovanou mapovací funkci, která by hodnoty napohled zrandomizovala. Zde by se celkově veliká část konstrukce payloadu dala řešit až na PROXY.

To je vše

Právě jste viděli Fakina, doufám, že se vám líbí. Budu rád za komentáře ke zlepšení, či jen když se pochlubíte, jakého Fakina jste si naprogramovali sami s touto báječnou kuchařkou.

A pokud byste měli zájem o jeho produkční nasazení, neváhejte mě kontaktovat a to buď přímo, nebo přes Optimics, nejlepší agenturu na digitální marketing.

 

Nemožné na počkání, zázraky do tří dnů.

 

https://dataretard.cz

 

S láskou, Váš, Pravý Český Tuňák

2 komentáře: „Fakin – Unbeatable trackin‘

  1. Skvele ve zkratce rozebrane techniky AdBlockeru a jejich obejiti. Velmi prinosny prispevek jak pro jedince neznale v teto tematice, tak pro zkusene analytiky. Za me cenny a strucny, avsak informacemi nadupany clanek! Diky!
    F.

  2. Za mně super potenciál – spíš tedy pro PRO analytiky. Z hlediska GDPR bullshitu je to vlastně taky ok, když ty lidiuž tak jako tak odsouhlasej cookie lišty a další souhlasy, který tam už stejně musí bejt.

Napsat komentář

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

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