补丁更新服务问题
【编者按:这是国外高手所写的一篇认为卡巴斯基在其杀毒软件里使用了许多不安全技术的文章,我们将分期将其一一展现给大家。(原文发表于2006年6月)】
卡巴斯基发布了称为卡巴斯基互联网安全套件5.0的个人安全软件包。该软件包里含有很多个人安全软件程序,包括防火墙和杀毒软件。
我们这篇文章的核心就是要谈谈卡巴斯基的杀毒软件。跟很多其他的杀毒软件一样,卡巴斯基的杀毒软件也是既能手动操作扫描病毒也可以实时扫描病毒。
卡巴斯基的杀毒软件系统(KAV)在其内核层组件中使用了很多不安全的技术。这些技术中的一部分甚至有可能会导致系统安全遭到威胁。
问题所在
实时的补丁更新服务
尽管KAV看起来好像是使用文件过滤系统——这是一种标准的拦截文件存取操作的Windows机制(尤其像是为杀毒软件而设的),KAV还使用了一系列API层的函数钩子来拦截对文件的存取。如果某个函数在用户层下可以调用的话,那么执行那些内核层的钩子函数会非常危险,人们必须十分谨慎地验证所有的参数的可靠性(否则系统可能会受到未授权的程序的威胁)。另外,通常删除跟内核层相关联的代码也将面临很大危险,因为你很难保证没有线程在某个特定代码区域运行,也很难做到不对系统造成任何威胁就能解开钩子。KAV还跟很多其他的系统服务相关联,这是它所谓的保护进程不被反编译或者终止而进行的措施。
不幸的是,KAV程序员们并没有正确的验证那些与系统调用相关联的参数,因此导致在此处出现了很多的漏洞,最终这些漏洞使非授权的用户层程序能够造成系统的崩溃。这些漏洞中的一部分甚至允许人们扩大本地权限(尽管笔者并没有花时间来验证这点是否可行)。
KAV与下列系统服务相关联(在WinDbg中,把一个运行着KAV的系统里的 nt!KeServiceDescriptorTableShadow 跟一个干净系统里的相比较,你很容易就能发现这些关联)。
|
另外,KAV还试图建立很多全新的系统服务,它通过更新服务描述表的方法,把这些服务变成调用系统内核模块的捷径。这显然不是允许用户模块程序与驱动程序交互的最佳机制;程序人员应当使用传统的IOCTL接口,该接口不用实时地更新内核结构,并且可以避免很多不便,比如从一个系统升级成另一个系统的正常的系统服务更新。
网友评论