文件监控的潜在兼容性问题
文件监控是反病毒厂商普遍采用的技术手段,其主要机理是对文件的创建、读取、关闭等行为进行监控触发对文件病毒检测,以阻断病毒的执行和部分相关行为。
文件监控的实现方式主要有以下两大类型:
1. API挂钩。
根据钩挂API的层次不同我们又可以分为 :
(a) Ring3文件监控。
多采用inline hook的方式修改文件操作相关函数的前几个字节,跳转到自己的函数,然后对将要操作的文件和缓冲区进行检测。
由于实现跳转的方式有多种,所以不同软件的实现策略有所不同,很难保证多个软件共存时前一软件修改后不影响到后一个软件,而且很可能导致相关进程崩溃。
由于此类技术也多被恶意软件使用,一些安全软件不会在执行完自己的代码后执行修改前的自己,而是采用从原始文件中读取、分析、执行的方式,导致多个安全软件同时监控一个API时,只有一个生效。
出于性能考虑,不传递给原API处理而采用自己实现的代码完成该API的相应功能,那么也不会将相关信息传递给其他软件。
部分软件在执行完自己的函数后会把修改后的字节还原,然后调用原系统API完成功能后再次修改、挂钩。两个使用此实现的软件同时工作则可能造成互相调用导致死锁,程序没有响应。
(b) Ring0文件监控。与ring3的情况类似,但是后果更加严重。
由于inline hook不同实现造成的不兼容性很可能导致系统API无法正常工作,导致系统蓝屏。
例如:安天客户端产品(Antiy Ghostbusters4.0)早期版本采用大量inline hook,后因与其他产品严重冲突放弃;360安全卫士中inline hook有几种不同实现方式共存的现象,并且与360安全浏览器有重合的监控点;
挂钩之间相互调用,会导致死锁,系统死机;
采用替换SSDT的方式,则只有自己的挂钩有效,其他软件的挂钩均无效。
例如:360安全卫士等产品采用替换SSDT的方式,与其共存的安全软件通过标准方法获取的SSDT是无效的,导致其他安全软件功能出现缺失;
Vista以后微软对内核进行保护,部分对内核函数的修改会导致系统蓝屏。
例如:多个产品在内测和对外版本都出现过对关键内核函数进行修改,但是并没有仔细判断版本,导致兼容性出现问题而使系统蓝屏。
2. 文件过滤驱动
- File System Filter Drivers
- File System Minifilter Drivers
过滤驱动的本质依然是挂钩,但微软为了方便厂商调用,对其进行了封装,属于官方的技术。此类技术本身已经力求稳定与兼容,多数都提供了一定的兼容性保障。微软自己的安全产品在驱动层面也多使用类似的方式。
但是在安全产品的实际应用中,多层监控逐层传递会造成效率的降低,一些厂商在实现时会绕过后续的过滤驱动,直接将IRP请求发给下一层驱动完成相关的功能。
反病毒软件排斥与兼容问题分析的更多内容请读者阅读:
【编辑推荐】