デモ
サイトのファビコン-ブラウザタブの小さな16 * 16または32 * 32ピクセルの.icoアイコン。何百ものタブをナビゲートするのに役立ちます。 Twitterには青い鳥、Gmailには赤いメール記号、Wikipediaには太字のWがあります。
しかし、これらのアイコンは、ブラウザのVPNおよびシークレットモードでもユーザーを識別するためのフィンガープリントを実行できる脆弱性を表していることがわかりました(デモを参照してください )。
Githubリポジトリのドイツ人プログラマーJonasStrehleは、ファビコンを 介して削除不可能なスーパーCookieをインストールする方法について次のように説明しています。「スーパーCookieは、ファビコンを介してサイト訪問者に一意のIDを割り当てます。従来の追跡方法とは異なり、このIDはほぼ永久に保持され、ユーザーが簡単な方法を使用して削除することはできません。追跡方法は、シークレットモードでも機能します。キャッシュをクリアしたり、ブラウザを閉じたり、システムを再起動したり、VPNや広告ブロッカーを使用したりしても、スーパーCookieは削除されません。」
フィンガープリントのしくみ
アイコンを表示するために、次の属性がページコードに挿入されます。
<link rel="icon" href="/favicon.ico" type="image/x-icon">
ファビコンは、ブラウザから非常に簡単にアクセスできる必要があります。したがって、これらは別のローカルデータベース、いわゆるファビコンキャッシュ(F-Cache)にキャッシュされ、URL、ファビコンID、および有効期間が保存されます。
ユーザーがサイトにアクセスすると、ブラウザはローカルのF-Cacheをチェックして、アクティブなWebサイトのURLを含むエントリを探します。エントリが見つかると、アイコンがキャッシュから読み込まれます。エントリがない場合、ブラウザはGETリクエストを送信して、サーバーからファビコンをダウンロードします。
このメカニズムにより、サーバーは訪問者について多くのことを学ぶことができます。特定のURLの配信済みファビコンと失敗したファビコンのステータスを組み合わせることにより、クライアントには一意のテンプレート(識別番号)が割り当てられます。次に、IDが保存されます。
const N = 4; const ROUTES = ["/a", "/b", "/c", "/d"]; const ID = generateNewID(); // -> 1010 • (select unassigned decimal number, here ten: 10 -> 1010b in binary)
const vector = generateVectorFromID(ID); // -> ["/a", "/c"] • (because [a, b, c, d] where [1, 0, 1, 0] is 1 -> a, c)
サイトをリロードした後、このIDは、欠落しているファビコンに対してクライアントから送信されたネットワーク要求のリストから復元できます。これにより、ブラウザーを識別できます。
const visitedRoutes = []; Webserver.onvisit = (route) => visitedRoutes.push(route); // -> ["/b", "/d"] Webserver.ondone = () => { const ID = getIDFromVector(visitedRoutes) }; // -> 10 • (because "/a" and "/b" are missing -> 1010b)
著者は、ファビコンを使用したフィンガープリントを示すWebサイトを立ち上げました。ソースコードとメカニズムの詳細な説明が公開され ています。
この脆弱性の最悪の部分は、人々がプライバシーを保護するために使用する従来の方法を簡単に回避できることです。 Strehle氏によると、指紋はChrome、Safari、Edge、Firefoxの「プライベート」モードを突破します。キャッシュクリーニング、VPN、または広告ブロッカー-悪意のあるファビコンの邪魔になるものは何もありません。
イリノイ大学の研究者は、最近公開された科学的研究「ファビコンとキャッシュの物語:最新のブラウザでの永続的な追跡」で同じ結論に達しました 。「ファビコン追跡技術と不変のブラウザ属性を介したフィンガープリントを組み合わせると、サイトは2秒で32ビットの追跡IDを回復できることがわかりました」と研究は述べています。-脆弱性の重大性のため、この形式の追跡を防ぐために、ファビコンのブラウザキャッシュに変更を加えることを提案します。現在、緩和オプションを検討しているブラウザベンダーの開発者と調査結果を共有しました。」
ファビコンを介したフィンガープリントは、現在、モバイルブラウザ(プラス記号)を含むすべての主要なブラウザで機能します。
ブラウザ |
ウィンドウズ |
マックOS |
Linux |
iOS |
アンドロイド |
ノート |
---|---|---|---|---|---|---|
Chrome (v 87.0) | + | + | + | + | + | ? |
Safari (v 14.0) | ? | + | ? | + | ? | ? |
エッジ(v 87.0) | + | + | ? | ? | + | ? |
Firefox (v 85.0) | + | + | ? | ? | ? | シークレットモードでの別のフィンガープリント |
ブレイブ(v 1.19.92) | + | + | + | ? | ? | ? |
次の表は、攻撃を実行するために必要な最小時間を示しています。実際の数値は、インターネット接続速度、場所、ハードウェアパフォーマンス、ブラウザの種類などの追加の要因にも依存します。
リダイレクト
(Nビット) |
識別可能なクライアントの数 | 録音時間 | 読書の時間 | 攻撃スケール |
---|---|---|---|---|
2 | 四 | <300ミリ秒 | <300ミリ秒 | 4つのブラウザを持つ1人のユーザー |
3 | 8 | <300ミリ秒 | 〜300ミリ秒 | カーダシアン家のおおよその数 |
四 | 16 | <1秒 | 〜1秒 | あなたの隣人の束 |
8 | 256 | <1秒 | 〜1秒 | Facebookのすべての友達 |
十 | 1024 | <1.2秒 | 〜1秒 | とても小さな村 |
20 | 1,048,576 | <1.8秒 | <1.5秒 | 小さな町(サンノゼ) |
24 | 16,777,216 | <2.4秒 | <2秒 | すべてのオランダ |
32 | 4 294 967 296 | 〜3秒 | <3秒 | インターネットにアクセスできるすべての人 |
34 | 17179869184 | 〜4秒 | 〜4秒 | 4 |