セッションIDの固定化とは

セッションIDの固定化とは

ブラウザの拡張機能などでセッションID名のCookieを作成後、そのCookieが存在する状態でログインし、ログイン後にCookieのセッションIDが変わっていない場合、セッションIDの固定化(セッション・フィクセーション)の脆弱性が存在します。

もし第3者によって固定化されたセッションIDを使用してしまった場合、当該第3者(攻撃者)はログインをバイパスすることができます。

原因

PHPには未初期化セッションIDを受け入れるセッションアダプションという特性があり、ユーザ側で勝手に作成したセッションIDでログインできるのはそれが理由です。

ただし、自分自身のCookieを編集してセッションIDを作成することは容易ですが、他人のCookieを操作するのは難易度が高い作業と言えます。

例えばIPAの図では「何らかの方法で自分が取得したセッションIDを利用者に送り込む」と記載されています。

つまり、他人のCookie内にセッションIDを設定したい場合、更に以下のような脆弱性を利用してCookieを操作する必要があります。

  • クッキーモンスターバグ
  • XSS
  • HTTPヘッダインジェクション

対策

ログイン後にセッションIDを再発行することがセッションIDの固定化の対策になります。攻撃者は再発行後のセッションIDを知らないので、認証を突破することができなくなります。

セッションハイジャック

セッションIDに関する脆弱性としてはセッションハイジャックも有名です。

こちらは推測や盗聴に基づいて被害者のセッションIDを取得します。

セッションIDを推測が困難のものにする、セッションIDをURLパラメータに含めない、Cookieにsecurae属性を加えるといった、ある種当たり前のことがセッションハイジャック対策になります。

セッションIDの固定化の確認方法の注意点

セッションIDの固定化を確認する場合、POSTリクエストのCookieヘッダを編集するのではなく、Cookieそのものを作成してください。

そもそもセッションIDのCookieが既に作られている状態で固定化を確認する場合においては、POSTだけ変更しても当然次回以降のCookieヘッダは変更前のものが送信されるので確認になりません。

セッションIDのCookieが存在しない場合にPOSTだけ変更しても、次回以降のCookieヘッダには当然セッションIDは含まれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)