检测LKM rootkit
使用KSAT检测可加载内核模块
1.目的 本文包括LKM基础,如何检测LKM。 2.LKM 什么是LKM?LKM是可加载内核模块的缩写,就是那些包含动态可加载部分的文件。通常LKM用来加载设备驱动程序和其它的硬件驱动程序。在Linux、Solaris和BSD(Free、Net和open)等操作系统可以见到LKM。本文集中讨论Linux。 在Linux中有几个工具来处理LKM的诸如加载、列表和卸载等操作。在讨论这些工具之前,我们先看看一些重要的关于LKM的文件和目录。第一个目录是/lib/modules/"kernel_vision",让我们看看在这个目录下的内容: block build cdrom fs ipv4 misc modules.dep modules.isapnpmap modules.pcimap modules.usbmap net pcmcia scsi usb video 表1 表一列出了LKM相关的文件和目录。其中只有modules.dep、modules.pcimap、modules.isapnpmap、modules.usbmap不是目录。这些实际上是系统内的LKM的列表。让我们看看net目录下的文件(不完全): 3c59x.o 3c90x.o 82596.o 8390.o ac3200.o acenic.o arlan-proc.o 表2 从这个列表中我们可以得到几点信息。第一,模块名字是一.o结尾,为何?因为它们是包含模块内容的目标文件。第二,这个列表并不完全,因为没有足够的空间来写出它的全部内容。 我们要注意的第二个重要的文件是/etc/conf.modules。这个文件让系统管理员为加载模块定义不同的参数。conf.modules文件的语法看起来象这样: alias parport_lowlevel parport_pcconf.modules允许系统管理员定义通常使用的模块的别名。注意:这个文件并非系统必需的。一个系统管理员可以定义字节的配置文件。一个系统管理员可以使用modprobe -C命令来完成这项工作。 因为我前面讲到了modprobe命令,所以让我们大体看看modprobe和Linux中其它LKM的管理工具。modprobe命令用来加载一个或者多哥模块,它使用modules.dep文件来检查模块之间的依赖关系。depmod程序产生语法类似于Makefile的依赖关系文件。我要讲的最后三个工具是:lsmod、insmod、rmmod。lsmod为系统管理员提供当前内核加载的LKM的列表,这个列表也可以在/proc/modules中看到。如果你想知道当前正在运行的有哪些内核,这个工具会有所帮助。不过,后面你将看到lsmod对于检查rootkit LKM并不有效。insmod用来加载LKM。有些特洛伊LKM就是使用insmod -f命令来加载特洛伊模块。rmmod用来卸载正在运行的LKM,不过通常rmmod对于rootkit LKM是无效的。稍后,我们将讲述细节。本节我讲了LKM的基础知识,具体请参考http://www.kernel.org 3.LKM rootkit 和KSTAT 最近,一个LKM rootkit(adore)引起了广泛的注意。adore蠕虫不是LKM adore。我在此要讨论的是LKM adore,关于adore蠕虫已经有人分析了。从下面这个网址可以下载这个adore rootkit:http://packetstorm.securify.com/filedesc/adore-0.34.html adore是一个Linux LKM rootkit。非常易于安装,在配置时只需要很小的调整。可以使用默认的配置来安装adore,用户还可以对其代码做某些修改。其readme文件建议修改ELITE_CMD和HIDDEN_PORT来改变设置。当运行./configure时,它会要求你输入一个密码。这个密码是使用后门端口时,做验证用。如果你需要了解更多的信息,就下载一个吧。运行make后,你可以看到两个文件--ava、startadore。需要运行startadore文件来启动adore。一旦启动adore,就可以使用ava了,下面是运行./ava的输出:
Usage: ./ava {h,u,r,R,i,v,U} [file, PID or dummy (for U)]
h hide file
u unhide file
r execute as root
R remove PID forever
U uninstall adore
i make PID invisible
v make PID visible
表4.AVA的输出
上面这个表是adore为使用者提供的功能选项。在此,我不对这些功能做过多解释,因为这对于我们的检测没什么帮助。现在我们要讨论一些adore(LKM)的基础知识,以及如何检测adore等LKM rootkit。 许多rootkit能够隐藏进程、目录、文件甚至连接。但是,这些很多是通过修改一些程序例如:ps、df、netstat、top和lsof的二进制文件。有很多方式可以检测到这种rootkit,例如:t0rn。
这些技术检测t0rn之类的rootkit可以,但是用来检测LKM rootkit是无效的。因为LKM rootkit是在内核层隐藏进程、连接、目录和文件,它不修改程序二进制文件,因此MD5校验也就无效了。检查端口可能好使,不过它最多只能告诉你已经被rooted了。 那么,如何才能LKM rootkit呢?好办,在此我强烈推荐一个程序KSTAT,它可以很好地完成这项任务。在检查内存时,KSTAT使用/dev/kmem文件获得系统的信息。这就是KSTAT的输出: Usage: kstat [-i iff] [-P] [-p pid] [-M] [-m addr] [-s] -i iff may be specified as 'all' or as name (e.g. eth0) displays info about the queried interface -P displays all processes -p pid is the process id of the queried task -M displays the kernel's LKMs' linked list -m addr is the hex address of the queried module displays info about the module to be found at addr -s displays info about the system calls' table 你看到了,KSTAT为用户提供了许多选项来检测rootkit。通过讲述这些选项,你可以知道如何检测这些LKM rootkit:knark、adore和rkit。 BTW,如果我忽略了一些LKM rootkit,将在以后补上。kstat -s恐怕是检测LKM rootkit最好的方式。其它的选项也是很不错的,但是kstat -s在任何时候都是有效的。这就是kstat -s的输出: 上一篇:入侵检测之日志检测 下一篇:DNS服务器快速指南 更多相关文章
|
推荐文章
·组播通信
精彩文章
|