深入剖析Rootkits的原理与防御对策

互联网 | 编辑: 黄蔚 2009-02-08 00:30:00转载 返回原文

Rootkits技术起源于应用

what?

什么是Rootkits?许多人可能回答:Rootkits是一种木马(病毒),答案肯定是不对的,Rootkits是一种技术,病毒也在使用,杀毒软件也在使用。

Rootkits技术最初为攻击unix系统开发,1999年出现了第一个Windows  Rootkits(即NT Rootkits)。发明这个的人名字叫Greg Hoglund,大家记住了!

Rootkits具有很强的两面性,它是系统开发特别是安全开发的关键技术,杀软在使用,HIPS,防火墙都在使用,甚至一些ANTI-Rootkits软件本身也使用Rootkits技术。

How?(以下Rootkits也表示使用Rootkits技术的恶意程序)

Rootkits技术的目的是持续在系统中保持控制权和隐藏。Rootkits一般分为两种,用户Rootkits和内核Rootkits。用户Rootkits修改(替换)系统的EXE或者库文件达到目的,其影响范围一般是一台计算机上的一个或者几个用户。而内核Rootkits则直接运行于内核中,修改了内核数据结果,其影响范围是整个计算机。显而易见,内核Rootkits比用户Rootkits影响范围要大,更加隐蔽,危害也越大(戏剧性的是,ANTI-Rootkits软件检测出了有害Rootkits也并不全部推荐移除,原理就是因为Rootkits的底层性)。

无论是用户Rootkits还是内核Rootkits,其目的一般只有两个,隐藏和攻击。相比较而言,Rootkits技术更加倾向与隐藏自身。下面,我们介绍一下Rootkits的一些惯用的作案方式。

一、修改执行路径

这是Rootkits最惯用的一种方法,为了以下能看懂,我先扫个盲:应用程序通过调用各种API来完成基本的操作,各种API被windows组织在各个DLL文件中(比如user32.dll),这些DLL受到调用的时候把消息传个NTDLL.DLL这个文件,由它向内核通信。

<1 修改IAT表

我们知道,每一个PE文件(最常见的PE文件:DLL,EXE)有两个表,一个是IAT表,另一个是EAT表,IAT是输入地址表,它记录了程序调用了哪些系统函数以及输出这些函数的DLL文件。在需要调用API函数的应用程序运行时系统会加载这些DLL文件,同时填写应用程序内存映象(即程序的内存拷贝)中IAT表结构的系统调用函数的实际内存地址。这样,程序调用函数时系统根据IAT表中函数的实际内存地址跳到函数实际执行代码处执行函数调用。而Rootkits可以使用自己的函数地址来替换IAT表中正确的地址,实现的方法很多常见的是DLL注入,值得的注意的是:通常用于替换的攻击者函数只是真正函数的包装,攻击者函数会在执行时调用真正函数,实现调用功能的还是原来的真正函数,攻击者函数只是实现通过过滤返回值中需要隐藏的信息。

<2 改EAT表

我们前面还说了PE文件的另一个表,EAT表,它指定其所有输出函数的函数名和函数地址,和IAT表一样,在DLL文件装入内存之后,输出函数的地址同样可能被替换成攻击者的函数地址,不过和IAT表有一个区别是,如果程序动态的加载DLL,写入IAT表的时间则会可能使修改IAT表的方法失败,而修改EAT表则不会出现这种情况。

修改系统内核对象

<3 直接修改DLL中的函数

这种方法是在DLL文件装后找到函数的地址,并修改其中的代码!比如DLL A装入了内存,恶意程序B则可以找到A中的函数地址,B可以恶意的修改代码,把原函数开头加上JMP到自己的函数,最后在JMP回来。

以上的方法是运行在用户模式下的,内核Rootkits也有自己的方法:

<4 修改SSDT表

SSDT表记录着系统内核函数的内存地址,如果恶意程序把某一个函数地址修改了,无疑是影响很大的,所以windows下SSDT是只读的,不过仍然可以通过特殊方法解除保护。

<5 修改IRP表

IRP函数是驱动程序用来处理用户的请求的(比如读,写),各个IRP函数组合在一起组成了IRP表,恶意程序可以修改一些表项来完成隐藏(文件,进程,注册表等)

以上的无论是用户模式下的攻击还是内核模式下的都是通过修改执行路径来完成的,我们可以称之为“挂钩”,许多杀软也使用了挂钩,下面我们介绍只有最NB的恶意程序才会使用的技术。

二、修改系统内核对象

对系统熟悉的朋友都知道,windows有一个用来用户模式下与内核模式下代码进行交互的基本接口。虽然软件开发人员经常会创建,打开内核对象,但内核对象很多并没有公布,盲目的修改内核对象可能对系统造成不可逆的损害!但如果成功的修改了内核对象的话,恶意程序遍得到了系统下最高的特权,比如来一个根本没有结束可能的进程……具体的实现我也不知道,也没有教程,也根本不敢去尝试,大家知道一下就是了。

What can we do?

既然Rootkits这么厉害,我们该怎么防御呢?

<1 预防

Rootkits的弱点是安装得有系统管理员权限,即系统必须被黑客控制之后才能安装,所以预防黑客很重要。

<2 检测

不过防不胜防,如果真的有黑客进来了我们怎么办?首先断开和黑客的连接,并且检测系统有没有被安装Rootkits,我推荐一些ANTI-ROOTKITS软件来检测。

<3 应对

如果已经被安装了Rootkits请赶快下载一个ANTI-ROOTKITS软件进行清除,如果你运气不错,遇到一个垃圾Rootkits,那也就好办了,但如果遇到一些厉害的Rootkits,即使ANTI-ROOTKITS软件检测出来了,它也不推荐你清除,为什么?一清除系统就挂了!遇到这种Rootkits只有两种方法,1.还原2.重装!

返回原文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑