前言
: 什么是 Root Kit
: 如何防止 rootkit 的***
: Rootkit Hunter 能作什么
: rkhunter 例外的错误状态
安装 rkhunter
检测系统
系统修订
前言:
我们知道,要取得一部主机的所有权限,那就是需要取得该部主机的超级管理员 root 的权限! 所以一般
***都会想尽办法去取得 root 的权限的。那么该如何取得 root 的权限呢? 最简单的方法就是利用网络
上流传的 Root Kit 工具程序来进行***的动作了。
由于 Root Kit 工具的取得相当的容易,因此难保我们一般使用者的主机不会被低级的怪客所干扰, 所以
我们当然要想办法保护我们自己的主机啦!为了要侦测主机是否已经被 Root Kit 之类的程序所***, 由
自由软件撰写团体所开发的 Root Kit Hunter, rkhunter 这个套件,就能够帮我们侦测啰! 所以,底下
我们就来谈一谈这个咚咚。
什么是 Root Kit
要取得一部主机的控制权,有相当多的方法!最简单的当然就是以登入程序(如 login, ssh, telnet 等等)
加上猜测密码的程序来尝试进行登入的行为。不过,由于登入程序大部分都有登入次数的限制, 因此使用
密码猜测程序就不这么流行了。
高级的***为了系统网络的安全,会撰写一些程序去测试自己主机的服务漏洞, 并且在发现了某些服务的
漏洞之后,会通报该服务的维护团体,或者是贡献自己的修补方式, 以补足自己系统的安全性。而服务开
发/维护团体在接到这样的通报之后,会在最短的时间内进行程序修改, 并且在因特网上面进行通报与释
出该漏洞的修补程序。
然而在这个漏洞通报出来之后,与修补程序释出之前的空窗期,某些恶意的 cracker 就会针对这样的漏洞
进行***, 这些 cracker 同样是撰写程序来***该漏洞,同时取得被***主机的控制权,或者是植入木
马程序在受***的主机上。 这些 cracker 与高级***不同的地方,在于他们会很骄傲的将***的成果贴
在一些 cracker 常上的网站, 藉以推销自己,同时,也会将他们撰写的恶意程序散播到 Internet 上面。
有些有心人士就会将这些恶意程序收集起来,做成程序包,并使这些程序包更加流行于 Internet 上面, 这
些恶意的程序包就被称为 root kit 咯。
RootKit 能作的***真是林林总总的说不完!最常见的就是直接以 rootkit 刺探被***主机的服务漏洞,
如果被***主机『刚好』有此漏洞,那么该主机的控制权就可能会被 Cracker 所取得。另外, 若该主机
被取得控制权之后,为方便 cracker 未来做为跳板之用,因此他可能会利用其它的 rootkit 将被***主
机的某些程序换掉,举例来说,我们晓得观察主机的一些信息可以用 ps, ls, top, w 等等的程序,cracker
为了保障自己的***不会被真正的系统管理员得知,就会将这些程序换掉, 让原本的系统管理员无法知道
目前系统正在跑的程序里面,是否有一些不明的程序存在。
如何防止 rootkit 的***
知道了这些 Rootkit 工具包之后,那么我们如何杜绝 cracker 使用 rootkit 程序包来***我们的主机
呢? 由于 rootkit 主要是藉由主机的漏洞来***的,因此, 您必须要确定『不必要的服务请务必关闭』,
此外『随时更新主机上面各套件的修补程序』。 关闭不必要的服务应该很简单,这里鸟哥就不谈了。至于
更新套件的修补程序, 最好藉助于 apt 或者 yum 或者您的 Linux distribution 提供的在线更新方式来
维护, 这样对于系统管理员来说,会比较轻松。
这样还不够喔!因为 rootkit 也很可能会伪装成 Internet 上面合法的软件, 来吸引您安装他。例如前
几年,著名的 OpenSSL 网站上所提供的套件竟然被发现已经被 cracker 置换掉~ 所以,在您安装取得的
套件之前,请先以 MD5 或者其它指纹数据进行档案的比对, 以确定该档案是没有问题的。当然,最好还
是不要安装来路不明的套件较好。
而为了确认一下我们的主机是否被 rootkit 程序包所***, 其实我们还可以透过其它的软件工具来检查
主机的某些重要程序,例如前面提到的 ps, top 等等的。 这就是我们这篇文章要提到的 rootkit hunter
啰。
Root Kit Hunter 能作什么?
在官方的数据当中,RKHunter 可以作的事情包括:侦测 rootkit 程序、侦测后门程序、以及主机端的套
件检查问题。 rkhunter 所使用的侦测技术包括了底下几种:
利用 MD5 指纹分析:
记得我们在 基础学习篇 里面有提到那个 MD5 的东西吧?简单的来说,每个档案都有自己的指纹
数据,这个指纹数据是利用杂凑演算的方式来得到一组 MD5 编码,当这个档案被更动过,那怕是
只改了一个字符,而整个档案的容量大小不变, 他的 MD5 编码还是会不同的。因此,若我们在
系统安装完毕之后,立即建立重要档案的 MD5 数据库, 然后再以分析工具定期去分析该重要档
案的 MD5 编码,若有不同,则显示该档案被变动过, 此时自然就需要了解了解为何会被更动了。
利用这个特性, rkhunter 在释出的时候,就已经收集了各大知名的 Linux distributions 的重
要档案的 MD5 编码(例如 login, ls, ps, top, w 等等档案), 并制作成数据库,然后,当我们
安装好了 rkhunter 并且执行之后, 他就会利用原本数据库的数据去与我们系统的相关档案进行
比对, 若比对的结果有问题,则会显示警示文字,提供系统管理员分析。
检查 rootkit 经常***的档案:
如同前面所说的,rootkit 为了伪装自己或者是为了取得系统控制权,他们会主动的去变更某些
重要档案。 因此,藉由分析这些档案,我们可以很轻易的就知道该档案有没有被窜改过! 这也
是 rootkit 很重要的一个分析的方法!
检查是否具有错误的档案权限--针对 binary files:
在 基础学习篇 里面的 原始码与 tarball 我们有谈到系统里头真正会执行的其实是经过编译的
二进制档案(binary files),因此, 如果***程序想要掌握您的系统,那么窜改的那些重要档案
自然也就是 binary file 啰, 例如 ls, ps, top 等等的。而重点是,系统原本的这些档案本来
都具有比较严谨的档案权限, 例如 /bin/ls 具有的是 -rwxr-xr-x 的 755 权限。不过,很多的
***程序窜改之后的档案权限可能都会变成 -rwxrwxrwx 的 777 权限,因此,直接分析这些重要
档案的权限,也可以判断该档案是否有问题。
检查隐藏档案:
有的时候我们为了要让屏幕的显示数据较为干净,可能会将一些档案隐藏起来, 在 Linux 底下
的隐藏档案,其实只是在档名最前面加上一个小数点『.』而已。 ***程序也可能透过这个一般
朋友们比较不容易注意的隐藏档来隐藏他们的主程序, 因此,rkhunter 也会分析某些不法的隐
藏档,以期找出有问题的档案。
检查可疑的核心模块(LKM/KLD):
在 基础学习篇 里面提到的 核心功能 当中, 可以知道 Linux 的核心功能具有可外挂的特性,
也就是 Loadable Kernel Module, LKM 。 而我们也晓得,系统能作什么是由核心来决定的。因
此,恶意程序当然有可能藉由加载核心模块来作怪! 所以啰,rkhunter 也会分析可疑的核心模
块。(在 Linux 上面, 我们称核心模块为 LKM,不过,在 BSD 系列的系统上面,他们称为 Dynamic
Kernel Linker, KLD。)
操作系统的特殊检测:
每一种操作系统(Operating System)都有他特殊的档案格式,例如 Linux 底下,我们可以使用 ps
来检查 /proc 这个内存目录底下的东西是否一致!?不过,也因为每个操作系统都不相同, 所
以这个功能并无法在所有的操作系统上面进行测试的。无论如何, Linux 是有被支援的喔!
检查已启动的监听埠号:
如果要产生网络联机,则在 Server 端需要启动监听的埠号(listening port), 这样才能监听来
自 Client 端的要求啊!这也是所谓的『后门』(backdoor)程序最常用的方法。 我们知道,要启
动一个 port 来监听,就必须要执行某个程序才行( 基础篇之认识系统服务 ) 如果我们的系统被
***程序***,就很有可能被执行一支程序来启动某项不知名的服务, 而该服务会启动一些
port ,藉由这些 port 就可以让 cracker 轻易的联机到我们的主机。 因此, rkhunter 也会分
析主机上面的 LISTENING Ports 来解析是否有问题啊~
特定分析(String scanner):
某些特定的***程序或后门程序,他会在系统上面建立一特殊的档案或者是目录, 这些特殊的档
案或目录的文件名是不变的。 所以,rkhunter 会藉由分析这些特定的档案或目录是否在您的系
统上面, 以用来判断您的系统是否有被***呢?
除了这些方法之外,在新版的 rkhunter 当中,也加入了针对某些常用套件的版本分析。 举例来说, Apache
这个套件在 2.0.49 以前的版本已经被发现很多的臭虫, 因此,一般管理者都会建议大家将系统当中的
Apache 升级到 2.0.50 以后的版本( 截至 2004/11 )。 又例如常见的 SSH/SSL 版本也都有类似的问题。
rkhunter 可以分析您系统上面的这些运作当中的套件, 然后告诉您,您的该套件版本是否可能有问题??
但也仅只是『可能』有问题~ 咦!干嘛多了个『可能』啊?呵呵!因为 rkhunter 并不是万能的!底下我
们来谈一谈, rkhunter 可能有哪些误判的嫌疑?
rkhunter 例外的错误状态
rkhunter 虽然是很棒的一项工具,但是他的输出结果还是有一小部分的问题。举例来说, 在利用 MD5 编
码比对方面,因为 rkhunter 是利用他本身的 MD5 编码数据库与您的系统相关档案进行比对, 但是难保
您的系统刚好不在 rkhunter 支持的范围之内,如此,则 rkhunter 会判断该档案『有问题!』 此外,如
果您是利用 tarball 的方式自行安装类似 syslogd, ps 等档案,由于下达的参数不同, 所以您的这些档
案肯定与 rkhunter 的 MD5 数据库不同,此时当然也会被判定是『有问题』的状态。 在这种可预期的情
况下,您可以更新 rkhunter 的数据库,也可以与作者联络来克服此一问题。
除此之外,新版的 rkhunter 有提供套件版本的检测,如同上一小节提到的。 但是,各主要 distribution
在发现套件的臭虫后,通常并不是释出最新版的套件, 而是在原有的版本上面透过 patch 来除去该臭虫
程序,而并不变更版本。 此时,单纯的检测版本是无法知道该版本有没有经过 patch 的!因此, 如果您
的套件版本是已经经过 patch ,但版本却是旧的,此时 rkhunter 的版本检测就会出现错误判断了。
因为如此,所以 rkhunter 在使用上面还是有限制的。如果您想要针对某些服务进行更详细的检测, 那就
必须要使用更复杂的程序,例如 nessus 啰!未来我们会再谈到 nessus 的安装与使用方面。
安装 rkhunter:
安装 rkhunter 其实真的很简单!首先,您必须前往下载网页进行下载,下载点:
rkhunter 下载点: http://www.rootkit.nl/projects/rootkit_hunter.html
在该网页的最下方有个 downloads ,请选择最新版本来下载。鸟哥这里以 1.1.8 版进行说明, 您也可以
在 鸟哥的网站上下载 。 假设下载下来的档案放置在 /root 里面,那么整个安装步骤就成为这样(注:您
必须要有 bash shell 喔!)
[root@test root]# cd /usr/local/src
[root@test src]# tar -zxvf /root/rkhunter-1.1.8.tar.gz
# 此时会产生一个名为 rkhunter 的目录!
[root@test src]# cd rkhunter/
[root@test rkhunter]# ./installer.sh
# 此时会产生一新目录 /usr/local/rkhunter
# 该目录内含有一些本系统的重要数据,例如 md5 编码的数据等等。
# 另外,检测程序会放置在 /usr/local/bin/rkhunter 喔!
这样就安装完毕了!很简单吧!此时我们就可以开始以 /usr/local/bin/rkhunter 这支程序来检测系统了。
检测系统:
系统的检测很简单,因为只要执行 rkhunter 就够了!与 rkhunter 相关的参数有:
[root@test root]# /usr/local/bin/rkhunter --help
# 底下仅列出几个比较常用的参数,更多参数请自行参考!
--checkall (-c) :全系统检测,rkhunter 的所有检测项目
--createlogfile :建立登录档,一般预设放在 /var/log/rkhunter.log
--cronjob :可以使用 crontab 来执行,不会有颜色显示
--report-warnings-only :仅列出警告讯息,正常讯息不列出!
--skip-application-check :忽略套件版本检测(如果您已确定系统的套件已 patch)
--skip-keypress :忽略按键后继续的举动(程序会持续自动执行)
--quiet :仅显示有问题的讯息,比 --report-warnings-only 更少讯息
--versioncheck :检测试否有新的版本在服务器上
那么如何开始检测?呵呵!就直接按下 /usr/local/bin/rkhunter --checkall 即可!例如:
[root@test root]# /usr/local/bin/rkhunter --checkall
Rootkit Hunter 1.1.8 is running
Determining OS... Ready
# 第一部份,先进行 binary 的检测,包括 MD5 的检测喔!
Checking binaries
* Selftests
Strings (command) [ OK ]
* System tools
Performing 'known good' check...
/sbin/ifconfig [ OK ]
....(略)....
/sbin/runlevel [ OK ]
[Press to continue] 这里按下 Enter 才能继续!
# 在第一部份的检测当中,主要的工作就是在检验一些系统重要的 binary files,
# 这些档案就是常被 root kit 程序包***的范围!所以首先就得要检测他们啊!
# 接下来进行第二部分的检测!
Check rootkits
* Default files and directories
Rootkit '55808 Trojan - Variant A'... [ OK ]
ADM Worm... [ OK ]
....(略)....
Rootkit 'zaRwT.KiT Rootkit'... [ OK ]
* Suspicious files and malware
Scanning for known rootkit strings [ OK ]
....(略)....
Sniffer logs [ OK ]
[Press to continue] 这里按下 Enter 才能继续!
# 第二部分就是在检测常见的 rootkit 程序包所造成的系统伤害!
# 这部分的检测当然就是针对各个常见的 rootkit ***的档案/目录来侦测啰!
# 接下来是第三部分的检测!
* Trojan specific characteristics
shv4
Checking /etc/rc.d/rc.sysinit
Test 1 [ Clean ]
....(略)....
Checking /etc/xinetd.conf [ Clean ]
* Suspicious file properties
chmod properties
Checking /bin/ps [ Clean ]
....(略)....
Checking /bin/login [ Clean ]
* OS dependant tests
Linux
Checking loaded kernel modules... [ OK ]
Checking files attributes [ OK ]Checking LKM module path [ OK ]Networking* Check: frequently used backdoorsPort 2001: Scalper Rootkit [ OK ]Port 60922: zaRwT.KiT [ OK ]* InterfacesScanning for promiscuous interfaces [ OK ][Press to continue] 这里按下 Enter 才能继续!# 第三部分在检测***以及可疑的档案属性!反正就是针对***程序来进行检测~# 当然,因为***程序可能会开后门,所以网络服务(port)也在这里检测!# 同时还包含核心模块等等的检测喔!再来则是第四部分System checks* Allround testsChecking hostname... Found. Hostname is test.vbird.twChecking for passwordless user accounts... OKChecking for differences in user accounts... [ NA ]Checking for differences in user groups... Creating file It seemsthis is your first time.Checking boot.local/rc.local file...- /etc/rc.local [ OK ]- /etc/rc.d/rc.local [ OK ]- /usr/local/etc/rc.local [ Not found ]....(略)....* Filesystem checksChecking /dev for suspicious files... [ OK ]Scanning for hidden files... [ OK ][Press to continue] 这里按下 Enter 才能继续!# 第四部分主要在进行系统开机与相关服务的检测!所以您可以看到# rc.local 与 password/accounts 的检测都会在这里进行检查~# 此外,在 /dev 里面也会检查是否有被影响的档案喔!接下来是第五部分Application advisories* Application scanChecking Apache2 modules ... [ Not found ]Checking Apache configuration ... [ OK ]* Application version scan- GnuPG 1.2.1 [ Vulnerable ]- Bind DNS [unknown] [ OK ]- OpenSSL 0.9.7a [ Vulnerable ]- Procmail MTA 3.22 [ OK ]- OpenSSH 3.7.1p2 [ Unknown ]Security advisories* Check: Groups and AccountsSearching for /etc/passwd... [ Found ]Checking users with UID '0' (root)... [ OK ]* Check: SSHSearching for sshd_config...Found /etc/ssh/sshd_configChecking for allowed root login... [ OK (Remote root login disabled) ]Checking for allowed protocols... [ OK (Only SSH2 allowed) ]* Check: Events and LoggingSearch for syslog configuration... [ OK ]Checking for running syslog slave... [ OK ]Checking for logging to remote system... [ OK (no remote logging) ][Press to continue] 这里按下 Enter 才能继续!# 第五部分在检查一些常见的服务的套件版本!# 因为仅检查版本信息而已,并没有针对可能的漏洞去***,# 所以,这里的信息有可能是 误判的 不要怀疑!以上面的检测为例,# 我的 OpenSSL 0.9.7a 是已经经过官方 patch 的版本,也就是说,# 他已经封住漏洞了,但是这里却显示有问题!原因就是这样啦!---------------------------- Scan results ----------------------------MD5MD5 compared: 51Incorrect MD5 checksums: 0File scanScanned files: 328Possible infected files: 0Application scanVulnerable applications: 2Scanning took 114 seconds-----------------------------------------------------------------------# 最后这里是作一个输出的总结!我们可以在这里看到# 最终的简单数据,透过这个数据,可以了解系统目前的状态!在终端机使用 rkhunter 来检测最棒的地方,在于有颜色的显示,以上表来看, 在括号[]内的字样,如果是×××的 OK 表示没有问题,如果是红色的!哈哈!那就表示有点问题了! (在本书上以及网页上的友善打印中,因为打印的问题,所以可能会看不到颜色显示, 很抱歉~没办法~)所以,如果您有看到红色显示的字眼时, 务必特别留意喔!另外,如果您不想要每个部分都以 Enter 来继续,想要让程序自动持续执行,可以使用:/usr/local/bin/rkhunter --checkall --skip-keypress这样就会让程序直接执行到结束喔!另外,如果想要让程序每日自动执行一次,那就在 /etc/crontab 里面加入这行:10 3 * * * root /usr/local/bin/rkhunter --checkall --cronjob以后就会在 3:10 自动执行一次!不过,因为是 crontab 执行的,所以就不会有颜色的显示了。系统修订:如果您的系统经过 rkhunter 的检测之后,却发现很多的『红字』时,该怎么办?很简单, 可以参考这个网页提供的方法:http://www.rootkit.nl/articles/rootkit_hunter_faq.html基本上,官方网站与一般网管老手的建议都一样,如果被 rootkit 之类的程序包***后 ( 也就是上一节的检测表中的第二部分所***时 ),那么最好最好直接重新安装系统, 不要存在说可以移除 rootkit 或者***程序的幻想,因为,『隐藏』本来就是 rootkit 与***程序的拿手好戏! 我们不知道到底这个rootkit 或者***程序有多剽悍,为了保险起见,还是重灌系统吧!如何重灌?简单的说:1. 将原主机的网络线拔除;2. 备份您的数据,最好备份成两部分,一部份是全部的系统内容,越详尽越好,包括 binary files与 logfile 等等, 至于另一部份则可以考虑仅备份重要的数据文件即可!3. 将上个步骤的数据备份(仅重要数据部分!)进行整体的检查,察看是否有怪异的数据存在(这部分可能会花去不少时间!)4. 重新安装一部完整的系统,这包括:o 仅安装需要的套件在服务器上面;o 先进行 简单的防火墙 设定后才进行联机;o