Coders Conquer Security OWASP Top 10 API Series - 缺少资源和速率限制

发表于2020年9月30日
作者:马蒂亚斯-马杜,博士
案例研究

Coders Conquer Security OWASP Top 10 API Series - 缺少资源和速率限制

发表于2020年9月30日
作者:马蒂亚斯-马杜,博士
查看资源
查看资源

随着资源的缺乏和速率的限制,API漏洞的行为几乎与标题所描述的完全一样。每个API都有有限的资源和计算能力,这取决于它的环境。大多数还需要处理来自用户或其他程序的请求,要求它执行所需的功能。当有太多的请求同时进来,而API没有足够的计算资源来处理这些请求时,就会出现这种漏洞。然后,API可能变得不可用或对新的请求没有反应。

如果API的速率或资源限制没有被正确设置,或者限制没有在代码中被定义,那么API就很容易出现这个问题。例如,如果一个企业经历了一个特别繁忙的时期,一个API就会超载。但这也是一个安全漏洞,因为威胁者可以故意让未受保护的API的请求超载,以便进行拒绝服务(DDoS)攻击。  

顺便问一下,到目前为止,你在API游戏化挑战中表现如何?如果你现在就想试试你处理速率限制性漏洞的技巧,请踏上竞技场。

现在,让我们再深入了解一下。

缺乏资源和速率限制了API的脆弱性,有哪些例子?

这个漏洞有两种方式可以潜入API。第一种是当编码员根本没有定义API的节流率是多少。在基础设施的某个地方可能有一个默认的节流率设置,但依赖这个设置并不是一个好的策略。相反,每个API应该单独设置其速率。这一点尤其正确,因为API的功能和可用资源可能有很大的不同。

例如,一个旨在为少数用户服务的内部API可以有一个非常低的节流率,并且工作得很好。但是,一个面向公众的API,作为一个实时电子商务网站的一部分,很可能需要定义一个特别高的速率,以补偿可能出现的同步用户激增的情况。在这两种情况下,应该根据预期的需求、潜在用户的数量和可用的计算能力来定义节流率。

这可能是很诱人的,特别是对于那些很可能非常繁忙的API来说,将速率设置为无限,以尝试最大化性能。这可以通过一段简单的代码来实现(作为一个例子,我们将使用Python Django REST框架)。

"DEFAULT_THROTTLE_RATES: {
       "anon: None,
       "user: None

在这个例子中,匿名用户和系统已知的用户都可以无限次地联系API,而不考虑一段时间内的请求数量。这是一个坏主意,因为无论一个API有多少可用的计算资源,攻击者可以部署像僵尸网络这样的东西,最终使它慢到爬行,或者可能使它完全脱机。当这种情况发生时,有效用户将被拒绝访问,而攻击也将成功。

消除资源匮乏和速率限制的问题

每一个由组织部署的API都应该在其代码中定义其节流率。这可能包括诸如执行超时、允许的最大内存、每页可返回给用户的记录数,或在定义的时间范围内允许的进程数。

从上面的例子来看,与其让节流率大开大合,不如严格定义匿名和已知用户的不同速率。

"DEFAULT_THROTTLE_RATES: {
       "anon: config("THROTTLE_ANON, default=200/hour),
       "user: config("THROTTLE_USER, default=5000/hour)

在新的例子中,API将限制匿名用户每小时发出200次请求。已经被系统审核过的已知用户会有更大的回旋余地,每小时有5000个请求。但即使是他们也受到限制,以防止在高峰期意外超载,或者在用户账户被泄露并被用于拒绝服务攻击时进行补偿。

作为最后一个要考虑的良好做法,当用户达到节流限制时,向他们显示一个通知,同时解释这些限制何时会被重置,这是一个好主意。这样一来,有效用户就会知道为什么一个应用程序拒绝他们的请求。如果执行批准任务的有效用户被拒绝访问API,这也是有帮助的,因为它可以向运营人员发出信号,表明需要增加节流。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。

查看资源
查看资源

作者

马蒂亚斯-马杜博士

马蒂亚斯是一名研究员和开发人员,拥有超过15年的软件安全实践经验。他曾为Fortify Software和他自己的公司Sensei Security等公司开发解决方案。在他的职业生涯中,马蒂亚斯领导了多个应用安全研究项目,并将其转化为商业产品,他拥有超过10项专利。当他离开办公桌时,Matias曾担任高级应用安全培训courses ,并定期在全球会议上发言,包括RSA会议、黑帽、DefCon、BSIMM、OWASP AppSec和BruCon。

马蒂亚斯拥有根特大学的计算机工程博士学位,在那里他研究了通过程序混淆来隐藏应用程序的内部工作的应用安全。

想要更多吗?

在博客上深入了解我们最新的安全编码见解。

我们广泛的资源库旨在增强人类对安全编码技术提升的方法。

查看博客
想要更多吗?

获取关于开发者驱动的安全的最新研究

我们广泛的资源库充满了有用的资源,从白皮书到网络研讨会,让你开始使用开发者驱动的安全编码。现在就去探索它。

资源中心

Coders Conquer Security OWASP Top 10 API Series - 缺少资源和速率限制

发表于2020年9月30日
作者:马蒂亚斯-马杜,博士

随着资源的缺乏和速率的限制,API漏洞的行为几乎与标题所描述的完全一样。每个API都有有限的资源和计算能力,这取决于它的环境。大多数还需要处理来自用户或其他程序的请求,要求它执行所需的功能。当有太多的请求同时进来,而API没有足够的计算资源来处理这些请求时,就会出现这种漏洞。然后,API可能变得不可用或对新的请求没有反应。

如果API的速率或资源限制没有被正确设置,或者限制没有在代码中被定义,那么API就很容易出现这个问题。例如,如果一个企业经历了一个特别繁忙的时期,一个API就会超载。但这也是一个安全漏洞,因为威胁者可以故意让未受保护的API的请求超载,以便进行拒绝服务(DDoS)攻击。  

顺便问一下,到目前为止,你在API游戏化挑战中表现如何?如果你现在就想试试你处理速率限制性漏洞的技巧,请踏上竞技场。

现在,让我们再深入了解一下。

缺乏资源和速率限制了API的脆弱性,有哪些例子?

这个漏洞有两种方式可以潜入API。第一种是当编码员根本没有定义API的节流率是多少。在基础设施的某个地方可能有一个默认的节流率设置,但依赖这个设置并不是一个好的策略。相反,每个API应该单独设置其速率。这一点尤其正确,因为API的功能和可用资源可能有很大的不同。

例如,一个旨在为少数用户服务的内部API可以有一个非常低的节流率,并且工作得很好。但是,一个面向公众的API,作为一个实时电子商务网站的一部分,很可能需要定义一个特别高的速率,以补偿可能出现的同步用户激增的情况。在这两种情况下,应该根据预期的需求、潜在用户的数量和可用的计算能力来定义节流率。

这可能是很诱人的,特别是对于那些很可能非常繁忙的API来说,将速率设置为无限,以尝试最大化性能。这可以通过一段简单的代码来实现(作为一个例子,我们将使用Python Django REST框架)。

"DEFAULT_THROTTLE_RATES: {
       "anon: None,
       "user: None

在这个例子中,匿名用户和系统已知的用户都可以无限次地联系API,而不考虑一段时间内的请求数量。这是一个坏主意,因为无论一个API有多少可用的计算资源,攻击者可以部署像僵尸网络这样的东西,最终使它慢到爬行,或者可能使它完全脱机。当这种情况发生时,有效用户将被拒绝访问,而攻击也将成功。

消除资源匮乏和速率限制的问题

每一个由组织部署的API都应该在其代码中定义其节流率。这可能包括诸如执行超时、允许的最大内存、每页可返回给用户的记录数,或在定义的时间范围内允许的进程数。

从上面的例子来看,与其让节流率大开大合,不如严格定义匿名和已知用户的不同速率。

"DEFAULT_THROTTLE_RATES: {
       "anon: config("THROTTLE_ANON, default=200/hour),
       "user: config("THROTTLE_USER, default=5000/hour)

在新的例子中,API将限制匿名用户每小时发出200次请求。已经被系统审核过的已知用户会有更大的回旋余地,每小时有5000个请求。但即使是他们也受到限制,以防止在高峰期意外超载,或者在用户账户被泄露并被用于拒绝服务攻击时进行补偿。

作为最后一个要考虑的良好做法,当用户达到节流限制时,向他们显示一个通知,同时解释这些限制何时会被重置,这是一个好主意。这样一来,有效用户就会知道为什么一个应用程序拒绝他们的请求。如果执行批准任务的有效用户被拒绝访问API,这也是有帮助的,因为它可以向运营人员发出信号,表明需要增加节流。

请查看 Secure Code Warrior博客页面,了解有关这一漏洞的更多见解,以及如何保护你的组织和客户免受其他安全缺陷的蹂躏。你也可以尝试一下 Secure Code Warrior 培训平台的演示,以保持你所有网络安全技能的磨练和更新。

我们希望得到您的许可,向您发送有关我们产品和/或相关安全编码主题的信息。我们将始终以最谨慎的态度对待您的个人资料,绝不会将其出售给其他公司用于营销目的。

提交
要提交表格,请启用 "分析 "cookies。完成后,请随时再次禁用它们。