レート制限*非*認証済みリクエスト


11

レート制限も行うロードバランサーがあるとします。レート制限は、ログインしているユーザーにとっては非常に簡単に思えます。JWTを確認し、メモリ内のデータストアを使用して、そのユーザーの過去10秒間のリクエスト数を確認してください。

ただし、ログインしていない(認証されていない)ユーザーについてはどうですか?誰から、またはどこからリクエストが送信されているのか正確にはわからないため、これらのリクエストを簡単にレート制限することはできません。

AWSや他のホスティングプラットフォームにこれに対する組み込みのソリューションはありますか?ログインしたユーザーのレート制限ロジックを手動で処理する必要があるようですが、ログインしていないユーザーはどうですか?

私の推測/希望は、ホスティングプラットフォームで認証されていないリクエストをレート制限するための組み込みメカニズムがある可能性があることです。すべてお知らせください。


2
このページでは、ログインしているユーザーについて言及することはありません。。実際には、技術はログインしていないユーザーを意味し、パスワードのブルートフォース攻撃の緩和策として引用されているが説明
ロバート・ハーヴェイ

1
レート制限を使用する理由は何ですか?それは、サービス拒否攻撃に対抗すること、ユーザーが支払いプランを超えないようにすること、他に何かですか?ユースケースは、効果的に使用できるメソッドに影響します。
バートファンインゲンシェナウ2018

1
この質問はすることができる、より適しsecurity.stackexchange.com私はそれがオフトピックだとは言わないよけれども、
Peeyush Kushwaha

@BartvanIngenSchenau上記すべてですか?

なぜ2つの異なるレート制限が必要なのですか?制約/機能の異なる「プラン」を販売していますか?
Laiv、

回答:


9

ただし、ログインしていない(認証されていない)ユーザーについてはどうですか?誰から、またはどこからリクエストが送信されているのか正確にはわからないため、これらのリクエストを簡単にレート制限することはできません。

あなたが取ることができるいくつかのアプローチがあります。1つは、適度に信頼できる発信元識別子(IPアドレスなど)が必要なことです。IPアドレスでレート制限を行うことができるため、侵害された単一のマシンへの攻撃が制限されます。これは非常に単純なアプローチですが、大規模なネットワークプロバイダーが単一の送信IPアドレスしか使用できないため、NATの背後に非常に多くのユーザーを隠すことができるという欠点があります。

レート制限のもう1つの方法は、認証されていない要求に対して作業の証明を要求することです。サーバーはチャレンジコードを発行します。認証されていないリクエスト(ログインリクエストなど)を行うクライアントは、リクエストが処理される前にリソースを大量に消費するレスポンスを計算する必要があります。このアイデアの一般的な実装では、クライアントが部分的なハッシュ復元を計算する必要があります。


「仕事の証明」でDOS攻撃を防ぐにはどうすればよいですか。クライアントはチャレンジを無視して、失敗するまでリクエストを送信し続けることができます。課題を処理する3番目のプロセスはありますか?
Laiv、

4
@Laiv POWは、他のほとんどのレート制限スキームが失敗する中央データベースに接続することなく、確実に発行および配布チェックできます。防御とスケールファクタの増加は、攻撃者の攻撃をスケールアウトするよりも、あなたと正当なユーザーの方が安価であるため、攻撃者の攻撃のコストが増加します。また、低電力デバイス(侵害されたプリンター、IOT、ルーターなど)が効果的な攻撃プラットフォームとして使用されることを効果的に排除するため、システムを攻撃する経済的阻害要因を生み出します。
リーライアン

6

認証されたユーザーからのリクエストか匿名ユーザーからのリクエストかを知るには、必ずリクエストを処理する必要があります(ただし迅速に)。これは、アプリケーションがサービス拒否攻撃に対して脆弱であることを意味します。

1秒あたりの全体的なリクエストを確認する必要があります。特定の数を超えた場合は、残りを無視するだけです。その数は、通常の機能中に問題を引き起こさないように十分に高くする必要がありますが、そのような攻撃から保護する必要があります。

また、原則として、少なくともDOS攻撃に関しては、認証されたユーザーからの攻撃ではないと想定しないでください。弱いパスワードを使用すると、誰かが古いユーザーの身元を簡単に推測できるようになります。したがって、そのようなチェックを行うことができると仮定すると、(人間の)ユーザーは、多数の個々のユーザーがいるからといって、そのような速度で要求を実行する必要はありません。


IPアドレスを使用して、それぞれに高いレート制限を設定できると思います。うまく調整されたDoS攻撃は何千ものIPアドレスを使用することができると思いますか?おそらくもっとある?idk ...同じIPアドレスが複数の異なるクライアントに使用される可能性があることは知っていますが、同じユーザーである可能性が高いと思いますよね?
Alexander Mills

@AlexanderMillsさて、同じIPアドレスからの複数のリクエストをチェックするアルゴリズムを決定するとします。数千があっても、1000を超えるリクエストに対して繰り返されます。サーバーは特定のIPアドレスからの最初のリクエストをログに記録し、フラッディングが開始されます。サーバーはすでにリクエストでバックログされています。同じIPから2回目の繰り返しに到達するのに十分なリクエストを処理することさえできません(正当なリクエストである可能性があります)ところで)。同じIPのみが使用されるDoS攻撃から保護します。どちらかといえば両方を使用する方が良いです。:P
Neil

0

Cloudflareの主な製品の 1つは、API / Webサーバーにインテリジェントなプロキシを提供することによるサービス拒否攻撃からの保護です。基本サービスは無料です。彼らは、CDNサービスや負荷分散などの他の関連サービスから収益を得ています。また、より高度で制御可能なレート制限サービスも提供しています。現在のところ、1万件の有効なリクエストごとにUS $ .05のレート(拒否されたリクエストは無料)ですが、有料プランにアップグレードして複数のグローバルルールを取得する必要があります。

ドメインのネームサーバーを制御できる限り、AWSやその他のプラットフォームでCloudflareのサービスを使用できます(ドメインに登録されているネームサーバーを変更できます)。

ログインしているユーザーを異なるURLに誘導することで、匿名ユーザーとログインしているユーザーに別々のレート制限を提供できます。たとえば、匿名で利用できるすべてのURLパスの前に「/ u」を付けるだけで、常に認証を必要とし、レート制限が異なるエンドポイントを作成できます。

Cloudflareのレート制限(私が知っている匿名ユーザーに対するすべての商用レート制限と同様)は、クライアントをIPアドレスで定義することに注意してください。プライバシーを強化するために、1つのIPアドレスの背後に多数のクライアントを隠す傾向があるため、商用VPNまたはTorを使用している人々に問題を引き起こす可能性があります。


0

AWSには、関連サービスAWS ShieldとAWS WAFがあります。これらは主にDDoS攻撃を防ぐことを目的としていますが、IPアドレスに基づくレート制限もサポートしています。

WAFでは、この概念はレートベースのルールと呼ばれます。総当たりのログイン試行の防止は、最初の発表のユースケースとして言及されています。

この新しいタイプのルールは、顧客のWebサイトとAPIを、WebレイヤーのDDoS攻撃、ブルートフォースログインの試行、悪質なボットなどの脅威から保護します。レートベースのルールは、クライアントからのWebリクエストが特定の設定可能なしきい値を超えると自動的にトリガーされます。

他のクラウドプロバイダーも同様のサービスを提供する必要があります。これが表形式の比較です:Google Cloud Armor対AWS WAF対Cloudflare WAF

すでにNginxを使用しているため、組み込みのIPベースのレート制限を使用することも簡単なオプションとなる場合があります。モジュールはngx_http_limit_req_moduleと呼ばれます。このブログ投稿では、その使用方法について説明しています。

IPベースのレート制限は比較的単純な概念ですが、完全ではないことに注意してください。

  • IPアドレスが共有されている可能性(同じオフィスで働いている人々)が誤検知につながる
  • 攻撃者は複数のIPアドレスに簡単にアクセスでき、それらを使用して制限を回避する可能性があります(分散型ブルートフォースログイン攻撃)

一般に、IPアドレスが適切な出発点です。ただし、より強力な保護が必要な場合、最適な選択はスレッドモデル(どの種類の攻撃を防止するか)によって異なります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.