総当たり攻撃に対する防御策をどのように適切に実装しますか? Xの試行後に誰かがログインを試み、それらをブロックしようとした回数を保存するのが最善ですか?そして、「誰か」はどのように識別されますか?セッションで? IP?
アカウントのロックアウトは1つのオプションで、ログインがx回失敗した後、アカウントが永続的にまたは一定期間ロックされます。ここでの問題は、攻撃者がパスワードを推測しようとした場合のサービス拒否のリスクと、アカウントのリセットの管理オーバーヘッド(自動リセットが利用できない場合)です。
別のオプションは、CAPTCHAをログインプロセスに導入することです。これは、自動化された攻撃を制限し、アカウントのロックアウトによるサービス拒否を阻止することを目的としています。それに関する問題は、アクセシビリティ要件と自動化されたCAPTCHAクラッキングである可能性があります。私が見たところでは、一部のCAPTCHAは他のソフトウェアよりもソフトウェアのクラックが簡単です。
3番目のオプションは、ログインプロセスに漸進的な遅延を導入することです。これにより、間違ったログが記録されるたびにプロセスが遅くなります。これは実際のユーザーへの影響は限定的ですが、ブルートフォースの自動化をはるかに困難にします。
攻撃を行っている「誰か」を特定することに関する質問の2番目の部分に関しては、攻撃の内容によって異なります。 1人のユーザーを攻撃しているだけの場合、ユーザー名は識別子であり、アクションはそのアカウントに関連付けられています。広範囲のユーザーに対してブルートフォーシングを行う場合、ソースIP(おそらくブラウザーエージェントと組み合わせる)はオプションです。それは完璧ではありません(例えば、ボットネットの使用、エージェントのなりすまし)が、おそらくあなたが続けなければならない唯一の情報です。
ブルートフォースを否定する答えは、多数の試行を拒否することです。ここで、試行回数はキースペースとリスクの受け入れによって定義されます。
それぞれの状況で異なる解決策が考えられます。
肉のスペース
コンピュータ
すべてのソリューションには、人生の他のすべてと同様にトレードオフがあります。
重要なことは、「誰か」をどのように識別するかです。
IPアドレスでそれを行うことはできません-多くのユーザーが同じクライアントアドレスを持っているように見える可能性があります(これは、IPV4アドレス不足の問題が継続することでさらに頻繁になるでしょう)。
1人のユーザーが複数のクライアントアドレスから接続しているように見える場合があります。 Torを介してAOLの負荷分散プロキシを使用するか、それほど正当ではありません。
それ以外のものはクライアントから提供されるデータです。そのため、クライアントは設定したCookie、ユーザーエージェント文字列などを変更する可能性があります。
唯一の実用的なアプローチは、要求にヒューリスティックスコアリングを適用して、以前の試行と照合しようとすることですが、高度な攻撃と正当なユーザーを区別することは依然として不可能です。
クライアントがサイトをブルートフォースで攻撃しようとしていると見なすスコアのしきい値を設定します(-20など)。
セッションCookie(ユーザー名/パスワードの入力を求めるページで設定されているnotである)が参照する現在の有効なセッションを要求することが開始です-Cookieに認証の詳細が表示されていない場合は、別のリダイレクトにリダイレクトしますCookieをドロップし、スコア-10、および(たとえば)スコア2でセッションをクライアントIPアドレスに初期化するページ。同じアドレスから複数の有効なユーザーが表示されるようになると、動的スコアリングメカニズムを使用できます。同様に、ユーザーエージェントとユーザー名による動的スコアリングを維持できます。
存在しないユーザーにcookie + authが提示される場合は、セッションに-5、クライアントアドレスに-1、ユーザー名に-5のスコアを追加します。
Cookie + authに無効なパスワードが提示された場合、セッションに-3、クライアントアドレスに-1、ユーザー名に-4のスコアを追加します。
Cookie + auth + valid passwordがクライアントアドレスのスコアから+4、ユーザー名に+3、ユーザーエージェントに+2を追加する場合。
注意:クライアントアドレス/ユーザーエージェント/ユーザー名に対して保持されているスコアが回復するように減衰を設定する必要もあります。たとえば、+ 2 /時間
スコアがしきい値を超えるとどうなるかを考える必要があります。誰かがあなたのサイトへのアクセスをブロックするためのメカニズムを提供しましたか?
特定のユーザー名のスコアが高いアクセスをブロックしている場合は、そのアカウントの登録ユーザーにリセットURLを記載したメールを送信して、ユーザー名の保留スコアをリセットし、ユーザーエージェントの保留スコアを削減できるようにします/住所。
私が提案するように、あなたはウェブアプリケーションでログイン/パスワードを総当たりにすることを意味します。
誰も手動で総当たり攻撃を行うことはありません。したがって、これが認証を試みる人間であることに疑いがある場合は、たとえば、3-dの失敗したログイン試行からCaptchaを見せてください。さらに、ログイン試行の間にタイムアウトを設定できますが、これは異なるIPからの分散型攻撃には機能しません。次に、ブルートフォーシングには2つのタイプがあります。ブラインドフォース、ランダムなログイン/パスワードの試行、および一部のユーザーに対する攻撃です。前回の攻撃では、しばらくの間アカウントをブロックしたり、メールでユーザーに通知するなどの機能を実装することが効果的です。特にサイトが人気がある場合、盲目的なブルートフォースの緩和策を実装するのは難しい場合があります。この場合、IP /国/ブラウザ/その他のようなユーザー情報を追跡でき、これの組み合わせを理解することで、これが有効なユーザーであるかどうかを推測できます。これの補遺として、ユーザーはログインに成功したらCookieを保存し、後で確認するために、長持ちするCookieを試すことができます。
Webアプリケーションタイプのソリューションがなければ、Apacheのmod_evasiveのようなサーバーレベルのソリューションを実装することが可能です。または、特にそのような目的のために、独自のWebサーバーモジュールを作成することもできます。
確かに、ブルートフォース攻撃の緩和策を強化する方法は他にもたくさんありますが、多くの場合、ノイズが多く、役に立たず、厄介です。 KISSを使用してください。
以前のログインとログイン試行の長いIPを保存します。
Nが失敗した後、キャプチャに対してそれらを置きます。
履歴にログインが成功せず、試行回数が多いアドレスをすばやくブロックします。
同時送信元アドレスまたは非人道的な速度/スタミナラピッド試行があるアドレスをすばやくブロックします。
また、これらの回答はいずれも、攻撃者が1つのパスワードを使用してすべてのアカウントに対してそれを試行するブルートフォースの方法、通常のプロセスの逆転、および一般に保護されていないものを考慮に入れていません。
もちろん、同じパスワードで異なるアカウントに対して複数の試行を監視するプロセスを持つこともできますが、そのIPをブロックするのと同じように、単一のアドレスからのものであってもブロックするのは非常に難しいですか?それは有効なユーザーでも使用できますか、またはそのパスワードでログインを削除しますか?そのパスワードで有効なユーザーをロックアウトするリスクがありますか?
そしてもちろん、攻撃者がこのようなことを分散ネットワークから実行したり、長い時間枠で実行したりする場合、どのようにしてインシデントを攻撃プロファイルに関連付けますか?
一般的な業界メカニズムにはロックアウトが含まれます
まず、処理するシナリオ/攻撃を理解することは理にかなっています。
(参照してください。それほど単純ではありません...)そして、これらの各部分には異なるソリューションがあります...
ビジネスWebサイトの場合は、証明書とパスワード認証を使用します。有効な証明書がないと、パスワードを推測することはできません。証明書の代わりにRSA SecurIDなどを使用することもできます。