Shikata Ga Nai

Private? There is no such things.

パスワード認証における脆弱性の仕組みと攻撃手法

Hello there, ('ω')ノ

✅ パスワードベースのログインとは?

Webサイトの多くは、ユーザ名とパスワードの組み合わせでログイン認証を行います。 この場合、「正しいパスワードを知っている」ということが本人である証拠とされます。

つまり、攻撃者が他人のパスワードを推測または盗むことができれば、なりすましが可能になります。


✅ 攻撃者の目的:他人のアカウントにログインすること

これを実現するための代表的な手法が:

🔓 ブルートフォース攻撃(総当たり攻撃)


🔍 ブルートフォース攻撃とは?

ユーザ名とパスワードの組み合わせを、自動ツールで高速に試す攻撃です。

攻撃者は以下のようなリストを使って攻撃を行います:

  • 一般的なパスワード一覧(例:password123, admin, qwerty)
  • 推測しやすいユーザ名(例:admin, firstname.lastname@会社.com)

特にメールアドレス形式のユーザ名はパターンが読みやすいため、狙われやすいです。


✅ ユーザ名の推測(列挙)

ユーザ名が存在するかをエラーメッセージや反応の違いから判別できることがあります。これを「ユーザ名列挙」と言います。

観察すべきポイント:

ポイント 説明
ステータスコードの違い 無効なユーザ名だと401、正しいユーザ名+間違ったパスワードだと403など
エラーメッセージの違い 「ユーザが存在しません」 vs 「パスワードが間違っています」などの微妙な違い
応答時間の差 正しいユーザ名だとパスワード検証が入る分、処理時間が微妙に長くなる

✅ パスワードの推測が意外と簡単な理由

多くのサイトでは複雑なパスワードポリシーを導入していますが、以下のような人間のクセを突かれがちです:

ユーザの行動
単純な語を少し変える mypasswordMypassword1!, Myp4$$w0rd
規則的な更新 Mypassword1!Mypassword2!, Mypassword1?
使い回し 別のサイトと同じパスワードを使う

つまり、ポリシーを満たしていても「予測可能なルール」に沿っていることが多いため、攻撃者はそれをテンプレートとして攻撃を組み立てます。


✅ 攻撃に使われるツールと手法

攻撃者は以下のようなツールを使って、大量の組み合わせを自動で試します:

  • Burp Suite Intruder
  • Hydra
  • Medusa
  • custom scripts + wordlists(rockyou.txtなど)

✅ 対策が甘いとどうなる?

状況 起こりうること
アカウントロックなし 同じアカウントに何千回でもログイン試行される
CAPTCHAなし ボットで無制限にログイン試行できる
応答の違いあり 有効なユーザ名だけ抽出される(列挙成功)

✅ 攻撃者の視点:どうやって狙うか?

  1. ユーザ名を列挙する

    • ログインフォームや登録フォームでの反応を観察
  2. 既知のパスワードリストを使う

    • 人間のクセを活かして組み合わせを作成
  3. タイミングや応答の違いでヒントを得る

    • 応答時間が長い → パスワードチェックしてる? → ユーザ名は存在してる?

✅ 実際のWeb診断時のチェックポイント

  • ログイン失敗時のエラーやステータスコードを細かく確認
  • 同じユーザに何回でも試せるかどうか(ロックアウトの有無)
  • パスワード再設定フローのURLが改ざん可能か?
  • CAPTCHAや2FA(多要素認証)の有無
  • 応答時間にパターンがあるかを統計的に計測

✅ 防御策

対策 効果
アカウントロック機能 試行回数制限
CAPTCHA導入 自動化ツールの防止
同一メッセージ・ステータスコード ユーザ名列挙対策
適切な応答時間調整 タイミング推測防止
多要素認証の導入 パスワードが漏れても防止可能

🔚 まとめ

パスワードベースの認証は身近でわかりやすい反面、「人間のクセ」と「実装ミス」が組み合わさると大きなセキュリティホールになります。

攻撃者は、ツールの力+人間心理+実装の隙を利用して、不正ログインを狙っています。

診断者・開発者として、脆弱な実装を見逃さずに改善する力を身につけることが非常に重要です。

Best regards, (^^ゞ