問題 39★★☆

社内向けWebシステムは、ログイン前に発行したセッションIDをログイン後もそのまま使っている。 攻撃者が用意したセッションIDを利用者に使わせておけば、利用者のログイン後に 同じIDでなりすませると指摘された。この対策として、最も適切なものはどれか。

正解:ア

各選択肢の解説

  1. アログインに成功した時点で、新しいセッションIDを発行して使い始める。

    正解。ログインの前後でセッションIDを替えれば、攻撃者が仕込んだIDは ログイン後には使えなくなり、利用者のセッションを乗っ取れません。

  2. イログインの際に、パスワードに加えてワンタイムパスワードも求める。

    誤り。多要素認証は、パスワードを知られたときのなりすましを防ぐ対策です。 この攻撃では利用者本人が正しく認証を済ませ、その後のセッションに攻撃者が乗るので、 認証をどれほど強くしても防げません。認証の段階か、認証後の段階かで区別します。

  3. ウログインの失敗が一定回数続いたアカウントを、一時的にロックする。

    誤り。アカウントロックは、パスワードを次々に試す総当たり攻撃への対策です。 この攻撃ではパスワードを試していないので、失敗の回数は増えません。 パスワードを狙う攻撃か、セッションを狙う攻撃かで区別します。

  4. エ重要な操作のフォームに秘密の値を埋め込み、送信時にその値を照合する。

    誤り。これはクロスサイトリクエストフォージェリ(CSRF)への対策で、 利用者が意図しない送信を見分けるものです。攻撃者が同じセッションを使えれば、 その値も正規の画面から取得できてしまい、乗っ取りそのものは防げません。

理解を深めるために

入館証を先に渡しておく手口

受付で本人確認をしてから入館証を渡す建物で、入館証の番号が確認の前から決まっていたとします。 攻撃者が自分の知っている番号の入館証を来訪者に持たせておけば、来訪者が本人確認を通った後、 同じ番号で中に入れてしまいます。Webシステムでこれを行うのが、セッションIDを狙った セッションハイジャックの一種です(攻撃者がIDを先に決めておく形を、特にセッション固定攻撃と呼びます)。

なぜログイン時の再発行が効くのか

Webシステムは、ログインした利用者をセッションIDで見分けています。 つまりログイン後は、セッションIDを持っていることが本人である証拠になります。

  • ログイン前のIDをそのまま使うと、ログイン前に知られたIDがログイン後も通用する
  • ログイン成功時に新しいIDに切り替えれば、事前に知られたIDは本人の証拠でなくなる
  • 推測されにくいIDを使う、通信を暗号化してIDを盗聴させない、といった対策と組み合わせる

認証そのものを強くしても、認証が済んだ後の「証拠」が奪われれば意味がありません。 守る対象がパスワードではなくセッションIDだ、という点がこの問いの軸です。

混同しやすいものとの違い

対策 主に防ぐもの この攻撃への効果
ログイン時のセッションID再発行 セッションハイジャック(セッション固定) 仕込まれたIDが使えなくなる
多要素認証 パスワードを知られた後のなりすまし 本人が認証を済ませるので効かない
アカウントロック 総当たり攻撃 パスワードを試していないので効かない
秘密の値(トークン)の照合 CSRF 同じセッションなら値も取れてしまう

対策を選ぶときは、攻撃者が何を手に入れようとしているかを見ます。 パスワードならログインの強化、セッションIDならIDの扱い方の見直しが効きます。

前の問題へ次の問題へ