OpenIDとセキュリティ――realmとreturn_toのチェックを怠るな:ZIGOROuのOpenID Short Clinic
OpenIDにかんするさまざまな疑問を解消していく本連載。今回は、RPからOPに対して認証アサーションリクエストが行われる過程で抑えておきたいポイントについて解説しましょう。
OpenID Provider(OP)が悪意のあるRelying Party(RP)から不正なリダイレクタを介したリクエストを受け付けた場合、どのように検証すべきでしょうか。
国内でもOPが多数登場してきたこともあり、OpenIDを利用できる場面が増えてきました。OpenIDの情報がまだ不足しているためか、セキュリティ面などで抑えておきたいポイントがまだ周知なものとはなっていないように感じています。本稿では、RPからOPに対して認証アサーションリクエストが行われる過程で抑えておきたいポイントについて解説しましょう。
realm と return_to とは
OpenID Authentication 2.0の「9.1. Request Parameters - OpenID Authentication 2.0 Final」に書かれていますが、RPが認証アサーション要求をする際には、通常、「realm」「return_to」という値を指定します。
例えばitmedia.co.jpがRPの場合、次のような指定をすることでOPに認証アサーションリクエストを行うことになります。
realm
http://*.itmedia.co.jp
return_to
http://www.itmedia.co.jp/example/handler
return_toとはUser Agentを介した間接通信において、レスポンスを受け付けるためのURLをRPがOPに事前に通知しておくためのものです。一方、realmはこのreturn_to URLのマッチパターンをワイルドカードを用いて指定します。realmに反したreturn_toに対してOPがUser Agentに対してリダイレクトを行ってしまうと、中間者攻撃が成立する可能性があります。
どういうことかといえば、RPがOPに対して認証アサーションリクエストを行う際に、realmと矛盾しないリダイレクタをreturn_to URLとして指定し、そのリダイレクタで認証セッションを奪ってしまえば、第三者がなりすましを行うことができてしまうのです。
またrealmに矛盾しないreturn_to URLであっても、RPとはまったく関係のないURLにリダイレクトされるケースも考えられ、ただこれをうのみにして良いかどうかという話もあります。
realmと矛盾しないreturn_toは簡単に思い浮かべることができます。筆者のブログで幾つか例示するとともに、国内OPの対応状況をまとめています。こちらを参照するとすぐにイメージがつかめるかと思いますが、いずれにせよ、悪意のあるRPだったとすれば中間者攻撃が成立し得る素地が存在していることはご理解いただけると思います。
どのように検証すべきか
では、RPからの認証アサーション要求は、どのように検証すべきでしょう。筆者は少なくとも以下の2点は抑えておきべきであると考えます。
- 広範囲を指定するrealmは信用すべきではない(ex. http://*.com/ など)
- ワイルドカードはFQDN(完全修飾ドメイン名)の左端にあるもの以外は許可しない(ex. http://www.*.com/ は許可しない)
前者はpublic suffix projectが信用できるならば解決策もありますが、一営利団体が安全ではない方法で収集しているデータベースですので、うかつに(使う|信頼する)わけにもいきません。現実解としては、少なくともrealmにマッチするかどうかと、そのrealmの形式が後者のようなものでないという点を検証しなければならないでしょう。
また、checkid_setupモードの場合は、ユーザーに認証レスポンスをRPに返すかどうかを問い合わせる画面を出すのが一般的ですが、完全なreturn_to URLでユーザーが不正なURLであると判断できるケースもあるので、存在する場合は必ずrealm、return_toの両方を明示するようにしましょう。
著者:山口 徹(やまぐち とおる)
サイボウズ・ラボで研究開発にいそしむPerlハッカー。Perlを中心とした開発のノウハウやネタをShibuya Perl Mongersのイベントで発表するなど講演活動も行う。最近ではOpenIDの実装方法や考察などをブログ「Yet Another Hackadelic」などで書き連ねている。山口氏へのコンタクトはこちらから。
関連記事
- OpenIDとXRI――XRIが生まれた背景からXRIを知る
OpenIDにかんするさまざまな疑問を解消していく本連載。前回も紹介したXRIだが、そもそもXRIは何のために考案されたのだろうか。XRIが生まれた背景とその理由について解説する。 - OpenIDとXRI――XRIの基本
今回は、OpenID Authentication 2.0からIdentifierとして採用されたXRIについて解説する。 - OpenIDとセキュリティ――経路の安全性をどう担保するか
今回は、OpenIDではどのような流れで認証手続きが行われているのかを解説する。 - 認証と認可の違い
今回は、普段当然のように使用される「認証」「認可」の違いについて解説する。 - 実は簡単なOpenIDの認証手続き
今回は、OpenIDではどのような流れで認証手続きが行われているのかを解説する。 - ユーザーの細かなプロファイル情報を取得するには
本稿では、OpenIDに対応した場合にRelying Party側がユーザーの細かなプロファイル情報を取得する方法について解説する。 - OpenIDに対応するメリットは?
- OpenID入門――その導入で何が変わって何が変わらないのか
ここ数カ月で注目を集めつつある話題の1つに、OpenIDというオープン系の分散型デジタル認証システムがある。本稿では、最も基本的なレベルから、OpenIDでは行えないことまで網羅したOpenID入門をお届けする。 - 思い切ってOpenIDを信頼しよう
OpenIDは信頼できないという人もいるが、ある意味では、少なくとも任意のユーザー名とパスワードでログインするのと同じくらいには信頼できる。 - OpenIDの仕様と技術:第1回 仕様から学ぶOpenIDのキホン(@IT)
- OpenIDの仕様と技術:第2回 あなたのサイトをOpenID対応にしている2行の意味(@IT)
- OpenIDの仕様と技術:第3回 Consumerの実装を知り、OpenIDを使ってみよう(@IT)
- OpenIDの仕様と技術:第4回 OpenIDをとりまくセキュリティ上の脅威とその対策(@IT)
- OpenIDの仕様と技術:第5回 OpenID Authentication 2.0時代の幕開け(@IT)
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.