Board logo

标题: 微点主动防御(version20080924及以下)多个内核拒绝服务漏洞及内核BUG [打印本页]

作者: mj0011_decoder     时间: 2008-10-1 02:37    标题: 微点主动防御(version20080924及以下)多个内核拒绝服务漏洞及内核BUG

\国庆无聊在家,下了一个0924版的微点,从它的HOOK一个个看起,看了4个就发现两个有问题~~再看看,发现有问题的函数几乎是一半对一半~ 多达十几处。还只是简单看看地结果~太挫了
现在说一说其中两个~微点赶紧改吧:D

(1),驱动对ZwOpenEvent的HOOK存在拒绝服务安全漏洞,任何权限用户可以使安装了微点的系统蓝屏

问题在于微点的Hook驱动mp110013.sys对用户态调用ZwOpenEvent传入参数检查不充分导致的

mp110013.sys(版本1.2.10126.0, CheckSum = 0x0000FDB7 , TimeStamp = 0x4859C30E)

偏移0XBAE处实际是其对ZwOpenEvent的HOOK实际处理部分(首先经过一个HOOK引擎mp110003.sys转发)。

ZwOpenEvent的原型是:

NTSTATUS
  ZwOpenEvent(
    OUT PHANDLE  EventHandle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes
    );

微点只对ObjectAttributes做了ProbeForRead检查,没有对该结构内部成员的缓存地址做有效检查,就直接使用系统函数RtlUnicodeStringToAnsiString将该结构的ObjectAttributes->ObjectName转换为ANSI字符,因此只要RING3的程序对该域填充错误地址,就可以引发系统访问无效内存蓝屏

由于该函数的Hook函数中使用了结构化异常处理,因此传0之类的地址是无法引发蓝屏的,但只要传入任何一个无效的内核地址(例如0x80000000),就可以使微点蓝屏

下面是引发蓝屏的测试代码:

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID p = GetProcAddress(hlib , "ZwOpenEvent");

OBJECT_ATTRIBUTES oba ;


oba.ObjectName = (PUNICODE_STRING)0x80000000 ;

__asm{
   lea eax ,oba
    push eax
    push 0
    push 0
    call p
}

运行了这段代码后,系统即蓝屏重启,适用于任何安装了微点的系统任何用户权限。

我编写了一个测试程序"BSOD_MP.exe",在装有20080924及以下版本的微点的系统,运行程序后点"done",系统即会蓝屏。

测试程序下载:http://mj0011.ys168.com 漏洞演示目录下BSOD_mp.rar


(2).驱动对ZwOpenThread的HOOK处理存在漏洞,可能导致系统其他组件工作不正常


在同样版本的mp110013.sys中,对于ZwOpenThread的处理存在BUG,可能导致任意调用该函数的其他驱动程序或系统组件失败!

在对ZwOpenThread的HOOK中,微点的驱动没有判断系统上个模式,而是直接使用ProbeForRead函数去校验ZwOpenThread的参数: ObjectAttributes,这样做的结果会导致在驱动中使用该函数的驱动,只要使用了这个参数,调用这个函数就会返回失败。STATUS_ACCESS_DEIND

正确的做法应该是先判断当前线程的前个模式,如果是UserMode,再做有效性校验。

这个函数在驱动中用得不多,但也不是没有,属于微软有文档的函数,例如在Sandboxie的驱动中就有用到这个,如果这个函数失败,沙箱内的进程在执行某些操作的时候,就可能出错,甚至导致系统崩溃。

====================================================

综上来看,微点的驱动开发者对如何校验用户态参数还是有一些概念的,可惜的是,不仅理解不深,而且还会出现一些粗心大意的毛病~象SSDT HOOK这样直面用户态程序的驱动代码,还是要慎之慎之~~

另外这也暴露出,微点的测试流程不够专业,驱动测试不够重视,如果发布前使用BSODHook等Driver Test工具跑一跑,就不会出现如(1)中那样弱智的错误了~


:cool::cool::P:D:D:P

[ Last edited by mj0011_decoder on 2008-10-1 at 18:51 ]
作者: mj0011_decoder     时间: 2008-10-1 02:44
沙发自己做~大家国庆快乐呀~
作者: mj0011_decoder     时间: 2008-10-1 02:57
啊呀呀,老刘跟工程师们都去度假了呀~?
作者: Legend     时间: 2008-10-1 05:57
感谢楼主反馈,我们会根据楼主提供的信息分析。
作者: 点饭的百度空间     时间: 2008-10-1 19:52


  Quote:
Originally posted by mj0011_decoder at 2008-10-1 02:37:
\国庆无聊在家,下了一个0924版的微点

例如在Sandboxie的驱动中就有用到这个,如果这个函数失败,就可能出错,甚至导致系统崩溃。


综上来看,微点的驱动开发者对如何校验用户态参数还是有一些概念的,可惜的是,不仅理解不深,而且还会出现一些粗心大意的毛病~

另外这也暴露出,微点的测试流程不够专业,驱动测试不够重视


反木马专家 郑文彬  

我是乖娃娃
MJ0011 还原系统保护技术原理和攻防
http://hi.baidu.com/micropoint/b ... 515b3ab80e2de8.html

MJ0011 瑞星和微点的驱动一个摸样
http://hi.baidu.com/micropoint/b ... 515b3ab80e2de8.html
作者: snhao     时间: 2008-10-2 10:06
终于见到高手了
作者: 408983504     时间: 2008-10-2 10:11
这才是高手啊~~
作者: 天涯     时间: 2008-10-3 15:30


  Quote:
Originally posted by mj0011_decoder at 2008-10-1 02:37:
\国庆无聊在家,下了一个0924版的微点,从它的HOOK一个个看起,看了4个就发现两个有问题~~再看看,发现有问题的函数几乎是一半对一半~ 多达十几处。还只是简单看看地结果~太挫了
现在说一说其中两个~微点 ...

楼主这么牛请看看这个防火墙规则包又如何http://bbs.hzva.org/forumdisplay.php?fid=151
作者: 苹果小柚子     时间: 2008-10-3 19:42
mj   blog上也发过好像!
作者: Legend     时间: 2008-10-6 14:10
问题已解决,请楼主用最新的安装包进行测试,如有问题,欢迎再次发帖。(可以联系QQ:383154254 为好友,找他要下新包)
作者: kahaixiao007     时间: 2008-10-8 19:00
高手原来是这个样子啊!
看来微点确实……
作者: realsingmsn     时间: 2008-10-8 23:30
测试包解决了什么问题?
希望版主正面回答一下
微点想砸自己的牌子吗
作者: 国货当自强     时间: 2008-10-26 15:38
既然这么牛,为何做出来的产品不行?偶们普通消费者不是来看这些互相数落的帖子的,我们看的是“疗效”啊,病毒包一放,开始测试,金山就是不如微点。




欢迎光临 微点交流论坛 (http://bbs.micropoint.com.cn/) bbs.micropoint.com.cn