JavaScriptを使わずにWebブラウザの閲覧履歴を盗む 68
ストーリー by hylom
仕様です 部門より
仕様です 部門より
本家/.曰く、
Ergasiophobia曰く、JavaScriptを使わずに、過去に訪れたWebサイトのリストを生成するというデモが公開されている。このデモでは、NoScriptを使っていてもリストの生成を防ぐことはできない。
デモページの解説によると、このWeb閲覧履歴を「盗む」テクニックはCSSを利用するもので、あらかじめページ内にそのユーザーが訪問しているかをチェックしたいURLを仕込んでおき、CSSを使ってそのURLを過去に訪れているかを調べるというもの。本家のコメントによると、このテクニックは数年前から確認されていたようだ。
気の早い宣伝 (スコア:5, 参考になる)
bugzilla.mozilla.org では JavaScript を使う exploit も使わない exploit も Bug 147777 [mozilla.org] として扱っています。この bug のコメント中、 JavaScript を使わない例は、はっきりしたものとしては 2006 年 12 月の Comment 71 [mozilla.org] が初出でしょうか。 2005 年 6 月の Comment 48 [mozilla.org] もそれっぽいですが。
まだ正式版どころか RC も出ていないので一般の人にはお勧めしませんが、人柱の人は Firefox 3.5 Preview を使って about:config から layout.css.visited_links_enabled を false にすると、リンクが visited かどうかによってスタイルを変えるのを一切やめるようになるので、この攻撃を防げます。
それだとリンクが visited であるかどうかがまったくわからないから不便というかたは、拙作の拡張機能 Link Status [mozilla.org] を併せてお使いください (宣伝)。リンクにマウスカーソルを合わせると、 vistied の場合はステータスバーに星のアイコンが表示されてわかるようになります。
ただし、 3.5 Preview を使った後同じプロファイルで 3.5 Beta 4 に戻ると、 Places データベースが壊れてブックマークや履歴が読めなくなる [hatena.ne.jp]ので、くれぐれもご注意を。 3.5 Preview から 3.0.x に戻すのも大丈夫かどうか僕は知りません。普通の人は Firefox 3.5 の正式版が出るまで待つのが吉だと思います。
2006年どころか (スコア:4, 参考になる)
本家のコメントでは2006年のBlog記事を参照していますが、2002年には [mozilla.org]すでに知られていますね。一度非公開にされていたのですが、2003年にデモが公開された [browserspy.dk]ことから、バグも再公開されました。このデモはJavaScriptを使っていますが、バグのほうではスクリプトを使わないで検出できる可能性に最初から触れられています。
楽天ad4Uって、この仕組みを使ってるのでは? (スコア:3, 参考になる)
http://takagi-hiromitsu.jp/diary/20081211.html [takagi-hiromitsu.jp]
これと同じでは?
Re:楽天ad4Uって、この仕組みを使ってるのでは? (スコア:2, 興味深い)
発表資料 "次世代行動ターゲティング広告「楽天 ad4U」 ※パワーポイント形式ファイルに直リンク※ [infoseek.co.jp]" によると。
この機能は、Webブラウザの基本機能であり、埋め込まれたURLと履歴との照合処理は、訪問者のWebブラウザ自身が行うものである
↓
したがって「楽天及びドリコムはデータの取得及び保存は行っていません」だそうです
Re:楽天ad4Uって、この仕組みを使ってるのでは? (スコア:2, すばらしい洞察)
Re: (スコア:0)
「特許を取るためにテスト中」なら公表する訳にはいかんから、きっとそっちだよ。
Re:楽天ad4Uって、この仕組みを使ってるのでは? (スコア:1, すばらしい洞察)
後ろ暗いことしてる業者の常套句だよね。
まだ出願してないってのなら、もう手法は公知なんだから、手遅れでは?
既に出願してるってのなら、隠す理由がないわけで。
Re:楽天ad4Uって、この仕組みを使ってるのでは? (スコア:2, 参考になる)
公知ではない周辺技術の部分を特許出願する場合がある
>既に出願してるってのなら、隠す理由がないわけで。
出願していても,すぐに公知となる(出願公開される)わけではないので隠す理由はある
(公開されるまでの間に周辺特許をどんどん出願して権利を固める場合ある)
楽天とドリコムの言い分 (スコア:0)
送信してないから許される!!
とか言い出すんじゃないよね?
Re:楽天ad4Uって、この仕組みを使ってるのでは? (スコア:1, 参考になる)
同じ事はFlashやJS抜きでも可能、と言うコメントがあったような...
http://srad.jp/security/comments.pl?sid=423251&cid=1440682
http://srad.jp/security/comments.pl?sid=423251&cid=1440692
うわ (スコア:2, おもしろおかしい)
Re:うわ (スコア:1)
ステータスバーを見るクセを付けるべきだと思います。
Re:うわ (スコア:1, 参考になる)
ステータスバーの表示なんかスクリプトを使わずとも簡単に偽装できるので何の役にも立ちません。
ChromeやSafari 4に至ってはデフォルトで役立たずのステータスバーは非表示にしてますね。
JavaScript (スコア:2, すばらしい洞察)
を切ってるのは少数派だと思う。
オートコンプリートと訪問先の色付けをOFF (スコア:2, 参考になる)
Re: (スコア:0)
具体的にはどのブラウザでどうやって設定すればいいのですか? 少なくともFirefoxには3.5まで:visited擬似クラスを無効にする機能はありませんでしたし、IEのインターネットオプションにも見当たりません。あとプラスモデしてる人は実際にそんな設定項目がブラウザに存在するのかどうか確認したのですか?
ただしプライベートブラウズ中は通常モードの訪問履歴を反映しないので、この攻撃を防げるようです。
Re:オートコンプリートと訪問先の色付けをOFF (スコア:2, おもしろおかしい)
ホントにやったのか?
ツール-インターネットオプション-全般-色
Re: (スコア:0)
> ツール-インターネットオプション-全般-色
「インターネットオプション」と言うからにはIEの事だろうと思い、
IE8で御指摘の箇所の設定を変更してみたのだが、
a:visitedの判定は無効化できなかった。
もう少し詳しく宜しく。
まさかとは思うが、色を変えただけじゃないよね?
色付けを行う判定をOFFに出来たんだよね?
Re:オートコンプリートと訪問先の色付けをOFF (スコア:2)
ブラウザ側の対策として、色付けをOFFにすることと引き替えに
回避できるって話では?
Re: (スコア:0)
古くて新しい問題 (スコア:2, 参考になる)
http://takagi-hiromitsu.jp/diary/20081019.html [takagi-hiromitsu.jp] によると、2001年から、というか2000年から指摘があった問題なのですね。
Java Scriptなんて使わなくても (スコア:2)
隣の席のあの娘の閲覧履歴は盗み放題。
。。。大丈夫、そんなことしてませんよ。
たぶん早い者勝ち (スコア:1, おもしろおかしい)
w3m 最強:-)
Re: (スコア:0)
Mosaicのほうが使いやすいと思う。
だからMosaic最強!
w3mは2番目だ。
Re: (スコア:0)
変にデザインだのなんだので,
本当に読みにくいのが多いです… (flashは w3m 経由みたいなこと出来ないから余計にキライ)
Re:たぶん早い者勝ち (スコア:2, 参考になる)
Firefoxなら、「表示」→「スタイルシート」→「スタイルシートを使用しない」
Re: (スコア:0)
でもさぁ、CSSを無効にするとしょぼすぎるとこ多いんだよね。
コンソール上ならさほど気にならないんだけど。
Re: (スコア:0)
Re: (スコア:0)
ブラウザのCSSを切ったのとはまた違う
Re: (スコア:0)
たぶんテーブルレイアウト全盛の10年前から同じことを言い続けてるのだと思いますが、最近はBlogのおかげでCSSオフでもとりあえず読めるページがかなり多くなってきました。
Proxomitron使って (スコア:1, 興味深い)
何の脅威も感じなかった
Re:Proxomitron使って (スコア:1)
デモサイトではiframeを使っているようですが、やり方によってはiframeなしでも十分可能じゃないでしょうか?
それとmetaタグによる再読み込みって使われている?
Re:Proxomitron使って (スコア:1)
iframe,meta なしで可能でした。 [srad.jp]
画像が表示されたら、アクセスログから取得できてます。
# この場合、Proxomitronならではの対策法ってあるんでしょうか。ユーザCSSしか思いつかない…。
プライバシー情報 (スコア:1)
このやり方はまともな目的でも結果的に同じようなことになっている場合がありえますね。 リンク集でa:linkとa:visitedのbackground-imageにサイトのバナー画像を使っているとか。
結局履歴を知られたくないサイトにアクセスするときはInPrivateブラウズ(IE8)やシークレットモード(Chrome)をつかって履歴自体を残さないようにするしかないんですかね。
ごく簡単なコードで閲覧履歴を盗めることを確認 (スコア:1)
http://vird2002.s8.xrea.com/test/test_css/get_visited.html [xrea.com] にテストコードを置きました。
が該当コードです。
Proxomitron フィルター作成スレッド Part11 [2ch.net] で
と言われているので、抜け道はまだあるんだろうと思います。
ところで、Firefoxで a:visited を無効化する about:config はないんでしょうか?
いろいろ探してみましたが、どうにも見つかりません…。
Opera10 (スコア:0)
元記事を読まずに手口を予想 (スコア:0)
:visitedセレクタあたりを使って訪れているサイトを判定する。
あとはそれを...どうやって取得するんだろうw
Re:元記事を読まずに手口を予想 (スコア:3, 参考になる)
visited の時だけ参照するリソースを仕込む
→ んでそのリソースのログを取る
と予想したらそのままでしたよ
Re:元記事を読まずに手口を予想 (スコア:4, 参考になる)
PHPのプログラムまでは読みようがありませんが、
http://www.making-the-web.com/misc/sites-you-visit/nojs/base.php [making-the-web.com]
にアクセスすればほぼ仕組みはわかりますね。
ここのサイトへのリンクを貼り、それに個別のスタイルシートを適用して 、
visited 時に特定のPHPに引数付きでアクセスするようにすることでPHP側で訪問済みサイトがわかるわけです。
ただし欠点として、大量のリンクをブラウザ側で解析するので結構重いことがあげられそうです。
HTML形式の迷惑メールにCGIアクセスする画像を貼り付ける手法と手口は同じです。
これを防ぐには訪問済みサイトのスタイル変更を無効にするか、あるいはこまめにリセットするしかなさそうです。
あるいはユーザースタイルシートなどを使い visited 時 のスタイルを強制的に固定するか。
ちなみにかなりの数のリストがありましたが海外サイトなのに楽天があったのがおかしい。
Re:元記事を読まずに手口を予想 (スコア:2, 興味深い)
この方法って、直接「vistedなURLを取得できる」のではなく、
「あるURLがvistedかどうか判定できる」ことを利用して虱潰しに検索してるわけですが、
この方法だと、いかに大量の「判定用URLリスト」を持てるかどうかがキモだと思いますね。
判定用のページには大量(2000ぐらい?)のURLが埋め込まれてますが、さらにそのページをRefreshで随時更新していくことで、
どんどん判定URLを送り込んでいるようです。20回リロードしてたので、約40000URLぐらいかな。
ここ /.-J のストーリーもいくつかマッチしてました…
全ストーリーが入っているわけではなく、かなり歯抜けなのですが、
Refererで集めたのか、それとも適当にクローリングしたんですかねぇ。
Re:元記事を読まずに手口を予想 (スコア:1)
見て戻ってきたら遅かったorz
みんな解析早すぎですよ
30分待ちなのでIDで
Re:元記事を読まずに手口を予想 (スコア:1)
どうやって取得するかどうかですが…、私も気になって思わずソースコード読んでみました。
読めば分かるレベルなので、あえて書きませんが、意外と単純な手だったのでビックリです。
対策 (スコア:0)
a:visited {
background: none !important;
}
IEだと制限つきサイトに登録しても動かなくなりますね。
Re: (スコア:0)
a:visited {
cursor: ;
}
とかも出来るんじゃないかな。
ブラウザの独自プロパティ(-moz-*とか)とかまで考えるとかなり難しいかも
Re:逆にすべて訪問済み扱いにしてやろう (スコア:1)
多くの人が対応しないと意味がなさげですね。
ブラウザ側で対応してもらうといいんだけど、通信料が増えるので
携帯・モバイル用では難しいでしょうね。
ところで、この手法を使用(悪用?)できそうなサイトはどれぐらいあるんでしょうか?
検索・広告サイトとかなら使えそうですが他に思いつきません。
おー (スコア:0)
NoScript状態でもURLバレバレだ!
Re:おー (スコア:1, おもしろおかしい)
「んだとあの野郎!
なんでなんで? (スコア:0)
編集者の言う通り(部門名)、仕様ですよね。
ただ、何年も前からこの仕様は脆弱性として利用出来ると指摘されてて、
いよいよ大々的にユーザの情報を盗むのに使われ始めたので、
仕様不良として潰さざるを得なくなっていると言う事。
「大々的にユーザの情報を盗むのに使われ始めた」時に騒がれて、
/.Jでも取り上げていた [srad.jp]のは記憶に新しいわけですが、
最初の指摘から現在まで、あるいは、前回掲載から現在までの間に、
何か新たな手法や、関連する別の問題が見付かったと言うワケでもなく、
また、実証コードが書かれてなかった・公表されてなかったわけでもないのに、
何故今更話題にするんだろう? と言う疑問があります。
Firefoxの次のバージョンか何かの宣伝ですか?>編集者様
# 他意が無いならいいんですけど、
# 言いたい事を隠してる様な誘導的な話題って、
# 生理的に気持ち悪いんで、
# この件で、script切ってる環境ならダイジョウブ、
# と言う誤解を広めてた人が居るなら、それは糾弾されるべき。
Re:なんでなんで? (スコア:1, すばらしい洞察)
Re:もしかして (スコア:2)
くるのは防げないから、送りこんでくるサーバーにアクセスしに行かないように
設定しておくべきですね。個人での対策以外では、フィルタリングソフトとかで
あらかじめブラックリストに登録されるようになればいいですね。