查看文章 |
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的原型是:
其中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"; //获得ZwCreateKey地址
//随便用一个键句柄作为RootDirectory,以绕过MD的检查 OBJECT_ATTRIBUTES oba ; //填充ObjectAttributes,使ObjectName有效,SecurityDescriptor填入无效的内核地址
//调用 测试程序下载:http://mj0011.ys168.com 漏洞演示目录下 BSOD_MD.rar |