ラボ神部です。
※2009/05/29追記※
楽天市場から個人情報がスパム業者に流出か、実名の記載された迷惑メールが楽天でしか使っていないメールアドレスに届き始める - GIGAZINE
という記事の影響でこのエントリの参照が増えていますが、この記事が書かれたのは2008年の9月29日であり、昨今の事案とはあまり関係がないものと思われますので、念のためご了解をお願いしておきます。
※追記終わり※
今日、楽天市場のメルマガ登録確認画面から個人情報が流出しているらしいという話が話題になっていますが、流出経路が何とも不可解。そこで、可能性をいくつか挙げてみて、下手な推理をしてみようかと思います。考察を飛ばして結論だけ読みたい方はこちらへどうぞ。
そもそもの原因は
そもそもの原因は、Google のロボットのように、メルマガの本来のセッション所有者以外が、メルマガ登録の画面遷移の跡をたどっているところにあります。
URL で言うと
https://emagazine.rakuten.co.jp/ns?act=chg_rmail_delete_conf&k=
の act= のあとがコマンド、k= のあとの部分がセッション ID になっているのは明らかです。楽天がどのようなプラットフォームの上で動いているのかわかりませんが、PHP なら php.ini で session.use_trans_sid オプションを ON にするとこのような URL でセッションが処理されることになります。※ちなみに trans はtransparent(明白な)のことと推察されます。
この形式をとるときにはセッションハイジャックなどの対策が必要ですが、楽天のメルマガ登録ではそのようなセッションハイジャックの対策が十分に取り切れていなかったのが原因かと思います。
しかし、それだけではすぐに Google のロボットが検索可能になるわけではありません。これらのセッション情報を含んだ URL が外部にどこかで晒される必要があるわけです。ここから先はその原因について考えてみます。
Google などサーチエンジンが悪いよ説
emagazine.rakuten.co.jp/robots.txt を見ると、今回キャッシュされている /q や /rs /n /ns 以下の確認画面系はすべての User-agent に対して Disallow になっています。これを無視してクロールしたなら、まずは Google のロボットに責任があるわけですが、これは現時点のものですし、明らかに今回の問題の対策と見られる記述内容とも取れますので、Googlebot のマナーが悪かったという考えはひとまず排除しておきましょう。
実際問題、MSN で同様のクエリを実行しても、同様にキャッシュから個人情報を確認することが出来ます。名前とメールアドレスのペアはすぐには見つかりませんが、メールアドレスだけならすぐに確認することが出来ます。Yahoo! Japan の検索結果には該当するキャッシュはありませんでしたが、一般的なクローラが到達可能な箇所に、これらのセッション情報を含んだ URL が置かれていたと考えるのが自然で、そういう意味でも Google、もとい一般の検索エンジンのクローラーの動きを情報流出のプロセスと考えるのは難しそうです。
今回登録が yahoo や hotmail などフリーメールが多いため、それらのウェブメールのメールボックスをなぜかクローラーが検索してしまったのならこれらの個人情報が含まれたページをインデックスする可能性もありますが、それであれば楽天以外のセッションハイジャックされたページもいくらか見つかっていてもよさそうなものです。結論としても面白くないので、少しこの可能性は置いておきます :)
楽天が積極的に情報を公開しちゃったよ説
検索エンジンのロボットを呼び込む方法はいくつかありますが、より確実なのは各検索エンジンにサイトマップを登録することが挙げられます。特に 2006年に Yahoo!,Google,MSN共通のサイトマッププロトコル[sitemap.org] が策定されたことにより、同じ形式のサイトマップでどのような検索エンジンのロボットも呼び込み安くなりました。
あり得ない間違いですが起こりうる話としては、楽天の使用しているプラットフォームが、内部で処理された URL(あるいはアクセスログの解析結果)からサイトマップを自動生成して、各サーチエンジンに登録していた場合でも、現在のような状況が再現できないとは言えません。
しかし、そもそもサイトマップを自動アップデートするためには、まずは手動でサイトマップ情報を申告する URL を登録しなければなりません。ここで人為的ミスが発生し、不要なホストのサイトマップまで登録してしまったという可能性も考えられますが、誰でも十分目視できる分、あまりこの可能性は高く見積もるべきではないと考えます。それに、Yahoo! Japan のクローラだけが、これらの URL を全くインデックスしていないのも不自然です。
第三者のサービスを使ったユーザが悪いよ説
サーチエンジンでも楽天でもなければ、個人情報をオウンゴールしてしまったのは誰でしょうか。まだ考えられるのが、ブラウザを使ったユーザーである可能性です。例えば Alexa や Pathtraq を使ったサイトアクセス履歴の情報収集のアドオンをインストールしている場合、これらが結果的に表面化する機会があれば、その履歴公開されているサービスの公開ページが十分にユーザ情報をサニタイズしていなかった場合、サーチエンジンのクローラに見つかってしまい、セッションハイジャックされた状態でインデックスされてしまう可能性があります。
しかし見たところ、Pathtraq のデータベースには emagazine 以下のホストは今日以前のトラフィックはほとんど無いようで、データベースの母数がまだそれほど莫大でもない限りは、これらの情報が整理され消えてしまったとは考えにくいでしょう。そもそも多くのサーチエンジンにある程度の量インデックスされるためには、一定量のリンクが公開されているべきでしょうが、そのような物量も感じられません。
他にもブラウザネイティブで Google Chromeのアドレスバー「Omnibox」に入力されたユーザー情報を収集するであるとか、Mozilla の会長が匿名ユーザ情報の収集をすることを示唆するなどの動きがありますが、これもまだ先のことで、履歴の自動収集というところまでには至ってません。
メールに対応したセッションハイジャックツールがあった可能性
楽天のメルマガを一括配信停止するためのインターフェースとして、【楽天市場】楽天のメルマガというページがあります。ここに自分のメールアドレスを送ると、
[楽天ショップのメルマガ一覧 登録情報確認・変更・配信停止]
https://emagazine.rakuten.co.jp/ns?act=chg_rmail&k=******************
という形式で、セッションID付きの URL がメールで返ってくるそうです。いちはやく楽天のセッションハイジャックが可能がだと気づいたスパマーがいれば、ユーザ情報収集のために手持ちのアドレスを投げ、万が一ユーザとの配信経路の間でパケットキャプチャが可能な状態が何度も続けて起こり、返信メールの内容からセッションをハイジャックした後ユーザ情報(氏名や住所など)を獲得したかもしれません。
しかしこの場合は、その情報を Google のクローラや MSN のクローラにプレゼントする動機がありませんので、流れとしてはありそうですが実際に起こることかどうかはやや疑わしく感じられます。ユーザ情報が漏れていることが公になってしまったら、困るのはスパマー自身ですからね!それにユーザにも心当たりのないメルマガ配信停止確認のメールが来たりすると、不審に思ったユーザが楽天に通報してことが発覚する可能性も高いです。
またパケットキャプチャはベタな方法ですが、今回のサイトは https:// で保護されているので、正しく設定されていれば通信経路は暗号化され、パケットキャプチャに対してはある程度の安全性が確保されているようです。HTTPSの通信内容をキャプチャする方法 もあるようですが、これを実施するにはスパマーが介在しなければはサーチエンジンベンダー自らがそういった Evil なツールを使用する必要があるので、現実的な理由には考えがたいように思います。Google と MSN が同時に同様のツールを使ったとなると、ますます考えにくいでしょう。ましてやセッション情報の入った URL をインデックスするために、そんなことをするでしょうか?
犯人は何処に?~もうひとつの可能性~
このエントリを書き出した時点では、それほど犯人の検討はついていなかったのですが、情報をまとめているうちに自然な形でアクセス履歴が流出する可能性について思い当たりました。可能性としては、emagazine.rakuten.co.jp の Web サーバのアクセスログが、なんらかのかたちで外から参照可能になっていた場合です。
これを発見した誰かが、巨大なものでなくてもどこかのブログや小さな掲示板に記載としたら、それを起点にサーチエンジンが多くのセッション情報をクロールし、結果として多くの個人情報が含まれたページをインデックスしていった可能性が考えられるのではないでしょうか?
しかし、真面目に考えるのならメルマガ配信サーバのアクセスログ(ましてやセッション情報が記録されているような類のログ)が十分に管理されていたのなら、この推測は破綻します。楽天のような大きな事業のサイトでは、こういったセキュリティの細かい部分の見落としよりは管理が徹底していそうな気もしますし、可能性はやっぱり低いかもしれません。
最後にやっぱり確率が高そうなもの&犯人の似顔絵
いろいろ考えてみると、やっぱりメルマガ配信停止 URL の
http://emagazine.rakuten.co.jp/ns?act=chg_data
およびそこから返信されてくる
https://emagazine.rakuten.co.jp/ns?act=chg_rmail&k=******************
のコンボがとっても怪しい気がします。スパマーツールではなくとも、なにかここにメールアドレスを投げてウェブ上でメールの返信が閲覧できるような仕組みがあれば、そこが一番怪しいのではないかと思います。
似顔絵に例えて漏洩元となったページの条件を挙げるとすれば
1.楽天のサービス・ショップの顧客が多く使っている
2.サーチエンジンもそのページにアクセス出来る可能性がある
3.ウェブメールのようにメールアカウントをコントロール出来、内容もウェブで読める(=セッションID付きのURLを含んだ文章が半永続的に保持されたページが含まれる状態)
といったものを満たすものになるはずですが…。
最終的には原因はどこに出てくるのでしょうか。セッションハイジャック対策について勉強しながら、続報を待ちたいと思います。
(追記)
はてなブックマーク の関連エントリーを見ていて、JavaScript によるCookie 情報の組み合わせからメルマガ解除 URL を再構築するツールに、その部分に脆弱性のあるウェブブラウザでアクセスしたら、最後の似顔絵と同様のものが出来るような気もしました。JavaScript を使わなくても、なんらかのリファラーが漏れるタイプの掲示板があれば、そこを通じて流出する可能性もありますね。
そうすると、emagazine.rakuten.co.jp にリンクしているページが怪しいということで、容疑者としてはこのあたりでしょうか。重要参考人というほどでは、ありませんけどね。
link:emagazine.rakuten.co.jp - Google 検索
(追記2)
セキュリティホール memo さん経由で、@水無月ばけらのえび日記さんでも同様の考察がされていることを知りました。やっぱり Google Chrome 疑われています。なんらかの形で個人情報を収集しているウェブブラウザなどのツールは、今後もあらゆるセキュリティ or プライバシーインシデントで容疑者に挙げられそうですね。
それから Google と MSN Live Search で確認されているので、ひょっとしたらと思って探してみたらどうやら 百度 のキャッシュでも露呈しているようです。これはどうやら持ってけ状態になっていたことは確実ですね。むしろ Yahoo! Japan は YST で集めた後は何か別の理由のためにセルフサニタイズしているのかもしれません。
(追記3)
さらに Baidu を調べていると、かなりの重要参考人とおぼしきページを見つけました。Baidu を link:emagazine.rakuten.co.jp で調べると、ある共通点を持ったページが出てきます。
その共通点というのは、ほとんどがメルマガのバックナンバーページということ。これは似顔絵の項目で挙げた3つの項目を、75%は満たしていると思われます。肝心のセッション情報は保持されてはいないものの、メルマガ配信停止 URL として、ショップオーナーのものとおぼしきメールアドレスが URL エンコードされて公開されています・・・
ということは、今回流出したメールアドレスが顧客の物ではなくショップオーナーのものであれば、説明はショップオーナーに対してだけで済むことになりそうですね。ただし、ショップオーナーが自らのメールアドレスの配信ページからセッション情報が含まれた URL にまでたどり着く機会があるかちょっと不明です。クローラがリンクをたどっていく過程で、メールアドレスがセッション情報に変換されてしまう機会があれば或いは・・・という感じですが。
ひとまずこのショップオーナーのメルアド入りメルマガバックナンバーの配信停止 URL にはもう少し注目してみたいと思います。これが楽天により自動生成されたものか、オーナーが自分で記載したものかによって、また対応が変わってきそうです。
(追記4)
ちょっと過程は省きますが、
https://emagazine.rakuten.co.jp/ns?page=0&sort_type=0&r_type=4&act=chg_rmail&k=(セッションID)
という、ユーザが登録しているメルマガの一覧を確認出来るページが Google のインデックスにキャッシュされていることが確認出来ました。
ここから、
https://emagazine.rakuten.co.jp/ns?act=chg_usr&k=(セッションID)
という、ユーザの氏名や生年月日、住所の確認出来る件「登録情報の変更」ページにリンクが張られています。どうやら実行犯はこのページということで確実なようです。
となると、あとはこのようなユーザ情報ページにどうやってサーチエンジンが到達したかという疑問がやっぱり残ります。どこかに、認証済みセッションの URL のリストが公開されていたと考えざるを得ませんね…。
そのとき、たまたま本当のユーザがログインして運悪くセッションがアクティブになっており、サーチエンジンのロボットも同時に内部に進入できてしまったという感じかもしれません。おそらく楽天からの報告では、その部分が明らかになるのではないでしょうか。
こういう場合の対処方法としては、脆弱性を修正した後ユーザは強制的にログアウトさせて、セッションIDを変更してもらうしかなさそうですね…。
(追記5 犯人はソーシャルブックマーク?)
こちらの はてなブックマークコメントページ で、id:kengo9999q さんが「某ブックマークサービスを疑ってる」とコメントを書いていらっしゃいますが、限りなく正解に近いようです。
実際に、はてなブックマークのドメイン b.hatena.ne.jp 以下を emagazine.rakuten.co.jp で検索してみると…見事にセッション ID 付きでブックマークされているページがいくつか発見できますね…。ちなみにそのうちの日付のひとつは 2007年05月13日になっています。
ブックマーク先の URL としてポイントされているのは
https://emagazine.rakuten.co.jp/ns?act=chg_rmail&k=(セッションID)
なので、追記4で書いたメルマガの一覧を確認出来るページである可能性も高いです(※act 以下のコマンドが同じため)。
この事実から流出過程を組み立ててみるとすると、次のような感じになりそうです。
1.ソーシャルブックマーク(例えばはてなブックマーク)にユーザがセッション ID 付きでメルマガ解除 URL を追加(たぶん、メルマガ情報解除した後に、これは便利だと言うことで)
2.サーチエンジンのクローラが新しく生成されたページをクロール
(共犯としてはソーシャルブックマークの提出したサイトマップの可能性も考えられる)
3.Googlebot がセッションが有効な間、もしくは再度セッションが有効になった際に偶然クロールして、本名や住所が見えた状態でインデックスされる
流出の原因となった経路は複数あるかも知れませんが、少なくとも昨年からこのように外部からクロールされる状況が確認出来る以上、これは経路のひとつとして認定しても良さそうです。このケースに於いては、ユーザが自分のセッション情報を残したままブックマークしたところに突破口が生まれてしまったわけですが、ここで多少判断のグレーゾーンが生まれそうです。
もしユーザとしてもパブリックにするつもりでなくブックマークしていたのなら、ブックマークのプライベート性の有無についてアナウンスが十分でなかったソーシャルブックマークサービスが悪い、と見る人もいるでしょうし、もっと言えばセッション情報をソーシャルブックマーク側でサニタイズすべきだ、と極論を述べる人もいるかも知れません(大手サービスのセッション情報に対してはそれもサービス継続のリスクを排除するための防衛策としては有効かも)。
しかし根本的なところを見直すとすれば、やはりメルマガ解除の仕組みのセッション管理についての扱いに配慮が必要だったのではないでしょうか。そこの対策があれば、クローラが来てもユーザの情報を持って行かれないように最大限努力することはできたように思います。
もし、同様の仕組みを実装する機会があれば、毎回異なるセッション ID を発行するようにするとか、期限を十分に短くしたり、ユーザエージェントの監視、robots.txt の設定をきっちり行うなどが必要になってきそうです。
また万が一の場合に備えて、ソーシャルブックマーク(Not オンラインブックマーク)などにこのような URL をブックマークしないように呼びかけることも有効かも知れませんが、それは広くお願いするにはちょっと酷なお願いかもしれませんね。自分で同様のものをつくったときも、同じような穴を作ってしまうこともありそうなので、このような事例を知見として今後の開発に生かしていければと思います。
(追記6
ソーシャルブックマークも原因のひとつ、という続報が出たようです。対策調査とあわせて別のエントリにまとめてみました。
コメント ( 1 )
神部さん、お久しぶりです。HIROYAです。神部さんのコメント楽しく読ませてもらいました~また来ます!
投稿者: HIROAY | 2009年02月06日 20:50
日時: 2009年02月06日 20:50