2008-01-05

[转]保护系统权限 解析Rootkit原理

如今攻击者在获得了对目标的控制权后,普遍会希望对这个终端具有持续的控制权,于是就出现了木马后门,Rootkit之类的保护权限的手段。首先来说 一下我们常见的应用层次的木马后门(远程控制软件),国内著名的灰鸽子就是此类程序的杰出代表,对于灰鸽子的详细分析,请留意IT专家网的木马病毒分析。 然而此类后门的可以很容易被发现,现在的杀毒软件大多都能轻松的查杀,即使暂时查不到,用其他手段检测也不是很困难。然而攻击者是不会甘心自己的肉鸡轻易 的丢失,于是新的攻击方式产生了,这就是我们这里要重点提到的Rootkit,一种隐蔽性更好的后门程序。
传统的Rootkit是一种比普通 木马后门更为阴险的木马后门,它主要通过替换系统文件来达到目的。这样就会更加的隐蔽,使检测变得比较困难。传统的Rootkit对一系列平台均有效,但 主要是针对Unix的,比如Linux,AIX,SunOs等操作系统。当然有些Rootkits可以通过替换DLL文件或更改系统来攻击windows 平台.Rootkit并不能让你直接获得权限,相反它是在你通过各种方法获得权限后才能使用的一种保护权限的措施,在我们获取系统最高权限root权限以 后,Rootkits提供了一套工具用来建立后门和隐藏行迹,从而让攻击者保持控制权。
传统Rootkit的攻击原理
RootKits是如何实现后门的呢?为了理解Rootkits后门,有必要先了解一下Unix的基本工作流程(起初的Rootkit是针对Unix开 发的),当我们访问Unix时(不管是本地还是远程登陆),/bin/login程序都会运行,系统将通过/bin/login来收集并核对用户的帐号和 密码.Rootkits使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样攻击者输入根权限后门的密码,就能进入 系统。就算管理员更改了原来的系统密码或者把密码清空。攻击者仍能够使用后门密码以root用户身份登陆。在攻入Unix系统后,入侵者通常会进行一系列 的攻击动作,如安装嗅探器收集重要数据,而Unix中也会有些系统文件会监视这些动作,比如ifconfig等,Rootkit当然不会束手就擒,它会同 样替换一下这些系统文件,通常被Rootkit替换的系统程序有login,ifconfig,du,find,ls,netstart,ps等。由于篇 幅问题,这些系统文件的功能就不一一罗列,有兴趣的读者可以自己去查找,现在Rootkit的工具很多,里面基本都是包含一些处理过的系统文件来代替原有 系统文件。
防御办法:Rootkit如此可怕,得好好防它才行,实际上,防御他的最有效的方法是,定期的对重要系统文件的完整 性进行核查,这类的工具很多,像Tripwire就是一个非常不错的文件完整性检查工具。一但发现遭受到Rootkit攻击,那你就比较麻烦了,你必须完 全重装所有的系统文件部件和程序,以确保安全性.
既然有防御方法,为什么还要继续呢?更可怕的Rootkit还没登场——内核级 Rootkit。在大多数操作系统中(各种Uni x和windows),内核是操作系统最基本的部件,它控制着对网络设备、进程、系统内存、磁盘等的访问。例如当你打开一个文件时,打开文件的请求被发送 到内核,内核负责从磁盘得到文件并运行你的文件浏览程序。内核级Rootkit使攻击者获得对系统底层的完全控制权。攻击者可以修改你的内核,大多数内核 级Rootkit都能进行重定向,即截获运行某一程序的命令,将其重定向到入侵者所选中的程序并运行此程序。也就是说用户或管理员要运行程序A,被修改过 的内核假装执行A,实际却执行了程序B.现在就介绍一下内核级的Rootkit是如何攻击Unix系统的
和传统的Rootkit不同, Unix的bin/login并未被修改,但所有执行/bin/login 的请求(当登陆系统时将产生)都被重定向到攻击者制作的隐藏文件/bin/backdoorlogin,这样当系统管理员使用检测传统级别的 Rootkit的方法(比如用tripwire之类的软件检测文件的完整性)就行不通了,因为/bin/login并没有被改变。同样的道理,攻击者对其 他的系统程序也进行重定,这样你的操作实际就是按照入侵者的意愿执行了。也就是说,表面上你在运行程序A,你也认为自己运行的是程序A,而实际上你运行的 是入侵者设定的程序B~!
内核级Rootkit不仅仅只会进行执行重定向,许多内核级Rootkit还支持文件隐蔽。传统的Rootkit是 通过替换ls程序来实现文件的隐藏,而内核级的Rootkit则是通过对内核的修改来对ls程序欺骗,更加的阴险隐蔽。另外内核级的Rootkit还能对 进程和网络进行隐藏,用户将得不到真实的系统情况报告。
实现思路:根据系统的类型,攻击者有不同的方法来对内核进行修改,在N 种Unix系统上修改内核最简单的方法就是利用系统本身的加载的内核模块(LKM)的功能,因此大多数的内核级Rootkit通过利用LKM动态地将内核 更新来提供新功能,新添加的模块扩展了内核,同时对内核和其他使用内核的所有东西有了完全访问权。
因此,许多内核级Rootkit都通过 LKM来实现。安装通过LKM实现的内核级Rootkit十分简单。例如,在Linux上安装Knark内核级Rootkit只需具有根权限的入侵者输入 命令: insmod knark.o 就行了,模块被安装后就等着我们输入命令了。更妙的是整个过程不需要重启.。通过LKM 实现的Rootkit在Unix上十分流行。我们也常常会通过给windows平台打LKM补丁的方法攻击windows.
内核级Rootkit 的几个例子
内核级Rootkit已经成为一种攻击趋势,笔者这里只列举两种:
一、linux 上的内核级Rootkit:Knark
Knark具有各种标准的内核级Rootkit功能,包括执行重定向,文件隐藏,进程隐藏和网络隐藏。另外,还有不少比较过瘾的功能,如:
1、远程执行:我们可以通过网络向运行Knark的机器发送一条命令,源地址是假造的,命令被发往UDP端口53,使之表面上看起来像是DNS流量。我们就可以利用这个功能来升级Knark,删除系统文件或其他任何我们想做的事。
2、任务攻击:当某一进程在系统上运行时,它总是具有与UID和有效的UID(EUID)相关的权限。另外进程还具有与文件系统UID(FSUID)相 关的文件及目录访问权。Knark的任务攻击能力可实时地将进程UID,EUID和FSUID改变。进程在不停止运动的情况下突然具有了新的权限。
3、隐藏混杂模式:同一般的RootKit一样,入侵者也会在受害者机器上运行嗅探器。我们可以用文件隐藏和进程隐藏将嗅探器隐藏起来。然而,以太网卡 会被设成混杂模式,管理员可以检查到这一点。Knark将内核进行了修改,使之隐瞒网卡的混合模式,这将使嗅探变得更加隐秘。
4、实时进程隐藏:Knark可以将一个正在运行的进程隐藏起来。通过发送信号31给一个进程,此进程将消失,但仍在运行。命令kill-31 process_id将阻止内核汇报任何有关此进程的信息。进程在运行时,ps和lsof命令的使用都不能显示此进程。
5、内核模块隐藏:Linux中的lsmod命令可以列出当前在机器上安装的LKM.,我们自然不想让管理员看到Knark模块,因此Knark包含了 一个单独的模块modhide,modhide将Knark和自己隐藏了起来。这样,当我们用Knark攻击一个系统时,我们首先为Knark.o做一个 insmod,然后为modhide.o做一个insmod。这样不管谁运行lsmod命令,这些模块都不会被发现.
二、另一个Linux上的内核级Rootkit:Adore
同Knark一样,Adore也是一个针对Linux的LKM RootKit. 他包含了标准的内核级Rootkit功能,如文件隐藏,进程隐藏,网络隐藏和内核模块隐藏。我们只所以讨论Adore,是因为他还有一个非常强大的功能:内置的根权限后门。
Adore的根权限后门可以让我们连接到系统上并获得根权限的命令外壳,此功能十分直接了当 ,Adore将此功能巧妙的包含在内核模块中了。这一招十分难破,因为管理员看不到任何文件、进程、侦听网络端口的迹象。
防御办法:防御内核级的Rootkit的根本办法是不要让攻击者得到你的机器的系统的根本权限(Unix里的root和windows里的admin),不过这看起来像废话:),目前对内核级的Rootkit还没有绝对的防御体系。
现在也存在一些Rootkit自动检测工具,但都不是很可靠.同时内核级的Rootkit也在不断的发展中,对一些系统来说防御它最好的办法是使用不支持LKM的内核,Linux的内核就可以设成不支持LKM的单一内核。

没有评论:

留言须知:
0. 你有權保持沉默,但你所說的將作為此BLOG有人訪問的證據。
1. 支持的HTML標籤:<a href="" title=""> <b> <em> <i> <strong>。
2. 留言留名,不然易被无视。(在“评论”中选择“名称/网址”,网址可以不填)。
3. 原則上我不删除留言,除非那則留言侮辱到你。