« 秘密鍵を後置している MAC の危険性 | メイン | Re: 攻撃してください→はてな認証の仮想セッション »
2006年05月09日
はてな認証 API への攻撃シナリオ
少し方向を変えて、 cert の漏洩に関する話です。
はてな認証 API における cert の使用法においては、
条件A) cert が第三者に漏洩しない
条件B) cert を最初に使うのがサードパーティアプリケーションである
のいずれかが満たされれば良いです。
しかし、実際のところ cert が漏洩した場合に条件 B を破る (攻撃者の ?cert=... リクエストが、正規ユーザーのリクエストよりも先に処理されるようにする) ような攻撃を構築することは可能なので cert が漏洩する=セッションハイジャックが可能注3になる、と考えなければなりません。
じゃあ、どういう場合に、cert が漏れるか、ということですが、
・ブラウザの脆弱性 (ドメイン間の分離に不具合があるようなケース)
・ツールバーの類が (URL の ? 以降を) を別サイトに送信している
といったケースが考えられるでしょうか。
(ブラウザの脆弱性のような) クライアント側の問題には対応しない、というスタンスも、もちろんアリだと思いますが、個人的には、プロトコルレベルで改善できる問題は直しておいた方がいいんじゃないか、と思います。とりあえずは、 POST に変えるべきなんじゃないかな、と思います注2。
2006/5/10 追記:
サードパーティアプリケーション側で認証リンクを生成する前にセッションを開始することは、この攻撃に対する回避策になりません。セッションの発行対象が正規ユーザーなのか、攻撃者なのか、サードパーティアプリケーションからは判別できないからです。
注1: cert がワンタイムだから問題ないよ、という主張は間違いだということです
注2: 暗号化して送るようにする、というのがよりベターでしょうか
注3: サードパーティアプリケーションがセッションハイジャックされる (攻撃者がサードパーティアプリケーションにログインできてしまう) という意味です
元原稿がぐちゃぐちゃだったので、書き直しました。すいません。↓が元記事です。
サードパーティアプリケーションについて
・サードパーティアプリケーションには脆弱性は無い
・パラメータつきの認証リンクを悪用した api_sig の生成が可能
というケースにおいては、
条件A) cert が第三者に漏洩しない
条件B) cert を最初に使うのがサードパーティアプリケーションである
のいずれかが保証されない限り、cert を得た攻撃者が他人に成りすましてサードパーティアプリケーションにログインできるような受動的攻撃が可能になります。
で、条件 B を破る (サードパーティアプリケーションに api_sig を計算させている間、そのアプリケーションに cert の値を使わせない) ような攻撃を構築することは、可能です注1。
じゃあ、どういう場合に、最後の砦である cert が漏れるか、ということですが、
・ブラウザの脆弱性 (ドメイン間の分離に不具合があるようなケース)
・ツールバーの類が (URL の ? 以降を) を別サイトに送信している
といったケースが考えられるでしょうか。
(ブラウザの脆弱性のような) クライアント側の問題には対応しない、というスタンスも、もちろんアリだと思いますが、個人的には、プロトコルレベルで改善できる問題は直しておいた方がいいんじゃないか、と思います注2。
14:55 追記: 関係ない api_sig の話が混じっていたので取り消し線を入れました。
注1: 詳しくは書きませんが、cert がワンタイムだから問題ないよ、という主張は間違いだということです
注2: cert を暗号化して送るようにする、というのはひとつの改善策だと思います (14:44 追記 POST に変えるだけでもマシになるかな)
投稿者 kazuho : 2006年05月09日 14:12
トラックバック
このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/585
このリストは、次のエントリーを参照しています: はてな認証 API への攻撃シナリオ:
» 認証API(auth.json,auth.xml)への送信元IPをコールバックURLのものに限定したらどうでしょうか? from ナンセンス不定記
下記の文章を読んで思いついたこと。ちょっと小細工的ですが: Kazuho@Cybozu Labs: はてな認証 API への攻撃シナリオ 結城浩のはてな... [続きを読む]
トラックバック時刻: 2006年05月09日 21:32