测一测才知道,百度安全软件是不是真流氓?|

  • A+
所属分类:网络安全

前言

最近不知为何掀起“黑百度”风,360老总不顾颜面微博喊话李彦宏,广大用户纷纷吐槽百度杀毒的静默安装、卸载不了以及软件捆绑安装。这些所谓安全软件的问题也不是一天两天了,之前就有人说某安全软件上传工程源码以完成所谓“云查杀”,又时不时涉嫌各种隐私问题,不一而足。

之前在百度杀毒那边实习过一阵,感觉软件不至于无耻到网上所流传那种地步。这里我选择不同平台安装不同的百度产品,从安装到运行,以及卸载,看看它们到底多流氓。

工具

VM虚拟机、win7 x86、win7 x64、ProcessMonitorProcessExplorerPCHunterWindbgVKD

百度高速下载

百度搜索某软件,会有“高速下载”选项,我们使用高速下载来作为测试:

‍高速下载得到一个exe:npp.6.6.9.Installer_13478_BDdl.exe,图标是度熊手;普通下载得到的是:npp_V6.7_Installer.1418630513.exe。

从文件名可以目测出两个问题:

1、高速下载得到的是捆绑了百度产品的
2、高速下载得到的是低版本的。可能捆绑是需要时间的吧。

那我们运行这个高速版看看会发生什么:

首先映入眼帘的是百度下载助手的安装程序,百度的签名:

然后下载助手安装成功,并启动notepad++的下载和安装。所以说之前那个npp.6.6.9.Installer_13478_BDdl.exe纯粹是混淆视听,就是baiduxiazaizhushou.exe,怪不得连图标都没变。再试几个其他的高速下载,都是会安装“百度下载助手”,然后再“高速”下载该软件。何来点了高速下载就会静默安装百度杀毒和百度卫士?

这里黑得不漂亮啊!不过这个确实也属于欺骗用户的。倒是有时候下载的时候有个选项“安装百度杀毒”,默认是勾选的,如果不取消选择,那铁定是要中招了。我之前确实见过这种情况,不过写这篇文章测试的时候一直没搜出来,只好作罢。另外有一点我觉得是无脑黑,说什么百度搜索360会被屏蔽云云,可能纯粹是网络问题吧。百度说点竞争对手坏话倒有可能,大家都这样,不至于屏蔽竞争对手。

我倒是觉得软件中心挺好,起码点下载就是下载,不至于点下载给你安装个美图秀秀;而且也过滤了一些不良软件。这些进步是应该看到的,大家互相黑的同时也在一定程度上互相促进了,对用户来说是好事。这个小问题解决之后我们看看百度杀毒和百度卫士有多少干货。

百度杀毒

下载百度杀毒最新版,安装并监控。我记得上次我装的时候确实什么都没提醒就装上了,这次测试的时候倒是提醒了。安装之后运行了这两个程序,可以看出一个是主防一个是杀毒服务:

PCHunter可以看到百度杀毒装的驱动:

bd0001~bd0004、文件系统过滤、沙箱、反病毒等,驱动还是不少,感觉有点乱。毕竟是内核层的,搞这么多东西难免会出问题。注册了一些系统回调,用于监控进程创建、线程创建、模块加载、注册表更改、关机等,也是一些常规的回调,具体效果得看实现如何。也往往是干掉防护的突破口:

Bd0003还有一个DPC定时器:0x8777DFB000x9875DE60C:\Windows\system32\DRIVERS\bd0003.sys文件系统过滤驱动BDFileDefenderBD0003也是实现了一些常规的IRP过滤:

这个时候出了个意外,蓝屏了,windbg及时捕捉:   

    CHKIMG_EXTENSION: !chkimg -lo 50 -d !nt
        83e8b3e9-83e8b3f0  8 bytes - nt!KiFastCallEntry+e9
        [ 8b fc 3b 35 1c 07 fb 83:e9 f0 02 01 0b 90 90 90 ]
        83eafb5f - nt!SwapContext_PatchXSave+2 (+0x24776)
        [ 01:21 ]
        83eafdad - nt!EnlightenedSwapContext_PatchXSave+2 (+0x24e)
        [ 01:21 ]
        83eb7ce0-83eb7ce3  4 bytes - nt!KiServiceTable+5f0 (+0x7f33)
        [ e1 42 0d 84:72 97 21 92 ]
        84086c93-84086c96  4 bytes - nt!PsOpenThread+20f
        [ 88 c3 03 00:59 ae 21 23 ]
        840a9b80-840a9b83  4 bytes - nt!NtTerminateProcess+43 (+0x22eed)
        [ 81 25 fc ff:cc 87 1f 23 ]
        840bc935-840bc938  4 bytes - nt!NtTerminateThread+51 (+0x12db5)
        [ cc f7 fa ff:17 5a 1e 23 ]
        840c0dfe-840c0e01  4 bytes - nt!PsOpenProcess+22d (+0x44c9)
        [ 1d 22 00 00:ee 0c 1e 23 ]
        840c411f-840c4122  4 bytes - nt!NtDuplicateObject+5d (+0x3321)
        [ e2 7f fa ff:0d dc 1d 23 ]
    34 errors : !nt (83e8b3e9-840c4122)
    FOLLOWUP_NAME:  MachineOwner
    MEMORY_CORRUPTOR:  PATCH_bd0001
    FAILURE_BUCKET_ID:  MEMORY_CORRUPTION_PATCH_bd0001
    BUCKET_ID:  MEMORY_CORRUPTION_PATCH_bd0001
    Followup: MachineOwner
    ---------

可以看到bd0001ntoskrnl进行了patch,具体看看:

kd> !chkimg !nt
34 errors : !nt (83e8b3e9-840c4122)
kd> ln 83e8b3e9
(83e8b300)   nt!KiFastCallEntry+0xe9   |  (83e8b480)   nt!KiServiceExi kd> u 83e8b3e9
nt!KiFastCallEntry+0xe9:
*** ERROR: Module load completed but symbols could not be loaded for bd0001.sys
83e8b3e9 e9f002010b      jmp     bd0001+0x86de (8ee9b6de)
83e8b3ee 90              nop
83e8b3ef 90              nop
83e8b3f0 90              nop
83e8b3f1 0f832e020000    jae     nt!KiSystemCallExit2+0xa5 (83e8b625)
83e8b3f7 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
83e8b3f9 f6456c01        test    byte ptr [ebp+6Ch],1
83e8b3fd 7416            je      nt!KiFastCallEntry+0x115 (83e8b415)

百度杀毒的驱动对KiFastCallEntry进行HOOK,这是系统入口点,所有系统调用都会经过这个函数。我们需要了解一下系统调用的基本知识,应用层的API做一些参数检查工作之后会调用ntdll.dll的同名nt函数,比如CreateFile会调用ntdll.dll中的NtCreateFile函数(和ntdll.dllZwCreateFile完全一样),然后NtCreateFile填写参数之后执行sysenterint 0x2E,这个时候由应用层进入内核层,内核分发函数就是KiFastCallEntry,它会根据应用层调用去执行SSDT的相应函数。

所以KiFastCallEntry是防护软件绝佳的HOOK地点。最早应该是360发现的,所以360使用的HOOK点是最佳的,百度这里看到有nop填充,估计也是无奈之举。同时也能知道百度采用的是比较流行的驱动框架模型,bd0001是个驱动框架,其它驱动通过bd0001的接口注册回调,bd0001调用实现监控。

再回头看这个蓝屏:

kd> kb
ChildEBP RetAddr  Args to Child              
a39a250c 83f24e71 00000003 2fa590e4 00000065 nt!RtlpBreakWithStatusInstruction
a39a255c 83f2596d 00000003 00003ff8 a5d3adbc nt!KiBugCheckDebugBreak+0x1c
a39a2920 83ecd8e3 00000050 a5d3adbc 00000000 nt!KeBugCheck2+0x68b
a39a29ac 83e8e5f8 00000000 a5d3adbc 00000000 nt!MmAccessFault+0x106
a39a29ac a7280e2f 00000000 a5d3adbc 00000000 nt!KiTrap0E+0xdc
WARNING: Stack unwind information not available. Following frames may be wrong.
a39a2a4c a72825cd a5d3ad90 00200000 052a0020 PCHunter32ag+0x52e2f
a39a2af8 a72828f7 052a0020 00200000 00001000 PCHunter32ag+0x545cd
a39a2b0c a728296e 00000000 000008f1 8744a740 PCHunter32ag+0x548f7
a39a2bfc 83e844bc 9174ae98 889b3930 889b3930 PCHunter32ag+0x5496e
a39a2c14 84085eee 88932038 889b3930 889b39a0 nt!IofCallDriver+0x63
a39a2c34 840a2cd1 9174ae98 88932038 00000000 nt!IopSynchronousServiceTail+0x1f8
a39a2cd0 840a54ac 9174ae98 889b3930 00000000 nt!IopXxxControlFile+0x6aa
a39a2d04 83e8b42a 00000508 00000000 00000000 nt!NtDeviceIoControlFile+0x2a
a39a2d04 76fc64f4 00000508 00000000 00000000 nt!KiFastCallEntry+0x12a
001266d8 76fc4cac 7516a08f 00000508 00000000 ntdll!KiFastSystemCallRet
001266dc 7516a08f 00000508 00000000 00000000 ntdll!NtDeviceIoControlFile+0xc

IofCallDriver用于发送Irp,之后的栈就出问题了,reactos中看实现:

NTSTATUS
FASTCALL
IofCallDriver(IN PDEVICE_OBJECT DeviceObject,
              IN PIRP Irp)
{
    return DriverObject->MajorFunction[StackPtr->MajorFunction](DeviceObject,
                                                                Irp);
}

看来是bd0001的分发函数调用出了问题。这个蓝屏纯属意外,恰好可以讲解一下百度杀毒的驱动模型和HOOK技术。现在回归主线。重启电脑。

看一下大家比较关心的隐私问题,看看网络链接情况:

Baidusdsvc.exe是和220.181.112.25480端口保持通信的,该IP是北京电信的。Wireshark看一下通信内容,没发现往上传文件的情况。                       

再看看启动项:      

这只是可执行文件和服务,看看驱动:

挺多,大部分启动类型都是1,连bd0001都是1,也就是普通驱动,而不是BOOT型。BOOT型驱动启动类型为0,由winload.exe加载,和ntoskrnl.exe以及hal.dll同级,加载时间非常早;之后才加载系统级驱动。所以说如果中病毒了,而该病毒有个boot型驱动,用百度杀毒显然是无能为力的。

百度杀毒卸载问题

好多朋友都问我如何卸载百度杀毒,真有那么难以卸载吗?这里测试一下。卸载过程真是…… 把“不卸载”大写并且突出,“继续卸载”扁平化恨不得凹进去。不过识字的应该都能顺利卸载完成。接着重启。           

没了。目测是卸载干净了。

看了看注册表,bd0001等驱动都没了。看一下KiFastCallEntry等HOOK点:

kd> !chkimg nt
14 errors : nt (83e873e9-83eb3ce3)
kd> ln 83e873e9
(83e87300)   nt!KiFastCallEntry+0xe9   |  (83e87480)   nt!KiServiceExit

kd> u nt!KiFastCallEntry+0xe9
nt!KiFastCallEntry+0xe9:
*** ERROR: Module load completed but symbols could not be loaded for bd0001.sys
83e873e9 e9f0e29215      jmp     bd0001+0x86de (997b56de)
83e873ee 90              nop
83e873ef 90              nop
83e873f0 90              nop
83e873f1 0f832e020000    jae     nt!KiSystemCallExit2+0xa5 (83e87625)
83e873f7 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
83e873f9 f6456c01        test    byte ptr [ebp+6Ch],1
83e873fd 7416            je      nt!KiFastCallEntry+0x115 (83e87415

卧槽,居然还被HOOK呢。  
    

看一下KiFastCallEntryHOOK点:

kd> !chkimg nt
14 errors : nt (83e873e9-83eb3ce3)
kd> ln 83e873e9
(83e87300)   nt!KiFastCallEntry+0xe9   |  (83e87480)   nt!KiServiceExit

kd> u nt!KiFastCallEntry+0xe9
nt!KiFastCallEntry+0xe9:
*** ERROR: Module load completed but symbols could not be loaded for bd0001.sys
83e873e9 e9f0e29215      jmp     bd0001+0x86de (997b56de)
83e873ee 90              nop
83e873ef 90              nop
83e873f0 90              nop
83e873f1 0f832e020000    jae     nt!KiSystemCallExit2+0xa5 (83e87625)
83e873f7 f3a5            rep movs dword ptr es:[edi],dword ptr [esi]
83e873f9 f6456c01        test    byte ptr [ebp+6Ch],1
83e873fd 7416            je      nt!KiFastCallEntry+0x115 (83e87415

卧槽,居然还被HOOK呢。          
            

试着删除bd0004,禁止删除,应该是下载助手。卸载百度下载助手之后试试。删除成功, 重启看看: 

kd> !chkimg nt                                                                       
2 errors : nt (83ebbb5f-83ebbdad)

这次没问题了。

为什么卸载之后bd0001还会加载到内存呢?可能是我操作有误,重新试了一次发现安装——重启——卸载——重启之后,系统是干净的,没有出现卸载问题。卸载问题是怎么来的呢?

考虑到推广,可能是被绑定软件搞的鬼。我们下载一个合作软件,通过绑定方式安装杀毒,看看卸载情况。不得不说,百度的情况肯定是被水军和职业黑夸大了,我找了好久都没找到绑定的情况,即使安装百度输入法并且一路下一步,都没能被绑定装上杀毒。

X64情况

Windows 64位对内核采取了一系列保护措施,最经典的就是KPPDSEKernel Kernel Patch Protection主要使用PatchGuard,禁止修改内核,所以传统的SSDT Hook和修改内核对象等手段都走不通了;DSE强制驱动签名。所以64位驱动大多是使用windows官方定义的回调,结合应用层HOOK来搞。64win7上装好杀毒,看了看services,跟32位的差不多,也是bd00001等系统级驱动。

运行卸载程序之后重启,并没有发现不能卸载的情况。感觉非常不好,测试了半天连个流氓行为都没有捕获。难道那些流言都是空穴来风?

问题复现

测试了半天,没发现百度杀毒有问题。问了一些出问题的朋友,有的说是捆绑情况,杀毒、卫士、浏览器同时被装上,然后卸载重启之后右下角弹框,点修复就会重新装上。之前的测试只是针对百度杀毒一个,这次把杀毒、卫士都装上试试。

官网直接下载某个非常小的下载器。会把最新版杀毒卫士都下载下来然后安装好。这个过程中确实没有任何提醒,没有下一步,直接就装好了,连安装地址都不能选择。PCHunter看了一眼吓一跳,能装的都装上了:

驱动也多了几个:

多了一些网络过滤驱动和浏览器防护的,这也是卫士的基本功能。其他的HOOK就不看了,都差不多。还是关注一下卸载问题。卸载百度杀毒,同时删除配置信息,重启。百度卫士修复了半天漏洞,优化这个那个的,反正界面很华丽得搞了半天。百度杀毒确实是卸载掉了。

那么怎么样才能重现卸载不了的问题呢?我查了一下百度流氓行为的一些信息,按照他们说的某个软件,都测试过一次,均没有出现不能卸载这种奇葩现象。

有一种情况是可能的,装百度杀毒和百度卫士,但是只卸载其中一个,另一个使用猥琐的方法(比如在修补漏洞界面非常隐蔽的隐藏一句同时安装杀毒/卫士)骗取用户同意然后重新安装另一个。驱动公用,想装另一个太容易了。

另外我绝对不是托儿,首先我还不够资格;其次也没必要,我只是想亲自看看传说中的流氓行为,只不过搞了半天没有复现,仅此而已。杀软这种东西很大程度上是给小白用户个心理安慰,真正能有多大用呢?当然升级软件方便一些,清理垃圾也方便一些,沙箱针对一般恶意应用也提供了足够防护。各家厂商技术差距肯定存在,但是那些技术的差距落实到每个用户电脑上,又能有多大的体现?大佬们口水仗打得爽,跟用户其实没半毛钱关系,难不成你还真以为公司没事儿干为了情怀做个杀软让你用?

装软件的时候也非常注意是不是捆绑了其他程序,多长个心眼儿,那些传说中的流氓行为都可以避免。现在最大的问题是法律法规对互联网行为没有做好规范,这个黑那个,那个黑这个,真正为用户考虑的没几个,号称为用户考虑也不过是宣传口号而已。真希望能早日做到有法可依。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: