セッションとは、クライアントとサーバ間の通信の最初〜終わりまでの一連の流れのことです。
HTTPはステートレスなので、プロトコルとしてはログイン中やログアウト済みなどといったステータスはアプリケーション側で管理しています
セッション管理の流れ
セッション管理はセッションクッキーを利用して実現されます。
セッションクッキーは、セッションの識別情報として扱われます。
セッションIDやセッション識別子を作るのは、webアプリ内で行います。
セッション識別子はランダムで推測不可能な長い文字列にします。
また、セッション接続子はログインごとに変えます。
セッションハイジャック
セッションハイジャックとは、セッションIDを推測したり、盗んだりすることで、ユーザになりすまして操作する攻撃です。
セッションハイジャック対策としては、下記があります。
- セッションIDは推測しにくいものにする、連番にしない
- セッションIDをURLクエリストリンクに載せない
- ログにセッションIDを残さない
- セキュア属性をつける
- セッションIDの有効期限は短めに設定する。
- セッションを固定値にしない
セッション固定化攻撃
セッションフィックセーション攻撃とも呼ばれます。
攻撃者の用意したセッションIDを正規利用者に強制使用させる攻撃手法です。
ログインする前にセッションIDを渡すことで、ログイン前に閲覧していた履歴なども管理することができます。
そのため、ECサイトではアクセスした段階でセッションIDを設定することが多いのです。
攻撃者はこういったサイトのセッションIDを自分のセッションIDに書き換えることで攻撃します。
対策としては、ログイン前とログイン後のセッションIDを変えることが効果的です。