AliExpressがスパイ技術に似た手法でユーザーを監視
Bluetoothイヤホンの不具合をきっかけに、Webページが無音のオーディオ処理を実行し、複数のデバイス情報を収集して、バックグラウンドでデバイスフィンガープリントを構成していることが明らかになりました。
- AliExpressは再生音がないのに、タブがオーディオ使用中と表示し、著者のデバイスでBluetooth切り替えを妨害しました。
- Webページは固定波形でデバイスをテストし、計算の差異をグラフィック、ハードウェア、OS情報と組み合わせてデバイスフィンガープリントを生成し、アップロードします。
- 2つのルールでブロック可能ですが、ログインや決済に影響する可能性があります。
発端:Bluetoothイヤホンが突然パソコンに「占拠」された
AliExpressは、まるでスパイ技術のような手法でユーザーを監視しています。ただし、こっそりマイクを起動して録音するわけではありません。バックグラウンドで端末の「フィンガープリント」を作成するのです。これまでに見つかった二つのオーディオグラフにはマイク入力がなく、信号はWebページ自身が生成したものです。Webページは端末にこの無音信号を処理させ、その結果をグラフィック、ハードウェア、操作情報と組み合わせて「デバイスフィンガープリント」を作り上げます。
この件は、技術ライターのm-c-tech氏が偶然発見しました。彼のBluetoothイヤホンはWindowsパソコンとスマートフォンの両方に接続されています。普段はスマートフォンで音楽を再生していますが、パソコン側で音が出ると、イヤホンは自動的にパソコンへ切り替わります。
彼がAliExpressのトップページを開いて数秒後、スマートフォンの音楽が突然止まりました。Webページは動画や音楽を再生していないのに、タブ、ブラウザ、Windowsのすべてをミュートにしても効果はありませんでした。AliExpressのタブを閉じた瞬間、スマートフォンの音楽はすぐに復旧しました。
これは、Windows、スマートフォン、Bluetoothマルチポイント対応イヤホンという彼の環境での再現であり、すべてのイヤホンで同じ現象が起きるわけではありません。しかし、この不具合はある事実を浮き彫りにしました。AliExpressのページは音を出していないにもかかわらず、パソコンのオーディオチャンネルを常にアクティブな状態に保っていたのです。

midudev氏がスペインのAliExpressページで撮影したところ、タブにスピーカーアイコンが表示されました。これはブラウザがこのWebページを音声を使用中として認識していることを示しています。図中のスペイン語 te identifica は「それはあなたを識別する」という意味で、元の投稿者が付け加えた見解です。このアイコンだけでは、Webページがオーディオチャンネルを有効にしたことしか証明できず、特定の個人を識別したことを証明するものではありません。
同様の根本的な問題は、これが初めてではありません。Mozillaは2023年に、AliExpressのページがWindows 11にオーディオデバイスが使用中であると認識させ続け、パソコンの予定通りのスリープを妨げることを記録しています。タブを閉じると通常に戻りました。
調査:Webページがバックグラウンドで聞こえない音声を実行
著者はさらに調査を進め、ページがバックグラウンドで二つの AudioContext を起動していることを発見しました。これは、Webページ内部のオーディオプロセッサーと考えることができます。一つは collina.js から、もう一つは fireyejs.js から来ており、両方とも実行中の状態です。

参考画像:midudev氏はスペインのAliExpressトップページの開発者ツールでも fireyejs.js を確認しており、コード内に onaudioprocess と音声出力を接続するステートメントが見られます。これは関連コードが確かに読み込まれたことを証明しますが、サーバーが訪問者を特定の身元に関連付けたことを証明するものではありません。
これらのスクリプトが行うことは、Webページが端末に対して非常に短い「計算問題」を出していると考えると分かりやすいでしょう。
まず、Webページは固定の鋸波を生成します。これはマイクから録音した音声ではなく、コードによって計算された信号です。どのユーザーがWebページを開いても、問題は基本的に同じです。
次に、ブラウザはパソコンのCPU、オーディオエンジン、そして低レベルドライバーにこの信号を処理させます。異なるハードウェア、オペレーティングシステム、ブラウザでは、浮動小数点計算、丸め処理、オーディオ実装にごくわずかな違いが生じる可能性があります。これは、異なる電卓で同じ計算をすると、最後の数桁がわずかに異なるのと似ています。
次に、スクリプトは処理結果を読み取り、人間の耳では識別できないがコードでは読み取れるこれらのわずかな違いを、一連の数字に変換します。この数字の集まりこそが「オーディオフィンガープリント」の原料です。Webページが生成する鋸波は単なる試験問題であり、保存される指紋そのものではありません。
最後に、スクリプトは出力音量を0に設定するため、人間には聞こえません。しかし、この処理を完了させるために、スクリプトはオーディオグラフをブラウザのシステム出力端点である destination に接続します。これが、ブラウザがスピーカーアイコンを表示する可能性がある理由でもあります。
固定波形を生成
コード生成の試験信号で、マイク録音ではありません
デバイスが計算
CPU、ブラウザ、ドライバーで末尾の数値がわずかに変わります
差分を取得、音量0
ページは数値だけ取得し、人には何も聞こえません
AudioContextが残る
処理が残ると、システムが音声機器を使用中と判断することがあります
BluetoothイヤホンがPC側に残る場合があります。別のMozilla記録では、Windowsの自動スリープも妨げられました。
Bluetooth障害は著者環境、スリープ障害はMozillaの別のWindows 11環境での記録です。
測定自体は非常に短時間です。Mozillaのログによると、約80〜100ミリ秒後には一部のノードが切断されています。しかし、スクリプトはオーディオプロセッサー全体を適切に停止、一時停止、またはクローズしていません。オペレーティングシステムにとって、「聞こえる音がない」ことと「オーディオタスクがない」ことは同じではないため、このタブがオーディオデバイスを占有していると認識し続ける可能性があります。
その結果、システムはオーディオデバイスを使用中と見なす可能性があります。著者の環境では、Bluetoothイヤホンがそのためにパソコン側に留まり、スマートフォンへスムーズに切り替わりませんでした。Mozillaが記録した別の環境では、Windowsの自動スリープも妨げられました。
これは「ミュート」が無効だった理由も説明します。ミュートは単に聞こえなくするだけで、Webページの AudioContext を閉じるわけではありません。マルチポイント接続に対応したイヤホンも、音声がゼロ音量かどうかを分析するのではなく、パソコン側にオーディオセッションが残っていることだけを認識します。著者のイヤホンでは、そのためにパソコンが引き続き優先され、スマートフォンの音楽が中断されました。タブを閉じるとオーディオプロセッサーが破棄され、イヤホンは正常に戻りました。
本質的な技術:端末の「指紋」採取
無音オーディオはその一部に過ぎません。二つのスクリプトは、以下のような多くのデバイス特徴も収集します。
- Canvas、WebGLなどのグラフィック表現
- 画面サイズ、ピクセル比、CPU、メモリ、ブラウザプラグイン
- 音声・動画フォーマット、WebRTC、実行速度
- マウス、タッチ、スクロール、センサー、自動化ツールの痕跡
さらに厄介なのは、これらの高度に難読化されたスクリプトが、通常のショッピングトップページで読み込まれ、ページに明確な表示がないことです。
Webサイトが関心を持つのは、個々の数字そのものではなく、これらの特徴が組み合わさったときに、現在のデバイスが何に似ているかということです。オーディオテストは答案用紙の一枚であり、Canvas、グラフィックカード、画面、CPU、プラグイン、操作習慣は他の答案用紙です。一枚だけではデバイスを特定できないかもしれませんが、複数の答案用紙を組み合わせることで、区別できる範囲は狭まります。
これらの情報はオーディオ測定結果と一緒にまとめられ、シリアライズ、暗号化された後、Alibabaのテレメトリーサービスにアップロードされます。単独では特別ではない情報でも、組み合わせることで、現在のブラウザとデバイスに対する「指紋」を作成するのと同じことになります。
グラフィック表現
Canvas、WebGLなどのグラフィックの差分
画面とハードウェア
画面、ピクセル比、CPU、メモリ、プラグイン
音声・動画とネットワーク
音声・動画の形式、WebRTC、実行速度
操作とセンサー
マウス、タッチ、スクロール、センサー、自動化の兆候
無音の音声結果
同じ波形がデバイスで計算された後に残る数値的な差分
音声は1つの解答用紙のようなもので、他の特徴はさらに多くの解答用紙です。それらを組み合わせることで、デバイスをより簡単に区別できます。
Firefox 118以降、99.24%の音声結果は3つの主要な値に収まります。サーバーが組み合わせたデータをどのように保存・使用するかは不明です。
Cookieがあるのに、なぜこのような仕組みを行うのでしょうか?Cookieは削除、コピー、置換が可能です。しかし、複数のデバイス特徴を同時に偽装することはより困難です。そのため、デバイスの異常を判定したり、訪問者が人間かボットかを判断したり、不正防止やリスクスコアリングの補助としてよく使用されます。
ただし、これを万能トラッカーと呼ぶのは正しくありません。Firefox 118以降、WebAudio出力は大幅に標準化されています。Mozillaのサンプルでは、99.24%の結果が三つの主要な値に収まり、主にCPUの命令セットアーキテクチャを反映しており、特定のデバイスを反映するものではありません。
つまり、オーディオ単独では、ほぼデバイスを特定することはできません。これは「このデバイスがどのカテゴリに属するか」を示す手掛かりであり、ID番号のようなものではありません。識別力を真に高めるのは、複数種類の情報の組み合わせです。Webページのコードからは、サーバーがデータをどのくらい保存するのか、異なるアクセスをどのように関連付けるのか、あるいは最終的に不正防止やボット対策のみに使用するのか、それともユーザートラッキングにも使用するのかを判断することはできません。
ブロック方法
著者はFirefoxのuBlock Originを使用して二つのスクリプトをブロックしました。「マイフィルター」に以下を追加します:
||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タブを閉じてから、サイトを再度開く必要があります。既に起動している古いタブのオーディオプロセッサーは、新しいルールが追加されただけでは自動的に停止しません。
著者のテストでは、トップページと通常の商品閲覧は引き続き利用でき、二つのオーディオプロセッサーも出現しなくなりました。ただし、これらのスクリプトはセキュリティチェックに関与している可能性があり、ブロックするとCAPTCHAが増えたり、ログイン、チェックアウト、支払いに影響が出る可能性があります。その場合は、ルールを一時的に無効にして再試行してください。スクリプトのアドレスが将来変更されると、ルールが無効になる可能性もあります。
