私が理解していることから、次のような有益な失敗したログインメッセージを表示することは、セキュリティの習慣としては不適切です。
入力したメールは存在しません
の代わりに
不正な電子メール/パスワードの組み合わせ
ユーザー名の列挙につながる可能性があるためです。これはログインを列挙するための本当に効果的な方法ですか?これを悪用できる唯一の方法は、数百万の電子メールアドレスの膨大なリストを作成し、アカウントがあるかどうかを確認することです。そこにあるメールアドレスの数を考えると、これは長い道のりのようです。このタイプの欠陥が悪用されている実例はありますか?
架空の、もっとも説得力のあるシナリオの例を挙げましょう。
Bobという名前の意欲的なハッカーがいます。晴れた朝のある朝、ボブは、HandBookという名前の人気のソーシャルネットワーキングサイトでSQLインジェクションの欠陥を発見しました。このSQLインジェクションの欠陥を利用して、ボブはHandBookに登録されたアカウントの電子メールアドレスとパスワードのリストをダンプすることに成功しました。 HandBookにはセキュリティチームがいるため、すべてのパスワードはMD5
で無塩ハッシュ化されます。ボブは自分の信頼できるレインボーテーブルを解読し、ユーザーアカウントの86%のプレーンテキストパスワードを回復することに成功しました。
ボブは次に何をしますか?ボブは、HandBookの86%が10代の若者であることを知っています。 10代の若者は1つのソーシャルネットワーキングサイトよりも何を愛していますか? もちろん2つのソーシャルネットワーキングサイト!ボブは、2番目の人気のソーシャルネットワーキングサイトであるChatterの認証サービスに対してクラックすることに成功したすべての電子メールアドレスとパスワードの組み合わせを試すことにしました。 10代の若者は10代の若者であるため、強力なパスワードポリシーはありません。ボブは、同じパスワードまたは類似のバリアントを試すだけで、76%のユーザーアカウントにアクセスできます。 Chatterのログインフォームが存在しないメールアドレスでログインしようとしたときに親切に通知されたので、彼はこれを非常に迅速に達成することができました。
これは欠陥ですか?はい、可能です。これについては、別の answers で触れました。これは大きな問題ではない可能性があることが指摘されていますif登録されたアカウントのユーザー名は、たとえば登録ページを介して別の方法で列挙できます。ただし、多くの登録ページはCAPTCHAで保護されているため、CAPTCHAに対する自動化された試みがはるかに困難になります。
これは古い伝承です。
昔は、人々は メインフレーム と非常に貧弱なパスワードを使用していたため、アカウント名の保護は「重要」でした:攻撃者が実際のユーザーの名前を知っていれば、パスワードを試すことができ、そのときは数十のパスワードを試してもうまくいく傾向がありました。
もちろん、ユーザーの名前は実際には秘密の情報ではないため、これは満足のいくものではありませんでした。強力なパスワードを使用する方がはるかに優れていました。
今日、ユーザー名を非表示にすることはそれほど重要ではなく、一部のコンテキストでは不可能です。たとえば、ユーザーが自分の選択した「名前」を使用してWebサイトに登録する場合、Webサイトは重複について警告する必要があり、それは避けられません。サイトは、同じ名前の2人のユーザーを許容できません。そのため、ユーザー名を実際に非表示にすることはできません。したがって、ユーザー名を非表示にしても意味がありません。 @Terryが言及しているように、登録ページのCAPTCHAは、ユーザー名の列挙を自動的に実行することを難しくする可能性があります(ただし、「harder」は「hard」と同じではありません)。
そのため、存在しないログイン名と不正なパスワードを区別しないログイン失敗メッセージは依然として広く使用されていますが、伝統のために、合理的な理由。
ただし、そこには botnets があり、ランダムなIPアドレスで「一般的なユーザー名とパスワード」を使用してSSHログインを試行することで複製しようとしています。 Linuxサーバーのauth.log
ファイルを調べるだけで、これらの試みが表示されます。このようなボットネットは何年もの間それを行ってきました。彼らは可能性がある伝統の感覚からこれを行います(邪悪な人々が非邪悪な人々よりも彼らがすることでより有能であると信じる理由はありません)が、それは可能ですこの種のブルートフォースは、無視できない成功確率で実際に機能すること。不正なログイン名と不正なパスワードを区別する失敗メッセージは、これらのボットネットにのみ役立ちます。
したがって、ユーザー名の漏えいを回避するという概念全体は、ほとんどが昔からの歴史的な名残ですが、一部のケースでは、主に無知な攻撃者による大規模な総当り力でも、ある程度の価値がある可能性があります。
攻撃者がソーシャルエンジニアリング攻撃を行っている場合。攻撃者は、被害者の電子メールアドレスをログインフォームに入力する可能性があります。その後、特定のメールで被害者が登録されているかどうかを知ることができます。被害者がWebサイトに登録されている場合、攻撃者はそのWebサイトにアカウントを作成し、ソーシャルエンジニアリング攻撃を試みます。攻撃者を阻止することはできないと思いますが、「入力した電子メールは存在しません」というメッセージを出さないことで、攻撃が遅くなるはずです。