web-dev-qa-db-ja.com

IPからの試行回数が多すぎるためにログインできないことをユーザーに通知することのセキュリティ上の意味

コードレビュースタック交換で、IPからのログイン試行が多すぎるためにログイン試行が失敗したことをユーザーに通知するコードに応答して、

「絶対にしないでくださいメッセージエンドユーザーにログイン失敗の理由を伝えます。アプリケーションを攻撃するのに役立つ重要な情報を攻撃者に提供しています。ここで、攻撃者は、IP制限を回避するための非常に正確な情報を提供します。」

https://codereview.stackexchange.com/a/164608/93616

悪いセキュリティを実践していますか? 「ログイン試行回数が多すぎます」や「ログインできませんでした」などのあいまいな表現で説明する必要がありますか?

更新:あいまいな点がある場合、現在、試行回数が多すぎるロジックとメッセージは、試行が成功したかどうかに関係ありません。

42
Goose

ログインが失敗した理由をエンドユーザーに通知しないでください。潜在的な攻撃者に重要な情報を提供して、アプリケーションへの攻撃を支援します。

一方、ログインに失敗した理由をユーザーに通知しないと、ユーザビリティが損なわれる可能性があります。

ユーザーのIPが禁止されているか、ユーザーが間違ったパスワードを使用しているかを明確にしていない場合、誰かが自分のアカウントにアクセスし、パスワードを変更してロックアウトしたように思われるため、パニックになる可能性があります。事前入力されたパスワードでのログインが失敗した場合、最初に考えているのはIPブロックではなく侵入です。

また、単純なIPブロッキングメカニズムは効果がなく、追加の問題を引き起こす可能性があります。十分なリソースを持つ攻撃者にとっては、潜在的に バイパスするのは簡単 であり、他のユーザーとIPアドレスを共有している誰かがIP禁止を悪用して他のユーザーをロックアウトする可能性があります。代わりに、IPごとにn回失敗した後のCAPTCHAは、よりソフトなソリューションであり、アプリケーションにより適している可能性があります。

こちらもご覧ください:

80
Arminius

言及されていない一般的なメッセージを提供することには、セキュリティ上の利点があります。

アリスは、ボブのサーバーにアカウントを総当たり攻撃しようとしています。最初の数回の試行では、アリスは「ログイン試行に失敗しました」というメッセージを返します。次の試行で、「このIPアドレスからのログイン試行が多すぎます」と表示されます。彼女は、(a)この時点までに試したすべての資格情報が無効であったこと、(b)さらに試行する前に別のことをする必要があることを認識しています。

しかし、ボブがメッセージを変更しない場合はどうでしょうか?アリスはブルートフォースを続行し、試行ごとに一般的な「失敗したログイン試行」を取得し続けます認証情報が正しい場合でも。たまたま正しい資格情報を試した場合、ボブはIP制限を超えたためにその試みを拒否しますが、アリスはそれが理由であることを認識せず、それを誤った試みとして扱う必要があります(他に何かがある場合を除く)どちらがこの質問の範囲を超えているかを知る方法)。彼女の唯一の選択肢は、彼女がすでに正しい資格情報を見つけて移動したかどうかに気づかずに、検索を続けることです。

この利点は obscurityによるセキュリティ であることに注意してください。これは、ボブのIPブロックポリシーを知らないアリスに依存しているためです。設定によっては、この情報を取得するのは簡単です。たとえば、アリスがシステムの別のアカウントにアクセスできる場合(パブリックアカウントの登録を受け入れると簡単です)、試行錯誤を繰り返して、誤った試行が多すぎて最終的に正しい試行が拒否されるかどうかを確認できます。

他の回答はセキュリティとユーザビリティのトレードオフを説明しているので、私はそれを繰り返すことはしません。

14
Jon Bentley

はい、技術的には、攻撃者がブルートフォースボットネットを微調整するために使用できる情報を返しています。さらに、「このIPからのログイン試行回数が多すぎます」というエラーメッセージが標準ユーザーにとってどれほど役立つかはわかりません。また、熟練した攻撃者は、応答タイプの変化やタイミングの違いに気づき始め、おそらく何が起こっているのかを把握することにも注意してください。

CloudFlareなどのサービスの使用を検討してください。それらには、インタースティシャルページを動的に挿入したり、特定のシナリオでWAFルールを更新したりできるスクリプト可能なAPIがあります。 Troy Hunt には、Azure Functionsを使用してWindows Azureでこれを行う優れたチュートリアルがあります。

13
Dan Landberg

この場合、セキュリティとユーザビリティは相反する目標です。最も安全な実装はフィードバックを提供しませんが、ユーザーフレンドリーではありません。ログインのブルートフォーシングに対してシステムがどの程度影響を受けやすいか、他にどのような緩和策が実施されているか、およびユーザーの不便さに対して評価されたときに特定の緩和策がどの程度効果的であるかを決定する必要があります。

たとえば、コンシューマデバイスのログインを設計している場合、詳細なフィードバックを提供し、それを補うための追加の緩和策を導入することで、可能な限りユーザーフレンドリーにします。 HSMログインを設計している場合は、フィードバックを提供せず、デバイス全体のタイムアウトを負担します。

5
Kirill Sinitski

すべては、何を構築するかによって異なります。正当な試みを拒否することがそれほど重要ではなく、アプリケーションの堅牢性を本当に信頼していないブログやその他の派手なサイトである場合、攻撃である可能性のあるものからそれを保護し、理由を絶対に言わないでください。ログインを拒否します。

アプリケーションが十分に堅牢である場合、プロフェッショナルアプリケーションを構築していて、プロフェッショナルアクセスが単一のIPからのアクセスを制限しないことを期待している場合。その場合は、必ずその理由をユーザーに通知し、適切に応答するhot line(メッセージを読んで理解し、必要に応じて修正アクションを開始するために最大1営業日)を設定してください。 )。大規模な組織では、すべてのHTTPおよびHTTPSアクセスに対して単一の送信プロキシをセットアップすることが一般的であるためです。国内のさまざまな場所に何千人もの従業員がいて、すべてが明らかに同じIPアドレスを使用している場合があります。既知のプロキシからの無制限の接続を許可するホワイトリストで十分ですが、顧客の1人がネットワークを進化させてプロキシアドレスを変更した場合は、すぐに変更する準備ができている必要があります。

2
Serge Ballesta