次にリプレイ攻撃(Replay Attack)について触れます。リプレイ攻撃とは簡単に説明すると、「パスワードや暗号鍵、あるいは認証済みのセッションデータなどを再利用してそのユーザーになりすます攻撃」といえます。OpenIDでもこのような攻撃が可能でしょうか?——答えは可能です。
id_resモードによってIdPからUserAgentを介してConsumerに渡される認証結果文字列を再度利用することによりConsumerサイトにおいてそのユーザーとして認可されてしまうでしょう。
これはちょっとしたConsumer側の対策で簡単に防ぐことができます。OpenIDの認証トランザクションが開始する際にConsumer側で独自のnonce(ハッシュを用いたなりすまし防止のためのランダムな文字列)をエンドユーザーに対して発行します。このnonceはユーザーのUserAgentに対してCookieやあるいはSessionデータとして保存しておきます。またこのnonceは有効期限付きでConsumer側のデータベースなどで保存しておきます。
ユーザーがリダイレクションによってConsumerサイトに戻ってきた場合に、このnonceをユーザーが持っているかどうか確認し、持っていた場合は、データベース上のnonceと照合して、正しい値の場合のみ認可を行えばよいのです。正しい値の場合は後始末としてnonceをデータベースから削除します。つまりこのnonceはワンタイムな値ということです。
最後にセキュリティ関連の締めくくりとしてReputation問題について触れます。Reputationは評判とか評価といった意味でIdPの評価をどのように行うべきかという話です。
評価指標として諸説がありますが、次のような点が目安になるでしょう。
IdPのWebアプリケーションとしての機能に関する項目は、特にアカウントに対する扱いがメインです。アカウントのリカバリ機能の充実は単純なパスワードを忘れたなどだけでなく、アタックを受けた際にあるしきい値を持ってアカウントの凍結が必要ですが、この凍結されたアカウントに対するリカバリを本当のユーザーに対して提供する必要があるでしょう。
アカウント登録手続きに関しては先ほど述べたようにパスワードの強度を高める工夫であったり、ユーザーごとの認証ページにユーザーがフィッシングでないと確かめられるようなデータを表示させる仕組みを取り入れたりといったことが挙げられるでしょう。
AOLは許可するIdPをホワイトリスト形式で指定しています。OpenIDの概念から考えると悲しいですが、これが現実的な解なのかもしれません。
Consumerサイト、あるいはIdPそのもの、いずれにせよここまで述べてきたセキュリティ対策はしっかり行い、特にIdPの場合はReputationの高いIdPになるよう努力を怠ってはいけません。常にセキュリティ関連の動向は最新の情報を追って、対策するようにしていきましょう。OpenIDのセキュリティに関する最新の動向を知りたい方はOpenIDのセキュリティ関連のMLに加入すると良いでしょう。
山口 徹(やまぐち とおる)
サイボウズ・ラボ株式会社のプログラマー。
バーテンダーからIT業界に転身後、様々なWeb制作を行い、大規模コミュニティサイトの開発・運用を経て、現在は研究開発の日々。Perl使い。
Perlを中心とした開発のノウハウやネタをShibuya Perl Mongersのイベント等で発表するなど講演活動も行う。
個人の開発日記は「Yet Another Hackadelic」、仕事のブログは「log4ZIGOROu」
Copyright © ITmedia, Inc. All Rights Reserved.