HTML5APIs是如何跟蹤使用者軌跡的

行者武松發表於2017-06-09

如果你認為 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 地址,還會在 VPN 上洩露你的 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

文章轉載自 開源中國社群[https://www.oschina.net]


相關文章