Hello there, ('ω')ノ
🔐 2段階認証とは?
一般的に、ログインには以下の2ステップを設けることでセキュリティを高めます:
- パスワードの入力(第1要素)
- 確認コード(SMSやアプリなど)の入力(第2要素)
これにより、仮にパスワードが漏れても、コードがなければログインできないようになっています。
❗ 実装ミスによるバイパスの可能性
⚠️ よくある構成ミス:
- パスワード入力後に一時セッションが開始され、次のページでコード入力を要求
- ところがこの状態で、保護されたページに直接アクセスできてしまうことがある
🎯 攻撃シナリオ(例)
- 攻撃者が被害者のパスワードを何らかの手段で入手
- ログインフォームでパスワードを入力し、認証ステップ1は通過
- 通常はここで2FAコード入力が求められるが、
- 直接
/my-account
のような保護ページにアクセス - サーバー側が2FAステータスを確認していなければログイン成功
🧪 テスト手順(Burp Suite活用)
- パスワード入力後の レスポンス内容とCookieの変化を確認
- 2FAコードの入力をスキップして、保護ページへの直接アクセスを試行
- そのリクエストをBurp Repeaterに送り、何が返るかを確認
✅ 防御策
対策内容 | 詳細 |
---|---|
🔐 セッションの状態管理 | 2FA未完了のセッションは「制限付き」にする |
✅ 各ページで2FA完了状態を検証 | すべての保護ページで2FAフラグを確認する |
🧪 ロジックテストの自動化 | QAやペネトレーションテストで 2FA ステータス確認を自動化 |
✅ まとめ
- 2FAを導入しても「実装が甘ければ意味がない」
- ステップ1とステップ2の間の状態管理の甘さがバイパスのカギ
- 保護ページは常に「2FA済みセッション」かどうかを確認すべき
Best regards, (^^ゞ