转自:蚂蚁大神的http://ixdba.blog.51cto.com/2895551/1557983

一、rootkit简介

rootkit是Linux平台下最常见的一种***后门工具,它主要通过替换系统文件来达到***和和隐蔽的目的,这种***比普通***后门更加危险和隐蔽,普通的检测工具和检查手段很难发现这种***。rootkit***能力极强,对系统的危害很大,它通过一套工具来建立后门和隐藏行迹,从而让***者保住权限,以使它在任何时候都可以使用root权限登录到系统。

rootkit主要有两种类型:文件级别和内核级别,下面分别进行简单介绍。

1、文件级别rootkit

文件级别的rootkit一般是通过程序漏洞或者系统漏洞进入系统后,通过修改系统的重要文件来达到隐藏自己的目的。在系统遭受rootkit***后,合法的文件被***程序替代,变成了外壳程序,而其内部是隐藏着的后门程序。通常容易被rootkit替换的系统程序有login、ls、ps、ifconfig、du、find、netstat等,其中login程序是最经常被替换的,因为当访问Linux时,无论是通过本地登录还是远程登录,/bin/login程序都会运行,系统将通过/bin/login来收集并核对用户的账号和密码,而rootkit就是利用这个程序的特点,使用一个带有根权限后门密码的/bin/login来替换系统的/bin/login,这样***者通过输入设定好的密码就能轻松进入系统。此时,即使系统管理员修改root密码或者清除root密码,***者还是一样能通过root用户登录系统。***者通常在进入Linux系统后,会进行一系列的***动作,最常见的是安装嗅探器收集本机或者网络中其他服务器的重要数据。在默认情况下,Linux中也有一些系统文件会监控这些工具动作,例如ifconfig命令,所以,***者为了避免被发现,会想方设法替换其他系统文件,常见的就是ls、ps、ifconfig、du、find、netstat等。如果这些文件都被替换,那么在系统层面就很难发现rootkit已经在系统中运行了。

这就是文件级别的rootkit,对系统维护很大,目前最有效的防御方法是定期对系统重要文件的完整性进行检查,如果发现文件被修改或者被替换,那么很可能系统已经遭受了rootkit***。检查件完整性的工具很多,常见的有Tripwire、 aide等,可以通过这些工具定期检查文件系统的完整性,以检测系统是否被rootkit***。

2、内核级别的rootkit

内核级rootkit是比文件级rootkit更高级的一种***方式,它可以使***者获得对系统底层的完全控制权,此时***者可以修改系统内核,进而截获运行程序向内核提交的命令,并将其重定向到***者所选择的程序并运行此程序,也就是说,当用户要运行程序A时,被***者修改过的内核会假装执行A程序,而实际上却执行了程序B。

内核级rootkit主要依附在内核上,它并不对系统文件做任何修改,因此一般的检测工具很难检测到它的存在,这样一旦系统内核被植入rootkit,***者就可以对系统为所欲为而不被发现。目前对于内核级的rootkit还没有很好的防御工具,因此,做好系统安全防范就非常重要,将系统维持在最小权限内工作,只要***者不能获取root权限,就无法在内核中植入rootkit。

二、rootkit后门检测工具chkrootkit

chkrootkit是一个Linux系统下查找并检测rootkit后门的工具,它的官方址: http://www.chkrootkit.org/。 chkrootkit没有包含在官方的CentOS源中,因此要采取手动编译的方法来安装,不过这种安装方法也更加安全。下面简单介绍下chkrootkit的安装过程。

1.准备gcc编译环境

对于CentOS系统,需要安装gcc编译环境,执行下述三条命令:

[root@server ~] # tar zxvf chkrootkit.tar.gz
[root@server ~] # cd chkrootkit-*

[root@server chkrootkit-0.50]# make sense


[root@server chkrootkit-0.50] # cd ..
[root@server ~] # cp -r chkrootkit-* /usr/local/chkrootkit
[root@server ~] # rm -rf chkrootkit-*

3、使用chkrootkit

安装完的chkrootkit程序位于/usr/local/chkrootkit目录下,执行如下命令即可显示chkrootkit的详细用法:

[root@server chkrootkit]# /usr/local/chkrootkit/chkrootkit  -h

chkrootkit各个参数的含义如下所示。

参数含义

-h显示帮助信息

-v显示版本信息

-l显示测试内容

-ddebug模式,显示检测过程的相关指令程序

-q安静模式,只显示有问题的内容

-x高级模式,显示所有检测结果

-r dir设置指定的目录为根目录

-p dir1:dir2:dirN指定chkrootkit检测时使用系统命令的目录

-n跳过NFS连接的目录

chkrootkit的使用比较简单,直接执行chkrootkit命令即可自动开始检测系统。下面是某个系统的检测结果:

[root@server chkrootkit] # /usr/local/chkrootkit/chkrootkit
Checking ` ifconfig '... INFECTED
Checking ` ls '... INFECTED
Checking `login'... INFECTED
Checking ` netstat '... INFECTED
Checking ` ps '... INFECTED
Checking ` top '... INFECTED
Checking `sshd'... not infected
Checking `syslogd'... not tested
Checking ` tar '... not infected
Checking `tcpd'... not infected
Checking `tcpdump'... not infected
Checking `telnetd'... not found

从输出可以看出,此系统的ifconfig、ls、login、netstat、ps和top命令已经被感染。针对被感染rootkit的系统,最安全而有效的方法就是备份数据重新安装系统。

4、chkrootkit的缺点

chkrootkit在检查rootkit的过程中使用了部分系统命令,因此,如果服务器被******,那么依赖的系统命令可能也已经被***者替换,此时chkrootkit的检测结果将变得完全不可信。为了避免chkrootkit的这个问题,可以在服务器对外开放前,事先将chkrootkit使用的系统命令进行备份,在需要的时候使用备份的原始系统命令让chkrootkit对rootkit进行检测。这个过程可以通过下面的操作实现:

[root@server ~] # mkdir /usr/share/.commands
[root@server ~] # cp `which --skip-alias awk cut echo find egrep id head ls netstat ps strings sed uname` /usr/share/.commands
[root@server ~] # /usr/local/chkrootkit/chkrootkit -p /usr/share/.commands/
[root@server share] # cd /usr/share/
[root@server share] # tar zcvf commands.tar.gz .commands
[root@server share] #  rm -rf commands.tar.gz

上面这段操作是在/usr/share/下建立了一个.commands隐藏文件,然后将chkrootkit使用的系统命令进行备份到这个目录下。为了安全起见,可以将.commands目录压缩打包,然后下载到一个安全的地方进行备份,以后如果服务器遭受***,就可以将这个备份上传到服务器任意路径下,然后通过chkrootkit命令的“-p”参数指定这个路径进行检测即可。