chkrootkit

根据这篇文档的描述,rootkit 可以理解成下面这样:

在被入侵的计算机上安装的一套工具,包含有网络嗅探,日志清除,将和行的系统工具如 ps,netstat,ifconfig 等替换成特洛伊木马。在安装 rootkit 之前,入侵者首先要做的是获取权限进入被入侵的计算机。

安装 rootkit 的目的是为了方便入侵者再次回到被入侵的计算机,通过安装一个远端的后门 daemon,比如修改过的 sshd,telnetd 等来实现,通常他们不会监听默认的端口。

通过计算文件的 checksum 值是一个比较有效的发现异常活动的方法。第三方的工具如 Tripwire,AIDE 表现的应该会更优异。

大多数 rootkit 使用的方法是在被入侵的系统上部署 LKM(Loadable Kernel Module) 木马,上面提到的 checksum 是一种方式,更好的是在编译内核的时候直接将这些模块给直接编译进去,这个对于服务器这种相对稳定的系统来说,应该比较容易。

chkrootkit 在一定程度上可以解决此类问题,完整的 chkrootkit 包含以下 7 个套件:
chkrootkit:检测 rootkit 的签名,rootkit 的默认文件以及核心系统二进制文件的怪异内容
ifpomisc:监测是否有接口处于 promiscuous 状态(不要相信 netstat)
chklastlog,chkwtmp,check_wtmpx:检测对应的日志文件
chkproc:检测 LKM 木马以及隐藏的进程
strings-static:Unix strings 套件的简单的实现

主站的下载挂了,可以到这个 mirror 去下载源码包。

注意:使用 apt/yum 等方式安装只能使用 chkrootkit 这个工具,如果编译安装,则可以使用全部的 7 个套件。

安装话,在解压缩的目录下执行下面的命令:

# make sense

安装完之后,通常最先运行 ./ifpromisc 来检查当前接口的状态;接着运行 ./chkproc 来检测是否有隐藏的进程以及 LKM trojans。运行完上面两个命令之后就可以运行主程序 chkrootkit。事实上,chkrootkit 包含了剩下的 6 个组件的全部功能,包括前面跑的 ifpromisc 以及 chkproc。

rootkit 能否检测到被修改的 rootkit?上面的诸如 awk,cut,echo 等命令是从哪里来的?chkproc 会误报吗?请看这里

使用 chkrootkit 的最佳时机是在刚刚安装完系统之后或者在服务未对外开放之前,因为该工具会使用系统上的命令,包括:awk,cut,echo,egrep,find,head,id,ls,netstat,ps,strings,sed,uname,所以比较合理的方式是将这些命令做一个 backup,如果要使用 chkrootkit 则调用备份起来的工具而不是系统上的工具:

# chkrootkit | grep INFECTED

没问题的话应该没有任何的显示,将其写成脚本:

# cat ~/chkrootkit.sh

#!/bin/bash

TMPLOG=$(mktemp)

if ! which chkrootkit>/dev/null 2>&1;then
echo "you need to install chkrootkit first."
fi

chkrootkit > $TMPLOG
 $TMPLOG | logger -t chkrootkit

[ ! -z "$(grep INFECTED $TMPLOG)" ] && grep INFECTED $TMPLOG | mail -s "critical chkrootkit report" [email protected]
rm -f $TMPLOG

# mkdir ~/chkrootkit
for cmd in $(which --skip-alias awk cut echo egrep find head id ls netstat ps strings sed uname)
do
cp $cmd ~/chkrootkit
done

如果不怕麻烦,可以将上面涉及到的命令打包一份,rsync 到另一台“安全”的机器上,每次要使用的时候再 rsync 过来。
然后每次要运行 chkrootkit 命令时:

# chkrootkit -p ~/chkrootkit

如果担心上面的命令被污染了,可以挂在一个新的系统,然后再使用该系统上的工具来运行 chkrootkit。

确定被污染了 rootkit 怎么办?
找到受污染的包,重新安装该包:

# rpm -U --force  rpm_package_name.rpm
# apt-get install --reinstall package_name

这需要对包管理非常的熟悉,对 rootkit 也非常熟悉,后者可以在你自己的机器上装个玩玩,看看安装前以及安装后系统的变化来熟悉这个 rootkit。

当然最保险的做法是:格式化硬盘。

参考:

http://linuxdevcenter.com/pub/a/linux/2001/12/14/rootkit.html

http://linuxdevcenter.com/pub/a/linux/2002/02/07/rootkits.html

http://www.chkrootkit.org/faq/