当前位置:Linux教程 - Linux - RootKIT FAQ

RootKIT FAQ

问:有人汇报我的计算机系统发生了安全事故,但是我却看不出任何问题。我如何知道我的系统是否出现问题了呢?

答:作为一个系统管理员最不希望听到的事情就是有人打电话告诉他:“我有足够的理由相信你的计算机系统被入侵,也许现在正在运行有一个网络嗅探器。

我的系统被入侵了?正在运行嗅探器?这是什么意思呢?我怎么判断这是否是真的呢?我该怎么办呢?

Uuix特洛伊木马的历史

如果回到二十世纪八十年代,那时候查找Unix系统发生了什么问题是并不是非常困难的一件事情。

o ""last""命令可以显示入侵者使用了哪个账号,它们来自哪里,它们什么时候登录了你的系统。

o ""ls""命令可以显示它们的文件。""ps""命令将显示嗅探器、密码破解器及其他入侵者运行的程序。

o ""netstat""命令可以显示当前网络连接及哪些端口被监听等待连接请求。

o ""ifconfig""命令可以判断以太接口是不是处于杂错模式(如果入侵者安装了嗅探器,网卡就会处于杂错模式,从而监听网络上所有的信息,而不仅仅是发给自己的信息)

简而言之,系统能提供给你精确的可信信息。

然而随着时间的推移,聪明的黑客发明了隐藏自己活动踪迹的方法,通过开发程序来帮助隐藏自己。这些方法和程序在电子公告牌或杂志中被发表,如2600及Phrack等等。

例如:由Black Tie Affair在Phrack 25的""Hiding Out Under Unix""文章中,提供了修改/var/log/wtmp文件来隐藏入侵者活动账号信息的源代码。

后来很多聪明的程序员都加入了编写修改如""ls"",""ps"",""netstat""等系统程序的时间和大小的行动。把这些系统进程变为特洛伊木马程序。

正如特洛伊木马被希腊人洗劫特洛伊一样,这些程序看上去似乎很熟悉和值得信任,但是实际上它们隐藏了很多异常信息以使管理员使用它们察看系统信息时相信系统一切都是正常的。从而入侵者可以监听得到登录密码、隐藏它们的文件、隐藏它们的网络连接和进程。由于这些木马程序具有和同目录下的文件一样的时间,看上去具有一样的校验码(使用其他木马技术)。从而管理员看不到任何异常现象,而认为系统是""clean""且正常的。

这些木马程序以""rootkit""的方式捆绑打包。Linux Root Kit 3(lrk3)于1996年发布,增添了tcp wrapper木马和一些增强的程序,当时在X86兼容机linux系统中隐藏活动和通过嗅探器来偷窃密码是最常用的方法。

很多入侵者都将木马的配置文件(指示木马隐藏哪些东西的配置文件)存放在默认的位置。知道这些默认位置的管理员能相当容易地发现并禁止它们,并且可以使用""strings""命令来察看这些二进制木马程序的可疑字符串。另外一个常用的方法是使用""find""命令来查找所有的在24小时内更新的文件。虽然""ls""可能会撒谎,""find""一般不大会出现问题。第三个方法是对于那些使用rpm管理包的系统如redhat等,可以考虑使用""rpm -Vf /bin/ps""命令来对关键程序的完整性进行校验,如果""ps""没有被修改,则该命令不会返回任何内容,否则会输出:

S.5....T c /bin/ps

这表示ps程序被修改过。

后来,ante在1998年11月发布了Linux Root Kit 4(lrk4)。这个版本添加了新的木马程序""pidof""、""killall""(用来根据进程名来杀进程的命令)、""find""、""top""、""crontab""及新的检测嗅探器的程序。

从README处得到的该kit包含的所有程序列表:

bindshell port/shell类型的守护进程
chfn 经过木马化的系统程序,可以获得root权限
chsh 经过木马化的系统程序,可以获得root权限
crontab 经过木马化的系统程序,隐藏定时任务
du 经过木马化的系统程序,隐藏文件
find 经过木马化的系统程序,隐藏文件
fix 文件修复器
ifconfig 经过木马化的系统程序,隐藏活动的嗅探器
inetd 经过木马化的系统程序,实现远程访问权限
killall 经过木马化的系统程序,不能杀掉被隐藏的进程
linsniffer 嗅探器
login 经过木马化的系统程序,实现远程访问权限
ls 经过木马化的系统程序,实现隐藏文件
netstat 经过木马化的系统程序,实现隐藏网络连接
passwd 经过木马化的系统程序,实现获得root权限
pidof 经过木马化的系统程序,实现隐藏进程
ps 经过木马化的系统程序,实现隐藏进程
rshd 经过木马化的系统程序,实现获得远程访问权限
sniffchk 经过木马化的系统程序,实现检测嗅探器是否在运行
syslogd 经过木马化的系统程序,隐藏特定的log信息
tcpd 经过木马化的系统程序,隐藏连接,避免远程连接被拒绝
top 经过木马化的系统程序,实现隐藏进程
wted wtmp/utmp编辑器
z2 Zap2 utmp/wtmp/lastlog擦除器
sshd sshd程序


对付这个木马程序包有几个解决方法。

可以尝试使用你确信没有是可信的程序来察看系统状态,对于管理员来说这可能是最容易的方法了。在系统被入侵以后你不能信任系统的任何程序,这就需要你对系统进行彻底检查。但是作为管理员这时候面对的最大的问题是如何识别系统中哪些程序被修改或被替换的。

识别哪些程序是被修改或替换过是非常麻烦的事情。如果管理员在系统安装成功以后马上就对所有可执行命令生成MD5校验和,则这个过程就非常简单了。有些软件如""tripware""可以自动生成对所有指定程序的MD5校验和,并且自动监视这些程序是否发生了变化。配置诸如""tripware""这样的程序是值得的,在系统发生问题tripware以后可以很快帮助管理员发现问题并且恢复系统。

对于使用了软件包方式管理软件的发布,如redhat来说,RPM命令本身具有验证软件包完整性的功能。命令“rpm -V -a”可以用来根据本地的rpm数据库校验系统安装的所有rpm包的完整性。但是由于rpm数据库也可能被修改,因此你不能完全相信该命令的结果。除非rpm数据库存放在不可写的介质中,如cdrom。

最好的方法是通过和另外一台redhat镜象服务器中的文件进行比较来校验文件。为了和ftp服务器上的“/bin/ls”命令进行比较,可以这样进行:

# rpm -Vvp ftp://mirror.site/dir/RedHat/RPMS/fileutils-3.16-10.i386.rpm
S.5....T /bin/ls

注:这里的/bin/ls属于fileutils包的文件。可以从

http://www.redhat.com/mirrors.html

得到所有的镜象服务器。

为了避免在确认系统哪些程序被修改,管理员往往更希望直接通过替换来恢复系统。这时候问题就成为“了恢复对系统的控制必须替换哪些程序?”

替换可以是有目的的(仅仅重新安装那些可疑程序),也可以是完全重新安装系统。

无论哪一种方式,替换行为将破坏入侵者行为在你的系统上留下的痕迹。这可能会妨碍彻底的调查。尤其是在你希望起诉入侵者时,由于有用的证据被破坏,起诉将不可能。因此在恢复系统以前最好对整个系统进行完全的备份。

对于这两种解决办法-部分或完全替换系统文件-第一种办法的危险是可能不能完全清除被修改的程序,从而系统仍然处于危险中;第二种方法的问题是需要花费更多的时间来恢复并可能破坏系统重要数据。

对于部分替换来说,你至少需要恢复lrk4的Makefile中修改的程序,一般来说包括以下
Should you chose to do a partial re-installation, you will need to
replace all of the programs modified by the lrk4 Makefile. On a Red Hat
5.2 system, at minimum the following RPM packages must be replaced:

rpm包名 文件名
util-linux /usr/bin/chfn
usr/bin/chsh
/bin/login
fileutils /bin/ls
passwd /usr/bin/passwd
procps /bin/ps
/usr/bin/top
rsh /usr/sbin/in.rshd
net-tools /bin/netstat
/sbin/ifconfig
sysklogd /usr/sbin/syslogd
netkit-base /usr/sbin/inetd
tcp_wrappers /usr/sbin/tcpd
psmisc /usr/bin/killall
SysVinit /sbin/pidof
findutils /usr/bin/find

注:在附录中有一个名为findrpms的脚本,其可以产生这个包列表。可以实现来验证这些包:

# for i in ``./findrpms``
> do
> echo Verifying package $i
> rpm -Vp ftp://mirror.site/dir/RedHat/RPMS/$i
> done

如果这些包在镜象站点中被更新,你需要修改上面的路径指向对应你的redhat版本的rpm包所在目录。

由于希望替换已经安装在系统中的文件(同样也是已经在RPM数据库中),因此需要在rpm命令中使用参数""--force""来重新安装那些已经安装了的软件包。

要从Rdhat的FTP服务器上更新上面列出的第一个软件包的命令是:

rpm -Uvh ftp://ftp.redhat.com/redhat/updates/6.2/i386/util-linux-2.7-18.i386.rpm


其他一些木马程序

和""ps""和""netstat""同样重要的一个系统工具命令是""lsof""(LiSt Open Files)。使用""lsof""命令管理员可以查看进程、进程UID(包括sniffer、IRC、login shell)、网络连接和所有当前被打开的文件(如显示sniffer的log文件、工作目录等信息)。

可以从Redhat光盘来安装或者从匿名服务器下载源代码:

ftp://vic.cc.purdue.edu/pub/tools/unix/lsof

有几种方式可以来实现被""ls""命令同样的功能。可以使用""echo""来列显文件;如果使用的是tcsh解释程序,可以使用""ls-F""来实现""ls -F""同样的功能。

实现""find""的另一个方法是使用""tar"",在标准输出创建一个存档文件,然后列出该存档文件的内容,然后使用""egrep""来选择希望查看的内容,但是这依赖于""tar""是如何列出存档内容的。对于Linux来说,可以大致等于""ls -lR""的内容:

% gtar -cf - . | gtar -tvf - | egrep ""^d|/.""


drwx------ dittrich/users 0 Sep 25 16:30 1999 ./
drwxr-x--- dittrich/users 0 Aug 18 16:26 1999 ptyf/
drwxr-x--- dittrich/users 0 Sep 7 16:06 1999 f/
drwxrwx--- dittrich/users 0 Sep 25 16:36 1999 .hidden/
drwxrwx--- dittrich/users 0 Sep 25 16:30 1999 .hidden/.../
-rw-rw---- dittrich/users 0 Sep 25 16:36 1999 .hidden/.file

另外一个方法是保持那些通常会被木马化的程序在软盘中,出现问题时使用软盘的内容来查看系统内容。

另外一种修改linux中的程序来隐藏入侵信息的内容可以在Phrack52-18中的""Weakening the Linux Kernel""一文中找到。

http://www.2600.com/phrack/
http://www.phrack.org/

各种rootkits程序(有些甚至包括在蠕虫病毒中)可以在这些站点中找到:

ftp://ftp.technotronic.com/unix/trojans/
http://packetstorm.securify.com/UNIX/penetration/rootkits/
http://www.digitaloffense.net/worms/

各种检测和清除rootkits的工具可以在这些地方找到:

http://www.chkrootkit.org/
http://WWW.ISTS.Dartmouth.edu/IRIA/knowledge_base/tools/ramenfind.htm
http://www.securiteam.com/tools/5JP0M1F40E.html
http://www.theorygroup.com/Archive/Unisog/2000/msg00123.html
http://archives.neohapsis.com/archives/ids/2000-q4/0166.html

作为管理员你必需熟悉事故响应和追查技术。使用诸如The Coroner''s Toolkit之类的工具,可以进行对文件系统进行彻底的检查,发现很多痕迹,可以在下面地址的到更多的信息:

http://staff.washington.edu/dittrich/misc/faqs/responding.faq
http://staff.washington.edu/dittrich/misc/forensics/

Honeynet项目的挑战活动包括一些详细的被入侵的并安装有rootkit的系统的分析和恢复报告。你可以在下面的网站得到这些文档:

http://project.honeynet.org/challenge/

在该网站上还可以阅读""了解你的敌人""系列文章。其中第三篇讨论的是rootkits相关内容,及入侵者如何隐藏它们的痕迹的内容:

http://project.honeynet.org/papers/

斯坦福大学的David Brumley也有一篇文章是关于rootkits的:

http://www.stanford.edu/~dbrumley/Me/rootkits-desc.txt

Mixter的rootkit文章在:

http://members.tripod.com/mixtersecurity/trojans.txt ''