逻辑漏洞会导致业务面临着巨大的经济损失隐患与敏感数据泄露的风险,本文从安全测试的角度,以越权逻辑漏洞为例,介绍逻辑漏洞的挖掘方法和实践过程。
一、什么是越权逻辑漏洞
定义: 指由于系统的权限控制逻辑不够严谨,使得系统用户可以访问或操作未授权的数据和功能。包括水平越权和垂直越权。
水平越权: 指当系统存在多个相同权限的用户时,A用户可以访问或操作到其他用户的资源。如图1.1所示,用户A、B、C、D都是普通用户,当用户A可以访问到用户B或者其他用户资源时,就产生了水平越权。
垂直越权: 指当系统存在不同权限的用户时,低权限用户可以访问或操作到高权限用户的资源。如图1.1所示,当普通用户或者其他低权限用户可以访问到比自己权限高的用户资源时,就产生了垂直越权。
图1.1
二、越权逻辑漏洞挖掘方法
基于越权逻辑漏洞的定义和分类,从模拟攻击者攻击漏洞的角度出发,可以总结出以下两种挖掘方法。
2.1 未授权访问测试
指用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问的页面或者信息。具体流程为:
1)统计测试接口;
2)使用抓包工具获取接口入参;
3)不填写cookie或者填写无效cookie重新请求;
4)查看请求结果,如果返回了正确cookie才能取得的结果,说明该接口存在未授权访问漏洞。
2.2 越权访问测试
通过抓包修改参数的方式绕过客户端实施攻击,从而测试是否存在越权漏洞。具体流程为:
1)统计测试接口;
2)使用抓包工具获取接口入参;
3)水平越权测试:分析入参中是否标识用户身份的敏感信息,如果存在,则修改为其他测试用户信息,重新请求查看返回结果,若返回结果正确,则该接口存在水平越权漏洞;
4)垂直越权测试:分析高级权限用户的请求入参,将高权限用户信息替换为低级权限用户的信息,重新请求查看返回结果,若返回结果正确,则该接口存在垂直越权漏洞。
三、万家系统越权逻辑漏洞挖掘实践
3.1 实现工具和平台
抓包工具: 使用Charles,它是一个 HTTP 代理、HTTP 监视器、反向代理工具,可以帮助开发人员查看他们的机器和Internet之间的所有HTTP和SSL、HTTPS 流量,包括请求、响应和 HTTP头(其中包含cookie和缓存信息)。官网安装链接:https://www.charlesproxy.com/documentation/installation/
请求平台: 使用京东内部测试平台DeepTest。
3.2 未授权访问测试实践
图3.1
首先确定测试接口,京东万家APP的所有接口都需要登录才能访问,因此需要逐一验证。获取接口及参数信息,流程如下:
(1)打开Charles并将手机代理开启;
(2)检查手机代理ip及端口是否与Charles设置一致,如不同则将其改为一致;
(3)手机启动京东万家APP;
(4)对应Charles中查看相应的接口和请求,如图3.1所示。
以Charles中的user_baseinfo接口为例,进行未授权访问逻辑漏洞测试。首先从Charles的抓包信息中复制该接口、body和cookie信息,然后在DeepTest平台进行接口入参修改并重新请求。其中入参主要修改cookie,原因是登录信息的校验都是从cookie中获取。因此,进行未授权的测试的本质就是修改入参中的cookie信息为无效信息然后重新请求。注意,cookie无效包括不填写 cookie或填写已过期的cookie。如图3.2所示,此时接口不填写cookie,但重新请求后,依然可以获取到结果,即用户在没有通过认证授权的情况下依然能够直接访问需要通过认证才能访问的信息,说明该接口存在未授权访问逻辑漏洞。
图3.2
3.3 越权访问测试实践
水平越权测试: 首先确定所有测试接口,以万家APP中订单详情接口测试为例,抓包得到接口入参为:
{“from”:””,”orderId”:”239703099155″,”sdkClient”:”plugin_apple”,”appName”:”apollo”,”isPublish”:””,”apolloId”:”ca3d”,”apolloSecret”:”7157″,”wjPin”:”ceshibu3″}
分析入参:由于入参中存在orderId和wjPin两个字段来标识用户身份,因此修改其为其他同级别权限用户信息,进行水平越权测试。修改前和修改后的请求及返回结果如图3.3所示,令当前登录用户为A用户,修改请求入参的用户信息为B用户,可以发现,修改入参后,A用户依然可以访问到B用户的订单详情,也就是当前登录用户可以访问到其他用户的订单详情,说明该接口存在水平越权逻辑漏洞。
图3.3
垂直越权测试: 在万家APP业务中,店主的权限高于店员的权限,因此需要进行垂直越权测试来验证店主的信息是否存在泄漏风险。
首先确定店主比店员多的具体权限,需要具体到每个接口。然后使用店主权限登录万家APP,找到只有店主权限才能看到的应用,进行请求、抓包、分析参数、修改参数、重新请求的测试过程。其中,修改参数指将店主身份的cookie修改为店员身份的cookie,如图3.4所示,重新请求后可以正常返回结果,说明该接口存在垂直越权逻辑漏洞。
图3.4
四、总结与建议
本文介绍了越权逻辑漏洞的基本概念及挖掘方法,并通过万家APP的三个具体场景,介绍了越权逻辑漏洞挖掘的主要流程,包括:确定测试接口抓包获取接口入参分析入参修改入参部分信息后重新请求分析返回结果。最后,通过此次万家APP的逻辑漏洞挖掘实践,提出以下两点建议:
-
建议使用DeepTest接口自动化测试平台,可以提高效率,便于维护和回归,从而使得逻辑漏洞挖掘常态化;
-
建议在工作中培养安全测试意识,比如:
(1)和账户相关的增删改查操作应使用当前用户身份约束;
(2)获取当前用户身份的方式应从session中获取;
(3)不以任何客户端传递的明文数据作为鉴权方式;
(4)用户可见索引字段应尽量设置成无规律;
(5)建立测试方法集,不断积累、执行,将安全测试常态化。
作者:京东零售 孟迪
来源:京东云开发者社区