web-dev-qa-db-ja.com

ログイン試行のレート制限:IPまたはユーザー名でカウント

ログイン試行を制限する必要があります。

1つのオプションは、IPアドレスで試行をカウントし、IPをブロックすることです。欠点は、異なるユーザーが同じIPアドレスを持っている可能性があることです。別のオプションは、アカウント識別子(ユーザー名または電子メール)で制限してから、アカウントをブロックすることです(サポートによって手動でアクティブ化できます)。考えられる唯一の欠点は、悪意のあるユーザーがユーザー名を推測してブロックできることです...しかし、それ以外は、悪意のあるユーザーが別のIPを使用できるため、より安全だと思いませんか?

それを行うための推奨される方法は何ですか?

23
Moshe Shaham

あなたは両方を行うべきだと私は言うでしょう。

IPアドレスのレート制限のみを行う場合、ボットネットを制御する攻撃者は、弱いパスワードを使用してアカウントを総当たりする可能性があります。一意のIPを備えた10 000台のコンピューターがあり、それぞれに1時間あたり4回の試行が許可されている場合、1日あたりほぼ100万のパスワードを試すことができます。

ユーザー名のレート制限のみを行う場合、既存のユーザー名のリストを持つ攻撃者は、弱いパスワードを使用してアカウントを総当たりする可能性があります。たぶん、一部のユーザーは上位10個のパスワードのいずれかを使用しているため、すべてのアカウントでそれらを試した場合、どこかにアクセスすることになります。

もちろん、あらゆる種類の組み合わせを行うことができます。たとえば、X個の異なるIPがユーザー名でのログインに失敗した場合にのみユーザー名をブロックする可能性があるため、ユーザーがログインできないようにブロックしようとする攻撃者は、そのために少し動作する必要があります。

33
Anders

脅威モデル

それは本当にあなたの脅威モデルに依存します:

  • ユーザーに対するDOS攻撃は、ユーザーアカウントの侵害に比べてどれほどひどいですか?
  • 攻撃者は1人の特定のユーザーを攻撃したいですか、それともできるだけ多くの有効な資格情報を収集したいですか? (最初のケースではユーザー名でブロックし、2番目のケースではIPでブロックします)。
  • 正当なユーザーのブロックされたユーザー名のブロックを解除するのは簡単ですか?
  • ...

例としてebayを取り上げましょう:

  • DOS攻撃はかなり悪いでしょう。誰かが入札で競合しているすべてのユーザーがログインできないようにする可能性があります。
  • もちろん、アカウントの不正使用も良いことではありませんが、さらに情報を要求することで支払いを保護します(そうするべきだと思います)(たとえば、Paypalで支払う場合は、Paypalパスワードを入力する必要があります)。さらに、ユーザー名による禁止は、攻撃者が特定のユーザーを攻撃したい場合にのみセキュリティを追加します。できるだけ多くのアカウントが必要な場合、ユーザー名をブロックしても攻撃者は制限されません。 IPをブロックするだけです。

したがって、この例では、アプリケーションへのアクセスはやや重要であり、攻撃者は特定のユーザーアカウントを攻撃しません。IPによる制限は正しい決定であり、ユーザー名による制限は有害です。

別の例を見てみましょう:Webアプリケーションの管理者ログイン:

  • DOSについて心配する必要はないでしょう。はい、それはマイナーな煩わしさですが、管理者はおそらくアカウントを回復する簡単な方法を持っています。ログインページも非表示になっている可能性があるため、攻撃者はまずそれを推測する必要があります。
  • 攻撃者はその1つの管理者アカウントのみを攻撃したいと考えており、かなりの数のプロキシを持っている可能性があります。このアカウントをブロックすることは、ここでは理にかなっています。

したがって、ここでは、IPによるブロックは攻撃者への影響が少なく、ユーザー名によるブロックが正しい選択です。

17
tim

両方をレート制限する必要があります。

アカウントに(すべてのIPからの)ログイン試行を制限することはかなり標準的であり、ユーザーのパスワードを推測する試みを停止します。

また、試行されたすべてのアカウントに対する不正なログイン試行に対して各IPアドレスをレート制限する必要があります。そうすることで、1つのアカウントを使い果たして、別のアカウントを何度も試すことができなくなります。

もちろん、これは標準のアンチDDoSリクエスト制限の上にあります。

1
JamEngulfer