概要
AliExpressのホームページは、ユーザーに気づかれずにWebAudio APIを利用し、デバイスのフィンガープリントを取得。 この隠れたオーディオ処理がBluetoothマルチポイントヘッドホンの動作に悪影響。 原因はcollina.jsとfireyejs.jsという2つの難読化されたスクリプト。 uBlock Originでこれらのスクリプトをブロックすることで問題を回避可能。 セキュリティとプライバシーの観点からも、ユーザー側での対策が推奨される。
AliExpressで発生したBluetoothヘッドホンの奇妙な問題
- Bluetoothマルチポイント対応ヘッドホン で、PCとスマホの両方に同時接続
- 通常はPCの音声が優先、PCが無音時のみスマホ音声が再生
- AliExpressのページをFirefoxまたはChromeで開く と、スマホの音楽再生が突然停止
- タブを閉じると即座に復旧
- タブやブラウザ、Windows側でミュートしても効果なし
- ページ上に可視のメディア要素や再生中の音声は存在しない
- 問題発生までに数秒の遅延 がある点が特徴
隠れたWebAudio APIの利用を調査
- <audio>や<video>要素、HTMLMediaElement.play()の呼び出しは検出されず
- Media Sessionやメディアリクエストもなし
- AudioContextの生成を監視するコードを挿入して調査
- AudioContextのコンストラクタとAudioNode.prototype.connect()をラップ
- AliExpressホームページ読み込み時に2つのAudioContextが生成され、destinationに接続
- 音は出ていないが、システムのオーディオ経路がアクティブ化
スクリプトの正体と動作
- collina.jsとfireyejs.js がAudioContextを生成
- どちらもAWSCディレクトリ配下、Alibabaのセキュリティ・アンチアビューズツールの一部
- WebAudioグラフの構成
- 鋸歯状オシレーター → AnalyserNode → ScriptProcessorNode → ゼロゲインのGainNode → destination
- ゼロゲインなので無音だが、オーディオ経路はアクティブ
- 通常のメディア再生とは異なり、ミュート操作が効かない
- Bluetoothオーディオ経路が解放されず、スマホ音声に切り替わらない問題を引き起こす
ブラウザフィンガープリントの手法
- WebAudio以外にも多岐にわたるデバイス情報・挙動を収集
- canvas描画、WebGL情報、オーディオ解析、画面サイズ、ハードウェア情報、プラグイン、対応フォーマット、WebRTC挙動、パフォーマンス、ユーザー操作など
- 結果をシリアライズ・暗号化し、Alibabaのテレメトリーサービスへ送信
- フィンガープリントはCookieより改ざんや回避が困難
- 不正利用対策やボット検出、ユーザー行動分析が主な目的
uBlock Originによる対策
- uBlock OriginのMy filtersに以下を追加し、スクリプトをブロック
! AliExpress AWSC fingerprinting scripts ||assets.aliexpress-media.com/g/AWSC/uab/*/collina.js$script,domain=aliexpress.com ||assets.aliexpress-media.com/g/AWSC/fireyejs/*/fireyejs.js$script,domain=aliexpress.com - 既存のAliExpressタブは閉じてから再度アクセス
- ブロック後はAudioContextの生成がなくなり、Bluetooth問題も解消
- スクリプトは将来的にパターンが変わる可能性もある点に注意
- アンチフラウド用途のため、CAPTCHAやログイン・決済時の不具合発生時は一時的に解除を推奨
なぜブロックするのか
- 一般的なショッピングページで過剰なデバイス情報収集が行われている
- 難読化されており、内容の検証や目的の透明性が低い
- ユーザーに通知なく、オーディオ経路を専有しハードウェア動作に影響
- サーバー側でのデータ保持期間や利用範囲が不明
- プライバシーとユーザーコントロールの観点から、自己防衛が妥当
まとめ
- AliExpressのホームページは、隠れたWebAudioグラフを生成し、ユーザーのデバイスを詳細にフィンガープリント
- この処理がBluetoothマルチポイントヘッドホンの音声切替に悪影響を及ぼす
- uBlock Originでcollina.jsとfireyejs.jsをブロックすることで問題を回避可能
- プライバシーと快適な利用のため、ユーザー側での対策が重要