本类共有 867 篇文章,今日更新 0

M$ 讲师对Rootkit的介绍

[ 来源:http://www.91now.com/down/ | 作者: | 时间:2007-5-18 17:35:54 | 浏览: 人次 ]


Rootkit ,这个词并没有一个权威的定义。就我的理解,是这么一类工具软件,用于修改操作系统,以改变操作系统的表现行为。而这种改变,往往是不是操作系统设计时所期望的。举个例子,修改操作系统的进程列表,以便特定的进程无法被显示,就是一个典型的Rootkit的目的。 


历史 


Rootkit这个术语来自于Unix系统。最初,在Unix系统上, ls,ps,netstat等命令,大家从来就没有怀疑过结果的可靠性。例如,用last就可以知道最近的login历史,那么如果那位同志非法登陆了你的机器,就可以轻易监测到。不过,hacker的技术是日新月异,很快,就出现了工具可以隐藏login历史,接下来,一批工具可以修改ls,ps等等命令的结果。这些工具,当时被叫做trojan horses。后来,这些各类trojan horses工具被绑定在一起成了一个工具包(kit),就成为了Rootkit。最早的一个版本是出现在SunOS 4上。 


现状 


既然Rootkit出现已经不值一天两天,为什么说是一个新的威胁呢?这是因为随着互联网的普及,Windows系统上出现了越来越多的virus,spyware,worm。而最新的趋势是这些软件和Windows上的Rootkit绑定在一起。试想一想,如果一个spyware将自己的进程和registry信息用Rootkit给隐藏起来,普通用户可能就无法发现还有这么一个软件在运行。而且,各种anti-spyware软件恐怕也就不那么有效了。如果连系统中有什么在运行都无法确定,检测和清除有从何谈起呢? 

Windows系统上的Rootkit分为User mode和Kernel mode两种,取决于它是采用何种方式修改操作系统的。 

举个例子,对于一个典型的WIN32 API调用,例如CreateFile 

User Mode: 

Application --> Kernel32.dll --> NT.dll  

接着通过调用 INT 2EH进入 

Kernel Mode: 

--> KiServiceTable --> NTExecutives 

在这一调用系列中,Rootkit可以修改任何一处,最终目的都是一样的,控制特定的系统调用的返回结果。例如,如果修改了FindFirstFile/FindNextFile调用的结果,那么不管你用DIR命令,还是Explorer, 都看不到Rootkit想要隐藏的文件。 

以往,不管是User Mode的Rootkit,还是Kernel Mode的Rootkit,主要是hook/intercept API调用。最近的发展是,Kernel Mode的Rootkit直接修改关键的Kernel Mode的数据结构,例如把自己的PCB从系统的活动进程表中直接删除。这种Rootkit,要检测起来是非常难办的。 

  

介绍了Rootkit的工作原理,我们看看Rootkit主要用来隐藏什么系统资源: 

运行进程 
服务 
TCP/IP端口 
文件 
注册信息Registry 
用户帐号 

其中最常见的是运行进程,文件,和Registry。 

介绍完Rootkit是什么,那自然而然的一个问题是:如何检测Rootkit? 

最保险的检测Rootkit的办法是Offline OS检测。举个例子,系统自身启动,列出所有的文件,registry项,等等。然后用winPE从CD启动,再列出所有的文件,registry项。对比两个列表。在正常情况下应该是一样的。如果出现不一样的地方,就可以发现那些文件在用自身系统启动的情况下看不到。对这些文件可要注意了。 

这个办法的例子是Strider/Ghostbuster,MS Research开发的。 

另一种更方便的检测方法是API副作用检测。大家知道,Rootkit都或多或少的修改系统调用。那么,先通过正常的高层win32系统调用来列出系统的文件,进程,registry等等,然后再通过最底层的方式列出系统的文件,进程等等。对比两个列表,如果有不同的地方就要注意了。 

这个办法的例子是RootkitRevealer,Sysinternals开发的。有兴趣的可以从Sysinternals上下载。最近闹得沸沸扬扬的Sony的Rootkit就是用它发现的。这个办法使用起来要更方便一些,但不如第一个办法保险。 

至于删除Rootkit,可就比较麻烦了。User Mode的Rootkit还好办一些。Kernal Mode就难了。 如果有官方的工具和信息的话,就直接使用。如果没有的话,那只有重新安装系统才能真正确保删除Rootkit。

广告位