Chromium 148以降、Math.tanhでOSが特定可能に

मूल शीर्षक: Since Chromium 148, Math.tanh is now fingerprintable to link underlying OS

यह क्यों महत्वपूर्ण है

Anti-botシステムがOS判別にmath関数の計算誤差を利用できることで、ブラウザ自動化・スクレイピング対策の精度が向上する可能性がある。

Chromium 148から、JavaScriptの`Math.tanh`関数がOSのシステム数学ライブラリ(libm)を使用するようになり、計算結果の最下位ビットの差異によってLinux・macOS・Windowsを判別できるブラウザフィンガープリント信号が生じている。

Scrapfly Engineeringの調査によると、Chrome 148以降、V8エンジンが`Math.tanh`の計算を独自の`fdlibm`実装から`std::tanh`(ホストOSのlibm)に切り替えたことで、OSごとに異なる計算結果が返るようになった。この変更はV8コミット`c1486295ae5`(V8 14.8.57)で導入され、Chrome 147以前では発生しない。

具体的には、`Math.tanh(0.8)`に対してLinux(glibc)は`0.6640367702678491`、macOS(libsystem_m)は`0.664036770267849`、Windows(UCRT)は`0.6640367702678489`と異なる値を返す。全入力の約4分の1で結果が一致せず、差異は通常1〜2 ULP(最小精度単位)程度である。

IEEE 754規格はdouble型の格納方法は定めているが、`sin`・`cos`・`tanh`などの超越関数の正確な丸め方は規定していない。そのため各OSベンダーは独自の係数やルックアップテーブルを使用し、速度と精度のトレードオフを設けている。これにより、特定の入力値への`Math.tanh`呼び出し一回だけでOSを特定できる「シグネチャ」が生まれる。

CSSのtrig関数やWeb Audio APIのコンプレッサーも同様にホストlibmを経由するため、フィンガープリントの対象はさらに広い。Anti-botシステムはUser-Agentが主張するOSと数学ビットパターンの矛盾を検出することで、ブラウザ偽装を識別できる。Scrapflayは実ブラウザを多数のシグナルで模倣する製品を提供しており、この数学的リークへの対応が技術的課題であることを説明している。

स्रोत

scrapfly.dev — मूल लेख पढ़ें →