返回部落格

指紋瀏覽器偵測的實驗方法:從版本宣告到行為驗證

一項發表於 IMC 2024 的研究把偵測做成可重現的線上實驗:不看瀏覽器怎麼自稱,而是計算底層物件的屬性數量,再與宣告的版本比對。比起結論,這套方法本身更值得讀。

關於瀏覽器指紋能不能被偵測,市面上有很多說法,多半停留在結論。與其爭論誰贏誰輸,不如看看研究者怎麼把這件事做成一個可以重現的實驗,以及他們用哪些指標來判斷。

有一項發表於 ACM Internet Measurement Conference(IMC)2024 的研究,論文標題是 Browser Polygraph,由 Arizona State University、Boston University 與 Amazon 的研究者合作完成,DOI 為 10.1145/3646547.3688455。研究不是在實驗室裡跑模擬資料,而是部署在一家大型金融公司的真實正式環境,觀察時間為 4.5 個月,涵蓋 205,000 個真實使用者工作階段。測試對象是 10 款常見的環境偽裝方案,並以正常使用者流量作為對照組。

實驗是怎麼搭起來的

偵測能夠全面部署又不影響業務,靠的是三個設計。

特徵要便宜。偵測只讀取一批固定屬性,單次開銷在毫秒與 KB 等級,所以可以對全部流量執行,不需要抽樣,使用者也幾乎感覺不到影響。

特徵要穩定。它選的不是使用者可以修改的參數,而是瀏覽器本身就固定下來的底層結構。每個瀏覽器版本會帶著不同的 JavaScript 引擎,底層有多少 API、每個物件掛多少屬性,版本之間存在細微差異。研究用 Chrome 110 到 Chrome 114 這個區間做比對:偵測系統計算 28 個關鍵物件的屬性數量,再與瀏覽器自稱的版本號比對。對不上,就表示宣告與實際行為不是同一套技術基礎。

標籤要可信。受測環境逐一接入同一套正式流量,用同一套規則判定;對照組則是真實使用者的正常行為。這樣得到的結論不是主觀判斷「像不像真的」,而是這批流量在同一套規則下能不能被區分出來。

判斷是否真的模擬到位的幾個指標

研究裡使用的衡量方式可以分成四類。

  • 一致性:瀏覽器宣告的版本和底層物件結構是否相符。這是最核心的一項,也是最難偽造的,因為改一個字串不會連帶改掉引擎裡的物件數量與屬性數量。
  • 檢出率:研究對其中四款做了詳細實驗,檢出率落在 67% 到 84% 之間。
  • 與真實裝置的偏離度:在同一套判定規則下,正常瀏覽器的風險分數是 0,受測方案的平均則落在 8.85 到 11.66 之間。這個分數代表離真實分布有多遠,而不是主觀的相似程度。
  • 可區分性:能不能把受測流量從正常流量中分出來。無法區分的那一類,表示在這套方法下,它與真實瀏覽器之間沒有可見的行為落差。

四項指標裡,第一項是原因,後面三項都是它的結果。

四類結果各自卡在哪裡

研究依照底層實作方式,把受測方案分成四類。

第一類,底層特徵和任何已知的真實瀏覽器版本都對不上,也就是沒有可以對應的引擎,簡單掃描就會暴露不一致。

第二類,本身帶著真實的指紋特徵,但切換身分時,只有表層宣告跟著變,底層引擎不動。這是研究中最常見的類型。打個比方,名片上寫著新版本,口音卻還是舊的。問題不是參數調得好不好,而是宣告與行為之間出現一道縫,主要的檢出就來自這裡。

第三類,切換身分時底層引擎會同步切換。宣告自己是哪個版本,實際跑的就是該版本對應的引擎,因此一致性成立,在這套偵測下沒有被區分出來。論文也說明,要辨識這一類需要引入更複雜的偵測手段。

第四類,不動瀏覽器本身,而是直接在虛擬機器裡執行真實瀏覽器,再載入目標設定。瀏覽器本來就是真的,所以偵測當然分不出來,但操作成本很高,也很難大規模化。

四類的差別不在參數多少,而在宣告和行為是不是同一套

對選擇環境方案的實際提示

偵測的重心已經從讀取宣告移到驗證行為,可修改的表層參數愈來愈不構成優勢。落到實際判斷上:

  • 問底層,不只看參數表。切換版本宣告時,底層是否同步變化;環境的指紋是自動產生的真實組合,還是手動拼起來的一組值。
  • 看環境彼此像不像。多個環境如果回傳高度一致的底層特徵,代表隔離並不完整。
  • 先一致性,再差異化。內部彼此矛盾的特徵調得愈多,暴露面就愈大。
  • 通過通用偵測頁面,不等於平台端就會認可。最後還是應該用一小批真實流量自行驗證。

環境隔離這一層要處理的核心問題,其實就是讓每個環境自成一套、內部不矛盾,PurpleMark 在做的就是這件事。偵測與反偵測本身都應該在合規邊界內使用;這項研究真正的價值,是讓評估有依據,而不是給出誰好誰壞的排名。