株式会社GENZが運営する技術ブログです。

  1. セキュリティ
  2. 112 view

「親切なシステムほど危ない」─ エラーメッセージが攻撃者への“手引き書”になる話

あなたの画面は、しゃべりすぎていないか

ある日、あなたが銀行の窓口に立ち寄ったとします。番号を伝えると窓口スタッフがこう言いました。

「その口座番号は存在します。ただし、暗証番号が違います」

丁寧ですよね。でも、ちょっと待ってください。「口座番号は存在する」というその一言、実は言わなくていい情報じゃないでしょうか?

これと同じことが、Webシステムのエラーメッセージでも起きています。ユーザへの親切心から実装した「わかりやすいエラーメッセージ」が、知らず知らずのうちに攻撃者への案内板になってしまっているケースは、実は非常に多いのです。

1. ログイン画面でのエラーメッセージ

認証失敗のとき

ログインに失敗したとき、こんなメッセージを表示していませんか?

  • 「ユーザIDが正しくありません」
  • 「パスワードが正しくありません」

ユーザにとっては「あ、IDを打ち間違えたのか」とすぐ気づけて便利です。しかし攻撃者にとっては、まったく別の意味を持ちます。

「パスワードが違います」→「このIDは実在する」

たったこれだけの情報でも、攻撃者にとっては金脈です。「このIDは本物だ」という確信を持って、次はパスワードを総当たりにかければいい。メッセージ一つで、攻撃の的を絞らせてしまうのです。

❌ NG例
ユーザIDが正しくありません「ユーザIDが正しくありません」
→ IDの存在が確定してしまう
✅ OK例
ユーザIDまたはパスワードが正しくありません「ユーザIDまたはパスワードが正しくありません」
→ どちらが誤りか曖昧にする

推奨される設計はシンプルです。IDが悪いのか、パスワードが悪いのか──あえて曖昧にする。この「わざと不親切にする設計」こそが、セキュリティの要です。

推奨メッセージ:「ユーザIDまたはパスワードが正しくありません」

 

アカウントロックのとき

連続したログイン失敗でアカウントをロックする仕組みは、立派なセキュリティ対策です。でも、そのロックを画面で知らせるのは要注意です。

  • 避けるべき表現:「連続で失敗したため、アカウントをロックしました」

この一文は攻撃者に「このIDは実在した」という確信を与えてしまいます。さらに言えば、「ロックさせることに成功した」という手応えを与え、攻撃継続の動機にさえなりかねません。

❌ NG例
ユーザIDが正しくありません「連続で失敗したため、アカウントをロックしました」
→ IDの実在を確定させてしまう
✅ OK例
ユーザIDまたはパスワードが正しくありません(通常の失敗と同じ文言)
「ユーザIDまたはパスワードが正しくありません」

→ ロックの事実を画面に出さない

では、どうするのが正解か?

  • 画面には通常の失敗メッセージと同じ文言を表示する
  • ロックの事実は、登録済みメールアドレスにのみ通知する

攻撃者には「何も起きていないように見せる」。本物のユーザにだけ、こっそり救済措置を届ける。これがベストプラクティスです。以下はメールによるロック通知の例です。


ロック通知メールの例

✅ ロックはメールのみで本人に通知(画面には表示しない)

2. パスワードリセット画面でのエラーメッセージ

「パスワードを忘れた」ページで自分のメールアドレスを入力したとき、こんなメッセージが出たことはありませんか?

  • 「ご入力いただいたメールアドレスは登録されていません」

ユーザには親切。でもこれは、攻撃者に「メールアドレスが実在するかどうか」を確認するツールを渡しているようなものです。特にメールアドレスがユーザIDを兼ねているシステムでは、これがアカウント列挙(実在するIDを機械的に探し出す手法)に直結します。

❌ NG例
ご入力いただいたメールアドレスは登録されていません「ご入力いただいたメールアドレスは登録されていません」
→ アカウントの有無が確認できてしまう
✅ OK例
ご入力いただいたアドレスが登録されている場合、再設定の案内を送信します「ご入力いただいたアドレスが登録されている場合、案内を送信します」
→ 登録有無にかかわらず同じ文言

✅ 推奨:登録があってもなくても画面には同じ文言を出す。実際の案内は登録がある場合にだけメールで届ける。

3. 新規登録・メールアドレス変更画面でのエラーメッセージ

新規登録しようとしたとき、こんなメッセージを見たことがあるでしょう。

  • 「このメールアドレスは既に登録されています」

これも一見、「同じアドレスで二重登録しようとしてるよ」と教えてくれる親切なメッセージです。しかし、これがプライバシー上の重大なリスクになります。

【シナリオ】

  1. 悪意のある第三者が、知人のメールアドレスを入力して登録操作をする
  2. 画面に「このメールアドレスは既に登録されています」と表示される
  3. 「あ、この人やっぱりこのアプリ使ってるんだ…」と確信を持たれる

マッチングアプリ・転職サイト・医療系サービスなど、利用していること自体を他人に知られたくないサービスでは、プライバシーの観点で致命的です。

❌ NG例
このメールアドレスは既に登録されています「このメールアドレスは既に登録されています」
→ 第三者に利用状況が漏れる
✅ OK例
入力いただいた内容を確認し、手続きの案内をメールで送信しました「入力いただいた内容を確認し、手続きの案内をメールで送信しました」
→ 登録有無を画面に出さない

✅ 推奨:
登録がない場合 → 本登録用URLをメールで送り、心当たりがなければ破棄するよう案内
登録がある場合 → 「既にアカウントをお持ちです。こちらからログインしてください」とメールで案内

アカウントが特定された後に待ち受けるもの

ここまで「エラーメッセージからアカウントが特定される危険性」を見てきました。では実際に、攻撃者がIDを特定した後、何をしてくるのでしょうか。

  • 総当たり攻撃(ブルートフォース攻撃)
    IDが判明したなら、あとはパスワードを総当たりするだけ。ツールを使えば膨大なパターンを高速で試せます。IDが固定されている分、パスワードさえ突破できればアカウントを乗っ取ることが可能です。
  • フィッシングメール
    「このサービスを使っている人」とわかっているから、偽のログインメールへの反応率が格段に上がります。無差別に送るより、はるかに効果的です。
  • リスト型攻撃(パスワードリスト攻撃)
    過去に流出した他サービスの「IDとパスワードのセット」を使ってログインを試みます。パスワードを使い回しているユーザを狙い撃ちにします。
  • アカウントロックアウト嫌がらせ
    特定のIDに対して意図的にログイン失敗を繰り返し、本人をサービスから締め出す。金銭目的でなく、純粋な嫌がらせとして行われるケースもあります。

まとめ:「何を表示しないか」を設計する

エラーメッセージの設計で大切な原則は、「攻撃者に何も教えない」こと。「何を表示するか」と同じくらい、「何を表示しないか」を意識した設計が、安全なシステムを作る第一歩です。

シーン 避けるべき表現 推奨する表現
ログイン失敗 「ユーザIDが違います」
「パスワードが違います」
「ユーザIDまたはパスワードが正しくありません」
アカウントロック 「アカウントをロックしました」
(画面に表示)
通常と同じ失敗メッセージ
+ メールのみで通知
パスワードリセット 「このメールは登録されていません」 「登録されている場合、案内を送信します」
新規登録 「このメールは既に登録されています」 「手続きの案内をメールで送信しました」

 

セキュリティの不安、GENZと一緒に解消しませんか?

ユーザーへの「親切心」が、意図せず攻撃者への「ヒント」になってしまうのは非常に怖いですよね。
私たちGENZは、そんなエンジニアや運営者の皆様の悩みに寄り添い、安全なシステム作りをサポートします。小さな疑問やちょっとした確認からでも構いません。専門家の目線で貴社のシステムをしっかりチェックし、確かな安心をお届けします。まずは、お気軽にお問い合わせください!

脆弱性診断・セキュリティ テスト -株式会社GENZ – [GENZ, Inc.]

 
<過去の関連記事>
脆弱性診断スキャンツール比較まとめ|費用・機能・強み/弱み・開発国まで徹底整理
脆弱性診断とフォレンジック調査の違いとは?“事前”と“事後”をつなぐセキュリティ対応戦略
DDoS攻撃とXSS攻撃の違い |「家」に例えて学ぶサイバー攻撃の本質

セキュリティの最近記事

  1. 「親切なシステムほど危ない」─ エラーメッセージが攻撃者への“手引き書”になる話

  2. DDoS攻撃とXSS攻撃の違い |「家」に例えて学ぶサイバー攻撃の本質

  3. 脆弱性診断スキャンツール比較まとめ|費用・機能・強み/弱み・開発国まで徹底整理

  4. 脆弱性診断とフォレンジック調査の違いとは?“事前”と“事後”をつなぐセキュリティ対応戦略

関連記事