由前面几个章节的说明,我们可以晓得因为主机的某些服务是有漏洞的,
黑客们可以针对这些服务的漏洞来撰写恶意攻击的程序,并据以取得该被攻击主机的超级管理员 root 权限。
这些恶意攻击程序后来被散布在互联网上面,因此,很多小朋友很容易就取得这些恶意程序,
并利用这些程序来攻击不特定的众多主机。这种入侵的程序我们可以称之 Root Kit (Root 工具)。
万一您的系统被 root kit 之类的程序所攻击,由于这些程序通常会在您的系统留下一些后门或者是蠕虫,
因此,我们可以通过分析系统来找出这类的程序,这样才能进一步移除恶意程序,
让您的主机保持干干净净啊!底下我们将介绍一套自由软件 RootKit Hunter ,
这套软件可以分析您主机上的可能被恶意程序所攻击的文件,让您可以检查主机是否被入侵喔!
前言:
我们知道,要取得一部主机的所有权限,那就是需要取得该部主机的超级管理员 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 其实真的很简单!首先,您必须前往下载网页进行下载,下载点:
在该网页的最下方有个 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 backdoors
Port 2001: Scalper Rootkit [ OK ]
Port 60922: zaRwT.KiT [ OK ]
* Interfaces
Scanning for promiscuous interfaces [ OK ]
[Press to continue] 这里按下 Enter 才能继续!
# 第三部分在检测木马以及可疑的文件属性!反正就是针对木马程序来进行检测~
# 当然,因为木马程序可能会开后门,所以网络服务(port)也在这里检测!
# 同时还包含内核模块等等的检测喔!再来则是第四部分
System checks
* Allround tests
Checking hostname... Found. Hostname is test.vbird.tw
Checking for passwordless user accounts... OK
Checking for differences in user accounts... [ NA ]
Checking for differences in user groups... Creating file It seems
this 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 checks
Checking /dev for suspicious files... [ OK ]
Scanning for hidden files... [ OK ]
[Press to continue] 这里按下 Enter 才能继续!
# 第四部分主要在进行系统开机与相关服务的检测!所以您可以看到
# rc.local 与 password/accounts 的检测都会在这里进行检查~
# 此外,在 /dev 里面也会检查是否有被影响的文件喔!接下来是第五部分
Application advisories
* Application scan
Checking 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 Accounts
Searching for /etc/passwd... [ Found ]
Checking users with UID '0' (root)... [ OK ]
* Check: SSH
Searching for sshd_config...
Found /etc/ssh/sshd_config
Checking for allowed root login... [ OK (Remote root login disabled) ]
Checking for allowed protocols... [ OK (Only SSH2 allowed) ]
* Check: Events and Logging
Search 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 ----------------------------
MD5
MD5 compared: 51
Incorrect MD5 checksums: 0
File scan
Scanned files: 328
Possible infected files: 0
Application scan
Vulnerable applications: 2
Scanning 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 或者木马程序有多剽悍,为了保险起见,还是重装系统吧!如何重装?简单的说:
- 将原主机的网络线拔除;
- 备份您的数据,最好备份成两部分,一部份是全部的系统内容,越详尽越好,包括 binary files 与 logfile 等等,
至于另一部份则可以考虑仅备份重要的数据文件即可!
- 将上个步骤的数据备份(仅重要数据部分!)进行整体的检查,察看是否有怪异的数据存在(这部分可能会花去不少时间!)
- 重新安装一部完整的系统,这包括:
- 仅安装需要的套件在服务器上面;
- 先进行 简单的防火墙 设置后才进行连接;
- 以 APT/YUM 之类的工具进行在线更新;
- 运行类似 rkhunter/nessus 之类的软件,检验系统是否处在较为安全的状态
- 将原本的重要数据移动至上个步骤安装好的系统当中,并启动原本服务器上面的各项服务;
- 以 rkhunter/nessus 之类的软件检验系统是否处在较为安全的环境,并且加强防火墙的机制!
- 最后,将原本完整备份的数据拿出来进行分析,尤其是 logfile 部分,试图找出 cracker 是借由那个服务?那个时间点?
以那个远程 IP 连接进入本机等等的信息,并针对该信息研拟预防的方法,并应用在已经运作的机器上。
这样一来,比较能够保证我们的主机系统可以较为安全一些。至于上头提到的 nessus 软件,我们会在未来几个章节介绍到!
而如果 rkhunter 显示的消息里面,错误并非是 rootkit 或者木马程序所造成的时候,那么很可能是因为用户设置上的问题,
或者是系统管理员变动过某些套件所致。举例来说:
- rootkit 显示有怪异的文件名称(strings file),例如 /dev/.thefile 之类的文件/目录存在,
那么首先,您必须要先确定该文件/目录并非是由于 rootkit 所造成的(一般来说,如果 rkhunter
没有在 rootkit 检验部分列出该文件时,几乎就都是这一类的 strings file 啰),
果真如此,那么就移除该文件吧(确定移除没有问题喔!若不确定,就备份再移除吧~)
- 在 MD5 检验时,发现有 binary file 显示错误!最可能发生此问题的情况,其实不是被入侵,而是系统自动更新套件所致。
鸟哥曾在 Red Hat 9 上面更新过 syslogd 这支程序,没想到 rkhunter 一直显示该文件有问题~
后来才发现,原来是 syslogd 更新在 rkhunter 之后,而 rkhunter 又没有更新 MD5 编码的数据库,
所以才导致出错的问题。
那如何解决呢?首先,可以通过更新 rkhunter 的数据库来取得最新的信息,如何在线更新?利用:
[root@test root]# rkhunter --update
Running updater...
Mirrorfile /usr/local/rkhunter/lib/rkhunter/db/mirrors.dat rotated
Using mirror http://www.rootkit.nl/rkhunter
[DB] Mirror file : Update available
Action: Database updated (current version: 2004081200, new version 2004110700)
[DB] MD5 hashes system binaries : Update available
Action: Database updated (current version: 2004091000, new version 2004110900)
[DB] Operating System information : Update available
Action: Database updated (current version: 2004091100, new version 2004110901)
[DB] MD5 blacklisted tools/binaries : Up to date
[DB] Known good program versions : Update available
Action: Database updated (current version: 2004091000, new version 2004110500)
[DB] Known bad program versions : Update available
Action: Database updated (current version: 2004091000, new version 2004110500)
|
如上所述,我可以将 1.1.8 版本的相关信息 update 到最新的 2004/11/09 所发布的版本!然后再去比对一次 MD5 。
如果这个方法还是无法解决您的问题,就只好请您发信询问 rkhunter 的作者了。
其他的问题解决之道,就请参考上面提供的链接吧! ^_^y 另外,如果您想要让您的 rkhunter 保持在最新的版本,
利用:
rkhunter --versioncheck
就能够知道目前作者发布的最新版本的 rkhunter 啰!很简单吧!
参考文档