F
a
c
e
b
o
o
k
の
セ
キ
ュ
リ
テ
ィ
周
り
に
つ
い
て
の
リ
サ
ー
チ
と
文
章
●
元
の
t
x
t
●
ク
リ
ッ
ク
ジ
ャ
ッ
キ
ン
グ
で
訪
問
者
の
F
a
c
e
b
o
o
k
ア
カ
ウ
ン
ト
を
取
得
す
る
ス
ク
リ
ー
ン
キ
ャ
プ
チ
ャ
文
責
/
連
絡
先
m
a
.
l
a
m
a
i
l
t
o
:
t
i
m
p
o
a
t
m
a
.
l
a
/
@
b
u
l
k
n
e
e
t
s
Facebookの問題点に関するテキスト 1 ====== はじめに ------ この文章はma.laが書きました。これは 2011-03-17 に書かれました。 脆弱性の検証に関する実験はそれ以前に行われています。 この文章では、ユーザーの認可無く悪意のあるサイトからアカウントを特定されるリスクと、その対策について書いています。 まず最初に謝りますが、業務上必要であるのでFacebookアカウントを複数取得しています。私は業務上、Facebookアプリケーションの安全性の確認やFacebookのプラットフォームとしての安全性、自社サービスのユーザーに与える影響などについて調べる必要があります。幾つかの検証結果については、会社の業務上で得られたものですが、この文章は会社とは無関係な個人の立場と文責で書いています。 個人的には長年利用していた個人用アカウントの停止によって大変な不便を受けています。事前警告なしのアカウント停止などのユーザーオペレーションに不信感を覚えていますが、Facebookのポリシーや日本の戸籍制度だとか、私個人のオンラインアイデンティティに対する考え方やポリシーについては一先ず置いておいて、まず技術者の視点で問題を考え、良心に基づき脆弱性に関する情報の共有を望んでいます。 私はFacebookの対応や、私の個人用のアカウントの処遇や、返信の有無とは無関係に、ユーザーの安全や技術の発展のために、これらの情報を公開する準備があります。 しかし、Facebookがユーザーのプライバシーとセキュリティに対して真摯に取り組んでいるということが分かれば、まず、どのような対策を取るつもりかについての意見を聞き、その上でFacebookの評判が過度に貶められたり、Facebookの利用者が危険に晒されるような結果にならないように、最大限の配慮をするつもりです。 Facebookがセキュリティやプライバシーについてどのように考えているのかについて、責任のある回答を聞きたいと考えています。 いいねボタンとクリックジャッキングの問題 ------ デモ動画を作成してあります。別途リンクを添付します。 デモ動画ではいいねボタンを半透明にしてありますが、実際は完全に透明にしてしまうことが出来ます。 - ファンページ管理人は誰が「いいね」ボタンを押したのかを把握できます。 - クリックジャッキングで外部サイト埋め込み用iframeのいいねボタンを強制的に踏ませることができます。 - 場合によってはアカウント確認が出ますが、携帯メールの認証を行うと出なくなる、とあり、認証したところ実際でなくなりました。 - どちらかというと、これはユーザー保護というより「いいね数」の水増しを防止するためのように見えます。 - 複数のファンページでクリックジャッキングでいいねボタンが押せることを確認しました。 クリックジャッキングを防ぐための仕様、x-frame-optionsがありますが、iframe内に表示されることを前提としている機能については、ブラウザが表示をブロックすることで全く使えなくなるため、対策にはならないでしょう。 限定された個人情報にアクセスするアプリケーションの認可画面に対しては、クリックジャッキング対策のコードが含まれています。このことからFacebookはこの種の攻撃に対する脅威を認識しています。認識した上で「いいねボタン」を通して取得できる公開プロフィールの漏洩については「大きな脅威ではない」あるいは「対策が困難」として放置されている、というのが現状での自分の考えです。 公開範囲が限定されていない情報であっても「ユーザーが誰であるのか」ということも通常は保護すべき情報として扱われます。通常はOpenIDのようにユーザーが許可を与えた上で「自分が誰であるのか」を証明する、ということが行われます。 私の考える一般的な感覚として、ユーザーはFacebook上で全体公開される情報として氏名を入力したのであり、それが自分の認可無く、Facebook外の悪意のあるサイトからも自分のFacebookアカウントを特定され、Facebookに登録した情報を不用意に把握されうるということを予測してはいないでしょう。例えばHTTPヘッダーで常に本名を送信しながらWebを閲覧するなどということを望んでいるユーザーはごく少数でしょう。 罠を仕込んだページにターゲットを誘導し、アクセスログと突き合わせることで、訪問者のFacebookアカウントを高い精度で取得することが出来ます。この手の問題は多くのサイトにありますが、実名登録を前提としているFacebookで行えるということは、Facebookアカウントの特定はすなわち訪問者の実名を取得できることに繋がります。 例えばJSONPで外部サイトからユーザー
id
やプライベートなデータを取得できる、といったものは分かりやすい脆弱性として認識されています。ユーザー
id
がメールアドレスと同一であるなら「
id
の漏洩がメールアドレスの漏洩を意味する」ことになります。ユーザー
id
を非公開情報として秘匿しているサービスは滅多にありませんが、ユーザー
id
から取得できる公開情報が重要な個人情報であるのならば、それはユーザーの許可無く第三者のサイトに漏洩しないように技術的な対策を取らねばなりません。 Facebook上では氏名は全体公開されるものとして利用規約が設けられているかもしれません、それについてはここでは問題にしていません。ここで問題にしているのは「私がFacebook上の誰であるか」ということが、本来ならば外部サイトからは認可なしには知りえないようになっているにも関わらず、それが意図せずに外部サイトに漏洩することです。 Facebookの場合、ユーザーに気付かれずにFacebookアカウントを特定し、ファンページのユーザーリストからブロックすることで証拠を残さない、ということが可能なように思われます。Facebookに登録されているユーザー名を取得することでフィッシングサイトの作成に利用したり、オンライン詐欺、あるいはストーカーによる個人情報の取得などの犯罪行為に利用される可能性があります。 私はこの問題に対して、なるべくユーザビリティを損ねずに、プライバシーを保護するための、いくつかの技術的な改善案を提案することが出来ます。詳細については問い合せてください。 ファンページのいいねボタンを押した際の公開範囲について ------ 次に、クリックジャッキングによって意図せずにいいねボタンを押したケースではなく、ユーザーが意図していいねボタンを押すケースに付いて述べます。 - デフォルト設定では「いいね」を押したことは全体に公開されています。 - 自分が管理するファンページ以外でも「強制的にいいねボタンを押させて誰が押したのかを調べる」ことを行うことができます。 - いいねの公開範囲を「自分のみ」に設定した場合にも、ファンページ管理人には分かるようになっています。 - つまりプライバシー設定は意味をなしません。 - ファンページ管理人に悪意があれば、ユーザーを特定できます。 これはバグなのかどうか、判別が付きません。この手の問題は数多くのサービスにあります。しかし、私はFacebookが例外が無いと言い切る「実名登録」の問題から、Facebookを特別扱いする必要があると考えます。「実名登録を前提としている」「
id
から全体公開のプロフィールを誰でも取得できる」「実名の公開範囲を制限することが出来ない」ということから、他のサービスでは危険とが小さいと見なされるような脆弱性でも、Facebookにおいては本名が漏洩する脆弱性と見なされるからです。 Facebookアカウントを把握していないユーザーに対してファンページのいいねボタンを押すように誘導し、増加したファンを観測することで、そのユーザーのFacebookアカウントを高い精度で特定することが出来ます。また、ファンの一覧が隠されていた場合や、ユーザーがいいねの公開設定を変更していた場合でも、ファンページのオーナーは誰がいいねを押したのかを取得できてしまいます。 Facebookは芸能人や有名人の別名での活動のためにファンページを使うことが出来ると説明しています。Facebookファンページの重要な機能として「誰が管理しているのか」を隠す設定が可能になっています。芸能人や有名人でも「実名」でFacebookアカウントを登録し、ファンとの交流はファンページを使うべきだ、ということになっています。 本人か正式な代理人以外のファンページの作成は利用規約で禁止されていますが、技術的な抑制はありません。 簡潔に言いますと、Facebookアカウントを隠したままFacebookファンページを運用したいという需要を満たすために、ユーザーからすれば、自分がFacebook上の誰であるのかが「誰に通知されるのか分からない」という状態になっています。ファンページの管理人は「Facebookに登録することができ、CAPTCHAを読むことが出来た誰か」でしか無く、ユーザーから見れば本人もしくは正式な代理人かどうかを確認する手段がありません。また、クリックジャッキングの問題があるように、iframeの埋め込み方によっては、自分がどのファンページに対していいねボタンを押したのかを分かりづらくすることが可能です。 Facebookは多くのユーザーを抱えるサービスですから、このような問題はすでに指摘されているかもしれません。私はFacebookは非常に複雑になりすぎていて、自分の情報が他者からどのように見えているのかを把握するのが非常に困難になっていると感じています。実際に複数のアカウントを切り替えながら、他者からどのように情報が公開されているのかを確認しなければ分からないことが数多く有ります。 解決策はファンページの「いいね」ボタンを押すことはファンページの管理人に自分のFacebookアカウントを通知することであると周知させることです。その上で、ユーザーが自分が確実に意図したケースでしかボタンを押さないような技術的な対策を取ることです。 未知の脆弱性に対して提案できること ------ 様々なソーシャルエンジニアリングによって、Facebookの利用者を騙すことは今後も常に可能であると考えています。 Facebookは安心、安全、公開範囲を自分でコントロールできると主張します。しかし、一部の情報については全体に公開されていて、設定を変更することが出来ず、適切なコントロールを行うことが不可能です。 未知の脆弱性があった場合にも、ユーザーがFacebookを安心して利用することが出来るように、私が公開範囲のコントロールに関してFacebookに提案できるのは以下のようなことです。これはクリックジャッキング等の問題に対する技術的な提案ではありません。それについては別途書く予定なので問い合せてください。 - 全体公開されている情報や、自分がFacebook上の誰であるのかについては、騙しリンク、悪意のあるサイト、対策が困難な脆弱性によって不用意に第三者に知られる可能性があるとユーザーに周知させること。不用意に知られることにより不利益がある項目については公開範囲を制限するように案内すること。 - その上で「本名」と別に外部サイトやサードパーティアプリケーションにデフォルトで提供される「表示用の名前」を設けて、本名に公開範囲の設定を設けること。 - 「政府発行の写真付き証明書に記載されている本名」の登録を求めるのであれば、それは本人確認にのみ用いて、表示用の名前の制限を緩和すること。 - 友人登録している、あるいは申請中の場合以外には、プロフィールに完全にアクセスできないような設定を設けること。 - いいねボタンを押したことを自分以外に決して知らせない(ファンページ管理人にも)ような設定を設けること - もしくはボタンを押した際にどのような効果があるのか事前に確実にユーザーに周知されるように
UI
を改善すること 補足
1
サードパーティアプリケーションやアクセス解析機能の問題 ------ これはFacebookの問題ではありませんが、OpenSocialコンテナの実装によっては、自分が認可を与えていなくても、訪問者の公開プロフィールにアクセス出来る、というものがあります。そしてユーザーが明示的に認可を与えなくても、ユーザーを特定のURLに誘い出して特定のアプリケーションを利用させることが出来る場合があります。 サードパーティが公開プロフィールを取得できる場合、サードパーティアプリケーションがホスティングされている外部サイトのアクセスログと突き合わせることで、外部サイト上での
id
とOpenSocialコンテナ上での
id
をユーザーに気付かれること無く関連付けることが可能です。私はFacebookアプリケーションにおいて、同様の問題があるかについて十分な調査をまだ行っていません。 もっとシンプルな例を挙げると、mixiのあしあと機能があります。自分のプロフィールのURLに対してログイン済みのユーザーを誘導することで、訪問者のmixiアカウントを特定することが出来ます。 大多数の人はこのような問題について、正しい知識や正確な影響範囲を知らないままでしょう。日本のいくつかのSNSは、ユーザーに本名の登録を義務付けていないか、あるいは、本名と表示用のニックネームのパーミッションを明示的に分けています。許可を出しても決してアクセス出来ない情報もあります。意図せずに自分のアカウントが特定されたとしても、公開用のプロフィールは任意であり、政府発行の写真付き証明書に記載されている名前の登録を強制されていません。 ユーザーに正確な個人情報の登録を強制し、それらをサードパーティのアプリケーションと共有するのであれば、その個人情報がどのように扱われるのかについて、正確な情報を開示すべきだと考えています。ファンページの例を挙げましたように、必ず許可を求められるということはありません。 補足
2
サードパーティCookieに関する問題点 ------ Facebookは外部サイトへの埋め込みに関して、サードパーティCookieの送信に依存しています。最早取り返しの付かないほど数多くのサイトに埋め込まれており、Facebookが正常に機能しなくなるという理由でブラウザやユーザーがプライバシーに配慮した適切な設定を選択することが出来なくなるという可能性があります。この問題については別途書く予定です。 まとめ ------ ユーザーの認可無く悪意のあるサイトからアカウントを特定されるリスクと、その対策について書きました。 クリックジャッキングや不完全なプライバシー設定によってユーザーが意図すること無く、第三者にユーザーのFacebookアカウントを把握されうる問題があります。この手の問題はFacebook以外の多くのサービスにも存在しているものと考えられますが、Facebookは「実名登録の利用規約を強く徹底している」ことから、Facebookアカウントの特定が即座に個人情報の漏洩に繋がります。 登録ユーザー数が多く、外部サイトとの連携も積極的に行われていることから、ユーザーはFacebookにログイン状態のままで外部サイトを訪問している可能性が高く、多数のユーザーが攻撃のターゲットとなりうる危険を抱えています。ユーザーに対して正確な個人情報の提供を求める以上、より一層のセキュリティとプライバシーに対する配慮が必要であると考えています。 Facebookから責任のある回答を得られることを願っています。