鸿 网 互 联 www.68idc.cn

一个逻辑考虑不周导致的安全问题

来源:互联网 作者:佚名 时间:2015-08-31 09:27
FlashSky(知道创宇)的空间 在2007年微软的BLUEHAT上,我给微软讲了一个“无所不在的攻击和利用"的演讲,其中演示了多个被认为不能被利用但实际可以被利用的例子。其中的一个最简单的应用场景,或许可以印证前面提到的:一些逻辑考虑不周的情况。 漏洞很简单

FlashSky(知道创宇)的空间

在2007年微软的BLUEHAT上,我给微软讲了一个“无所不在的攻击和利用"的演讲,其中演示了多个被认为不能被利用但实际可以被利用的例子。其中的一个最简单的应用场景,或许可以印证前面提到的:一些逻辑考虑不周的情况。

漏洞很简单,是当时被公开的XP ICS中的一个NULL指针拒绝服务漏洞,这是一个典型的在WINDOWS下无法被利用的漏洞,所以也没人关注也没修补,但实际上,在2000,XP,2003系统的特定场景中,所有的服务级的拒绝服务漏洞都是可以用来本地提权的,是因为MS在2000,XP,2003开发调试器系列的时候,在逻辑上是存在问题的。

当应用产生异常事件时,会向系统相关的LPC发送消息,如果安装了调式引擎如WINDBG,VC等,系统会用被崩溃应用的用户令牌来启动调试器而不是以当前用户的令牌来启动调试器。因此一个普通用户在一个安装了有调试环境的系统下,通过这些不能被利用的漏洞但是可以让系统服务崩溃,就能够获得一个服务级用户身份起用的调试器,进而控制整个系统。

在这里,关键是设计调试器引擎的设计者没有考虑到这样一个场景:使用用户和崩溃需要调试的应用的用户身份并不一致,(后来测试VISTA是对这个加以了改进的,只以当前用户身份启动调试引擎,侧面引证了VISTA,MS在安全上还是很下了一翻功夫)。

PS一下:逻辑漏洞应该不仅仅是包括自己代码的逻辑,还有对整个运行环境假定的逻辑。

这就是为什么逻辑漏洞难以发现和解决的原因,因为会有很多很多我们都习惯的认定的假定逻辑,假定系统是会话持续的(在WEB上),假设使用用户和崩溃程序是一个身份等等,其实很多东西,在常规思维之下,往往会发现还有其他另外的路径没有考虑到

网友评论
<