Canvas Fingerprinting 初探 – 想逃也逃不掉的網站追蹤技術

4 / 25, 2015 HTML5 , JS , 網路安全

一直以來網站追蹤個別使用者的方法都是在 Cookie 中植入 UUID ,透過唯一不重複的 UUID ,就可以知道這個使用者是誰了,但是隨著隱私權高漲,開始有用戶會阻止 Cookie 儲存了,而且把這些資訊存在 Cookie 本身也有風險所在,因為可以輕易的被竄改或是移除,於是有人很奇葩的找到一個方法,可以在不用到 Cookie 的方法下追蹤用戶:使用 Canvas.

Canvas 是 HTML5 中用來繪圖的一個元素,為什麼可以這樣追蹤呢,但是事實就是可以,先來說古一下,這個構想是在 2012 年首度在 “Pixel Perfect: Fingerprinting Canvas in HTML5” 論文中被提出來的構想,並在隨後的論文 The Web Never Forgets 有更詳盡的解釋。

基本上 Canvas Fingerprinting 的概念就是因為 HTML5 中的 Canvas 這個元素在執行繪圖時,會受到瀏覽器(不同瀏覽器解析 Canvas 的方法不一樣)、瀏覽器設定(有無 3D 加速之類的)、瀏覽器版本、螢幕畫質、系統版本、硬體資訊等等因素而影響,因此即使同一段 Code ,用戶之間生出來的 Canvas 幾乎不可能完全一樣,於是我們就可以運用這種情況,來判斷使用者,而且更糟糕的,即使使用無痕式瀏覽器,因為系統資訊沒變,生出來的 Canvas 也是一樣的,所以理論上幾乎無法防範這種追蹤技術。

But,人生就是要有一個 But 才好玩,這種技術也不是完全無法防止啦,目前 Tor Browser 的作法是如果偵測到疑似在追蹤用戶的 Canvas 就一律返回空白元素,同時也有瀏覽器的外掛可以反追蹤了,但是即使如此,這種追蹤技術還是相當的恐怖。如果你覺得這個技術很新興還沒人使用,那可就錯囉,其實已經有不少網站正在在使用這種追蹤技術了,包含 AddThis 、白宮網站等等。

我們來做的 Demo

現在我們在 Chrome 的正常分頁和無痕式開起來,會發現兩個視窗生出來的 Base64 一模一樣,也就是說兩個 Canvas 是完全一樣的,也就是說即使用無痕式,網站仍然可以追蹤到你
canvas-fingerpint-1

我們來作個跨瀏覽器測試,使用 Chrome 和 Firefox,就會發現同樣的 Canvas 在瀏覽器之間生出來的 Base64 截然不同,也就是說兩個 Canvas 是不一樣的
canvas-fingerpint-2

Tor Browser 則會阻擋 Canvas 執行並詢問使用者是否允許
canvas-fingerpint-3