Web Tracking 筆記

Web Tracking 筆記 #

這一系列的文章將會介紹有關 web tracking 各種你不需要的、對你人生毫無幫助的冷知識。我們將從最基礎的概念開始講起,從追蹤技巧講到反追蹤技巧,從基本技術講到奇技淫巧,然後再討論到新世代的追蹤技術長怎樣。

如果你喜歡這一系列的文章,可以考慮到 GitHub 上幫按個 star,這對我來說是很大的鼓勵!

起源 #

這系列文章最早只是我想整理自己在 web tracking 領域的所學與一些個人見解。因為整理時正逢 iThome 鐵人賽,就順便參賽了。當時參賽標題是 〈天羅地網:淺談 Web Tracking 的過去、現在、未來〉。之後覺得當時有些文章寫得不理想,有些想要做延伸,所以就把文章獨立出來了。在我寫下這段文字的當下,文章內容跟鐵人賽時的文章基本上是一樣的,但如果之後要更新,我會以這邊為優先。

也因為這系列文章起源於個人筆記,所以文章內容可能會有誤或是缺少重要資訊,我已經盡可能做好事實查核,但可能還是會有疏忽,也可能是單純我誤解了。如果有看到錯誤,還請大家多指教。另外,也因為一開始出自鐵人賽,文風會變得有點像是部落格文章,我還正在陸續修用字。

什麼是 Web Tracking #

Web tracking 是指「不同情境中重新識別使用者,而且技術上無需使用者的期待或同意」。其中,使用「情境」指使用者期望與其他類似情境分開的一系列活動,例如時隔多日再次造訪同個網站,或是同時造訪兩個不同網站,都可能屬於不同情境。強調技術上無須期待或同意,用於排除符合預期的重新辨識(例如登入帳號),並且強調這是技術上而言,法律上或道德上可能仍然需要取得同意。稍微更技術面向地來講,web tracking 是「藉由為每個使用者指定或計算出一個(唯一的) identifier,在未來遇到同一個使用者時,以此辨認出這是哪個使用者」的一系列的技術。

舉例來說,我是一個廣告商,使用者在 blog.example 瀏覽了一台筆電的開箱文,於是我就指定這個使用者的識別碼是 userA,並猜想他對這台筆電有興趣。當使用者又在 blog.example 繼續瀏覽了一個耳機的開箱文,我又記錄下來他喜歡耳機。至此都還在同個網站上追蹤使用者,即 same-site tracking。當使用者瀏覽 news.example 時,藉由 web tracking 技術,我發現他就是 userA,正是之前在瀏覽筆電開箱文的那個人,於是就可以在 news.example 投放廣告吸引他購買這台筆電,這就是 cross-site tracking。

Cross-site tracking 的危害通常被認為大於 same-site tracking 的危害。讓網站管理員知道使用者瀏覽他的網站的哪些文章可能不是大問題,尤其如果使用者有登入帳號時,網站管理員肯定知道他是誰、他在看哪些頁面。不過,如果無論使用者在瀏覽哪個網站,Facebook 都可以看到他的瀏覽紀錄,那大概就是個大問題了。也因此,許多 web tracking 的攻擊與防禦手段都更著重於 cross-site tracking,或有時會說 first-party site 是隱私界線。當然這不是說 same-site tracking 不重要,而是因其性質差異而受到比較少關注而已。

早期的 web tracking 通常是嘗試把一個唯一的 identifier 儲存在使用者的瀏覽器中,以後只要檢視該 identifier 便可以知道使用者是誰。通常這種需要在瀏覽器中儲存資料的技術被稱為 stateful tracking。但 stateful tracking 有個問題:如果使用者把 identifier 刪掉,就追蹤不到他了。於是之後有人在想,如果不將 identifier 儲存於瀏覽器中,而是利用一些特徵去「算出」identifier,使用者就沒辦法把儲存的資料刪掉了,至此我們進入 stateless tracking 的時代。在 stateless tracking 的技術中,最知名也最廣泛被使用的是 browser fingerprinting。Browser fingerprinting 利用了瀏覽器、作業系統、硬體等的各種資訊,去算出一個 identifier,因為這些資訊不一定會常有變動,所以每次算出來的 identifier 的課都有很高的機率是一致或雷同的。

所以這跟 Security 有什麼關係? #

一般來說,資安(security)與隱私(privacy)是難以分割的,例如藉由資安的技術保護隱私(個人資料等),隱私的洩漏可能創造新的資安危機,所以我們常把 security 與 privacy 合併使用。我認為不應該把 security 狹隘地想像成駭進別人的電腦然後提權拿到 root,其他重要的問題,像是如何維持通訊安全(e.g. HTTPS)以及在網路上保持匿名(e.g. Tor),或是在資訊不洩漏的情況下做到很多功能(e.g. privacy-preserving 的應用、密碼學黑魔法),也都是資安的一環。

也許 web tracking 不像是其他典型資安領域的 attack & defense,但從前述對於 web tracking 用途的論述可以看出,這些技術可能造成隱私危害,讓使用者在網路上無所遁形,而這樣的隱私洩漏可以是種資安威脅。希望我有成功說服大家。

如果很疑惑這些隱私洩漏有什麼關係,或甚至覺得隱私不重要,我不認為自己能用三言兩語說服你,也不覺得說服大家隱私很重要是這系列文章的目的,但我很推薦 Shoshana Zuboff 的《監控資本主義時代》,這本書做了許多論述。

我為什麼需要知道 Web Tracking 相關技術? #

同學,你問錯問題了。比較好的問題是:我需要知道 web tracking 相關技術嗎?為什麼?

很遺憾的,你不需要知道 web tracking 相關技術。除非這是你在研究 browser privacy 或是你就在網路分析公司工作,否則這些知識本身對你的人生大概不會有什麼幫助。

不過我想來分享一下自己的學習心得。Web tracking 技術最有趣的點在於發現一些看似正常的設計竟然可以被如此運用,看似完備的防禦可以被如此繞過,那種「還可以這樣搞喔天啊」的驚奇感也就油然而生。此外,在研究這些技術的過程中,我也開始會去注意每一個功能的設計有沒有可能 leak 一些意想不到的資訊,這些資訊可能被怎麼運用。

當然,這只是我非常個人的收穫,讀者可能會有不一樣的收穫,可能學到更多東西,可能找到新的興趣,可能會覺得奇怪的知識增加了,也可能讀完之後只覺得自己浪費時間讀一些不知道能做什麼的東西。每個人的學習經驗與歷程都是不一樣的,但也正是如此,世界才如此有趣吧。

系列文章結構 #

希望我有成功說服讀者嘗試把這系列的文章看下去,至此終於可以來介紹這一系列的文章會寫什麼了。

除了開頭與結尾以外,系列文章大概可以分成三大部份:

  • Stateful Tracking:介紹一些早期與當代的 stateful tracking,以及這些 stateful tracking 可以如何被避免,而這些阻擋 stateful tracking 的手段又如何被繞過與攻擊。
  • Browser Fingerprinting:介紹各種 browser fingerprinting 的技術以及其反制方法,其中會再分成常見的、廣泛被使用的方法,以及特殊的甚至奇葩的方法。
  • Privacy-preserving Web Tracking:如果我們一方面想要做 tracking,但同時又想保護使用者的隱私,我們可以怎麼做?目前有許多解法,但還沒有收斂到一個大家共通的標準,也可能以後都不會收斂。我會挑選幾個值得討論的例子來講。

每一個部份會寫幾篇文章,會舉哪些例子,雖然心中大概有個圖像了,但還沒有很肯定,所以就先不放出來了。等系列文章寫完之後再回頭修改這段文字吧。

原則上每篇文章之間連貫性不高,如果真有連貫性,我也會盡可能地明顯讓讀者知道這篇文章需要前面哪些文章作為基底,所以可以跳著讀,應該不會有太大的問題。

預設背景知識 #

很遺憾的(?),閱讀這系列的文章會需要一些基本知識。

在一開始介紹 stateful tracking 與 browser fingerprinting 時,會需要 HTTP 與 JavaScript 的基礎,基本上只要有寫過網頁前端或是打過 web 類型的 CTF 題目就非常夠用了。文章中提到的多數技術,都會在第一次提及時做 high-level 的介紹,但這只是幫已經對該技術有基礎認識的讀者回憶起那是什麼,完全沒聽過該技術的讀者很可能聽不懂我的介紹。如果真的缺乏什麼背景知識,網路上也都有相關資源可以閱讀(尤其推薦 MDN),不用擔心會需要花費很大心力才能跟上。有鑑於這系列文章的定位是會基本的 web 就要能看懂,如果讀者需要花費很大心力跟上進度,那大概就是我寫得不夠淺顯易懂吧,還請讓我知道哪裡可以改進,謝謝。

後面會介紹 privacy-preserving web tracking,其中有些技術可能會應用到專業領域的知識,像是密碼學或是 Machine Learning。兩個領域也都有許多網路上的資源可以參考,但可能會稍微難一些。

自我介紹 #

突然想到還沒介紹自己是誰呢。不過我知道沒人在乎我是誰。

我是 Allen Chou。好,沒了。

授權 #

本系列文章以 CC BY-NC 4.0 釋出。如果要使用這個網站上的資訊,基本上只要有 credit 我都不會有問題。如果對使用授權有任何疑義,歡迎聯繫我。

貢獻 #

假設你發現網站上有任何資訊有誤,覺得哪裡可以寫得更好,或是有些感覺也可以分享的內容,都可以到 repo 開個 issue 或 PR。

一點結語 #

在一篇楔子裡面寫結語,是個很有趣的體驗呢。

我想提醒讀者,技術不是中立的,我也不是中立的,我更沒有打算假裝自己很中立。我的立場很鮮明:web tracking 會對隱私造成傷害,這些技術是有害的,我們要反制它們。在後面文章的論述,我對於 web tracking 的論述也是以他們有害為論述核心。期許讀者在閱讀的同時,小心地注意文章中明示或暗示的價值,並且時刻反思我講的真的有道理,不要輕易被我帶風向了。

此外,我不是相關領域的專家,也就只是讀了幾篇文章而已,對這個領域的認識淺薄到實在不足掛齒,更遑論拿來說嘴,寫這系列文章也只是想整理過去自己所學。如果我有寫錯,還希望各位先進能不吝指教。然後這系列的文章會有一點晶晶體,我嘗試過盡可能講中文,但有些名詞翻譯成中文感覺就是不對,所以就覺得算了就這樣吧,畢竟 web tracking 真的很 amazing,翻成 Chinese 整個 meaning 就偏掉了。

如果有任何想法想要交流,都可以到 repo 開 issue,或是寄信給我(s3131212 at gmail dot com)。