"OpenID: Single Sign-On for the Internet" を読んだ (3)
Relying Party to Identity Provider redirect
悪意ある RP が discovery を偽って、ユーザーの入力した User-supplied Identifier から判別する OP EndPoint URL にはリダイレクトせずにそっくりなフィッシングサイトに行く可能性があるよねって話。
対策
色々考えられるけど、やっぱりブラウザ側で対応するのが一番良い気がする
- openid_identifier or openid_url と言う name属性を持つフォームの要素がページに存在するならばそのページは OpenID 対応と見なす
- ブラウザの機能として実際に入力された identifier を RP に送信する前にフックかけて、ブラウザが discovery して、遷移すべき OP EndPoint URL を割り出す
- 現在居る RP からのリダイレクトで OP EndPoint URL 以外だった場合はそこもフックかけて、おかしなリダイレクトだぜって警告、ないしは中止出来るようにする
みたいな事をやれば良さそう。そういう Firefox 拡張とか作ればいいんじゃないかなー。
Identity Provider authentication
悪意のある OP はユーザーがネット上でどういうサイトにアクセスしてるかって言うのがある程度分かっちゃうよねって話。
これってセキュリティの話なんだろうか、謎。
どういうサイト、まぁここでは RP 限定になるんだけども、を使ってるかなんてのは分かるし分かった上でビジネス的に活かすべきでしょう、どう考えても。
Identity Provider to Relying Party
OpenID の認証結果はブラウザ経由で、OP から RPに伝えられるんだけど、利用者の通信経路に中間者が居たら RP に戻って来るよりも早くその認証セッション付きのURLを他の誰かが叩けば Replay Attack が出来るよねと言う話。
その場合、RP が事前に nonce を発行していたとしても、当の本人より先にアクセスされたら通用しないよって話ですね。
対策
まぁここでも真っ先に出て来るのは https 使おうぜって事で、それだけでぐっと中間者攻撃の可能性が減るはず。あとは思いつくのは、
- nonce の発行時に UserAgent の IP を対にして記憶しておく
- nonce の確認時に値そのものだけじゃなくて IP での照合を行う
とかですかねぇ。
追記 (2008-06-13T18:39:13+09:00)
またもや id:machu さんの突っ込みwww
ありがとうございます。
「これってセキュリティの話なんだろうか」←OPの追跡可能性問題はセキュリティの中でもPrivacyに近い話。収集することを利用者に通知していなければ問題 / LibertyのSAMLだと中間IDを使ってRP側のIDは分からないようにしてる
まぁ本意は元ネタである OpenID: Single Sign-On for the Internet (PDF) は恐らくセキュリティ的な観点から言ってるっぽぃけど、これは id:machu さんが言う通り、セキュリティじゃなくプライバシーの話だよねって事が言いたかっただけですね。言葉足らずですみません。
ついでだから言っておけば、収集のレベルの話がまずあるのかなと。
少なくとも OP は誰がどの RP に対して認証を利用したかは把握してるし把握しておくべきなので、そのレベルの収集自体は問題にならないと思います。ただその履歴を元に何かする場合は利用者に対して、「お客様がお使いの OpenID 対応サイトへの認証履歴からあなたに最もぴったりな広告を出すのに、認証履歴を利用しますよ」みたいな事でも言っておけばいいはず。