速率限制*未经*认证的请求


11

假设我们有一个负载均衡器,它也可以进行速率限制。速率限制对于已登录的用户来说似乎非常简单-只需查看JWT,然后使用内存中的数据存储来查看该用户在最近10秒内有多少个请求。

但是,未登录(未经身份验证)的用户呢?我们不确定他们到底是谁或请求的确切来源,因此无法轻松地对这些请求进行速率限制或..?

AWS和其他托管平台上是否有内置解决方案,这是我们需要担心的事情?似乎我们需要手动处理已登录用户的限速逻辑,但是未登录用户该怎么办?

我的猜测/希望是可能存在一些内置机制来限制主机平台上未经身份验证的请求的速率,请通知我们。


2
该页面从不提及登录用户。事实上,描述的技术可例举作为有关密码的暴力攻击缓解,这意味着还没有登录的用户。
罗伯特·哈维

1
为什么要使用速率限制?是否要抵制拒绝服务攻击,防止用户超出其支付计划,还需要其他措施?用例会影响您可以有效使用的方法。
巴特·范·英根·谢瑙

1
这个问题可能适合security.stackexchange.com,尽管我并不是说这是题外话
Peeyush Kushwaha

以上所有@BartvanIngenSchenau吗?

为什么要有两个不同的速率限制?您是否在销售具有不同约束/功能的任何“计划”?
Laiv

Answers:


9

但是,未登录(未经身份验证)的用户呢?我们不确定他们到底是谁或请求的确切来源,因此无法轻松地对这些请求进行速率限制或..?

您可以采取几种方法。一种是您需要一个相当可靠的来源标识符,例如IP地址。您可以通过IP地址对限制进行评分,从而可以限制对一台受感染计算机的攻击。这是一种非常简单的方法,但是存在一个缺点,即大型网络提供商可能仅使用单个传出IP地址将大量用户隐藏在NAT之后。

您可以采取的另一种限制速率的方法是要求对任何未经身份验证的请求进行工作证明。您的服务器发出质询代码,发出未经身份验证的请求(例如,登录请求)的任何客户端必须在处理请求之前计算资源密集型响应。此想法的常见实现要求客户端计算部分哈希还原。


我看不到,“工作量证明”如何防止DOS攻击?客户端可以忽略挑战,并继续发送请求直到失败为止。是否有第三个流程来应对挑战?
Laiv

4
@Laiv POW可以可靠地发布和检查分发,而无需连接到中央数据库,而这是大多数其他速率限制方案失败的地方。它增加了攻击者的攻击成本,因为对您和合法用户而言,扩展防御和增加负载因子比扩展攻击者便宜。它造成了攻击系统的经济诱因,因为它还有效地将低功耗设备(例如,受损的打印机,物联网,路由器)排除在有效的攻击平台之外。
Lie Ryan

6

要知道请求是来自经过身份验证的用户还是来自匿名用户,您必须(快速)处理该请求。这仍然意味着您的应用程序容易受到拒绝服务攻击。

您应该每秒检查总体请求,如果超出了一定数量,则只需忽略其余请求即可。该数字应足够高,以在正常运行期间不会引起问题,但应防止此类攻击。

同样,作为一般规则,您可能不应该假设攻击不会来自经过身份验证的用户,至少对于DOS攻击而言。弱密码会轻易允许某人推测旧用户的身份。因此,假设您可以进行这样的检查,那么您(人类)的用户将永远不需要以如此高的速度执行请求,而不仅仅是因为您有很多个人用户。


我想您可以使用IP地址,并为每个IP地址设置一个高速率限制。我猜想精心策划的DoS攻击可能会使用数千个IP地址?也许更多?idk ...我知道同一IP地址可以用于多个不同的客户端,但是我想说它很可能是同一用户,对吗?
亚历山大·米尔斯

@AlexanderMills好吧,假设您决定算法将检查来自同一IP地址的多个请求。即使有成千上万的请求,它们也会重复执行1000多个请求。您的服务器记录了来自给定IP地址的第一个请求,然后泛洪开始..服务器已经使用请求进行了积压..您甚至无法处理足够多的请求以从同一IP到达第二个重复(这仍然是合法请求)顺便说说)。如果仅使用相同的IP,它将防止DoS攻击。最好同时使用两者。:P
Neil

0

一个CloudFlare的主要产品是为你的API / Web服务器提供了一个智能代理防范拒绝服务攻击。基本服务是免费的;他们从CDN服务和负载平衡等其他相关服务中获利。它们还提供了更先进的和可控的速率限制的服务,目前为US $ .05每10K良好的请求(不收费,拒绝的请求)的速度,但你必须升级到付费计划获得超过一个全局规则。

您可以将Cloudflare的服务与AWS或任何其他平台一起使用,只要您可以控制域的名称服务器(例如,可以更改为您的域注册的名称服务器)。

通过将登录用户定向到不同的URL,可以为匿名用户和登录用户提供单独的速率限制。例如,您可以简单地在所有匿名可用的URL路径前面加上“ / u”,以创建始终需要身份验证且速率限制不同的终结点。

请注意,Cloudflare的速率限制(就像我所知道的所有针对匿名用户的商业速率限制一样)通过其IP地址定义了客户端。这可能会对使用商业VPN或Tor的人们造成问题,因为他们倾向于将大量客户端隐藏在1个IP地址后面,以增加隐私。


0

在AWS中,有相关服务AWS Shield和AWS WAF。它们主要用于防止DDoS攻击,但也支持基于IP地址的速率限制。

在WAF中,该概念称为基于比率的规则最初的公告中提到了防止基于暴力的登录尝试作为用例:

这种新的规则类型可保护客户网站和API免受诸如Web层DDoS攻击,暴力登录尝试和不良机器人之类的威胁。当来自客户端的Web请求超过某个可配置阈值时,将自动触发基于速率的规则。

其他云提供商应提供类似的产品。这里是表格比较:Google Cloud Armor与AWS WAF与Cloudflare WAF

因为您已经在使用Nginx,所以使用基于IP的内置速率限制也可能是简单的选择。该模块称为ngx_http_limit_req_module。这篇博客文章描述了如何使用它。

请注意,基于IP的速率限制是一个相对简单的概念,但并不完美:

  • IP地址可能会共享(在同一办公室工作的人),导致误报
  • 攻击者可能可以轻松访问多个IP地址,并使用它们绕过限制(分布式暴力登录攻击)

通常,IP地址是一个好的开始。但是,如果您需要更强大的保护,则最佳选择将取决于线程模型(您要防止的攻击类型)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.