説明
ログインや認証のリクエストに有効なレート制限がないと、攻撃者が短時間に多数のパスワード、PIN、トークンを試すおそれがあります。
想定される影響
- 総当たり攻撃やクレデンシャルスタッフィングの成功率が高まる可能性があります。
- 認証システムやログの保存先に過大な負荷がかかるおそれがあります。
対処方法
ASP.NET CoreのRate Limitingミドルウェアを使い、EnableRateLimiting などで認証エンドポイントにポリシーを明示的に適用してください。アカウントのロック、段階的な遅延、MFAなどの追加対策も検討してください。
例
変更前
csharp
[HttpPost("login")]
public IActionResult Login([FromBody] LoginRequest request)
{
return Ok();
}
変更後
csharp
[EnableRateLimiting("login")]
[HttpPost("login")]
public IActionResult Login([FromBody] LoginRequest request)
{
return Ok();
}
解説:
- 変更前: エンドポイントやグローバルポリシーでレート制限を適用しないと、繰り返される認証試行を制限しにくくなります。
- 変更後:
EnableRateLimiting("login")は、登録済みのloginポリシーを適用します。この例は、AddRateLimiterでそのポリシーを構成し、ルーティングの後でUseRateLimiterを実行する設定を前提としています。