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采用的是一些更专业、更无法察觉的技术。