发新话题
打印

[转载]从入门到精通:Rootkit的检测、清除、预防

[转载]从入门到精通:Rootkit的检测、清除、预防

信息来源:邪恶八进制信息安全团队(www.eviloctal.com

 Rootkit是一种能够以管理员身份访问计算机或计算机网络的程序。典型情况下,黑客们会通过利用已知的漏洞或口令破解而获得用户级访问,从而将rootkit安装到计算机上。Rootkit安装以后,它将准许攻击者掩饰其入侵行为,并获得对计算机的root级或特权级的访问,在可能的情况下还可以获得对网络上其它计算机的访问。
  rootkit的威胁

  一般来说,Rootkit自身并不是恶意软件,它是恶意软件用来隐藏自己的一种手段。但经黑客改造的rookkit可能包括间谍软件和其它的程序,如监视网络通信和用户击键的程序,也可以在系统中构建一个后门便于黑客使用,还可以修改日志文件,攻击网络上的其它计算机,或者改变现有的系统工具以用逃避检测。

  黑客利用多种技术来操纵操作系统,其结果就是用户无法利用普通的杀毒软件来找到其踪迹,更别说清除了。

  例如,用户无法在资源管理器中利用普通的文件查看程序来查找间谍文件,也不能通过任务管理器或其它的多数进程查看器来查看。同样地,在系统的启动文件夹内或其它的启动位置中都无法找到其它。即使用趋势科技的HijackThis这款工具也很困难。

  黑客们日益热衷于用rooktit隐藏间谍软件或病毒等,这对于用户而言并不是一个好消息,因为用户们更容易遭受这种感染。

  检测rootkit的存在并不是一件容易的事。多数反间谍软件或反病毒扫描程序无法检测这种代码,虽然一些产品具备了这种功能,但用户需要更加专业的rootkit检测工具。

  Rootkit的类型

  至少有五种类型的rootkit:固件(firmware)rootkit、虚拟化rootkit、内核级rootkit、库级rootkit、应用程序级rootkit等。

  1.固件(firmware)rootkit

  固件(firmware)rootkit使用设备或平台固件来创建顽固的恶意软件镜像。这种rootkit可以成功地隐藏在固件中,因为人们通常并不检查固件代码的完整性.

  2.虚拟化rootkit

  这种rootkit通过修改计算机的启动顺序而发生作用,其目的是加载自己而不是原始的操作系统。一旦加载到内存,虚拟化rootkit就会将原始的操作系统加载为一个虚拟机,这就使得rootkit能够截获客户操作系统所发出的所有硬件请求。如Blue Pill即是一例。

  3.内核级rootkit

  内核级rootkit增加了额外的代码,并能够替换一个操作系统的部分功能,包括内核和相关的设备驱动程序。现在的操作系统大多并没有强化内核和驱动程序的不同特性。这样,许多内核模式的rootkit是作为设备驱动程序而开发的,或者作为可加载模块,如Linux中的可加载模块或Windows中的设备驱动程序,这类rootkit极其危险,因为它可获得不受限制的安全访问权。如果代码中有任何一点错误,那么内核级别的任何代码操作都将对整个系统的稳定性产生深远的影响。

  内核级的rootkit极其危险,因为它难于检测。其原因在于它与操作系统处于同一级别,如此一来,它就可以修改或破坏由其它软件所发出的任何请求。这种情况下,系统自身不再值得信任,一种可接受的检测方法是使用另外一个可信任的系统及其安装的检测软件,并将受感染的系统加载为一个数据源进行检测。

  4.库级rootkit

  库级rootkit可以用隐藏攻击者信息的方法来补丁、钩住(即所谓的hook)、替换系统调用。从理论上讲,这种rootkit可以通过检查代码库(在windows平台中就是DLL即动态链接库)的改变而发现其踪迹。事实上,与一些应用程序和补丁包一起发行的多种程序库都使得检测这种rootkit相当困难。

  5.应用级rootkit

  应用级rootkit可以通过具有特洛伊木马特征的伪装代码来替换普通的应用程序的二进制代码,也可以使用钩子、补丁、注入代码或其它方式来修改现有应用程序的行为。

  Rootkit的检测

  通过对上述rootkit种类的简单分析,我们认为在一个被怀疑感染了rootkit的计算机上检测rootkit是不可靠的或不可信的。Rootkit可以篡改多种工具和其它所有程序赖以运行的库文件,因此rootkit检测的基本问题是,如果当前系统已经被rootkit破坏,那么它就不再值得信任。具体而言,管理员的一些操作,如列示正在运行的程序列表、列示一个文件夹内的所有文件等都未必是最初的设计者所期望的。总之,在一个活动的计算机上运行rootkit检测程序要想发挥作用只能建立在这样一个假设的基础上:所检测到的rootkit并没有采取隐藏自己的机制。

  检测rootkit的最好方法是关闭被怀疑感染rootkit的计算机,然后用另外一个干净的硬盘或其它媒体启动计算机,再用相关的检测软件实施检查。因为一个没有运行的rootkit是无法隐藏自己的,所以我们可以使用一些通用的反恶意软件工具(如瑞星等国产安全程序套件)配合专门的反rootkit工具来检查和清除rootkit。但是,正如并非所有的反病毒软件都能检测和清除所有的病毒一样,这种检测方法是否有效也值得进一步探讨。

  现在有许多检测rootkit的工具,如linux平台的chkrootkit、rkhunter、OSSEC、zeppoo等。Windowws平台的工具我们下面将有介绍,但就目前来看,许多rootkit编写者已经将一些检测程序加入到躲避文件列表中,也就是说它们将采取某种方法躲避检测。因此下面笔者所涉及的检测工具的效用并不是绝对的。

  检测Windows 平台rootkit的四大利器

  如果可以找到一个未受感染的测试系统的副本,将其作为参考,那么执行一个文件到文件的比较可以作为一种检测方法。 在这种情况下,rookkit及其装载文件就可以被轻易地检测到。

  然而事实上这种情况是很少碰到的,因为很多人没有其系统的参考副本,更何况系统是动态变化的,系统中总要发生一些合法的改变,而这种改变使得文件的比较更为困难。

  实际情况下,rootkit的检测程序往往是在可能受感染的系统内部着手工作的。此时检测rootkit就成为一种艰难的任务。更何况rootkit的开发者们意识到了一些新技术的使用,便不断地开发其产品的新版本,目的是逃避新的检测方法。事实上,检测与逃避检测也就成为猫和老鼠的捉迷藏游戏。

  这种情况也就要求用户不应当局限于这样一种观念:某个特定的rootkit检测程序是最好的。事实上,笔者建议用户要采用几种检测程序。用户还应当及时升级检测程序,因为道和魔的斗争是不断升级变化的。

  现在有许多rootkit检测程序都可以使用,但多数都是针对特定rootkit程序的,笔者将为您推荐四个通用的、并不针对某种rootkit的检测程序,而且推荐你最好使用多个工具,这样就增加了检测到多数最新rootkit的机率。要知道,rootkit扫描程序不像防病毒软件那样“一山不容二虎”。

  总体而言,内核模式的rootkit可以控制系统的任何方面,因此经由API返回的信息(包括注册表和文件系统的数据)都有可能遭到破坏。虽然比较一个系统的在线扫描和离线扫描(如启动进入到一个基于CD的操作系统即光盘启动)比较可靠,但rootkit可以针对这种工具逃避检测。这样说来,不可能存在一个统一的绝对可靠的rootkit扫描器。

  BlackLight

  F-Secure BlackLight的Rootkit清除技术可以检测普通用户和安全工具无法找到的对象,并向用户提供一个清除rootkit的选择。此工具可以对系统进行深度检查,从而使其可以检测普通安全软件无法清除的威胁。

  这种Rootkit清除技术有三个优点:

  1.它可以检测并清除计算机中活动的rootkit。要知道,传统的反病毒扫描程序是无法做到这一点的。

  2.在一个普通的系统上,这种技术并不会让用户看到那种令人感到迷茫的可疑对象列表,这样一来即使普通用户也可以使用它。

  3.这种技术还可以在用户的系统操作期间用于后台的工作。其它的许多rootkit扫描器在扫描期间如果系统正被用户使用的话,将要求系统重启,或者生成虚假的信息。

  正是因为它容易上手、便于操作等特点,使得BlackLight既可用于企业环境,可以用于普通的家用电脑。下图展示的就是F-Secure Internet security 2008.jpg,它集成了检测rootkit的功能。(下图1)



  这款工具的使用是相当简单的,用户只需要运行Blacklight Rootkit Eliminator软件即可。不过,现在这款软件的最新功能已经集成到F-Secure Internet security 2008中。

  RootkitRevealer

  RootkitRevealer是一款高级的rootkit检测程序,它可以成功地检测www.rootkit.com网站上所公布的所有顽固的rootkit。使用RootkitRevealer时一个需要注意的方面是它不再使用命令行版本,因为一些恶意软件作者通过使用其可执行的文件名而开始采取相应的对抗手段。此软件的开发者重新修改了软件,使其可以从一个随机的文件副本启动扫描。注意,用户可以使用命令行选项来执行自动扫描,并将结果记录到一个文件中,这与命令行版本的行为是等同的。(下图2)



  但是,现在的rootkit技术已非同寻常。理论上讲,如果某种rootkit针对此工具采取了躲避技术,那么RootkitRevealer有可能无法检测到其存在。要达到这种效果,它就得截获RootkitRevealer从注册表中所读取的数据或文件系统中的数据。这种技术的要求极高。一般的黑客很难做到,但并非不可能。

  RootkitRevealer支持几处自动扫描系统的选择,其用法为:

  rootkitrevealer [-a [-c] [-m] [-r] 输出的文件名]

  其中,-a表示自动扫描,在完成后退出;-c表示输出格式为CSV;-m表示显示NTFS元数据文件;-r表示不扫描注册表;这里的输出文件的一般格式为文本文件。

  比如,如果RootkitRevealer检测到了一种流行的HackerDefender确rootkit :注册表的key差异显示了存储HackerDefender设备驱动程序的注册表key和服务设置对Windows API是不可见的,但却展示在了注册表的原始扫描数据中。同样的,与hackerdefender相关的文件对windows API的目录扫描是不可见的,但却展示在了原始文件系统数据的扫描中:

  管理员或用户应当检测所有的这些差异,并决定这种差异指明rootkit存在的可能性。但并没有什么确定的方法告诉我们怎样决定,这主要依靠的是输出结果和用户的知识、经验。如果用户认为确实感染了rootkit,就可以上网搜索清除办法。如果用户不能确定如何清除,就应当用干净的媒体重新格式化系统盘,并重新安装系统。

  微软恶意软件检测和清除工具

  虽然这款工具并非专用的rootkit检测和清除工具,它主要用于检测和清除许多病毒和蠕虫家族,而且它拥有检测某些 rootkit的能力。更何况,微软每月都对它进行更新,不用它就太可惜了。(下图3)



  在此它支持三种扫描方式,快速扫描、完全扫描和自定义扫描。下图展示的是快速扫描:(下图4)



Rootkit Hook Analyzer

  从其名字就可以看出它是一款专业的rootkit清除工具,它可以识别系统中的任何活动的钩子(hook),它可以截取软件和系统运行依赖的关键系统服务。但其目前的版本为RootKit Hook Analyzer V3.02,已经有几个月时间没有更新。(下图5)



  如上图所示,在下载完此工具后,用户需要做的是找出系统上安装了哪些钩子,用户只需要按下“Analyze”按钮,它允许用户查看安装了哪些系统模块和驱动程序,并显示它们的基地址、产品信息和公司等。用户如果要将此结果导出为文本文件,单击“Export”按钮。如果它在系统中找到任何内核级钩子,而用户又确信属于一种合法的产品,那么它将准许用户实施钩子测试,并查看这些钩子是否被正确安装,并且不会对系统产生潜在的危害。 下图是笔者在自己电脑上扫描分析的结果,基本可以断定不存在非法的恶意rootkit安装。(下图6)





  清除rootkit

  清除rootkit涉及到两个问题,一是清除rootkit自身,二是清除rootkit秘密种植的恶意软件。因为rootkit是通过改变操作系统自身而运行的,所以清除rootkit要冒着导致系统不稳定或崩溃的风险。清除rootkit所安装的恶意软件也存在着清除任何恶意软件的一般问题。不过,如果用户没有清除rootkit,也就无法从根本上断绝恶意软件。因此,笔者认为,在用户确信系统没有感染rootkit之前,最好做一个系统文件的干净镜像,在用户怀疑自己的磁盘启动扇区可能已经不洁净时,就可以用这个镜像来恢复系统。

  就目前来看,许多反病毒软件和恶意软件清除工具在面对rootkit时是无能为力的。笔者推荐用户使用BartPE及其它的预安装环境,也可以使用LiveDistros,后者允许用户用一个干净的无rootkit感染的操作系统副本来启动其计算机。如此一来也就允许用户检查并替换受感染的系统文件并删除恶意的rootkit,同时又保持底层系统的清洁。因为多数rootkit需要在操作系统的最低层钩住(hook)系统文件,所以启动进入安全模式一般来讲并不能清除rootkit进程。相比较而言,PE并不依赖于感染的底层系统结构,而是装载一个清洁的、只读性的操作系统副本,从而可以做到完全控制并删除rootkit。虽然多数管理员更喜欢从头安装一个崭新的系统,但如果重装系统不能被接受时,一个使用PE很熟练的管理员可以依靠工具来清洁受感染的系统。

  避免感染rootkit

  不懂防守,怎能进攻?防患于未然也许是最好的安全理念。避免感染 rootkit这种毒瘤的基本规则总体上也适用于避免任何恶意软件,但是对付它还有一些特别的考虑:

  Rootkit能够干扰或从底层控制操作系统的正常运行,而要达到这个水平,就要求完全的管理员权限,否则它就无法安装。所以作为管理员,要向用户强调:使用一个拥有少量权限的受限用户来登录可以避免感染rootkit。虽然在用户需要管理员权限时,许多操作会显得不方便。但安全性永远是第一位的。

  有没有更适用的方法呢?答案是肯定的。我们可以使用Process Guard和Anti Hook之类的安全工具,这种工具可以防止其它程序安装全局性的钩子。多数rootkit依赖于建立全局钩子才能实施秘密操作。如果可以避免安装全局性钩子,多数rootkit就只能“望机兴叹”了。其实,笔者所提到上面这两种工具不仅可以阻止钩子的安装,它们还拥有其它特性,如防止进程的注入等。(下图7)



  笔者认为Process Guard和Anti Hook这两个工具还是比较专业的,尤其适用于那些使用高风险网络的用户(如p2p用户),还有那些下载使用破解软件的用户。有两个反钩子工具把门,可以从极大程度上阻止rootkit的感染。

  总而言之,预防、检测、清除的过程是动态变化的, rootkit作者与反rootkit作者的斗争过程将是长期的,其技术上的表现就是“魔高一尺,道高一丈”。对对于普通用户而言,预防是最为关键的,如不要随意查看和下载不请自来的电子邮件及其附件就是一个好主意。

TOP

发新话题