2010年8月 9日

[PHP-users 35325] Re:セッションハイジャックと session_regenerate_id() について

komura です。

On Sun, 8 Aug 2010 13:21:04 +0900
shinichiro mori <shinichiro.mori.1983@xxxxx> wrote:

> 被害に会う状況としては、以下のようなものを想定しています。
> (1)攻撃者にブラウザのクッキーの内容を直接見られた。
> (2)攻撃者がネットワークをモニターしてクッキーの情報を入手した。

> など。

攻撃者が、有効なセッション ID を入手している時点で、Web サーバや
Web アプリケーション側で完全な対策はできないように思います。

このため、本当に重要な処理をする Web アプリケーションでは、
SSL を導入するなど、簡単にセッション ID が漏洩しないように
対策しているのではないでしょうか?


> ■質問内容
> 上のような状況が起こるのは、(2)で会員がしばらくの間ページ遷移等をしなかったためセッションIDが
> 再セットされないままとなり、その間に攻撃者の被害に会ってしまった、というようなケースかと思われますが、
> session_regenerate_id() は menu.php では使用すべきではないということでしょうか?

この場合は、session_regenerate_id() を使用すべきです。
これは、質問にあるセッションハイジャックというよりは、
セッション固定攻撃の対策になります。
# 今回は考慮していないとのことですが、セッション固定攻撃も
# セッションハイジャックの一種です。

ログインなどは、ユーザによる重要な操作を実行した場合となり
ますので、セッション ID は変更すべきです。
詳細は、以下のページなどを参照してください。

http://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/305.html


> もしくは、セッション変数をチェックして、内容が不正と判断される時のみ session_regenerate_id() を
> 使用する等、至るところで不用意に使用しない方が良いということでしょうか?

ここが良く分からないのですが、内容が不正かどうかをどのようにして
判断するのでしょうか?

確かに、セッション変数に攻撃者が変更できない情報(IP アドレスなど)を
保持して、毎回チェックするという手段はあります。ただ、アクセスごとに
こうした情報が変化する場合もあり、限定された環境でないと、この方法は
使用できません。
このため、内容が不正かどうかをチェックする万能な方法は無いように
思います。


> session_regenerate_id() を使用しない限り、セッションIDが盗まれても、
> 会員がログアウトするなり、session.gc_maxlifetime だけ時間が経過するなりして、
> セッションが破棄された時点で攻撃者も会員専用メニューにアクセスできなくなると思います。

セッション ID を変更しない場合、それだけ、漏洩する危険性が
増大します。毎回変更する必要はないと思いますが、定期的に
変更する方が安全ではないでしょうか。

また、session.gc_maxlifetime の設定による時間経過よりも前に
攻撃者がアクセスすると、セッションを継続させることができます。
このため、セッションハイジャックされた場合のタイムアウトに
よるセッション破棄は期待しない方が良いと思います。

この問題に対処したいのであれば、セッション ID を変更しない
よりは、ログイン時または、ログアウト時に、対象ユーザの
セッション情報が残っていた場合、それらを全て削除するような
処理を入れておくと良いと思います。

仮に、攻撃者がセッションハイジャックをしてサイトにアクセスして
いた場合でも、正規ユーザがログインまたは、ログアウトした場合、
自動的に攻撃者もログアウトされることになります。
# 攻撃者がログアウトした場合、正規ユーザもログアウトするという
# 問題はあります。


個人的には、セッションハイジャックによる被害を可能な限り防止
したい場合、アクセスを SSL のみに限定し、重要な処理を実行する時は
パスワードなどの正規ユーザしか知りえない情報を要求するくらい
しか思いつきません。

--
komura <komura.db2r1e@xxxxx>
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年8月 9日 00:57
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/97537
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。