大龙的博客

常用链接

统计

最新评论

驱动木马的识别方法

早期的驱动木马虽然采取了驱动形态达到隐藏自己避免查杀的目的,但是在安全模式里它仍然被发现了。因为Windows的“安全模式”不仅仅限于加载用户界面和启动项这些区别,它还包括各种驱动的“安全模式”,在安全模式里,为了确保Windows不会由于某个驱动文件的缺陷而崩溃--毕竟一部分人被迫进入安全模式就是因为遇到了某些设备驱动不兼容或存在问题而导致系统不能正常运行,大部分被标记为“不必要”的驱动在“硬件抽象层(HAL)”的干涉下,是不会被加载的,甚至显卡驱动也不能例外
。所以此时Windows是相对安全的基于“默认硬件”运行的界面简陋的系统。操作系统厂商此举其实很好理解,想象一下如果你因为安装了某个设备的驱动程序而导致系统蓝屏,然后你来到安全模式里想要修复它,却不幸的发现安全模式也出现了蓝屏--因为这个驱动被系统加载了,如果这样,安全模式还有什么意义。于是,在这样的设计思想下,早期的驱动木马到了安全模式,还是很好清理的,因为那个时候,大部分开发者还处于开发Rootkit的试探阶段,谁也不敢贸然绕过这种安全体系。

   硬件抽象层(Hardware Abstraction Layer,HAL)是微软公司为了便于操作系统在不同硬件结构上进行移植而提出的将系统底层与硬件相关的部分独立运作的思想,HAL为系统实现了“硬件无关性”,即在不同的硬件平台上,硬件与操作系统的交互也不会有所差异,这样一来,硬件厂商开发驱动的难度便能大大降低,HAL将硬件的接口细节隐藏起来,并为操作系统提供一个标准硬件交互接口,目前所有的硬件驱动都工作在这个层面上,当外界硬件存在指令请求时,驱动程序响应请求并将指令通过HAL转换为系统核心层能理解的指令交给内核执行,如果未找到相应的驱动程序类型,则将其视为“默认硬件”(Default Hardware)处理,什么叫“默认硬件”呢?最简单的例子就是进入安全模式,这时候大部分驱动程序不会被加载,此时的系统便是工作于“默认硬件”上。

   然而在经历了一段时间的试炼以后,开发者的技术熟练了,胆子也大了,他们开始修改驱动模块的运行级别--系统的“默认硬件”是根据驱动模块加载入口声明的启动优先级判断的,对于绝对安全的驱动程序,它的优先级被提高了,于是系统无论在什么模式下都会加载它,例如键盘驱动、鼠标驱动、各种基础的系统设备驱动等,如果某个驱动文件的优先级被人为提高,系统就会将其视为必备驱动加载,而这个优先级的提高方法非常简单,只需要改动注册表的驱动模块分支里的一个数据而已。至此,即使在加载模块最少的“基于命令提示符的安全模式”下,这样驱动木马就可以不受阻碍的横行霸道了,即使是专业的计算机用户查杀也很困难了,更别说那么“菜鸟”们了。

   大部分驱动木马的驱动模块并不是用来实现入侵行为或者进行浏览器劫持的,而是为真正负责这部分操作的位于用户层的可执行程序本体提供保护功能,因此驱动木马的大部分工作就是拦截相关的系统API调用工作,使得用户无法直接查找到真正的文件本体,或者对它们屡杀不禁,甚至连相关的注册表项目都无法删除,这就是因为它们直接从驱动层拦截了实现这些功能的API。

   虽然驱动木马使用的种种手段使得自己可以保全于普通的系统安全检测工具下,但是在基于驱动层的安全检测工具出现后,这个一方独霸的局面被打破了,通过使用国产的几个优秀工具如IceSword和安全巡警专业版(AST Pro),普通用户也能具备发现驱动木马的能力。
那么,如何判断系统是否中了木马,以及是中了驱动木马呢?首先用户要具备基础的系统启动项知识,虽然启动项里的东西会随着用户安装的一些软件而增加,但是实际上系统可以只存在最少的两个甚至一个启动项:用于同步的mobsync、输入法指示器internat(Windows 2000)或高级文字服务ctfmon(Windows XP),默认情况下Windows XP还会出现一些MG或IME开头的启动项,这些都是无关紧要的。

   也许您会问,如果我一直没有养成记录系统启动项的习惯,也没有过检测木马的经验,我该如何去判断一个启动项是否木马呢?这个问题很难用固定的思维回答,但是用户可以采取一个笨而实用的方法来测试,虽然它很烦琐,但是却比较直观。

   首先运行“系统配置实用工具”msconfig.exe,在它的“启动”选项卡里面把所有启动项取消,然后重启计算机,你会发现系统任务栏右边的托盘区少了许多东西,这时候,再次运行msconfig,边把当前的启动项名称记录在笔记上并勾上第一个启动项,然后确定重启,通过观察系统启动后托盘区里是否多出了图标就可以判断出这个启动项的大概作用了,如果托盘区出现了图标或者直接就出现了一些窗口界面如QQ的登录对话框,就可以确认这是个正常的启动项,在笔记上对应的启动项名称前打勾。然后再次运行msconfig,取消第一个启动项的勾,勾上第二个启动项,再次重启,直到所有启动项都分别独立开启了一次为止,最后看看你记录下来的笔记里有多少个项目是打了勾的,而剩下那些未被勾选的项目,有80%的几率就是一般的木马。

这个方法最保险,也最烦琐,所以用户需要记住一条规律,如今有许多木马的文件名和启动项名称都是很混乱或者很“系统”的,如看到“48ED0A5E”、“svchost”、“svohost”、“services”、“ssdt”、“ssodl”这样的启动项,那就不必怀疑了,它绝对是木马。

   用户的疑问又来了,这方法的结尾说,这只是测试“一般的木马”而已,那我该如何判断系统是否感染了“驱动木马”呢?其实,如果用户的机器已经感染了驱动木马,那么在刚才的测试里它就已经暴露了,细心的用户应该不难发现,他们的机器里有一个甚至多个启动项,即使刚才在msconfig里已经取消,重启后却发现它仍然是选中的状态,如果用户是使用具备实时刷新功能的第三方工具管理启动项,甚至会发现自己刚取消了这个启动项就马上被自动恢复了,而这些始终不肯放弃自启动权利的项目,就是我们要找的驱动木马的用户层本体--不要高兴,它并不是驱动木马的真正危害部分,这个只是驱动木马千方百计要保护的对象而已。这个方法正是利用驱动木马的保护特性,让它自我暴露。

   结束语:以上从木马的隐藏技术一直到驱动木马的识别,进行了详尽的叙述,而光发现和识别驱动木马是不够了,如何绞杀这些讨厌的家伙呢,请大家关注我们后续的文章!

posted on 2008-01-19 00:15 大龙 阅读(700) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理