小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

WEB脆弱性のセッション・ハイジャックとは

HTTPは、ステートレスなので、普通は、ステートを引き継ぐセッション管理ができません。
しかし、ログインが必要なサイトでは、セッション管理がないと実現ができません。
そのために、クッキーが考案され、クッキーにステート(セッションID)を保存することにより、セッション管理を実現します。


しかし、セッション管理がクッキーにより実現できても、その不備を狙うWEB脆弱性があり、それをセッション・ハイジャック攻撃と言います。
セッション・ハイジャック攻撃には、以下の3通りがあります。

  1. セッションIDの推測
  2. セッションIDの盗用
  3. セッションIDの固定化(Session Fixation)

◆ セッションIDの推測

悪意のある人は、セッションIDの生成規則を割り出し、有効なセッションIDを推測します。
これにより、善意の利用者に成りすましすることができるのです。
対策:セッションIDは、生成アルゴリズムに安全な擬似乱数生成系を用いるなどして、予測困難なものにします。

◆ セッションIDの盗用

悪意のある人は、罠を仕掛けたり、ネットワークを盗聴したりし、利用者のセッションIDを盗みます。
これにより、善意の利用者に成りすましすることができるのです。
対策:セッションIDをURLパラメータに格納しないようにしたり、HTTPS通信で利用するCookieにはsecure属性を加えます。

◆ セッションIDの固定化(Session Fixation)

悪意のある人は、以下のような『何らかの方法』で、自分が取得したセッションIDを善意の利用者のセッションIDに送り込みます。
これにより、善意の利用者に成りすましすることができるのです。
対策:ログイン成功後に、新しくセッションを開始するようにします。

・『何らかの方法』の一例
  1. 悪意の利用者が、BBS掲示板等へ「セッションIDを送り込む細工をされたURL」を貼り付けます。
  2. 善意の利用者は、そのURLをクリックし、ログインします。
  3. 悪意の利用者は、送り込んだセッションIDを使って善意の利用者のページを閲覧できるようになります。
・細工されたURLの例
<a href="javascript:document.cookie='PHPSESSID=aaa;expires=Thu, 1-Jan-2011 00:00:00 GMT';location.href='login.php'">click me!</a>
・説明

悪意のある人が、予め用意したセッションID(例ではクッキーのPHPSESSID=aaa)をdocument.cookieで善意の利用者のに送り込み、ログインページに遷移します。
するとその後、悪意の利用者は、そのセッションIDでログインすることにより、善意の利用者に成りすましすることができるようになるのです。


尚、本記事は、以下URL先を大変参考にさせて頂きました。問題があればコメント欄でご指摘ください。