web-dev-qa-db-ja.com

アプリにパスワードをスプレーするためのソリューション

ログイン用の入力フィールドがユーザー名とパスワードであるWebアプリケーションがあります。ブルートフォース攻撃を防ぐために、有効なユーザー名でパスワードが正しくない5回の無効な試行に対してロックアウト機能を実装しました。

侵入テスターは、同じパスワードを使用しましたが、有効なパスワードが見つかるまでユーザー名を列挙しました。ユーザー名フィールドは常に変更されるため、ロックアウトによってそれを防ぐことはできません。ファイアウォールがこれを自動化された攻撃として分類し、それをブロックするための最小しきい値をわずかに下回る速度で列挙を行いました。

これを処理する唯一の方法はプログラムであるようです。私はいくつかの解決策を心に留めていますが、私は車輪を再発明したくありません。これをプログラムで処理する方法に関する解決策はありますか?

3
davshowhan449

サーバーでの失敗したログインを、攻撃者が持ついくつかの特徴と関連付ける必要があります。通常、これはIPにすることができますが、アプリの構築方法とアプリが収集するデータに応じて、他のオプションがある場合があります。

つまり、すべてのユーザーで失敗したログインを一定期間追跡する必要があります。

多くのアカウントでログインに失敗しているIPを特定したら、応答方法に関していくつかの難しいオプションがあります。 IPをブロックして、そのIPを使用するすべての正当なユーザーをロックアウトするか、ロックアウトする前に、IPが他の正当なユーザーによって使用されているかどうかを確認します(つまり、IPが正当であるかどうかを判断します)。

IPブロッキングは粗雑でエラーが発生しやすいものです。攻撃者がIPを循環するのは、ユーザー名を循環するのと同じくらい簡単です。また、正当なユーザーをロックアウトする可能性もあります。

別のレイヤーで問題に完全に取り組むこともできます。ユーザーを保護する2FAを実装できます。これは、ログ分析を通じてユーザーパスワードを保護する必要がないことを意味します。または、パスワードスプレーに対して脆弱なユーザーが自分自身を保護するのではなく、教育またはより優れたパスワードガイダンスを必要とするという決定を下すことができます。

ここでの問題は、アプリがパスワードスプレーに対して脆弱であることではなく、パスワードが推測されやすいことです。

2
schroeder