HTML 5 APIs 是如何跟蹤用戶軌跡的
如果你認為 IP 地址、cookies 和 HTTP 頭是在 web 上唯一標識和跟蹤用戶的要素的話,那么你就大錯特錯了!
新的現代化特征辨別技術依賴于以下多種要素:
-
IP地址
-
Cookies
-
語言
-
時區
-
HTTP 頭(用戶代理, 參考頁等)
-
HTML5 APIs(WebRTC, Battery API等)
-
HTML5 和 CSS3 特征檢測
-
CSS 媒體查詢
-
WebGL
-
瀏覽器插件(Flash, Silverlight, Java等)
-
瀏覽器加載項
-
瀏覽器選項(阻止瀏覽器追蹤等)
-
瀏覽器存儲
-
系統字體
-
TLS/SSL 會話ID
-
硬件檢測(攝像頭,麥克風,觸摸屏等)
-
屏幕(分辨率,色彩深度,像素等)
-
音視頻編解碼器
-
裝配特征
最近 W3C 在 HTML 標準中允許開發者與用戶設備通訊,以增強網頁、App 和游戲設置。很多 API 被開發出來以便更精準的辨別用戶身份已不足為奇。
什么是指紋特征呢?
想象一下,當你走進一家商店入口處,一個高級的攝像頭對你進行掃描,然后保存你的相關信息,如:體型、身高、膚色、服飾、鞋子、走路姿態、語調等。所有這些數據將被排成一個序列,然后通過一個哈希函數來計算你的特征圖譜。下次你再來到這家商店或屬于相同機構的其他商店時,通過快速分析你的特征,即使你著裝風格不同,也能將你與之前訪問的那個人聯系起來。
使用瀏覽器訪問網頁也同樣如此(不需要用戶做任何特別的操作)。無論你尚未登錄或者禁用 cookies,它都可以將用戶與一個標識聯系起來,它還不是百分之百的準確但一直在改進。
電子前線基金會(Electronic Frontier Foundation)在出版的“Web瀏覽器如何獨特?”(PDF)一文中研究了瀏覽器的用戶跟蹤。WebKit Wiki和Wikipedia上有設備識別的精確描述。
客戶端的JavaScript
如果你想對指紋特征有更好的了解,可以查詢一下 web 開發者專用的 JavaScript 庫:Fingerprintjs2。
要想有效地防止識別指紋特征的腳本運行,你可以通過阻止全局 JavaScript 的運行來實現,又或者使用NoScript 或者 uMatrix 拓展。但還有很多因素會暴露過多與你相關的信息,并且會繼續保存在其他未知的指紋特征方式中。
HTML5 APIs
得益于新型的 HTML5 標準,開發者在某些情況下不需請求批準,就有有權限去獲得和檢測的用戶信息或硬件設備。以下的 API 仍處于無監管下被濫用。要避免這種情況,最普遍的方法是禁止 JavaScript 運行,或者使用特殊的加載項。
Canvas
這是令人討厭,隱秘和(啟用 javascript)幾乎就不可停止的技術,從 2012 年以來就積極被利用,在廣泛使用的腳本(記得添加這個 “探索”找到替代品放到 cookies 中)中偶爾嵌入。
當瀏覽器訪問一個網頁是一個 canvas 的指紋腳本,它就被要求去繪制一個隱藏的圖形并轉換為一個令牌。令牌的獨特性等因素取決于瀏覽器,操作系統和安裝的圖形硬件。
為了避免 Canvas 指紋你可以:
-
顯示全局 javascript
-
使用 NoScript, uMatrix 或者CanvasFingerprintBlock (僅Chrome支持) 擴展
-
使用 Tor 瀏覽器
電池
由于檢測電池狀況的 API 能夠獲得設備電池的充電時間和放電時間。這些數據一旦結合起來就會近似于每個設備和電池狀態的特征,成為網絡中跟蹤活動的潛在因素。
一篇名為《正在泄露的電池——對 HTML 5電池信息 API 的隱私調查》的論文針對 Linux 系統上的 Firefox 瀏覽器用戶進行了調查。其中最深刻的研究結構是:“我們打算對電池狀態 API 進行小改造,并在 Firefox 瀏覽器里運行,去定位調查中的隱私流出。后來,我們給 Firefox 的漏洞匯報被接受了,而且開始修復漏洞。
在 Chrome 瀏覽器,你可以安裝名為 Battery Info Blocker 的加載項去禁止網站獲取你的電池信息。
WebRTC(Web Real-Time Communication,網頁實時通信)
當你不使用 WebRTC 時,應當禁止它。WebRTC 不僅會泄露你的本地 IP 地址,還會在 V*N 上泄露你的 IP 地址(在 Windows 系統下),這不同于采集系統的指紋特征的因素。
為了避免 WebRTC 泄露你的隱私,應該使用 Firefox 瀏覽器并且禁止 WebRTC,這可以通過打開about:config,找到值為 media.peerconnection.enabled 的項并且設置成 false
在 Chrome 中,你可以安裝名為 WebRTC 的加載項,否則會發生隱私泄露。
資源時序
開發者能夠使用 API 去收集完整的與文件資源有關的時序信息。在 Working Draft 中有表達對隱私的擔憂:“統計性的指紋特征是一種對隱私的擔憂,惡意網站會通過檢測瀏覽器緩存的時序信息,包括訪問和忽略第三方網站的資源,來判斷使用者是否訪問過第三方網站“
如果你使用 Firefox 瀏覽器,可以通過打開 about:config,并且把選項 dom.enable_resource_timing, dom.enable_user_timing 和dom.performance.enable_user_timing_logging 設置為 false,來阻止這些 API 運行。
在 Chrome 瀏覽器下,唯一的辦法是禁止 JavaScript 腳本運行。
Geolocation(地理位置)
如果使用這個功能,它會泄露你的物理位置,侵犯你的隱私。現代瀏覽器總是詢問許可來泄露地理位置給網站和 app。
在 Firefox 上禁用這個功能,你應該在地址欄上輸入 about:config,找到 geo.enabled 的值,設置其值為 false。
在 Chrome 點擊設置(Settings),從顯示高級設置(Show advanced settings)上,找到隱私(Privacy)并且點擊內容設置(Content settings), 在窗口里找到定位(Location)并設置選項不允許任何網站追蹤你的物理位置(Do not allow any site to track your physical location)。
硬件指紋識別
一篇名為 “Hardware Fingerprinting Using HTML5” 的論文(PDF)提到,有一項新的潛在的技術,它基于與硬件設備通信的能力,來獲取特定的硬件指紋,作為對基于軟件的指紋(瀏覽器,操作系統,等)的補充。
這篇論文提到,例如 GPU(現代瀏覽器使用硬件來加速),攝像機,揚聲器,麥克風,運動傳感器,GPS 和電池等硬件,都可以被 HTML5(未必需要用戶許可)訪問,尤其是 GPU,對進行指紋識別的用戶很有用。
鏈接
設備指紋識別
https://en.wikipedia.org/wiki/Device_fingerprint
什么是設備指紋識別
https://trac.webkit.org/wiki/Fingerprinting
EFF: 你的網絡瀏覽器到底有多特別? (PDF)
https://panopticlick.eff.org/browser-uniqueness.pdf
EFF: Panopticlick測試您的瀏覽器,看看它有多特別
https://panopticlick.eff.org
網絡不會遺忘:瘋狂的持續跟蹤機制
https://securehomes.esat.kuleuven.be/~gacar/persistent/
HTML 5的電池狀態 API 的私密性分析
https://eprint.iacr.org/2015/616.pdf
資源定時 API 工作草案
http://www.w3.org/TR/resource-timing
使用 HTML 5 進行硬件指紋識別
http://arxiv.org/abs/1503.01408
瀏覽器漏洞和網絡瀏覽器的指紋識別
http://browserleaks.com
現代的&靈活的瀏覽器指紋識別庫
https://github.com/Valve/fingerprintjs2