「セッションタイムアウトって何で必要なんですかね?」という問いがあった。
その人は「セッションデータの肥大化によるリソース枯渇や性能劣化を防止」という意見。
自分の場合、「それもあるかもしれないが、どちらかというとセキュリティ上の理由」という曖昧な回答。
というわけで調べてみました。
目次
ダイジェスト
セッションタイムアウトについてネットを調べると、
ほとんどはセキュリティの記事が出てくるので、主にセキュリティ上の理由だと理解した。
- セッションタイムアウトの主要な目的は、セッションハイジャック攻撃への対策です。
セッションの維持時間に比例して攻撃を受ける可能性が高くなるので、使っていないのであればセッションを終了した方が安全である、という考えで理解しました。 - セッションタイムアウト時間を決める際に次の内容が参考になると思います。
- 利便性とセキュリティのバランスを踏まえてセッションタイムアウト時間を決める必要がある。
- 米国連邦政府機関や米国業界向けの標準策定を行うNIST、ソフトウェア開発の標準化を行うOWASPの方針に沿って決めた方が安全である。
(お客様や社内に説明する際の根拠として提示しやすいこともあります。) - OWASPのガイドライン
Session Management Cheat Sheet: Session ExpirationCommon idle timeouts ranges are 2-5 minutes for high-value applications and 15-30 minutes for low risk applications. Absolute timeouts depend on how long a user usually uses the application. If the application is intended to be used by an office worker for a full day, an appropriate absolute timeout range could be between 4 and 8 hours.
- アイドルタイムアウト、絶対タイムアウトを実装すべき。
アイドルタイムアウト: ユーザの最後の操作時刻からセッションを維持し続ける時間。
絶対タイムアウト: セッション作成時刻からセッションを維持し続ける時間。(ユーザの操作有無に依存しない。セッションの最大有効時間の意。) - アイドルタイムアウト:
重要なアプリケーションの場合は2~5分、リスクの低いアプリケーションの場合は15~30分。 - 絶対タイムアウト:
例えば一般的な事務員を想定するなら4~8時間。
- アイドルタイムアウト、絶対タイムアウトを実装すべき。
- NISTのガイドライン
NIST Special Publication 800-63B: Digital Identity GuidelinesReauthentication of the subscriber SHALL be repeated following any period of inactivity lasting 30 minutes or longer.
- 30分以上活動がない場合は再認証しなければならない。
- その他、使用する多要素の組み合わせによって時間を決めるような記述がありますが、ぱっと理解できませんでした…
- GoogleやTwitter等のように、断続的に数時間や数日等の長いセッションを使用する場合はどうすれば良いのか?
これらのアプリケーションでは、次のような仕組みを設けることでリスクを低減している。- リモートログアウト: ログインしているデバイスの一覧を確認でき、必要に応じて特定デバイスからのセッションを終了させることができる。
(意図しないデバイスからの不正アクセス、友達のデバイスからのログアウト忘れ等をリモートから対処できる。) - 再認証: パスワード変更、メールアドレス変更等の重要な操作を行う前に再認証する。
(被害を限定的にできる。) - ログイン履歴: 不正利用が疑われる場合、ログインの履歴を確認することができる。
(不正アクセスされていないかを確認できる。) - 通知: パスワード変更、メールアドレス変更等の重要な操作が行われた際、ユーザに操作内容を通知する。
(不正アクセスを早めに検知でき、被害を最小化できる。)
- リモートログアウト: ログインしているデバイスの一覧を確認でき、必要に応じて特定デバイスからのセッションを終了させることができる。
- ここの記事を纏めるにあたり、次を参考にさせて頂きました。
Have you noticed that Google, Facebook, and Twitter keep you…