想象一下:您的开发团队刚推出了一款令人惊叹的全新应用程序,它具有顶级的API安全性,通过客户端保护对其进行了强化,甚至还设置了针对机器人攻击的防御措施。你感到这款产品很有安全保障,自己的团队出色地完成了工作。
但有一点要特别之处的是,尽管您付出了很多努力,但您的应用程序仍然可能面临受到攻击的风险。事实上攻击甚至可能不会触发单个安全警报,这种攻击风险来自于业务逻辑。如果您尚未将业务逻辑攻击 (BLA) 作为威胁建模的一部分进行评估,那么您应该立即重新评估您的产品。
随着各类前后端框架的成熟和完善,传统的SQL注入、XSS等常规漏洞在Web系统里逐步减少,而攻击者更倾向于使用业务逻辑漏洞来进行突破。业务逻辑漏洞,具有攻击特征少、自动化脆弱性工具无法扫出等特点,也为检测和软件的安全性保障带来了一定的难度。
什么是业务逻辑?
业务逻辑通常由一组规则或者算法来描述业务流程,涉及到数据的处理、存储、分析和展示等方面,它是一个抽象的概念,在软件开发中占据着重要的地位。在面向对象编程中,业务逻辑通常被封装在对象的方法中,以此来实现对数据的操作和处理。在Web应用程序中,业务逻辑通常会包含在Controller层中,用于处理用户请求和响应结果。因此,业务逻辑是程序中最核心的部分,决定了整个程序的运行流程和结果。
业务逻辑本质上就是对真实业务的映射与抽象,实际上,我们口口声声的业务逻辑,只是用代码实现的真实业务的规则映射。
什么是业务逻辑漏洞?
业务逻辑漏洞是一类特殊的安全漏洞,业务逻辑漏洞属于设计漏洞而非实现漏洞,是业务逻辑设计不严谨导致的漏洞。
业务逻辑漏洞通常是由于无法预期可能发生的异常应用程序状态,因此无法安全处理它们所导致的。这些缺陷通常对那些没有明确寻找它们的人来说是不可见的,因为它们通常不会在应用程序的正常使用中暴露出来。但是,攻击者可以通过开发人员从未想过的方式与应用程序进行交互来利用这些漏洞。常见的业务逻辑漏洞如:参数篡改、重放攻击、流程漏洞等。
什么是业务逻辑攻击
业务逻辑攻击是一种网络攻击,网络攻击者利用应用程序的预期功能和流程,而不是其技术漏洞。他们操纵工作流程,绕过传统安全措施,并滥用合法功能来获得未经授权的访问或造成损害,而不触发安全警报。
业务逻辑漏洞产生的核心原因:
编程时,只考虑了常规的操作流程(如在A情况下,就会出现B,此时执行C即可)没有考虑当用户执行了意料之外的X时会发生什么。这种对于异常情况的欠考虑,最终导致了安全漏洞的产生。
业务逻辑漏洞的主要特点:
独特性:通常与特定应用程序的业务流程密切相关。
难以检测:由于它们与应用程序的正常功能密切相关,因此使用常规的自动化工具难以发现。
非技术性:往往与逻辑流程和业务决策有关,而不是技术实现。
逻辑漏洞主要产生的位置
①.登录处
②.业务办理处
③.验证码处
④.支付处
登录处存在的逻辑漏洞
1.可以暴力破解用户名或密码
没有验证码机制,没有根据用户名限制失败次数,没有根据ip限制失败次数等等
2.session没有清空
登出后服务器端的session内容没有清除,因此客户端重新带回登出前的session,也能够达到重新登录
业务办理处存在的逻辑漏洞
1.水平越权
通常说的越权一般是修改get或者post参数,导致的查看到他人的业务信息,一般看订单处,个人信息处等位置的参数
2.篡改手机号
在需要手机号的短信验证处,抓包修改手机号,可能做到非本账号手机号获取能够编辑本账号的验证码
验证码处存在的逻辑漏洞
1.登录验证码未刷新
没有清空session中的验证码信息
2.手机或邮箱验证码可爆破
没有对应的手机号或邮箱,但如果验证码纯数字4,5位左右,没有次数校验,可以爆破
3.手机或邮箱验证码回显到客户端
在发送给手机或者邮箱验证码时,会在response包中有验证码,因此不需要手机和邮箱就可以获取验证码
支付处存在的逻辑漏洞
1.修改商品编号
如果业务是通过商品编号来判断价格的话,可能存在只修改A商品编号为B商品编号,做到以A商品的价格购买B商品
2.金额修改
金额直接写在了post或者get请求中,对其进行修改达到修改了商品金额的效果
3.商品数量修改
在购买时,如果一个商品为负数,那么它的价格则会是负数,如果购买多种商品,将其中一个设为负数,降低整体的价格
逻辑漏洞的特殊性与重要性
常见的OWASP漏洞,比如SQL注入漏洞,或多或少都具有某些识别特征,都是可以被漏洞扫描工具给自动或半自动化地扫描出来的,但是这样的工具却很难准确捕捉业务逻辑漏洞----这是因为业务逻辑漏洞本质上属于设计漏洞,是结构上的而不是实现上的,每一个业务逻辑漏洞都有它的独特性,很难复制或通过脚本捕获,因此逻辑漏洞大多需要配合代码审计和手工测试才能被发现---逻辑漏洞是工具无法替代手工的一类漏洞。
为什么要重视业务逻辑攻击
1、传统的安全措施还不够
虽然Web应用程序防火墙 (WAF) 对于保护应用程序至关重要,但它无法完全防范业务逻辑攻击。由于 BLA的特质,典型的安全解决方案通常无法检测和阻止这些威胁。
2、数据丢失和财务损失的风险
成功的业务逻辑攻击可能会导致敏感数据被盗,包括个人详细信息和财务信息,从而导致代价高昂的数据泄露甚至财务损失。比较典型的例子是身份验证绕过,攻击者绕过身份验证过程,并可以通过升级权限或访问敏感信息来滥用应用程序内的业务逻辑,这可能会导致关键数据丢失并损害公司声誉。
3、声誉受损的可能性
数据丢失或成功的业务逻辑攻击可能会导致公司的声誉受损。在消费者对其在线安全越来越谨慎的时代,任何攻击都可能迅速损害您的业务,导致客户流失、收入减少或品牌玷污,甚至带来法律后果。解决 BLA 对于维持公众信任和让客户满意至关重要。
4、应用程序和API的复杂性增加
随着应用程序和API变得越来越复杂,与保护它们相关的风险和困难也随之增加。分布式微服务、多云架构以及API使用的快速增长使得理解和解决业务逻辑攻击带来的独特安全挑战变得至关重要。
如何保护应用程序免受 BLA 的侵害
可以采取以下步骤来保护应用程序免受它们的侵害:
1、了解业务逻辑:了解应用程序的工作流程、流程和预期的用户行为,以识别潜在的弱点和漏洞。
2、实施高级应用程序安全性:投资专门用于管理和保护API的高级安全解决方案,例如应用程序安全平台。这将有助于识别破坏授权、机器人攻击等威胁,并防御业务逻辑攻击。
3、监控和分析用户行为:采用可以分析用户行为(包括应用程序使用模式)并检测可能表明潜在BLA的可疑活动的工具和技术。
4、分段和控制访问:限制API的范围并根据用户角色实施访问控制,最大程度地减少攻击成功时的潜在损害。
5.使用代码审计产品:帮助企业从安全角度对应用系统的所有逻辑路径进行测试,通过分析源代码,充分挖掘代码中存在的安全缺陷以及规范性缺陷。找到普通安全测试所无法发现的如二次注入、反序列化、xml实体注入等安全漏洞。主要的内容在于:
1.系统所用开源框架,包含java反序列化漏洞,导致远程代码执行。Spring、Struts2的相关安全。
2.应用代码关注要素,日志伪造漏洞,密码明文存储,资源管理,调试程序残留,二次注入,反序列化。
3.API滥用,不安全的数据库调用、随机数创建、内存管理调用、字符串操作,危险的系统方法调用。
4.源代码设计,不安全的域、方法、类修饰符未使用的外部引用、代码。
5.错误处理不当,程序异常处理、返回值用法、空指针、日志记录。
6.直接对象引用,直接引用数据库中的数据、文件系统、内存空间。
7.资源滥用,不安全的文件创建/修改/删除,竞争冲突,内存泄露。
8.业务逻辑错误,欺骗密码找回功能,规避交易限制,越权缺陷Cookies和session的问题。
9.规范性权限配置,数据库配置规范,Web服务的权限配置SQL语句编写规范。
业务逻辑攻击变得越来越普遍,对应用程序和API的安全构成了重大威胁。为了保护数据、声誉和客户免受潜在损害,多层安全方法至关重要,不要因业务逻辑攻击而措手不及,花时间投资应用程序安全性,才能领先网络攻击者一步来保障自己。