业务逻辑漏洞

业务逻辑漏洞

在本节中,我们将介绍业务逻辑漏洞的概念,并解释它们是如何由于对用户行为的错误假设而产生的。我们将讨论逻辑缺陷的潜在影响,并教你如何利用它们。您还可以使用我们的交互式实验室练习您所学的内容,这些实验室基于我们在野外遇到的真实错误。最后,我们将提供一些通用的最佳实践来帮助您防止在您自己的应用程序中出现此类逻辑缺陷。

实验室

如果您已经熟悉业务逻辑漏洞背后的基本概念,并且只想练习在一些现实的、故意易受攻击的目标上利用它们,您可以从下面的链接访问本主题中的所有实验室。

查看所有业务逻辑漏洞实验室

什么是业务逻辑漏洞?

业务逻辑漏洞是应用程序设计和实现中的缺陷,允许攻击者引发意外行为。这可能使攻击者能够操纵合法功能以实现恶意目标。这些缺陷通常是由于未能预测可能发生的异常应用程序状态,因此未能安全处理它们。

笔记

在这种情况下,术语“业务逻辑”只是指定义应用程序如何运行的规则集。由于这些规则并不总是与业务直接相关,因此相关的漏洞也称为“应用程序逻辑漏洞”或简称为“逻辑缺陷”。

逻辑缺陷对于那些没有明确寻找它们的人来说通常是不可见的,因为它们通常不会在应用程序的正常使用中暴露出来。但是,攻击者可能能够通过以开发人员从未想过的方式与应用程序交互来利用行为怪癖。

业务逻辑的主要目的之一是强制执行在设计应用程序或功能时定义的规则和约束。从广义上讲,业务规则规定了应用程序在给定场景发生时应如何反应。这包括防止用户做会对业务产生负面影响或根本没有意义的事情。

逻辑缺陷可以让攻击者规避这些规则。例如,他们可能无需经过预期的购买工作流程即可完成交易。在其他情况下,用户提供的数据的验证损坏或不存在可能允许用户对事务关键值进行任意更改或提交无意义的输入。通过将意外值传递到服务器端逻辑,攻击者可能会诱使应用程序做一些不应该做的事情。

基于逻辑的漏洞可能非常多样化,并且通常是应用程序及其特定功能所独有的。识别它们通常需要一定量的人类知识,例如对业务领域的理解或攻击者在给定上下文中可能具有的目标。这使得它们难以使用自动漏洞扫描程序进行检测。因此,逻辑缺陷通常是漏洞赏金猎人和手动测试人员的一个很好的目标。

业务逻辑漏洞是如何产生的?

业务逻辑漏洞经常出现,因为设计和开发团队对用户如何与应用程序交互做出了错误的假设。这些错误的假设可能导致对用户输入的验证不充分。例如,如果开发人员假设用户将仅通过 Web 浏览器传递数据,则应用程序可能完全依赖弱客户端控件来验证输入。这些很容易被使用拦截代理的攻击者绕过。

最终,这意味着当攻击者偏离预期的用户行为时,应用程序无法采取适当的措施来防止这种情况发生,从而无法安全地处理这种情况。

逻辑缺陷在甚至开发团队自己都不完全理解的过于复杂的系统中尤为常见。为了避免逻辑缺陷,开发人员需要将应用程序作为一个整体来理解。这包括了解如何以意想不到的方式组合不同的功能。处理大型代码库的开发人员可能无法深入了解应用程序的所有领域是如何工作的。在一个组件上工作的人可能会对另一个组件的工作方式做出有缺陷的假设,结果会无意中引入严重的逻辑缺陷。如果开发人员没有明确记录所做的任何假设,这些类型的漏洞很容易潜入应用程序。

业务逻辑漏洞有什么影响?

业务逻辑漏洞的影响有时可能相当微不足道。这是一个广泛的类别,其影响是高度可变的。但是,如果攻击者能够以正确的方式操纵应用程序,任何意外行为都可能导致高严重性攻击。出于这个原因,即使您自己无法弄清楚如何利用它,理想情况下也应该修复古怪的逻辑。总是有其他人能够做到的风险。

从根本上说,任何逻辑缺陷的影响取决于它所涉及的功能。例如,如果缺陷存在于身份验证机制中,这可能会对您的整体安全性产生严重影响。攻击者可能会利用它来提升权限,或完全绕过身份验证,获得对敏感数据和功能的访问权限。这也为其他攻击暴露了更大的攻击面。

金融交易中的错误逻辑显然会通过被盗资金、欺诈等给企业造成巨大损失。

您还应该注意,即使逻辑缺陷可能不允许攻击者直接受益,它们仍然可能允许恶意方以某种方式破坏业务。

有哪些业务逻辑漏洞的例子?

了解业务逻辑漏洞的最佳方法是查看真实案例并从所犯的错误中吸取教训。我们提供了各种常见逻辑缺陷的具体示例,以及一些故意易受攻击的网站,以便您自己练习利用这些漏洞。

如何防范业务逻辑漏洞

简而言之,防止业务逻辑漏洞的关键是:

  • 确保开发人员和测试人员了解应用程序服务的领域
  • 避免对用户行为或应用程序其他部分的行为做出隐含的假设

您应该确定您对服务器端状态所做的假设,并实施必要的逻辑来验证这些假设是否得到满足。这包括在继续之前确保任何输入的值都是合理的。

确保开发人员和测试人员都能够完全理解这些假设以及应用程序在不同场景中应该如何反应也很重要。这可以帮助团队尽早发现逻辑缺陷。为了促进这一点,开发团队应尽可能遵守以下最佳实践:

  • 为所有事务和工作流维护清晰的设计文档和数据流,注意每个阶段所做的任何假设。
  • 尽可能清楚地编写代码。如果很难理解应该发生的事情,就很难发现任何逻辑缺陷。理想情况下,编写良好的代码不需要文档来理解它。在不可避免的复杂情况下,生成清晰的文档对于确保其他开发人员和测试人员知道正在做出的假设以及预期的行为是至关重要的。
  • 请注意对使用每个组件的其他代码的任何引用。如果恶意方以不寻常的方式操纵它们,请考虑这些依赖项的任何副作用。

由于许多逻辑缺陷的相对独特性,很容易将它们作为人为错误导致的一次性错误排除并继续前进。然而,正如我们已经证明的那样,这些缺陷通常是在构建应用程序的初始阶段的不良做法的结果。分析为什么首先存在逻辑缺陷,以及团队如何遗漏它,可以帮助您发现流程中的弱点。通过进行细微的调整,您可以增加类似缺陷在源头被切断或在开发过程中更早发现的可能性。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值