ARTICLE · 1155047
Windows装了两款杀毒软件,它们先盯上了彼此
客户的电脑出了故障。微软企业支持团队查到最后,发现机器里两款反恶意软件正在互相妨碍:一款想隔离另一款的进程,处理过程中又调用了对方接管的函数。
10 月 8 日,微软工程师 Raymond Chen[1] 把这次排障写进博客。他没有公开客户和软件名字,只用虚构的 Contoso、Fabrikam 代称。装两道门锁听着更保险,这台电脑里的两名“守卫”却先认定对方可疑。
Photo by Icons8 Team on Unsplash
它们争的不是病毒,是入口
杀毒软件不能只在桌面上等你点“扫描”。实时防护要在文件被打开、程序开始运行时抢先检查。Windows 的文件系统过滤驱动[2]能拦截文件读写;有些软件还会改写系统函数的调用路径,让请求先经过自己。
两款软件都想站在入口。Fabrikam 调用了 Contoso 改道的函数,Contoso 判断可疑,试图隔离 Fabrikam;Fabrikam 也改过 Contoso 正在用的函数。Contoso 执行隔离时,调用又绕回它正要隔离的对象。故障因此很难查。
Photo by Jakub Żerdzicki on Unsplash
多装一套,为什么没多一份安心
Chen 说,软件没法像保安一样约定各管一层楼;即使查明冲突,通常也无法告诉两套防护各自只管哪部分。函数被改道后,程序表面上调用的是系统功能,实际却先进入另一款软件。只看卡顿或报错,很难猜到拦在中间的是谁。
微软支持文档[3]给普通用户的建议很直接:不要同时运行多款实时杀毒产品。安装其他实时防护时,Defender 在相应配置下会停用实时防护或转入被动模式;按需启动的扫描器则可以并存。问题出在两套程序同时抢着实时拦截。
Photo by Albert Stoynov on Unsplash
一次故障,不能给所有杀软判刑
Chen 没公布产品名称,也没说每台装了两款杀毒软件的电脑都会出故障。不同产品如何协作,仍要看具体配置。这起案例能确认的,是两套实时防护同时改道系统调用后,连“谁在保护谁”都可能变得说不清。
如果一台电脑装了两款实时杀毒软件,又突然出现难以解释的卡顿或故障,先看看它们是否都在运行。故障也许发生在扫描病毒之前:两款软件正等着检查彼此。