什么是Rootkit?

来源:百度文库 编辑:神马文学网 时间:2024/04/29 05:53:21
“你或者你的那些年轻的朋友的家用电脑很可能已经被感染了Rootkit。” 英国某公司的首席软件架构师Mark Russinovich去年10月发现,为了防止未经授权对数字音乐进行复制,Sony BMG的一些音乐CD采用Rootkit技术在Windows计算机上自动安装数字版权管理软件。

查找Rootkit的好工具
大家可能还记得,很长时间以来,Sony一直在采用多种方法对它的CD进行版权保护,同时也给用户带来了很大的麻烦。去年年底,Sony公司在其音乐CD上创建了一个隐藏的目录,安装了它自己的几个设备驱动程序,这些程序会重定向Windows的系统调用到它自己的例程中,它截取内核级的应用程序调用以隐藏它的存在。
Russinovich发现,没有办法卸载这个恶意软件,那些传统的方法根本起不到作用,如果硬要用手删除它,还会导致计算机的CD驱动器无法正常工作。根据一些资料的介绍,清除这个版权保护软件的惟一方法就是重新格式化硬盘和重新安装Windows。
2005年10月31日,Russinovich在他的博客中发表了一篇文章,公布了他的这一发现后,这个消息很快在网络上传播开来。此后,Sony BMG和First 4 Internet公司发布了一个3.5M的免费软件补丁,该软件不用安装,可以达到清除这个Rootkit的目的。
Rootkit是什么
要了解Rootkit是什么,先要了解计算机的管理机制。通常,如果黑客想在计算机系统中安装一种类似特洛伊木马或间谍软件这样的病毒,他就必须获得系统根目录的访问权以及进行相应操作的权力。一旦拥有了“root”级的权力,入侵者就能修改系统指令去隐藏它的痕迹,以防系统管理员发现,并保留其根目录访问权。达到这种目的的最简单的方法就是Rootkit。
一般而言,黑客通过猜测、盗用他人密码或利用一些熟知的弱点来获取计算机或网络的普通用户级的访问权。然后,他通过某种方法来收集网络中的其他机器的用户的身份和密码信息,同时抹去他的活动痕迹。
几年前,黑客需要利用他对某个系统的了解和他个人丰富的编程技能来完成这一过程,但今天这个工作简化了,黑客只要学会使用一种Rootkits就能达到这个目的,因为现在的Rootkits 都有很强的自动操作系统的能力。
Rootkit最初指被修改和重新编译后用来隐藏入侵者活动痕迹的一组Unix 工具(典型的工具有ps、netstate 和passwd)。现在,Rootkit 是入侵者或非法的黑客为了隐藏它存在的痕迹和使用其系统而执行未经许可的功能,用来破坏计算机获取目录使用权的一套软件工具。
据考证,Rootkit的存在可追溯到上个世纪90年代初,那时Solaris 和Linux 操作系统是Rootkit主要的攻击对象。而现在Rootkit不再局限于像Unix这样的系统,其他的操作系统,如Microsoft Windows也已成为入侵者的目标。
Rootkit这个名字可能使人联想到是一套用于获取根目录访问权的反复使用的工具,但事实并非如此。Rootkit包括跟踪信息的程序、为了进入某个系统而建立后门的程序、修改报警日志文件的程序和攻击网络上其他机器的程序等。
通常,Rootkit本身不会对系统造成直接的损害,而它的功能主要是掩盖一些软件如特洛伊木马、病毒或蠕虫、键盘敲击记录软件等恶意软件的存在。Rootkit通常通过隐藏或清除系统登录记录、日志记录以及一些相关的进程来到达掩饰的目的。
为了逃避检查,某些Rootkit用修改了的、能忽略攻击行为的二进制文件替代系统命令的二进制文件。例如,在一个Unix 或Linux系统,Rootkit用一个能忽略保存在某个特定目录中的文件、类似“ls” 的命令文件取代正常的“ls”文件列表命令文件,或者用能忽略攻击者启动的进程、类似“ps”命令的文件取代系统中列出运行中所有进程的“ps”命令文件。
那些记录系统活动的日志同样也可能被修改,因此,尽管系统已经被Rootkit感染,但当系统管理人员检查日志时,一切看起来都非常正常。
如何发现Rootkit
不管是Rootkit还是计算机病毒都会修改核心软件组件,都通过在其中插入代码来隐藏自己同时执行一些非法的操作(这些非法的操作才是其真实目的,称为“Payload”)。它们之间最大的区别在于,计算机病毒会向其他计算机系统扩散,而Rootkit通常限于驻留在本机上。
Rootkit的Payload是维护自身的完整性,即保证目标机被感染。
例如,每次计算机系统运行一个受到Rootkit感染的命令,Rootkit都会检查本台计算机中其他系统命令是否受到感染,如果有必要,会感染它。另外一些Rootkit的Payload包括建立后门、隐藏的命令行转换以及为窃取正常的访问控制而设置环境变量等。
计算机被Rootkit感染给我们的第一感觉是你的计算机被别人控制了。尽管隐藏自己的存在是Rootkit的主要目的之一,但是,对于一些用户模式的Rootkit,我们还是可以检测得到的。这些Rootkit通过修改一些二进制的文件来达到它们的目的,如果比较这些文件的大小、修改日期和校验,则可以发现一些蛛丝马迹。
而内核模式下的Rootkit却很难被发现,因为这些Rootkit利用了Unix或者Linux在空闲时载入扩展内核这个特点。它们深藏在操作系统中,截取来自合法程序的系统调用,而只是返回那些Rootkit希望使用者看到的数据。
不能相信操作系统
发现Rootkit最基本的困难是你无法相信你的操作系统。当你要求操作系统列出系统中正在运行的进程或者某个目录下的文件时,你无法确认这些信息到底是不是真的。
解决这个问题的办法之一是关闭你有所怀疑的系统,通过另一个你确信没有感染Rootkit的系统,如Windows救援盘或者专门的USB闪存驱动器,来检查系统的硬盘。
一个Rootkit如果没有执行,是不能隐藏自己的。大多数反病毒软件通过比较标准的操作系统调用(很可能被Rootkit替换了)来检查是否感染了Rootkit,一旦二者有不同,就表明你的计算机被Rootkit感染了。
那么,我们该如何清除Rootkit的感染呢?清除Rootkit有两方面的困难: 清除Rootkit本身和清除Rootkit隐藏的Payload。因为Rootkit会修改操作系统,因此,如果不终止系统的运行(特别是像Windows这样的系统),你是无法清除Rootkit的。
幸运的是,目前已经有多家软件上提供Rootkit的清楚工具,然而,最彻底、最安全的清除Rootkit的办法还是重新格式化硬盘,重新安装系统。
链接一:Libkit是什么?
Libkit是一种很特别的Rootkit,它通常会取代一个操作系统的共享系统库。Libkit可能是最危险的一种Rootkit。它的存在意味着你不能信任系统的任何程序,因为这些程序可能会调用被感染过的系统库。
链接二:一个简单的Rootkit例子
深藏于系统核心的Rootkit的一个主要特性是隐藏自身、隐藏所执行的操作的能力,从而使用户根本察觉不到它们的存在。下面的这个例子可以解释Rootkit如何达到这个目的的:
当一个计算机系统感染Rootkit以后,Rootkit会用那些经过修改了例程去取代那些对应的操作系统调用。
例如,为了隐藏一个存在的文件,Rootkit必须截取所有带有文件名称的系统调用,例如open()、chdir()、unlink()等。任何调用只要涉及这些系统功能,就会被重新定向到一个被修改的例程,这个例程会检查调用中的文件名。如果请求不涉及到这个隐藏的文件,就执行正常的系统调用被执行,结果也会如实地返回给用户。
然而,如果调用结果有可能导致隐藏的文件被泄露,Rootkit将会用修改了的调用来代替,所有不希望输出的结果都会被这个调用过滤。
如果用户或者系统试图去对隐藏的进程、文件、网络端口等进行操作,修改了的系统命令也会像正常的命令在操作一个根本不存在的对象一样报告“操作失败”。

对系统内核进行修改相对而言比较容易察觉,因为它们修改了通常情况下不会变化的系统内核表,对表中的代码段的地址进行了修改。但是,现在的Rootkit采用的是一些更专业、更无法察觉的技术。
提供两条相关链接:
rootkit 百度百科:
http://baike.baidu.com/view/350343.htm
关于隐藏进程ROOKIT木马的介绍 百度贴吧:
http://post.baidu.com/f?kz=80187761