根据OWASP组织提出的API十大安全风险,无论是2019年版还是2023年最新版显示,访问控制类的API安全风险一直都排在前列,属于重点API安全风险之一。
事实上,属于访问控制风险的API未授权安全问题一直都是企业内部非常常见且难以解决的安全痛点,首先是因为不管是各业务系统还是企业内部都存在大量的API,一旦其中一些API存在鉴权缺陷,那么就很可能出现API未授权风险,导致数据外泄或者被恶意攻击者利用导致系统权限失控;其次就是关于未授权问题自动化检测的难点,作为逻辑漏洞,其语言特点和鉴权逻辑各有不同,若检测使用的安全工具过度卡点,不仅检测效率低下,还会提高误报率,而且在流量的检测中,业务层面的未授权问题在现有的检测思路中无法精准自动识别,往往需要人工加以二次判断。
本文将提供并介绍一种从流量中自动化检测API未授权安全风险的技术思路。
一、风险场景
关于访问控制类的API安全风险其实是可以分为两大类,第一类就是API未授权访问;第二类就是账号类的逻辑越权。具体描述如下:
场景一:API未授权访问
可以理解为需要安全配置或权限认证的API存在鉴权缺陷,导致其他用户或者未登录的用户可以直接访问该API,从而引发重要权限可被操作,导致系统敏感信息泄露、攻击者进一步利用获取系统权限等危害。
分类:
1、组件类未授权漏洞,通过对某一组件执行特定的攻击载荷能够实现API未授权操作。
2、系统业务层或者企业内部的API,如某系统某API存在未授权文件上传、未授权创建账号、未授权查询数据等危害操作。无需身份认证或者授权就能执行相关危害操作。
场景二:账号类逻辑越权
账号类越权指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。简单来说,就是该API存在鉴权缺陷,导致可以使用用户A的权限去操作用户B的数据,比如查询系统所有员工个人敏感数据、修改系统相关配置等等。
分类:
1、水平越权:如果A、B的权限相同,或者说是在同一水平层面的,那么我们称此操作为水平越权。
2、垂直越权:如果A的权限小于B的权限,那么我们称此操作为垂直越权。
二、人工测试方法
对于权限访问控制类的安全风险,我们首先了解下人工测试的方法和步骤。
组件类未授权访问漏洞
组件类的未授权访问漏洞,可以直接通过该组件特定的攻击载荷进行验证
检测示例:
Nacos未授权访问漏洞
Payload:/nacos/v1/auth/users?pageNo=1&pageSize=1
直接利用该组件特定的攻击载荷便能够确定漏洞是否存在。
API未授权访问漏洞
通过burp抓包工具,对相关请求数据包中认证因子删除,分析删除前后返回包的变化即可判断(当然除了删除还可以修改、替换等等方式)。以Session-Cookie认证为例,只需要将数据包中的Cookie等字段值置空或者修改为无用字符,再查看前后的数据包是否相同即可。
检测示例:
登录情况下,正常查询数据
未授权查询(删除cookie字段,还能够查询到数据,响应与正常查询数据的响应包一致)
未授权查询(替换cookie字段,还能够查询到数据,响应与正常查询数据的响应包一致)
账号类越权
账号类越权测试的前提是需要两个不同权限的账号(水平越权可以是两个权限的账号,垂直越权必须是两个不同权限的账号)
检测示例:
在后台管理系统通过修改相关参数将低权限账号修改为高权限账号。
在后台->资料,可修改密码
此时可以看到在管理员列表可以发现测试组存在test1,编号为5
在test账号修改密码处,可以发现id为4,对应了编号4
修改为id参数为5,将其test1账号修改为超级管理员
最后也是成功越权修改。
三、自动化检测思路
那么我们该如何在API流量中实现未授权安全风险的自动化检测呢?
整体的思路主要是通过旁路的方式获取API流量,通过主动发包的方式将上述人工测试的方法实现自动化,主要分为以下几个阶段:
1. 流量粗筛
拿到流量之后,第一个阶段就是需要进行流量初筛,这里主要有两个目的,第一就是对流量进行清洗,排除非接口类流量,比如静态资源或者视频流等等。
第二就是在清洗流量之后,可以通过应用初步筛选规则进行我们需要的流量匹配,例如通过正则匹配的方式可以直接对API流量的原始请求响应报文进行特征匹配,对于一些有明显漏洞特征组件类的未授权问题就可以直接检测出来。
或者,我们可以通过相关规则去匹配筛选出一些高涉敏、或者企业重点关注的API流量来进行重点风险检测,例如能造成敏感数据泄露、未授权文件上传、查询数据等危害的接口(筛选规则其实可以根据企业需要和现实情况灵活调整)例如筛选以下情况:
1、识别响应报文中大量敏感数据
2、识别响应中成功上传文件特征
3、识别响应中增、删、改、查操作特征
4、识别组件未授权访问漏洞特定攻击载荷和响应攻击成功特征
5、识别请求报文中存在ID=xxxx且带有cookie等认证特征.
.....
2. 流量存储
通过上述流量初筛阶段后,把筛选后的流量进行相关字段存储,响应报文、API、鉴权方式、请求方法等等,当然这一步的存储量和上面流量初筛规则有直接的关系。
3. 变异重放
这一步我们将采用常规自动化越权检测的步骤,实现主动发包进行变异重放,模拟上面人工测试的方法,变异是指通过相关Fuzz规则,针对不同的认证机制需要采用不同的操作,主要是模拟未授权和越权漏洞的场景,以Session-Cookie认证为例,针对原始请求报文中认证字段进行删除、修改替换操作,例如:
1、删除cookie字段
2、替换cookie字段特征值
3、对ID=xxxx进行遍历操作
4、识别组件未授权访问漏洞特定攻击载荷和响应攻击成功特征
......
重放是指在变异之后,再次进行发包,获得变异后的响应报文。
PS:关于其他身份认证技术的了解可以参考https://mp.weixin.qq.com/s/2lo9i2oy8T3HjPxbSVxNLA
4. 风险确认
1、与原始报文进行对比;相似度在90%以上判定为匹配成功。
2、通过输出检查规则例如正则语法对响应报文进行特征匹配。
二者判断方式均为匹配成功则可认定风险存在。
5. 降低误报
以上就是整个API未授权自动化检测的整体思路,由于整个方案具有很好的灵活性,对于实际的情况可以及时调整,所以检测误报可以根据实际情况来进行优化,比如对于初筛规则的调节以减少相关API流量报文的Fuzz次数、通过Fuzz规则的及时调整来减少误报率,增强检测效果等等。
总结
本文介绍通过流量来自动检测API未授权风险的方案思路,后续将持续介绍更多的处理细节和解决方法,例如不同认证鉴权方式的变异研究,风险确定与原始报文的相似度判断等。对于账号类越权风险的检测,需要更复杂的判断和识别逻辑以及不同权限的账号的识别,后续也会持续更新介绍。
关于Portal Lab
星阑科技 Portal Lab 致力于前沿安全技术研究及能力工具化。主要研究方向为数据流动安全、API 安全、应用安全、攻防对抗等领域。实验室成员研究成果曾发表于BlackHat、HITB、BlueHat、KCon、XCon等国内外知名安全会议,并多次发布开源安全工具。未来,Portal Lab将继续以开放创新的态度积极投入各类安全技术研究,持续为安全社区及企业级客户提供高质量技术输出。