解決方案
瀏覽器的隱私功能把身分視為瀏覽器狀態:Cookie、Canvas 指紋與音訊指紋會被無痕模式、VPN 或 Tor 清除、隨機化或封鎖,因此切換瀏覽器看起來就像重新開始。FingerprintJS 研究人員攻擊的是留下來的那個訊號:機器上已安裝的應用程式不會因為使用者更換瀏覽器或躲在 VPN 後面而改變,因此這組應用程式可以連結同一台電腦上 Chrome、Firefox、Safari 與 Tor 中的同一個人。
深層連結是管道。桌面瀏覽器會把 skype:// 這類自訂 URL 配置交給註冊該配置的已安裝應用程式,並在啟動前詢問使用者。因此頁面可以測試某個應用程式是否存在:導覽至其配置,觀察瀏覽器如何反應。探測 32 個熱門應用程式並組合是/否答案,就能在 Windows、macOS 與 Linux 上於數秒內產生 32 位元識別碼。
每個瀏覽器都透過不同的弱點洩漏相同的答案。Chrome 需要使用者手勢,但 PDF 檢視器等擴充功能會重設保護旗標;Firefox 對未知配置顯示內部錯誤頁面,使已安裝應用程式的彈出視窗可被偵測;Safari 沒有配置洪水防護;而 Tor 完全停用確認對話框,因此在 iframe 中隱形執行探測。
此舉是揭露而非利用。FingerprintJS 連同可運作的示範發布了這項技術,釋出原始碼,並向全部四家瀏覽器廠商提交錯誤報告,聲明其自身產品並未使用該弱點。Mozilla 的 Bugzilla 開立了 issue 1711084,Tor Browser 後來附加了修補程式;2021 年 5 月 13 日的 Hacker News 公告獲得 467 分與 200 則留言,讀者把示範當作實地測試來執行。
達成了什麼
透過 URL 配置對話框探測已安裝的應用程式,以建立任何隱私模式都無法重設的識別碼
為何有效
已安裝的應用程式是裝置層級的狀態,因此由它們建立的識別碼能挺過無痕模式、VPN、瀏覽器切換與 Tor,這是任何 Cookie 或 Canvas 指紋都做不到的。
自訂 URL 配置未經許可即暴露應用程式是否存在:瀏覽器只有在真實應用程式註冊了某個配置時才會提供啟動該配置的選項,而 JavaScript 可以觀察該選項是否出現。
此攻擊只使用彈出視窗、iframe 與既有的同源規則,因此每個主流桌面瀏覽器都以某種形式暴露了該訊號,無需外掛或作業系統存取權限。
Tor 停用確認對話框的隱私選擇適得其反:使用者看不到任何東西,探測便在 iframe 中隱形執行,使最注重隱私的瀏覽器成為最安靜的洩漏者。
發布示範並開立錯誤報告讓外部人士得以重現這項發現,把廠商的私下說法轉變為受追蹤的 issue、瀏覽器修補程式與公開檢視。
可應用之處
已安裝的應用程式是裝置層級的狀態,能挺過無痕模式、VPN 與瀏覽器切換;任何可觀察到的 UI 差異,甚至只是對話框是否出現,都會成為追蹤訊號。
後續發展
Mozilla 將此報告追蹤為 bug 1711084,Tor Browser 附加了由 Matthew Finkel 開發的修補程式;數年後該 bug 仍處於開啟狀態。文章 2022 年 8 月的更新報導 Chrome 與 Firefox 的追蹤項目仍為開啟且未解決。示範與原始碼儲存庫持續上線,文章也保留其免責聲明,即 FingerprintJS 並未在其自身產品中使用該弱點。2021 年 5 月 13 日的 Hacker News 討論串獲得 467 分與 200 則留言;讀者把示範當作實地測試來執行,有些人確認跨瀏覽器的識別碼相符,其他人則回報誤判。
追溯依據
參考來源
- Scheme flooding technique for reliable cross-browser fingerprinting Mozilla Bugzilla · bugzilla.mozilla.org
- Vulnerability allows cross-browser tracking in Chrome, Firefox, Safari, and Tor Hacker News · news.ycombinator.com ·