ブログに戻る

ブラウザフィンガープリントの露出確認:整合性を見る6つのチェック

フィンガープリント検査ページには、Webサイトがもともと取得できる多くの項目が表示されます。ここではブラウザ、OS、地域、ネットワーク、描画情報の矛盾を見つける6つの確認方法を紹介します。単独の珍しい値より、複数項目の不整合のほうが目立ちやすいためです。

任意のブラウザフィンガープリント検査ページを開くと、UA、画面、タイムゾーン、フォント、Canvas の描画結果、ハードウェア情報など、多数の項目が並びます。多くの人は最初に「一意性」を見ますが、実はそこは最重要ではありません。より重要なのは、これらの項目が互いに矛盾していないかどうかです。

浏览器指纹暴露自查:六项核对与自洽判断的关键步骤与判断维度示意图

Webサイトがもともと取得できる情報

フィンガープリントは Cookie のように保存されるものではありません。Cookie は削除や無効化ができ、プライベートブラウジングで回避できる場合もありますが、フィンガープリントはブラウザと端末そのものの設定から生まれます。UA にはブラウザの種類とバージョン、OS とそのバージョンが含まれます。さらに、インストール済みプラグイン、画面解像度と色深度、フォント一覧、タイムゾーンと優先言語、CPU の種類、GPU モデルとメモリ容量、IP アドレス、ISP、接続方式、そして Canvas や WebGL などの HTML5 API が返す描画結果も含まれます。これらを組み合わせると識別子になり、IP を変えたり Cookie を削除したり、プライベートモードを使ったりしても基本的には変わりません。プラットフォームがアカウント同士の関連性を判断するときも、同じ原理が使われます。

まず3項目をシステムと照合する

最初に User Agent を見る価値があります。ブラウザが自分自身を説明している情報だからです。検査ページで UA を控え、ブラウザ設定でバージョン番号を確認し、システム設定で OS のバージョンを確認します。UA が示す OS やカーネルのバージョンが実機と一致しない、または現在よく使われているバージョンから明らかに遅れている場合、見つけやすい不整合になります。

タイムゾーンはネットワーク出口の地域と一致している必要があります。検査ページは通常、現在のタイムゾーンを直接表示し、簡単なタイムゾーン取得スクリプトでも同じ値を得られます。さらに任意の IP 検索ページで出口 IP の地域を確認します。両者が異なる地域を示す場合は、その不一致を見直す必要があります。

言語と地域は単独では弱いシグナルですが、組み合わせると有用です。navigator.language と navigator.languages が返す一覧を見て、出口地域で一般的な言語と照合します。タイムゾーンが米国、言語が中国語、出口が欧州という組み合わせは、どれか一つだけが異なる場合より目立ちます。

画面、ネットワーク出口、描画特性

画面とハードウェアの情報では、2点を確認します。値が一般的かどうか、そして UA が示す端末種別と一致しているかです。解像度、デバイスピクセル比、利用可能領域、CPU コア数、メモリはまとめて確認できます。スマートフォン相当の解像度なのにデスクトップ版 UA になっているのは典型的な矛盾です。

WebRTC は別に確認する必要があります。実際のネットワーク情報を漏らす可能性があるためです。検査ページでは通常、WebRTC が独立した項目として表示されます。192.168 や 10 で始まる端末のローカルアドレスが返っていないか、あるいは実際のパブリック出口 IP がそのまま表示されていないかを確認します。プロキシを使っているのに実アドレスが出る場合、その通信はプロキシを通っていません。この項目は最優先です。

Canvas と WebGL では、返される結果が安定しているか、宣言された GPU モデルと整合しているかを見ます。注意点として、同じマシン上で複数の環境を並行して開き、それらが完全に同じ描画値を返す場合、少しノイズや差異がある場合よりも相互に関連付けられやすくなります。

不自然さより矛盾のほうが目立つ

プラットフォームは、すべての端末が完全に一意であることを求めているわけではありません。見ているのは、その一連の情報が通常のマシンから送られたものに見えるかどうかです。たとえば少し珍しい解像度のように、単独の値が十分に「自然」でないことは、通常は弱いシグナルにすぎません。複数項目が互いに矛盾すると、判定はずっと簡単になります。UA は Windows なのにフォント一覧は macOS らしい、タイムゾーンは米国なのに言語は中国語で出口は欧州、解像度はスマートフォン相当なのに UA はデスクトップブラウザ、という具合です。どれか一つでも当てはまれば、他の項目を細かく調整していても意味が薄れます。そのため自己確認では、まず明確な矛盾を探し、その後に各パラメータの細部を調整します。

3か所だけ直すなら優先順位はこれ

1番目は WebRTC の漏えいです。実際のネットワーク情報を露出するためです。2番目は、タイムゾーンと言語を出口地域に合わせることです。この組み合わせの不整合は異常判定につながりやすいためです。3番目は Canvas と WebGL の扱いで、同じマシンの安定した一意の値を直接露出しないようにします。

実用上の限界もあります。JavaScript を無効化または制限すれば一部の収集を防げますが、Webサイトの使い勝手は明確に落ちます。プライバシー重視のブラウザには一定の保護機能があり、日常利用には十分なこともありますが、互いに無関係な複数のアイデンティティを長期間維持する用途では柔軟性が不足します。

複数の環境を維持する方法

重要なのは、毎回まったくランダムなフィンガープリントに変えることではありません。各環境の内部では値を安定させ、環境同士では異なる状態を保つことです。PurpleMark でアカウントごとに独立したブラウザ環境を作成し、Canvas などのパラメータを個別に扱ったうえで、検査ページを使って各環境の整合性を確認します。この確認を通過した環境こそ、長期利用に向いています。

結局のところ、フィンガープリント検査の目的は2つだけです。自分が何を露出しているかを把握すること、そしてその情報全体に内部整合性があることを確認することです。一意性は、最も気にしなくてよい項目です。