セッション固定の再発防止
A 社の Web アプリケーションは,セッション ID を暗号論的に安全な疑似乱数生成器で生成して Cookie で管理しているが,URL パラメータで渡されたセッション ID も受け付け,ログインの前後で同じセッション ID を使い続けている。ある利用者が,攻撃者から送られたリンクを経由してログインした後に,攻撃者に利用者になりすまされた。リンクには,攻撃者がこのサイトにアクセスして取得したセッション ID が含まれていた。再発防止策として,最も有効なものはどれか。
- アセッション ID の長さを増やし,攻撃者がセッション ID を推測することをより困難にする。
- イログインが成功した時点で新たなセッション ID を発行し,ログイン前のセッション ID を無効にする。
- ウ重要な処理を行う画面に推測困難なトークンを埋め込み,送信されたトークンが正しい場合にだけ処理を実行する。
- エログイン画面を HTTPS で提供し,利用者のパスワードが通信経路上で盗聴されないようにする。
正解と解説を見る
正解 イ
この問題の基礎知識
- セッション固定攻撃は,攻撃者が取得したセッション ID を利用者に使わせ,利用者のログインでその ID が認証済みになった後に,攻撃者が同じ ID でなりすます攻撃である。
- セッション ID を URL パラメータでも受け付けると,リンクを経由して攻撃者が指定したセッション ID を利用者に使わせやすくなる。
- セッション固定攻撃への基本的な対策は,ログインなど権限が変わる時点でセッション ID を再生成し,古い ID を無効にすることである。
- セッション ID の推測困難性は推測によるハイジャック,トークンの検証は CSRF,HTTPS は通信の盗聴への対策であり,それぞれ防ぐ攻撃が異なる。
アセッション ID の長さを増やし,攻撃者がセッション ID を推測することをより困難にする。
攻撃者はセッション ID を推測したのではなく,サイトから正規に発行された ID を利用者に使わせている。ID を長くしても,このセッション固定の手口は防げない。
イログインが成功した時点で新たなセッション ID を発行し,ログイン前のセッション ID を無効にする。正解
攻撃者が利用者に使わせたセッション ID はログインの時点で無効になるので,攻撃者はその ID で利用者になりすませなくなる。認証など権限が変わる時点でのセッション ID の再生成は,セッション固定攻撃への基本的な対策である。
ウ重要な処理を行う画面に推測困難なトークンを埋め込み,送信されたトークンが正しい場合にだけ処理を実行する。
トークンの検証は CSRF への対策である。この事例の攻撃者は,利用者のセッションを使って自らアクセスでき,画面から正規のトークンも取得できるので防げない。
エログイン画面を HTTPS で提供し,利用者のパスワードが通信経路上で盗聴されないようにする。
この事例ではパスワードは盗まれておらず,攻撃者は,事前に取得したセッション ID が利用者のログインによって認証済みになることを利用している。パスワードの盗聴対策では防げない。
検証用の出典出典照合済み
OWASP Session Management Cheat Sheet / CWE-384 Session Fixation / OWASP Cross-Site Request Forgery Prevention Cheat Sheet照合の根拠(4 件)
- 事例の手口: 攻撃者が知っているセッション ID を利用者に使わせ,認証後のセッションを利用する(セッション固定)
An attacker is able to force a known session identifier on a user so that, once the user authenticates, the attacker has access to the authenticated session.
CWE-384 · Description(新しいタブで開きます) - イ(正解): セッション ID の再生成がセッション固定攻撃の対策。ア(誤り): 攻撃者は ID を推測・収集するのではなく利用者に設定する。エ(誤り): HTTP か HTTPS かに関係しない
The session ID regeneration is mandatory to prevent session fixation attacks , where an attacker sets the session ID on the victim user's web browser instead of gathering the victim's session ID, as in most of the other session-based attacks, and independently of using HTTP or HTTPS.
OWASP Session Management Cheat Sheet · Renew the Session ID After Any Privilege Level Change(新しいタブで開きます) - エ(誤り): TLS(HTTPS)はセッション固定を防がない
It is important to emphasize that TLS does not protect against session ID prediction, brute force, client-side tampering or fixation;
OWASP Session Management Cheat Sheet · Transport Layer Security(新しいタブで開きます) - ウ(誤り): トークンは CSRF(攻撃者が有効なリクエストを作れないようにする)への対策であり,セッション自体を乗っ取った攻撃者は正規の画面からトークンを取得できる
CSRF tokens prevent CSRF because without a CSRF token, an attacker cannot create valid requests to the backend server.
OWASP Cross-Site Request Forgery Prevention Cheat Sheet · Synchronizer Token Pattern(新しいタブで開きます)
URL パラメータのセッション ID を受け付け,ログイン前後で ID を変えないので,攻撃者が取得した ID が利用者のログインで認証済みになる(セッション固定)。ログイン時の再生成で防げる。