【信息安全】谈谈水平权限绕过

前言

随着计算机技术的发展,各种各样的网络信息系统也如雨后春笋般地出现,这些信息系统无疑给人们的工作学习和生活带来极大的方便,而作为计算机网络信息系统的开发者,确保这些信息系统的安全也成了工作的重点。如果是因为计算机系统导致用户信息泄露的后果是不堪设想的。而今天这篇文章,我们就来谈一谈水平权限绕过(Horizontal privilege escalation)。

什么是水平权限绕过

水平权限绕过通常是指用户对某些计算机资源进行访问或者写入的时,由于计算机程序缺乏对用户身份的校验,而导致了其他用户的资源遭到读写的情况。而水平权限绕过型攻击,则是指黑客通过上述计算机系统缺陷,对计算机系统实施系统数据的未授权读取写入操作。

用比较通俗简单的例子说,在某电商平台购物,购物后返回订单号查询页面,其url为http://demo.com/viewOrder?id=201803302515,如果对该链接实施修改,把“201803302515”部分修改为其他值,如201803302555后,能够获取到其他用户的订单信息,那么这个过程就是一个水平权限绕过的攻击了。简单地说,通过修改请求参数,若能够使用户能够实现一些未授权的访问操作(如看到不该看的东西,写了不该写的东西,让计算机做了不该做的东西等等呢个),就证明该系统存在水平权限绕过的漏洞了。

一些水平权限攻击的例子

大家在看了上面的定义以及那个例子以后,可能会觉得这一过程会比较简单,几乎有脑子的人都不太可能会犯这种错误,的确上述的情景在真实情况下比较少见,不过水平权限绕过的漏洞在很多系统中却都可以找到它的身影,因此我们也简单地说一下几个例子,通过这些例子的话,相信大家能够对水平权限攻击有更深的了解。

某学校网络缴费系统存在水平权限绕过

大学通常都有校园网缴费系统,而在本案例中的网络缴费系统,用户若需要缴费,则需要选择续费时长,系统会自动计算出所需缴纳费用,用户选择支付方式后,系统生成订单跳转去学校结算系统进行结算。

而问题则出现在系统计算费用的部分。

对网站前端进行分析,发现生成订单实际上由一个Javascript函数控制,而最终提交订单的这是通过以下代码实现:

通过对月份数和金额进行修改,尝试性提交订单,发现能够提交成功,能够以任意金额实现对任意时间长度续费(五毛钱钱续费到3123年都可以)。

不难看出该系统后台对系统前端的数据并没有任何的校验机制,直接处理了前端的请求,因此导致了用户可以用任意金额续费任意时长的网络服务。

某用课堂互动平台存在水平权限绕过

某课堂互动平台是一个广受大学教师欢迎的一个在线课堂交互平台,用于给学生签到,讨论等等的功能。

漏洞的发现源于有用户反映该课堂互动平台的讨论区匿名功能的非匿名性。

非匿名性体现的问题是其留言项将用户全部信息进行了输出。

针对该系统前端代码进行进一步的分析发现,其系统或许存在着更严重的漏洞。遂进行进一步的测试。

发现该系统存在若干信息读取写入的API,这些API要求提交参数有被操作的学生、教师的ID以及课堂、课程的ID,于是尝试制作相关请求获取学生列表,发现能够成功获取。进一步测试系统的未授权写入操作,发现写入操作亦可以正常进行。可见该系统对用户的输入完全没有校验,而只对token的有效性进行校验而已,而token的有效性并没有对其的可读可写权限进行严格的控制,从而导致漏洞的发生。

某在线数字出版物网站存在无限免费阅读漏洞

该数字出版物网站提供杂志的在线预览功能,允许未订阅用户浏览若干页内容,然而在对前端源码进行分析后发现,预览功能允许用户阅读的数量是通过若干参数控制的,在开发者模式中对相关参数进行重新设置,未订阅用户即可无限阅读全部内容。

 

水平权限绕过可造成的后果

可见,各类型的水平权限绕过的漏洞在互联网中广泛存在,而权限绕过所会造成的后果也是显而易见的。而漏洞的危险程度也随着系统性质和规模的不同而不同,对于像上述的网络缴费系统,这些涉及到商品交易的网站,权限绕过会导致错误订单的生成,而错误订单一旦交易成功将会对网站主办方造成严重的损失。对于上述的课堂互动平台,虽然这些平台相对于前者并不是十分的重要,但是这些平台往往会有比较大的用户量,在如此大的用户量下,权限绕过能让未授权者获得大量用户信息和资料,这样一来极有可能会导致大规模的用户信息泄露。而至于一些电子书阅读网站,预览空间的设计缺陷让用户能够免费阅读电子书预览以外的付费内容,亦会对网站主办方造成一定的损失,不过相对于前两个case而言,其危险性并不会很高。

 

关于水平权限绕过型漏洞的避免

所有的漏洞说到底都是人为的设计失误导致的,要预防这类型的漏洞,应做到的是在系统设计最初就应当对整个系统的用户角色、权限分配等做好明确的定义,并在开发过程中严格落实好权限的校验工作。业务逻辑应当放在后端完成,任何的校验不应当只依靠于前端。如果系统设计时未曾考虑好整体的架构如何,设计和实际开发时也没有对安全性进行任何的考虑时,水平权限绕过此类的漏洞就极可能会发生。

最稳妥的是进行二次校验,前端对用户的输入数据进行基本的合法性校验,这一校验主要作用是在用户提交请求前对非法操作进行即时的提醒。而服务器端着进行最终的校验操作,对于非法的请求则予以忽略或提示相关的报错信息。

其实上面讲的这些避免漏洞的措施,几乎都是老生常谈了,但是这些漏洞却屡屡出现,原因又是什么呢?正如本人在知乎一个问题“黑客能够厉害到什么程度”里面所说,很多时候并不是黑客或者白帽子能够厉害到什么程度,而是这些计算机信息系统的漏洞能够严重到什么程度、系统管理员的安全意识弱到什么程度。黑客和白帽子寻找漏洞大多是是依靠工具来进行扫描的,对于有可疑的站点再进行人工的渗透测试,这本身并不会有非常“厉害”的技术在里面。而有很多最终导致严重后果的漏洞,往往都是一些显而易见的漏洞来的。这些漏洞的“制造者”,也就是这些系统的开发者,往往都是在态度上存在着很大的问题,不把安全当回事,他们总是想着能让车子跑起来就行,却忽视了车子的安全性。更有甚者把委托项目放在github上面只是为了能够比较方便地存取,自己单位的APISecret被“开源”了都不知道。

与其说漏洞多可怕,还不如说把信息安全当儿戏多可怕。


若您觉得这些内容对您有帮助,希望您能为我提供捐助,以便让我们更好地运营下去。

Bitcoins donations ar accepted

3MNvM1gW2sLPm3HTcM2Zp4GdaHDHeFkjMh

发表评论

电子邮件地址不会被公开。 必填项已用*标注