最近金山也加入了浏览器大军,推出了其首款浏览器 - “猎豹”,主打安全牌,直指360安全浏览器。我在第一时间拿到了猎豹浏览器的安装包,使用感受是,总体来说还不错,但是需要完善的地方还有很多。
其中其主打宣称的BIPS (Browser Intrusion Prevention System)安全系统有种令人眼前一亮的赶脚,是否真的有这么神奇吗?于是我操起IDA简单的分析了一下。
1.猎豹浏览器在用户首次访问电商等敏感网站的时候会加载其名为knbdrv.sys的BIPS监控驱动。
2.驱动起来的时候会根据一个全局变量的值g_bHookEntry来hook ssdt还是KiFastCallEntry(内核层调用入口)。如果Hook的是KiFastCallEntry,那么其hook的位置也很巧妙。hook前后KiFastCallEntry的变化如下图:
为什么说这个hook点选取的巧妙呢,因为此时,调用系统API的准备过程基本已经做完了。而且这个hook点正好在360安全卫士hook点的前面。因此,拦截恶意行为等动作都是在360前面。唯一一个缺点就是,因为还有部分如取得系统API的调用地址等还未初始化,因此,在hook函数里面需要处理的数据会比360hook函数稍微多一点。俗话说的好,”有利也有弊“嘛。
3.如果在KiFastCallEntry的这个hook点上已经有其他软件hook了,那么BIPS会覆盖其hook,并在执行完自己过滤函数之后再调用先前被覆盖的那个过滤函数。达到始终在其他安全软件之前拦截的目的。
4.再回过头来说说猎豹是如果定位KiFastCallEntry的hook点的。
(1)SSDT HOOK了NtDisplayString函数。
(2)以”kisknl“为UNICODE_STRING字符串参数,调用NtDisplayString()。
(3)FakeNtDisplayString函数里面匹配”kisknl“字符串,如果是的话,就堆栈回溯到KiFastCallEntry中。
(4)找到KiFastCallEntry的返回地址后,最后向上通过匹配特征码来找到KiFastCallEntry的hook点。
5.每个被hook的函数使用一个结构体来保存hook信息,以便用来过滤和恢复Hook。
- typedef struct _HOOK_INFO_
- {
- DWORD nShadowFuncionId; // Shadow表函数的ID,SSDT表的函数此值为0
- PVOID pNtdllSsdtFunctionAddress; // ntdll.dll中函数的地址,用来获取SSDT函数的ID,Shadow表的函数此值为0
- PVOID pFakeFunction; // 保存过滤函数的地址
- PVOID pOrginFunction; // 保存原始函数的地址
- }HOOK_INFO, *PHOOK_INFO;
被hook的系统函数如下(XP系统,不同系统hook的函数有所不同):
(1)SSDT:
NtCreateSection
NtCreateThread
NtDebugActiveProcess
NtDeviceIoControlFile
NtFreeVirtualMemory
NtLoadDriver
NtOpenProcess
NtOpenSection
NtProtectVirtualMemory
NtQueueApcThread
NtRequestWaitReplyPort
NtSetContextThread
NtSetSystemInformation
NtSuspendProcess
NtSuspendThread
NtSystemDebugControl
NtTerminateJobObject
NtTerminateProcess
NtTerminateThread
NtTestAlert
NtUnmapViewOfSection
NtWriteVirtualMemory
(2)Shadow SSDT:
NtUserBlockInput
NtUserCallHwndParamLock
NtUserDestroyWindow
NtUserGetAsyncKeyState
NtUserGetKeyboardState
NtUserGetKeyState
NtUserGetRawInputBuffer
NtUserGetRawInputData
NtUserMessageCall
NtUserMoveWindow
NtUserPostMessage
NtUserPostThreadMessage
NtUserSendInput
NtUserSetParent
NtUserSetWindowPlacement
NtUserSetWindowPos
NtUserSetWindowRgn
NtUserSetWindowsHookEx
NtUserSetWinEventHook
NtUserShowWindow
NtUserShowWindowAsync
(3)IAT HOOK KeUserModeCallback来防止消息钩子的注入。
ps:
1.经过这个分析,传说中的BIPS也就不再那么神秘了,其实质就是精简了的毒霸k+主防,去掉了注册表防御部分,做成了适合浏览器的一套防护体系。也就是说,猎豹浏览器自己实现了部分杀毒软件的防护功能,能够使得那些未安装杀毒软件或者即使是自身电脑已经中毒的用户在进行网购时可以免受病毒木马的侵害。这也正是其敢赔的信心之所在。
2.而360所谓的安全浏览器就仅仅是集成了一款SandBox,平时根本不会自动入沙。对于普通用户来说,其与使用IE浏览器没多大差别。