雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2007-12-08 [長年日記]

[個人情報保護] Google Analyticsを応用したWeb巡回追跡実験デモ動画と解説

ふと思いついた実験でGoogle Analyticsの脅威がわかりやすく説明できそうだったので、デモ動画と解説を公開します。右の画像をクリックすると、動画(AVIファイル:20MB)を見ることができます。

このデモはあくまで可能性の提示であり、実際にGoogleがこういうことをやっているかどうか、私の関知するところではありません。また、動画中にはいくつかの実サイトが登場しますが、これは私がたまたま知っているサイトのうち、デモに都合が良かった、または、動画の取得時にたまたまリンクがあったというだけです。各サイト様におかれましては、運が悪かったということでご容赦ください。

動画解説

まず画面構成について説明します。画面左は実験用に準備した偽www.google-analytics.comの解析サーバのコンソールです。ここに、www.google-analytics.comに送られた解析用データを整形したものが表示されます。

右は何の変哲も無いFirefoxの画面です。動画では、最初にGoogleで「はてな」をキーワードに検索し、はてなのトップページに移動した後、「最近の人気記事」を開いて各種ニュースサイトを巡回します。

動画の流れとしては、右のFirefoxでWebを巡回している時に、www.google-analytics.comに送信される解析用データの様子が、左のコンソールにリアルタイムで表示されるようになっています。

以下、動画の冒頭について少し詳しく解説します。初期のGoogleの画面では私はログインしていて、右上にメールアドレスが表示されています。つまり、GoogleはHideki Sakamoto(hs@on-sky.net)の検索内容について、把握可能な状況です。ここでキーワードに「はてな」と入力して検索し、はてなのトップページに飛びます(0:25)。

はてなのトップページが表示されると、www.google-analytics.comに次のようなデータが送信され、左のコンソールに表示されています。

-----
IP: 192.168.xxx.xxx
TIME: 08/Dec/2007:23:07:10 +0900
HOST: www.hatena.ne.jp
UTMP: /
UTMR: http://www.google.co.jp/search?hl=ja&q=%E3%81%AF%E3%81%A6%E3%81%AA&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
UTMCC:
__utma=90496003.1296348447.1194094804.1197115118.1197119304.16;
__utmb=90496003;
__utmc=90496003;
__utmz=90496003.1197119304.16.10.utmccn=(organic)|utmcsr=google|utmctr=%E3%81%AF%E3%81%A6%E3%81%AA|utmcmd=organic;

UTMR変数にはリファラであるところのGoogleの検索ページのURLが、検索語「はてな」を含む完全なURLとして入っています。さてここで、「08/Dec/2007:23:07:10 +0900」に「www.hatena.ne.jp」を訪問した、__utmaの最初の2つの数字(以下、「個人ID」とする)が「90496003.1296348447」である人物がhs@on-sky.netであるということは、もし仮にGoogleが検索についてログを記録している場合、IPアドレスと検索語、および上記TIMEの前後の時刻を照合することにより把握することができます(しつこいようですがあくまで仮説です)。という話はひとまず置いておいて、次の説明に進みます。

動画では、0:30にページ内にある最近の人気記事の一覧リンクをクリックしています。このリンク先はb.hatena.ne.jpで、ここでまたwww.google-analytics.comに次のようなデータが送信されています。

-----
IP: 192.168.xxx.xxx
TIME: 08/Dec/2007:23:07:15 +0900
HOST: b.hatena.ne.jp
UTMP: /hotentry
UTMR: http://www.hatena.ne.jp/
UTMCC:
__utma=12101991.1308323039.1193486202.1197115125.1197119312.12;
__utmb=12101991;
__utmc=12101991;
__utmz=12101991.1197119312.12.12.utmccn=(referral)|utmcsr=hatena.ne.jp|utmcct=/|utmcmd=referral;

b.hatena.ne.jpとwww.hatena.ne.jpは異なるサーバなので、個人IDには別の値「12101991.1308323039」が入っています。ところが、IPアドレスについては当然1つ目と2つ目のエントリで同じです。また、1つ目のエントリのHOSTとUTMPを組み合わせれば、2つ目のUTMRとの照合ができます。このような2つのデータの照合により、www.hatena.ne.jpにおける個人ID「90496003.1296348447」と、b.hatena.ne.jpにおける個人ID「12101991.1308323039」が同一人物であるということが分かり、1つ目のエントリの解説にある仮定が本当なら、それがhs@on-sky.netであると特定できます。

さて、動画では0:36に読売新聞のサイトに飛んでいますが、ここはGoogle Analyticsを使っていないようで、www.google-analytics.comには何も届きません。ただし、ブラウザの戻るボタンをクリックしてはてなのページに戻る(0:40)と、www.google-analytics.comには2つ目のデータとまったく同じデータが再び届きます。Google Analyticsではこうやって戻るボタンでページに戻ってきたことを把握可能なようです。

さらに動画では0:48にwww.ideaxidea.comというサイトに飛んでいます。ここもGoogle Analyticsを利用しており、先ほどと同様、IPアドレス、b.hatena.ne.jpエントリのHOSTとUTMP、www.ideaxidea.comエントリのUTMRを照合することにより、www.ideaxideax.comの個人ID「236144985.1540274803」がb.hatena.ne.jpの個人ID「12101991.1308323039」と同一人物であると特定できます。

あとは同様な処理を繰り返すだけで、b.hatena.ne.jpの個人ID「12101991.1308323039」と同一人物である他のサイトの個人IDは収集可能です。動画の中では最終的に次のサイトと個人IDを収集できています。

www.hatena.ne.jp90496003.1296348447
b.hatena.ne.jp12101991.1308323039
www.ideaxideax.com236144985.1540274803
codezine.jp2413090.890357120
www.goodpic.com141067684.491258399
www.100shiki.com169936416.1719369956
code.google.com247248150.894477186
internet.watch.impress.co.jp180657279.1043611980
www.excite.co.jp148185315.1361122659
gigazine.net208899204.21573543
zapanet.info133676037.963137375

あらためて見るとかなりのサイトに浸透してます。

一方で、動画中の巡回先でGoogle Analyticsを利用していないサイトは以下の通りです。

komachi.yomiuri.co.jp
mainichi.jp
sankei.jp.msn.com
www.itmedia.co.jp
www.asahi.com
www.watch.impress.co.jp
portal.nifty.com

ちょっと面白い結果ですが、単に予算の都合だけなのかもしれませんし、これだけではなんとも言えません。

ユーザーが可能な対処

こうしたブラウザからGoogle Analyticsに追跡用のデータが送られることを阻止する方法は、Firefoxならいくつかあります。Internet Explorerについては残念ながらよく知りません。

1つは、Google Analyticsへのトラッキングコードがhttp://www.google-analytics.com/__utm.gifまたはhttps://www.google-analytics.com/__utm.gifという画像ファイルへのアクセスの形で送信されることを逆に利用する方法です。具体的には、

  1. Firefoxのメニューバーで[ツール]→[オプション]をクリックしてオプションダイアログを開きます。
  2. 上のメニューの[コンテンツ]をクリックして、「画像を自動的に読み込む」という表示の右にある[例外サイト]ボタンをクリックします。
  3. 「サイトのアドレス」欄に「google-analytics.com」と入力して[不許可]ボタンを押し、画像の自動読み込みを不許可とするサイトとして登録します。

これで現状では十分な対処となりますが、Googleが解析用のURLを画像ファイル以外の拡張子を持ったファイルへと変更すると、この方法は使えなくなります。ただしその場合でも、次の方法を使えば対処可能です。

その方法とは、9月6日のエントリへのコメントでinoueさんに教えてもらったAdblockというFirefox用のアドオンを利用するものです。このアドオンをインストールした後、以下の手順でgoogle-analytics.comへのアクセスを禁止にします。

  1. メニューバーで[ツール]→[Adblock]→[Preferences]をクリックしてAdblockの設定画面を開きます。
  2. 「New Filter」欄に「google-analytics.com」と入力して、その右の[add]という部分をクリックしてgoogle-analyrics.comを登録します。
  3. 「Enable Adblock」の左にあるチェックボタンをクリックしてチェックが入っている状態にします。
  4. [Done]ボタンをクリックして設定画面を閉じます

これで、google-analytics.comへのアクセスがブロックされるので、結果として追跡用のデータが飛ぶこともなくなります。

Googleはファーストパーティcookieの有効期限を2年に短縮したようだがまったくの無意味

9月1日のエントリ内の画像にあるように、当時はGoogle Analyticsで利用されているファーストパーティcookieの有効期限は2038年1月18日9:00に固定されていましたが、いつの間にやら修正が入って、2年間になっていました(左図)。が、これはまったくもって無意味です。

なぜなら、ファーストパーティcookieの有効期限は、Google Analyticsを利用しているサイトを訪問するたびに更新されるからです(右図)。

左右の図を比べてみれば分かるとおり、__utmaに含まれる個人IDの部分は「169936416.1719369956」という同じ値であり、有効期限が2009年12月7日1:38:25から13:54:10に変わっています。これは、最後にアクセスしてから2年以内に同じサーバ(図の例では100shiki.com)にアクセスすれば、「169936416.1719369956」という個人IDはさらに2年間有効期限が延長されるというサイクルが繰り返されるだけであり、毎日とか週1とか月1とか年1とかぐらいの頻度で訪問しているサイトであれば、半永久的に同じ個人IDが使われるということを意味します。

で、Googleの中の人は何を考えてこんな変更をしたんでしょうか。意味不明です。