事件背景
發現者是技術博客 laserphile 的作者,文章刊於 8 月 20 日。他的症狀很具體:只要在 Firefox 或 Chrome 開啟 AliExpress 頁面,支援多點連接的藍牙耳機就會斷開手機那一邊,即使畫面上沒有任何影片或音樂在播放。
他的做法是包裝瀏覽器的 `AudioContext` 建構函式,記錄所有音訊節點的連接,結果找到兩個隱藏的音訊環境,分別由 `collina.js` 與 `fireyejs.js` 建立。兩個檔案都來自 `assets.aliexpress-media.com` 的 AWSC 路徑,屬於阿里巴巴的瀏覽器安全與反濫用工具。
兩者建立的音訊圖結構相同:鋸齒波振盪器(sawtooth oscillator)→ AnalyserNode → ScriptProcessorNode → 增益節點(gain 設為 0)→ AudioContext.destination。原理是同一段已知波形,經過不同 CPU、作業系統與瀏覽器的音訊處理後,輸出會有極細微差異,這個差異就成為裝置的指紋。
為何靜音沒有用
關鍵在最後一段接線。把音訊圖接到 `AudioContext.destination`,等於告訴瀏覽器「這條線會出聲」,於是瀏覽器會真的持續運算整個音訊圖,即使最終音量是零。對系統而言,這個分頁一直在輸出音訊,藍牙耳機因此判斷它仍然需要保持連接,不會把通道讓回手機。
分頁靜音按鈕之所以無效,是因為那個按鈕針對的是 `<audio>` 或 `<video>` 這類媒體元素,而這裡一個都沒有。
作者提供的緩解方法是用 uBlock Origin 封鎖兩個腳本,但他同時指出一個容易忽略的細節:封鎖腳本不會關掉它已經建立的音訊環境,所以要先關掉現有分頁再封鎖,否則問題會繼續存在。
這算不算在追蹤你
這是整件事最需要小心的一段。原作者本人寫得相當保留:「我無法看見 AliExpress 把這些資料送到伺服器之後做了什麼。」他認為用於偵測欺詐是合理的用途,但對於資料保留多久、有沒有與身分連結,明確表示不確定。AliExpress 這類平台要處理帳戶盜用、假帳戶、爬蟲、自動下單、支付欺詐與評價操縱,指紋技術是這個領域的常規工具,並非某一間公司獨有。
而在指紋的實際效力上,Firefox 的指紋防護負責人 Tom Ritter 給了一個相當潑冷水的數字:99.24% 的 Firefox 用戶只會回傳三個數值中的其中一個,另外 0.76% 回傳零,屬於採集失敗。三個數值之間的差異來自 CPU 層面,音訊處理是大量浮點運算,指令集的分別會滲進結果,其中一個數值同時涵蓋所有 x86 以及不支援 fused multiply-add 的 x64 處理器。Firefox 早在 118 版就把 WebAudio 的輸出壓成接近固定值,作為指紋防護的第一批功能之一。
換言之,把這個腳本說成「偷偷追蹤你」是誇張了:以 WebAudio 這一項而言,它作為識別碼的價值相當有限。但值得注意的是,把指紋壓平並不等於停掉音訊圖。Firefox 用戶回傳的數值雖然幾乎一樣,那條音訊線仍然照樣接着系統輸出,藍牙耳機被佔住的副作用一樣會發生。真正困擾用戶的,不是被辨認出來,而是這個為了辨認而長期運轉的裝置。
來源
- AliExpress webpage keeping multipoint Bluetooth headphones active with WebAudio fingerprinting — laserphile,原始調查
- webaudio fingerprinting on alibaba — Tom Ritter(Firefox 指紋防護),對指紋效力的反駁




No comments yet