越权漏洞指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。例如在图1.1中购物系统中A用户可以查询到B用户的订单信息,是为水平越权;普通用户获取管理员权限的功能,是为垂直越权。
图1.1 越权示意图
常见越权漏洞的利用方式有基于用户身份ID、基于对象ID、基于会话、未授权访问等。基于ID的方式通常替换SESSION或URL中的ID,查看别人的信息(如图1.2所示);基于会话的方式为盗用他人的SESSION或COOKIE信息,从而顶替他人进行操作(如图1.3所示)。
图1.2 参数替换示意图
图1.3 SESSION替换示意图
无论是什么字段,存在越权数据操作漏洞的web应用都没有对它们的归属账户进行判断,没有确认发起请求的账户是否具有操作的缺陷就直接执行了相应的命令。
为了进一步搞清楚越权漏洞的原理,下面以pikachu靶场为例介绍漏洞形成的原因及简要加固措施。
在登录Lucy账号的情况下,将url中的地址修改为lili就可以看到lili的个人信息,触发水平越权漏洞。
图1.4 水平越权示意图
分析源码可以看到,在登录时后台将用户名和密码保存在session中,但读取用户信息时没有使用session进行校验。加固方法也很简单,添加一层if判断session中的用户名与当前用户名是否一致即可。
图1.5 水平越权源码分析——保存session
图1.6 水平越权源码分析——身份校验缺失
登录管理员账号可以看到,管理员有添加用户的权限,而普通账户则没有。
图1.7 管理员登录界面
图1.8 普通用户登录界面
首先登录管理员账户,在添加用户的界面填写信息、点击创建后抓包,发送到重放器(图1.9)。此时点击发包,查看用户列表新用户fanfan并未创建成功(图1.10)。
图1.9 创建用户抓包
图1.10 此时未创建新用户
退出管理员用户,登录普通用户(图1.11)。抓包获取cookie后替换重放器中的cookie,首先完成普通用户的登录(放包),然后在重放器中点击发送(图1.12),此时查看用户列表可以看到新用户添加成功(以普通用户的身份添加,图1.13),触发垂直越权漏洞。
图1.11 普通用户登录抓包
图1.12 cookie替换,发生越权
图1.13 普通用户新建用户成功
分析源码可以发现在登录时会校验用户的权限,不同权限进入不同的页面。但在新建用户插入数据库时,没有校验权限,导致漏洞出现。防御措施很简单,在插入数据库前校验用户的level。
图1.14 垂直越权源码分析——登录权限校验
图1.15 垂直越权源码分析——权限校验缺失
二、漏洞检测
目前越权漏洞的检测更多依赖人工进行,自动化方法是未来的发展方向。
(一)人工检测
对于水平越权漏洞,暴力遍历是一种很好的渗透测试方法。该方法利用burp suite遍历一组ID, 进行批量检测,如图2.1所示。
图2.1 使用burpsuite进行遍历
另一种更为常见的方式是流量重放,流程图如图2.2所示。该方法首先登录高权限账户A并发起一次数据操作的请求,使用抓包工具拦截该请求数据包并复制SESSION,此时登录低权限用户B,替换SESSION后重放,低权限用户B实现了越权操作。在金融领域中,可对UKEY进行校验后的新增操作进行抓包,替换SESSION后重放,可以实现无需UKEY校验的任意次操作。
图2.2 流量重放步骤图
(二)自动化检测
自动化检测方法相比手动,是在流量获取环节提升了自动化的程度。图2.3所示为自动化越权漏洞检测方法架构图。
图2.3 自动化方法架构图
方法分为系统认证、流量获取和越权判断三个步骤:
系统认证即登录环节。
流量获取是提升自动化程度的重要阶段,动态爬取方法使用无界面浏览器爬虫对站点进行动态的爬取;在有流量网关的情况下,可以直接从流量网关抓取流量,从流量网关中筛选出目标的请求即可;或通过在测试人员的浏览器中安装插件并配置好测试系统相关信息后,在测试人员手动点击待测功能,就可以通过插件或代理服务器等方式收集到待测流量。
在流量对比阶段,对于垂直越权,只需要再对不同身份下的请求做个减法便可以得到不属于该身份的请求。但是对于一些公共接口还是需要通过手动判断或者通过关键字白名单的方式进行过滤。对于水平越权,一些简单的站点可以根据表单中的禁止编辑属性以及返回信息等属性来得到判断依据,更为复杂的仍需人工判断。一种批量对比的方法是统一修改认证信息,通过对比重放前后的返回信息内容进行判断是否存在越权。
使用爬虫方法的流程图如图2.4所示。可以看出在验证部分仍需要手动替换信息、重放流量包。自动化检测是未来研究的热门方向。
图2.4 使用爬虫的自动化方法流程图
三、防守策略
(一)安全管控左移
针对业务类逻辑漏洞,我们可以充分发挥甲方的优势,采用威胁建模的方法,在项目进入设计阶段前就建立起漏洞的预防链,如图3.1所示。例如在某个系统中的“查询、展示”场景中,就要考虑接口对应的代码、接口对应的业务、接口返回的数据、接口的数据来源等等中可能存在的安全风险。一次完整的威胁建模可以将服务、应用,甚至依赖包等都纳入风险分析的范围内。
图3.1 威胁建模方法的应用
(二)开发者应注意的地方
开发人员在权限管理中遵守下列规则,可减少越权漏洞的发生:
使用最小权限原则对用户进行赋权;
使用合理(严格)的权限校验规则;
使用后台登录态作为条件进行权限判断。
四、参考文献
[1]净山, 徐国爱. 一种Web应用越权漏洞自动化检测实现[J]. 2014.
[2]赵川, 徐雁飞. 一种越权漏洞攻击方法实例研究[J]. 信息安全研究, 2019, 5(3):5.