どうも。@ityukiこと、桐原樹/NIです。
twitterでつぶやいたけれど、とても読みにくいという指摘を受けましたので、webページとしてまとめます。
FB良品 セキュリティ問題を取り巻く現状
2012/12/30 21:00現在、FB良品と言う、Facebookとも無印良品とも全く無関係の、個人が「FB良品」という商標を取得しているサービスが、日本の幾つかの自治体で導入されています。
しかしながら、現在、FB良品のサイトには非常によく知られたセキュリティ問題が存在します。
具体的にはFB良品に登録してある個人の情報を初めとする様々な情報が本人のあずかり知らぬ所でインターネットに流出する可能性が指摘されています。
指摘者は、セキュリティ関連で非常に知名度の高い「ひろみちゅ先生」こと@HiromitsuTakagi(高木浩光先生)他、多数の方から指摘されています
これに対し、「FB良品」という商標を個人で所有されており、FB良品の発起人でもある、@hiwa1118こと樋渡啓祐 武雄市長及び、FB良品運営会社であるSIIIS代表取締役@TakaFlightこと杉山 隆志さんらが、twitter上で以下の回答をされています。
・『今この瞬間にも顧客を危険にさらして』いる認識は持っていません(杉山 隆志さん)
・『高木先生の「安全なWebサイト設計の注意点」。10年以上前からこれほどまでに警鐘を鳴らされてきているのに、武雄市長やFB良品の中の人は一度でも読んだことがあるのだろうか? 恥ずかしくないのだろうか?』という疑問に対し、武雄市長が全然。と回答
するなど、問題を問題と捉えないばかりか、特に市長に関してはtwitterの発言を見る限り、人を馬鹿にしたように感じる発言を繰り返しており、本問題は放置されているように見受けられます。
FB良品 セキュリティ問題のPoC(実証実験)について
上記内容を鑑み、実際にセキュリティ問題が起こることを証明する必要があると感じたため、現在稼働中のFB良品のセキュリティホールを利用する形で、PoC(実証)を行うこととしました。
セキュリティホールを突く実証実験は違法行為となりかねないため、以下の手法を用いています。
・流出させる個人情報は、IDとパスワードの一部のみ
・流出させるIDとパスワードを所有する人に対し、特殊な処理を行い「OK」ボタンを押させる、もしくはダウンロードさせる際に(条件付きではあるが)IDとパスワードを流出させることを確認して貰う
(要するに、流出させたIDとパスワードは本人承認の元流出しています)
・本家のサイトには通常ブラウザでアクセスする以上の行為を行わない
・ID、パスワード以外の情報は一切取得しない(※サーバー管理のために必要なアクセスログは除きます)
このため、多少手順が複雑になっていますが、ご了承ください。
また今後の方針ですが、以下のようにします。
・本セキュリティホールが解決された時点で、本ページを含め、サーバー上のデータは全て削除します(※サーバー管理のために必要なアクセスログは除きます)
何が起きるのか? 目的は?
普通にFB良品にアクセスして、ログインしただけで、IDとパスワードが、全く関係の無い第三者(桐原樹)へ送信される事を確認する
注意すべきことは?
・ID・パスワードが平文でネットワーク上を流れる上に、一部読めなくしているとは言え、サーバー上にID/PASSを保存・公開しています。
※テスト開始時は「必ず」この事実を承認下さい。テスト後に少なくともパスワードは変更をお願い致します※
このPoCを実行したことにより発生する全ての責任は、使用者(PoC実行者)にあります。私、桐原樹/NIは全ての責任を負いません
・決して悪用しないで下さい
あくまで「実際に出来るしこの問題は起きる」事を実証するための実験(実運用サイトに対するPoC)です。
私、桐原樹/NIには悪意はありませんが、使用することで第三者にID・パスワードが渡る可能性があります。
実際に何をやっているかは、このページの下の方を参照ください。
動作確認環境
・OS:Windows 7 SP1 32bit版
・ブラウザ:Firefox
・実行ユーザーは管理者権限を持ったユーザー
これ以外の環境では想定外の問題が発生する可能性があります
利用したユーザー情報流出先ファイル
ID・パスワードリスト
公開データは以下の内容です。
・IDの@の前、先頭2文字、@直後の先頭2文字、最後の.から先がIDとして公開されます
例:ituki@test.example.com → it********@te********.********.com
・パスワードは先頭2文字が公開されます
例:password → pa********
実証方法
1.次の2ファイルを適当な場所(デスクトップなど)にダウンロードします(今はまだ実行しないでください)
ファイル1:start_test.bat
ファイル2:end_test.bat
この作業により、本実証に対する内容(注意事項・情報公開範囲・責任の所在等)に同意されたものとします。
2.テストモードにします(ここから先はコンピュータからFB良品のセキュリティホールを使うモードとなります)
先ほどダウンロードした、start_test(start_test.bat)をExplorerやデスクトップなど、ファイルが見える場所で右クリックし、「管理者として実行」を選択します(Windows 7/Vista)。
無い場合、シフトキーを押しながら右クリックしてみてください。
「管理者として実行」ではなく「別のユーザーとして実行」となっている場合もあります。
無い場合は試しにそのまま開いてみて下さい。
Windows 7/VistaではUACが起動します。
コンピュータの変更を許可するように求められますので、本当にテストモードにする際はOKを押して下さい。
やめるのであればここがラストチャンスです。
成功すれば、以下のメッセージが表示されます。
1 個のファイルをコピーしました。
1 個のファイルをコピーしました。
多分書き換えた
有効にならない場合は再起動をお願いします
続行するには何かキーを押してください . . .
逆に、失敗した場合は以下のメッセージが表示されます。
アクセスが拒否されました。
0 個のファイルをコピーしました。
指定されたファイルが見つかりません。
アクセスが拒否されました。
多分書き換えた
有効にならない場合は再起動をお願いします
続行するには何かキーを押してください . . .
このメッセージが表示された場合、管理者として実行されていない可能性が非常に高いです。
また、すでにテストモードになっている場合は、以下のメッセージが表示されます。
すでに環境あるんだけど、もう一回作り直します。嫌なら×でウインドウ毎閉じてください
続行するには何かキーを押してください . . .
この場合、何かキーを押すと、再度実行が行われます。不要な場合はウインドウの×ボタンを押して終了してください。
3.実際のテスト
適当なブラウザから、FB良品 武雄 http://takeo.fb-ryohin.jp/にアクセスしてみて下さい。
上部に「このページはセキュリティ問題を明確にするために作成されたフィッシングデモサイトです」と表示されれば、テストモードへの切り替えが成功しています。
もし表示されないようであれば、シフトキーを押しながら、更新、または再読込ボタン、もしくは、F5キーを何度か押してみてください。私の環境では1分以内に切り替わりました。
それでも駄目な場合で、2.が終了している場合、OSの再起動が必要かもしれません。その場合は申し訳ありませんが一度再起動してください。
4.ID・パスワードの入力
※この情報はサーバーに保存されます。必ずテスト後はパスワードを変更下さい※
トップページの右上にある「メールアドレス パスワード」に正しい情報を入力し、ログインを行います。
登録時に入力された名前が表示され、ログイン済みになった時点でIDとパスワードが第三者(桐原樹/NI)に送信されています。
この時点でID・パスワードリストが更新済みとなっています。
おそらく、一番下の行に入力済みのID・パスワードの一部が表示されていると思います。
これは非常に致命的なセキュリティホールです
今回はテストモードである事が明記されていて、かつ、流出済みデータを一覧で取得出来ますが、この2つは隠すことが可能です。
(webページ上の注意書きが存在せず、このページも存在せず、流出済みデータへのリンクも無い場合、貴方はIDとパスワードが第三者へ送られたことに気づけましたか?)
なお、ID・パスワードが正しいことは意図的にチェックしていないので、「登録自体したくない」場合は(エラー画面に遷移しますが)任意のID(メールアドレス)とパスワードでテストすることも出来ます。
5.テストモードを解除
1でDLしたend_test(end_test.bat)を、2でstart_testを実行したのと同じ方法で実行します(右クリック→管理者として実行)
成功した場合、以下のメッセージが表示されます。
1 個のファイルを移動しました。
続行するには何かキーを押してください . . .
失敗した場合、以下のメッセージが表示されます。
アクセスが拒否されました。
0 個のファイルを移動しました。
続行するには何かキーを押してください . . .
すでに解除済みの場合、もしくは、何らかのバグを踏んだ場合、以下のメッセージが表示されます。
バックアップファイルが無いので戻せない。 C:\Windows\system32\drivers\etc\hosts
ファイルを管理権限で編集して、61.114.236.53 takeo.fb-ryohin.jpを削除して下さい
続行するには何かキーを押してください . . .
この場合、手動で削除する必要があるかもしれません。
この場合の処理は少し難しいため、コンピュータに詳しい人に相談してください。
6.テスト環境が解除されていることを確認
適当なブラウザから、FB良品 武雄 http://takeo.fb-ryohin.jp/にアクセスし、シフトキーを押しながら更新(リロード)を行います(更新ボタン、再読込ボタン、もしくはF5を押す)。
上部にある「このページはセキュリティ問題を明確にするために作成された」云々が消えれば、元の状態に戻っています。
この時点で、テストモードは解除されています。仮にFB良品で何らかの操作を行った場合も、私(桐原樹/NI)に何らかのデータが渡ることはありません。
(※ただし、FB良品にはセキュリティホールが存在しているため、私以外の第三者が同等の方法などを使う事で第三者がデータを入手する可能性があります。この場合、本テスト環境とは全く無関係の事象ですので、私(桐原樹/NI)が何らかの関与をすることはできません※)
これ以上特別な操作は必要ありません。
不要であれば、1でダウンロードしたファイルを削除してください。
実証方法(ある程度分かる人向けの簡易説明)
基本的には上記方法と同じですが、hosts書き換えでは無く、DNSサーバー(DNSリゾルバ)を変更してもテスト出来るようにしました。
DNSリゾルバに61.114.236.53を指定し、FB良品 武雄 http://takeo.fb-ryohin.jp/にアクセスすると、デモサイトに繋がるようになります。
こちらの方法は人により設定方法が事なり、また、ある程度分かっている人を前提としているため、設定方法は省略させて頂きます
※テスト後は必ずDNSの設定を戻してください※
本DNSリゾルバ(61.114.236.53)は任意に停止する可能性があります
本セキュリティホールについて
ここから先は、今回のセキュリティホールに対する説明になります。
技術的な内容になりますので、「できるんだー」と試したかった方は、これ以降読む必要はありません。お疲れ様でした。
本セキュリティホールは、一般にMan-in-the-Middle Attack(中間者攻撃)と呼ばれるセキュリティ問題の一種です。
通常であれば、「クライアントPC - インターネット - FB良品」となる通信に介入することで、「クライアントPC - インターネット - 中間者攻撃を行うサーバー - インターネット - FB良品」という通信を行っています。
今回は中間者攻撃を行うサーバーに誘導するために、明示的にローカルからアクセスする際のFB良品にアクセスするIPを書き換える(hostsファイルを書き換える)手法をとっています(これがダウンロードしたbatファイルで実行している内容です)。
このFB良品のIPを書き換える手段は、直接的にはbatファイルと同じような挙動をするウイルス等を初めとして、ローカルのコンピュータからはほぼ認識出来ないDNSポイゾニングや、ARPスプーフィング、無線LANアクセスポイントの成り済まし、悪意あるDHCPサーバーを立ち上げる等でも行うことが可能です(今回、その部分を実装してしまうと、テストでは無く、本当の意味でウイルス作成やDNSに対する攻撃となってしまうので、そこには踏み込んでいません)。※この内容に関しては、@keijitakedaこと武田圭史様よりご指摘頂きました。ありがとうございます。
言い換えますと、ローカルの管理者権限を取得しなくても、DNSを何らかの方法で書き換えられれば(上に書いた通り、ユーザーサイドでは認識出来ない手法が幾つか存在します)、本攻撃は成立してしまいます。
また、本来のフィッシングサイトのように偽のホスト名(例えば、fb-ryohin.com等)を取得し、そこに誘導するメールを配布することで、DNS等を改竄しなくとも、本物と思わせてしまう事も可能です(今回この方法も可能でしたが、これは今回利用したセキュリティホールでは無く、地域ドメインではない一般的なドメインを利用している事による問題であり、今回修正を求めたい内容では無いため実装していません。本当に簡単に出来てしまうのでここも何とかして欲しい所ではありますが)
本セキュリティ問題は2005年時点ですでに認識されており、回避手段も確立されています。
今回の場合、SSL認証されていないページからSSLのページへデータを送ります。
SSL認証されていないページが正しく読み込まれていれば問題は無いのですが、今回はSSL認証されていないページに何とかしてコードを埋め込んでいます。
「何とかして」コードを埋め込むため、今回はDNSデータを弄る事で対応しました。
(これが、管理者権限で実行したファイルで行っている処理です)
なお、同じ操作はクライアントPCのセキュリティホールを利用する幾つかの手法で裏でコッソリ実行する事が可能です。一般に、コンピュータウイルスと呼ばれるソフトなどが使う手法です。
回避手段としては、IDやパスワードを入力する画面もSSLにする事です。逆に言うと、それ以外の回避策はありません。
なお、本セキュリティホールの難しさですが、あまりに一般化されているため、ある程度知識のある人であればすぐに実証コードを作ることが可能でしょう。
コンピュータウイルスを作る人であれば言わずもがなでしょう。
参考までに、私レベルの人間であれば、テストを含めて6~7時間で作れます。
つまり、それだけ既知のセキュリティホールと言うことです。
悪人に利用される前に修正されることを願います。
ちょっとしたお願い
色々遊べるので楽しいですが、あまりテストを連続でしないで貰えると助かります。
手抜きプログラムなのでサーバーの負荷が割と高いのです。
ただ、連打等しなければそこまで問題にはならないかな? とは思います。
その他
FB良品のセキュリティホール実証環境について
・自分が考えられる範囲内で不正アクセスにならないように色々手を打ってはあります
・修正されるまで閉鎖する気はありません
・公権力等を用いて強制的に閉鎖するように要求が来た場合は閉鎖します
その場合、全ソース・立ち上げ方法・個人で出来る対処法等の詳細を含めてblogで公開します
(ある程度知識のある人なら簡単に作れますけどね)
・ソースを見れば分かりますが、割と愉快な方法で実装しています
・中間者攻撃を行うために、takeo.fb-ryohin.jpを61.114.236.53という他のIPに割り当てる事で簡略化を行っています
今回はhostsを利用しましたが、他にも幾つか手法は存在すると思います。
・「気持ち悪いのでbatファイルを実行したくない」という場合、hostsファイル(Windowsであれば、C:\Windows\system32\drivers\etc\hosts、Unix系であれば/etc/hosts等)を直接書き換えてもテスト出来ます
以下の内容を追加ください(テスト後は削除ください)
61.114.236.53 takeo.fb-ryohin.jp
一応書いておく
書いておかなくてもtwitter見てる人なら分かってる気がしてたので書いていませんでしたが、何か誤解してる人が多いので、ここに書いておきます。
私個人としては、市長の発言など、非常に不愉快であり、市長・FB良品含めて信用出来ないと思っています。
しかし、その感情は別として、(FB良品である必要性は感じないにしろ)地方自治体による名産品のネット通販などは良いアイディアであると思っています。
私の理解では「アイディアは良いんだけど、実現方法が間違っている」です。地方自治体によるネット通販自体を否定しているわけではありません。
また、個人的感情としてはFB良品はイケテナイとは思いますが、きちんと管理運営されていて、権利関係が明確になっているのであれば、自治体がFB良品を選ぶ事に対し、特段文句を付けたりはしません。そうなっていないから(そうなっているように見えないから)文句を付けるのです。
なお、twitterなどでも問題点指摘などは行っていますが、潰れろとは言っていません。より良くする為には、と思って行動しています。どうしようも無ければ撤退も視野に入れるべきだとは思いますが、今はまだ始まったばかりで有り、その判断を行うには時期尚早であると思います。
今回、すでに販売が始まっているにも関わらず、セキュリティホールが突かれると割と致命的である(そしてやる気出せば突ける)割には、解決方法がかなり容易である為、何故やらないのか、という事を、twitterでのやりとりから、「認識していない」か「理解していない」か「理解しようとしていない」か「分かってやっている」か、いずれにしても対応する気が無い、と私が感じたため、PoCという形で公開、という形を取りました。
影響を最低限とするため、takeo.fb-ryohin.jp以外のページに関しても同様のセキュリティホールが存在しますが、1つあれば分かるだろう、という事で、1サイトのみ対応しました。また、画面の右上のログインフォームでのみID・パスワードを抜くようにして、できる限り本来のページの機能を損ねないようにしています(おそらく、実証モードでも、商品を選択後、ログインする場合には通常通りモノの売買が可能なはずです。……今回の主題では無いため、テストしてはいませんが)
正直、色々検討しているとは言え、私にもリスクはあります。FB良品を仕切ってる人間が治す気があるとか、他の人の問題点指摘にきちんと答えているのであれば、こんなモノを作ろうなどとは思わなかったはずです。
あと、私が所属する本籍地が、FB良品参加自治体にある、ということも関係しています。
要するに、自分が所属する自治体が参加しているシステムにセキュリティホールがあり、運用している人はそれを治そうとしない(様に見える)という状況です。しかもその問題を根拠無く大丈夫だと言い切っている為、理論では無く、実際に出来る事を見せないと何の動きも見られないのでは無いかと判断しました。
相手が個人や普通の企業であれば、ここまでめんどくさい事はしません。
今回は「自治体が運営する」サイト、と言うことがポイントです。
普通の人にとって、「個人が運営するサイト」より「企業が運営するサイト」の方が安全性が高く、「企業が運営するサイト」より「自治体が運営するサイト」の方が安全性が高いと思うでしょう。もちろん、さらに「国が運営するサイト」はより安全性が高いと思うでしょう。
従って、個人や企業が運営するサイトと比べ、自治体が運用するサイトは、「より安全である」必要があると思っています。
ましてや、単なる情報提供では無く、お金が動くような商売(販売)を自治体が公式に行っているのですから、「普通の人は安全であると認識する」に違いありません。しかし、このページで示した通り、FB良品は、現時点では安全では無いのです。
人は、安全であると思った場合、普段より気をつけなくなります。
例えば、私の個人ページでクレジットカード番号を入力するより、企業のページでクレジットカード番号を入力する方が抵抗感は少ないでしょう。さらに、自治体の公式ページであれば、適切に管理されているに違いない、と思うはずです。
このような状況を鑑み、「不正アクセス」にも「営業妨害」にも該当しない方法で、ユーザーが意図的に操作しないとアクセス出来ないようにした上で、「問題があるんだよ!」という実証実験ページを公開するに至りました。
本来はIPAと関係機関に相談後公開しようかとも思っていましたが、お正月休み中で連絡出来なかったため、先に公開しました。
通常、0-day的な問題は対応が終わるまで公開を控えます。しかし今回の場合、「すでに運用が始まっている信用度が高い、お金が絡むサイト」であり、このセキュリティホールの原理も解決方法も7年前には確立しています。また、twitter経由で複数の方がこの問題について指摘し、解決案も提示しています。それでも、運営者側が修正する気が無いように思えました。
もし後出しで「治そうとしていた」と言われても、本サイト公開時点でその情報は公開されていませんでした。むしろ、治す気が無さそうな発言が続いていました。
もし、このPoC公開により、FB良品(及び同様のセキュリティホールを持つ=httpsでないページでIDやパスワードを入力し、それをhttpsなページにPOSTするような構造を持つwebページ)の見直し、セキュリティ向上に役立って貰えれば幸いです。
(c) Copyright 2012, Ituki Kirihara/NI, All rights reserved.