セッション管理とCookieセキュリティ属性完全攻略|固定化攻撃・HttpOnly/Secure徹底解説
Webアプリケーションにおいて、利用者のログイン状態を維持・識別する中核技術が「セッション管理」です。IPA試験では、「セッション固定化攻撃(Session Fixation)」や「セッションハイジャック」の手口と、Cookieの各セキュリティ属性の役割が記述式・選択式ともに繰り返し出題されます。
1. セッション固定化攻撃(Session Fixation)のメカニズム
セッション固定化攻撃とは、攻撃者が事前に取得したセッションIDを利用者に踏ませ(強制し)、利用者がそのセッションIDのままログインを完了した後に、攻撃者が同じセッションIDを使って利用者のアカウントになりすます攻撃です。
- ステップ1: 攻撃者がターゲットサイトから有効なセッションID(例: SID=999)を取得。
- ステップ2: 攻撃者が罠リンク(URL引数やHTTPヘッダ注入など)で、SID=999 を利用者のブラウザにセットさせる。
- ステップ3: 利用者がそのセッションIDを保持したまま正規のユーザーIDとパスワードでログインする。
- ステップ4: サーバがセッションIDを変更せずにログイン状態へ昇格させた場合、攻撃者も同じ SID=999 を使って利用者のセッションを完全に乗っ取る。
2. Cookieの4大セキュリティ属性
Cookie属性 | ブラウザでの動作 | 防御できる攻撃・出題論点 |
|---|---|---|
HttpOnly 属性 | JavaScript(document.cookie)からのCookieへのアクセスを一切禁止する。 | 【XSSによるセッション奪取の防止】 XSS脆弱性があってもセッションCookieの盗聴を防ぐ。 |
Secure 属性 | HTTPS(暗号化通信)でのみCookieを送信し、平文HTTP通信では送信しない。 | 【盗聴・中間者攻撃の防止】 公衆Wi-Fi等でのHTTP平文通信によるCookie漏洩を防ぐ。 |
SameSite 属性 (Strict / Lax / None) | 異なるドメイン(クロスサイト)からのリクエスト時にCookie送信を制限する。 | 【CSRF攻撃の防止】 他サイト上の罠リンクやフォームからの自動Cookie送信を遮断する。 |
Domain / Path 属性 | Cookieが送信されるドメイン名およびURLパスの範囲を厳格に限定する。 | サブドメイン間での意図しないCookie共有や漏洩を防ぐ。 |
3. 安全なセッション管理の必須要件
- ログイン成功時のセッションID再生成: ログインが成功した瞬間に、既存のセッションIDを破棄し、新しいセッションIDを発行してセッション情報を引き継ぐ(または再構築する)。これによりセッション固定化攻撃を100%無効化できる。
- 推測困難なセッションIDの生成: 暗号論的擬似乱数生成器(CSPRNG)を用いて十分な長さ(128ビット以上)のランダム文字列を生成し、総当たり推測を防ぐ。
- セッションタイムアウトと完全破棄: 一定時間の無操作(アイドルタイムアウト)やログアウト時に、サーバ側でセッションデータを完全に無効化・破棄する。
4. 午後記述式試験(SC・AP)で使える得点キーワード・記述テンプレート
【定番記述フレーズ①(セッション固定化の根本対策)】 「認証が成功した直後に、セッションIDを新しく再生成して変更する。」(32字)
【定番記述フレーズ②(HttpOnly属性の効果)】 「CookieにHttpOnly属性を付与し、JavaScriptからの参照を禁止する。」(38字)
【定番記述フレーズ③(Secure属性の効果)】 「CookieにSecure属性を付与し、HTTPS通信時のみ送信を許可する。」(35字)
【定番記述フレーズ④(ログアウト時の処理)】 「ログアウト時にサーバ側のセッション情報を完全に削除して無効化する。」(34字)