【Spring MVC + Spring Security】セッションの運用

概要

基本的なセッションの運用方法についてまとめた。

 

前提

以下の記事の続きとなる。

あわせて読みたい

概要 認可エラーをハンドリングする方法についてまとめた。   前提 以下の記事の続きとなる。

 

セッションの役割

セッションとは、Webアプリケーションにおいて「ユーザーの状態(特に認証情報)を一時的に保持する仕組み」のこと。
HTTPは本来ステートレス(状態を持たない)なので、ログイン状態などを維持するためにセッションIDが必要とする。

パスワード認証や2段階認証などはログイン時だけ使用されるが、ログイン後はセッションIDだけでユーザーの認証状態を保持する。
セッションIDは「一時的な鍵」として機能し、リクエスト毎にクライアントとサーバー間で照合される。
サーバー側でこの鍵が一致することによって、「本人がリクエストしている」と判断される設計になっている。

 

セッションIDの運用

セッションIDは基本的に以下のような運用がある。

 

・固定型(安全性が低い):  初回アクセス時にセッションIDを発行し、以降ずっと同じIDを使用する
・再生成型(安全性が高い): 初回アクセス時にセッションIDを発行し、本人認証後に再度セッションIDを発行する

 

<固定型のイメージ>

 

<再生成型のイメージ>

 

 

脅威と管理

セッションIDが第三者に盗まれると、本人になりすまして操作されるリスクがある。
そのため、セッションIDが漏洩する脅威に備えた対策を行うことが重要になる。

 

脅威の種類

主に以下のような脅威がある。

・セッションハイジャック(盗聴・Cookie奪取)
・セッション固定攻撃(事前にIDを仕込む)

 

セッションハイジャック

セッションハイジャックとは、セッションIDを盗み見る行為のこと。
具体的には以下のような手法がある。

種類 内容
盗聴 公共Wi-FiなどでHTTP通信を行った場合、通信内容が暗号化されていないため、ツールによって傍受される可能性がある。
傍受された通信からCookieを参照し、平文で送られたセッションIDが盗まれる。
XSS
(クロスサイトスクリプティング)
攻撃者がWebページに悪意あるJavaScriptを埋め込む。
ユーザーがそのページを開くと、JavaScriptの処理が実行されてCookieのセッションIDが攻撃者のサーバーに送信される。
物理的手段 ログインしたままの端末を放置してしまうことで、第三者が物理的に認証状態を不正利用する。

 

 

セッション固定攻撃

攻撃者があらかじめ用意したセッションIDをユーザーに使用させ、ログイン後にそのIDを使ってなりすます行為のこと。
具体的には以下のような流れで攻撃される。

 

手順 概要 具体例
攻撃者がセッションIDを取得 攻撃者が対象のWebサイトにアクセスし、認証前のセッションID(例:JSESSIONID=ABC123)を取得する。
取得したセッションIDをユーザーに送信 攻撃者が以下のようなURLをメールやSNSで送信する。
例): http://example.com/login?jsessionid=ABC123
ユーザーがこのリンクをクリックすると、セッションIDがブラウザにセットされる。
ユーザーが認証を行う 予め用意しておいたセッションIDがサーバー側で「認証済み」状態となる。
攻撃者が同じセッションIDを利用 攻撃者が同じセッションIDを利用してブラウザにアクセスすると、既に認証済みの状態で操作可能となる。

 

防衛策

セッションIDの盗難リスクに対して、以下のような防衛策を講じる必要がある。

防衛策 対応内容
セッションタイムアウト設定 一定時間操作されない場合はセッションを破棄することで、長期利用による乗っ取りを防止する。
セッションハイジャック対策となる。
同時ログイン制御 同一ユーザーの同時セッション数を制限することで、異常な多重利用を検知する。
セッションハイジャック、セッション固定攻撃対策となる。
HTTPSの強制 通信を暗号化することで、ネットワーク盗聴を防止する。
セッションハイジャック対策となる。
HttpOnly属性の付与 JavaScriptからCookieを参照できなくすることで、XSSによるセッションID漏洩を防止する。
セッションハイジャック対策となる。
URL埋め込み禁止 セッションIDがURLに露出することを禁止することで、セッションIDの共有を防止する。
セッション固定攻撃対策となる。

 

 

まとめ

 

☑ セッションIDは、ユーザーの認証状態を維持するための仕組みである

☑ セッションIDが第三者に盗まれると、本人になりすましてサイトを利用される恐れがある

☑ セッションIDの漏洩を防ぐためのセキュリティ対策が不可欠となる

 

スポンサーリンク