窥伺一个杀毒软件的驱动
窥探一个杀毒软件的驱动
做为一个开发人员,我的电脑常年都是裸奔的。近来内部要求安装安全管理系统,集成了一个杀病毒软件,大概看了下,是Avira公司的。它的驱动中包含一个称做ELAM类的驱动:
这种类型的驱动按微软的说法,会在所有Boot型驱动运行前加载,即是最早运行的驱动,并且需要过微软WHQL签名,一般也只有杀毒软件厂商才会向微软提交ELAM驱动进行特别签名。
我们感兴趣的是这个驱动会做些什么,先来看驱动大小,只有20K,其中还包含签名数据,那代码量是很少的。在IDA中看了下导入表
发现只有一个IoRegisterbootDeviceCallback函数有实际使用价值,其它函数都是辅助作用。我们来看一下IoRegisterbootDeviceCallback是做什么的
The IoRegisterBootDriverCallback routine registers a BOOT_DRIVER_CALLBACK_FUNCTION routine to be called during the initialization of a boot-start driver and its dependent DLLs.
IoRegisterBootDriverCallback注册一个BOOT_DRIVER_CALLBACK_FUNCTION回调,该回调在Boot型驱动及其依赖的DLL初始化时被调用。
这就是ELAM驱动能够从系统启动就检查其它驱动的关键了。我们看看Avira这个驱动是怎么做的
VerifyImage函数中它检查自己的驱动映像是否完整,然后逐个检查其它每个加载的驱动映像的签名,并根据情况记录日志
它内置有三个映像的指纹数据,在加载时先判断证书发布者是本公司的,然后比较证书指纹是否正确并记录日志
按照当前逆向的信息来看,这个驱动只是检查并记录日志,推测因为它即使检测到非法驱动也不能随便阻止系统启动,应会在系统启动后配合其它组件实现查杀有问题的驱动。