Hello there, ('ω')ノ
✅ ユーザー名列挙とは?
「そのユーザー名が存在するかどうか」をWebアプリの挙動から推測する攻撃手法です。
🎯 目的:
有効なユーザー名だけを絞り込んで、ブルートフォース攻撃を効率化すること
🔍 攻撃が成立する典型的なケース
① ログイン画面での挙動の違い
状況 | 表示メッセージ |
---|---|
存在しないユーザー | ユーザー名が無効です |
存在するがパスワードが間違い | パスワードが間違っています |
→ これにより、ユーザー名の存在有無を区別できてしまう
② 登録フォームでのメッセージ
- 例:
そのユーザー名は既に使われています
- → 存在するユーザー名がわかってしまう
③ パスワードリセットページ
- メールアドレス入力 → 「そのアドレスにはリセットリンクを送信しました」
- ※ただし、実際には送っていない場合でもこの表示をすることで対策可能(偽装メッセージ)
✅ なぜ危険なのか?
- 攻撃者が有効なユーザー一覧を作れる
- 対象が絞られるため、ブルートフォース攻撃のコストが激減
- 管理者アカウント(admin, support)などの存在も露呈
🔐 防ぐためには?
対策 | 内容 |
---|---|
✅ 一貫したエラーメッセージ | ユーザー名またはパスワードが違います を固定で表示 |
✅ 同じステータスコード | 例:常に HTTP 200 OK を返す |
✅ レスポンス時間を揃える | 違いが出ないように調整する |
✅ CAPTCHA の導入 | 自動試行の難易度を上げる |
✅ まとめ
- ユーザー名列挙は、Webアプリの“わずかな差”を見逃さない攻撃
- 存在確認のための正直なレスポンスは、攻撃者の手助けにしかならない
- 「本当にそのユーザーがいるか」は絶対に推測させてはいけない情報
Best regards, (^^ゞ