ツール
Evercookie トラッキングデモ
複数のブラウザストレージメカニズムを悪用して削除試行をかいくぐる「ゾンビ Cookie」の永続化の仕組みを理解します。
教育目的のデモンストレーションのみ
このページは教育目的で Evercookie の概念をデモンストレーションしています。実際にあなたを追跡することはありません。デモは永続性の仕組みを示すためにランダム ID を保存し、いつでも完全にクリアできます。
Evercookie とは?
Evercookie(「ゾンビ Cookie」や「スーパー Cookie」とも呼ばれる)は、同じトラッキング ID を多くの異なるブラウザストレージメカニズムに同時に保存することで、極めて永続的な Cookie を作成する JavaScript API です。
ユーザーが Cookie を削除すると、Evercookie は残りのストレージ場所から自身を再作成します。Evercookie を本当に削除するには、すべてのストレージメカニズムを一度にクリアする必要があります - ほとんどのユーザーはその方法を知りません。
オリジナルの Evercookie は、オンラインでプライバシーを維持することがいかに困難かを示すために、2010年に セキュリティ研究者で Evercookie の作成者 Samy Kamkar によって作成されました。
インタラクティブデモ
デモ用トラッキング ID
生成中...
Cookie だけをクリアしてから「全ストレージを確認」をクリックして、ID が他の場所に残っているか確認してみてください
ストレージメカニズム
Evercookie は17以上の異なるストレージメカニズムを悪用します。以下にブラウザで利用可能なものとその現在のステータスを示します:
各メカニズムの仕組み
標準 HTTP Cookie 一般的
従来の方法 - ブラウザに保存される小さなテキストファイル。ブラウザ設定から簡単にクリアできます。
document.cookie = "tracking_id=abc123; expires=Fri, 31 Dec 9999 23:59:59 GMT";
HTML5 Local Storage 一般的
ドメインあたり最大5〜10MB を保存。明示的にクリアするまで永続化します。「Cookie」をクリアする際に見落とされることがよくあります。
localStorage.setItem('tracking_id', 'abc123');
// Survives browser restart, never expires
HTML5 Session Storage 一般的
localStorage に似ていますが、タブを閉じるとクリアされます。セッション中に他の Cookie を復活させるためにデータを渡すのに使用できます。
sessionStorage.setItem('tracking_id', 'abc123');
IndexedDB 一般的
ブラウザ内の完全な NoSQL データベース。大量の構造化データを保存できます。ユーザーがクリアすることはまれです。
const request = indexedDB.open('evercookie_db', 1);
request.onsuccess = (e) => {
const db = e.target.result;
// Store tracking ID in database
};
Canvas フィンガープリント PNG 巧妙
Cookie の値を PNG 画像の RGB ピクセルカラーとしてエンコードし、強制的にキャッシュします。キャッシュされた画像を Canvas に描画しピクセル値を読み取ることで Cookie を読み戻します。
// Encode "abc" as RGB: R=97, G=98, B=99
ctx.fillStyle = 'rgb(97, 98, 99)';
ctx.fillRect(0, 0, 1, 1);
// Later, read it back from cached image
HTTP ETag 巧妙
ETag はキャッシュ検証用ですが、トラッキング ID を保存できます。サーバーが一意の ETag を送信し、ブラウザは後続のリクエストでそれを返します。
// Server response:
HTTP/1.1 200 OK
ETag: "tracking_id_abc123"
// Browser's next request:
If-None-Match: "tracking_id_abc123"
HSTS スーパー Cookie 高度
サブドメインの HSTS ポリシーにビットをエンコードすることで HSTS(HTTP Strict Transport Security)を悪用します。各ビットは HSTS が設定されているかどうかのサブドメインです。
// Encoding "5" (binary: 101) across subdomains:
// bit0.tracker.com → HSTS ON (1)
// bit1.tracker.com → HSTS OFF (0)
// bit2.tracker.com → HSTS ON (1)
// Reading: check if browser upgrades each subdomain to HTTPS
Web キャッシュ 巧妙
キャッシュされた JavaScript または HTML ファイル内にトラッキング ID を保存します。ブラウザがキャッシュバージョンを読み込むと、ID が含まれています。
// Server sends with far-future cache headers:
Cache-Control: max-age=31536000
// File contents:
var cached_tracking_id = "abc123";
window.name 巧妙
window.name プロパティは、異なるドメインへのナビゲーションを含め、同じタブ内でのページナビゲーションにわたって永続化します。最大2MB を保存できます。
window.name = "tracking_id=abc123";
// Survives navigation to other sites in same tab!
Flash Cookie (LSO) 非推奨
Flash Local Shared Objects はブラウザの制御外にデータを保存していました。クリアするには Adobe のウェブサイトにアクセスする必要がありました。Flash は現在廃止されていますが、非常に効果的でした。
// ActionScript:
var so:SharedObject = SharedObject.getLocal("evercookie");
so.data.tracking_id = "abc123";
so.flush();
Silverlight Isolated Storage 非推奨
Microsoft の Silverlight プラグインには、ブラウザストレージとは別の独自のストレージメカニズムがありました。Silverlight は現在廃止されています。
履歴盗用 修正済み
ID を含む URL にアクセスすることでブラウザ履歴にデータをエンコードしていました。リンクの :visited スタイルを確認することで読み戻すことができました。ブラウザはこれを修正済みです。
// Create history entries:
location = "http://tracker.com/id/a";
location = "http://tracker.com/id/b";
// Read via CSS :visited (now blocked)
Brave の Evercookie 対策
- ストレージパーティショニング:サイトごとにストレージを分離し、クロスサイトトラッキングを防止
- Ephemeral Storage: Third-party storage is cleared when you close the site
- Canvas Fingerprint Randomization: Defeats PNG-based cookie storage
- Blocked HSTS Supercookies: Clears HSTS state for tracking domains
- ETag Stripping: Removes tracking ETags from known trackers
- Flash/Silverlight なし:レガシープラグインを完全にブロック
プライバシーへの影響
Evercookie は Web プライバシーの根本的な問題を示しています:ブラウザにはデータを保存する場所が多すぎるということです。新しい API(IndexedDB、Service Workers、Cache API)が登場するたびに、トラッカーの新たな隠れ場所が生まれます。
Evercookie はもともと概念実証でしたが、そのバリエーションは以下の目的で実際に使用されています:
- クロスサイトトラッキングのための広告ネットワーク
- 不正検出システム
- ペイウォールの施行
- 政府の監視ツール
最善の防御策は、ストレージパーティショニングを実装し、既知のトラッキング技術を積極的にブロックする Brave のようなプライバシー重視のブラウザを使用することです。