一、rootkit的定义
rootkit这个术语已经存在10多年了。它是由有用的小型程序组成的工具包,使得攻击者能够保持访问计算机上具有最高权限的用户“root”。换句话说,rootkit是能够持久或可靠地、无法检测地存在于计算机上的一组程序和代码。在上述rootkit定义中,关键词是“无法检测”。rootkit所采用的大部分技术和技巧都用于在计算机上隐藏代码和数据。例如,许多rootkit可以隐藏文件和目录。rootkit的其它特性通常用于远程访问和窃听——例如,用于嗅探网络上的报文。当这些特性结合起来后,它们会给安全带来毁灭性的打击。
要取得一个主机的控制权,最简单的当然就是以登录程序(如 login, ssh, telnet 等) 加上猜测密码的程序来尝试进行登入的行为。不过,由于登入程序大部分都有登入次数的限制,因此使用密码猜测程序就不这么流行了。高级的黑客为了系统网络的安全,会撰写一些程序去测试自己主机的服务漏洞, 并且在发现了某些服务的漏洞之后,会通报该服务的维护团体,或者是贡献自己的修补方式,以补足自己系统的安全性。而服务开发/维护团体在接到这样的通报之后,会在最短的时间内进行程序修改, 并且在因特网上面进行通报与释出该漏洞的修补程序。
然而在这个漏洞通报出来之后,与修补程序释出Sun空窗期,某些恶意的黑客就会针对这样的漏洞进行攻击,这些黑客同样是撰写程序来攻击该漏洞,同时取得被攻击主机的控制权,或者是植入木马程序在受攻击的主机上。 这些黑客与高级黑客不同的地方,在于他们会很骄傲的将攻击的成果贴在一些黑客常上的网站,藉以推销自己,同时,也会将他们撰写的恶意程序散播到互联网上面。 有些黑客就会将这些恶意程序收集起来,做成软件包,并使这些程序包更加流行于互联网上面, 这些恶意的程序包就被称为 rootkit 。
二、rootkit 的类型
我们可将unix和Linux下的 rootkit 分为两大类:应用层级rookit 和内核级别rootkit
1.应用层级 rootkit
应用层级 rootkit 是最常被拿来使用的 rootkit。攻击者以 rootkit 中的木马程序来替换系统中正常的应用程序与系统文件。木马程序会提供后门给攻击者并隐藏其踪迹,攻击者做的任何活动都不会储存在纪录文件中。下面列举了一些攻击者可能取代的文件:
隐藏攻击者踪迹的程序
(1)ls, find, du - 木马程序可以隐藏攻击者文件、欺骗系统,让系统的文件及目录泄露讯息。
(2)ps, top, pidof - 这些程序都是程序监看程序,它们可以让攻击者在进行攻击的过程中,隐藏攻击者本身的程序。
(3)netstat - netstat 是用来检查网络活动的连结与监听,如开放的通讯端口等等
。木马程序 netstat 可以隐藏攻击者的网络活动,例如 ssh daemon 或其它服务。
(4)killall - 木马程序 killall 让管理者无法停止程序。
(5)ifconfig - 当监听软件正在执行时,木马程序 ifconfig 不会显示 PROMISC flag,这样可以隐藏攻击者,不被监听软件察觉。
(6)crontab - 木马程序 crontab 可以隐藏攻击者的 crontab 进入情况。
(7)tcpd, syslogd - 木马程序 tcpd 与 "syslog" 不会纪录攻击者的行为。
后门程序
(1)chfn - 提升使用者的权限。执行 chfn,在输入新使用者名称时,只要输入 rootkit 密码,就可以取得 root 的权限。
(2)chsh - 提升使用者的权限。执行 chsh,在输入新 shell 时,只要输入rootkit 密码,就可以取得 root 的权限。
(3)passwd - 提升使用者的权限。执行 passwd,在输入新密码时,只要输入rootkit 密码,就可以取得 root 的权限。
(4)login - 能够纪录任何使用者名称,包含 root 登入的密码。
(5)bd2 - 木马程序 rpcbind 允许攻击者在受害主机上执行任意程序代码。
木马程序程序
(1)inetd - 木马程序 inetd 可以替攻击者打开远程登入的通讯端口,只要输入密码就可以取得 root 的权限。
(2)rshd - 替攻击者提供远程的 shell。
(3)rsh - 透过 rsh 可以取得 root 的密码。
(4)sshd -攻击者以特定账号密码登入就能拥有 root shell 的权限。
监听程序
(1)linsniffer - linux 小型的监听程序。
(2)sniffchk - 这个程序可以检验与确认网络监听程序是否正在执行。
(3)le - Solaris Ethernet 封包的监听程序。
(4)snif - linux 其它封包的监听程序。
(5)sniff-10mb - 这是一个设计来监听 10mbps Ethernet 的监听程序。
(6)sniff-100mb - 这是一个设计来监听 100mbps Ethernet 的监听程序。
其它种类-
(1)fix - 安装木马程序时 (例如:ls) 更改的时间戳记与检验封包值的讯息。
(2)wted - wtmp 的编辑程序。可让攻击者修改 wtmp。
(3)z2 - 移除 wtmp/utmp/lastlog。
(4)bindshell - 把 rootshell 与某个通讯端口结合在一起。(预设埠号为 31337)
(5)zap3 - 攻击者会从 wtmp, utmp, lastlog, wtmpx 和 utmpx 移除他们的踪迹
。zap3 通常根据下列目录来找寻纪录文件的位置,例如 /var/log, /var/adm,
/usr/adm, 与 /var/run。
2.内核级别rootkit
内核级别rootkit 是比应用层级别 rootkit 功能更强大的 rootkit。内核级别rootkit
透过操作与利用 kernel,已成为最难被发现 rootkit,因为它能够在应用层检查中,建立一条绕过检验的通道。虽然这种软件主要是针对 linux 所制作,但它可能被修改来针对某个通讯端口或者是其它的操作系统来做攻击,一旦被安装在目标主机上,系统就可说是完全被黑客所控制,系统管理员甚至根本找不到黑客隐藏的踪迹。内核级别rootkit 是如何运作的呢? 它基本上是利用 LKM『Loadable Kernel Module』的功能让攻击者做出非法的动作。LKM 在 linux 或其它系统中都是非常有用的工具,支持 LKM 的系统包含 FreeBSD 与 Solaris。操作系统里面有一些函数被系统用来建构 kernel,当这些函数遭到假冒与窜改,主机就不能再被信任了。下面针对内核级别rootkit 的一些运作方式来做介绍:
(1)隐藏程序 - 在 unix 执行过程中,程序的纪录讯息会存放于文件系统中的 "/proc",隐藏程序可以操作 sys_getdents() 系统呼叫函数,在程序的架构里就看不见这些附加且正在执行的程序。
(2)隐藏网络连结 - 类似于隐藏程序,网络连结会纪录在 "/proc/net/tcp" 与 "/proc/net/udp" 这两个文件之中,执行 Kernel rootkit,无论何时读取这两个文件,都会隐藏攻击者的踪迹,不让用户知道。
(3)隐藏 LKM 的信号 - 通常 LKM 的默认值是可被看见的,这样是为了方便其它使用者也可以使用。攻击者必须使用 "EXPORT_NO_SYMBOLS" 命令隐藏这些信号,以防止任何信号被泄漏出去。
(4)利用 LKM 传递讯息 - LKM Kernel rootkit 安装完成之后,攻击者若要通知kernel 隐藏另一文件,可透过 Kernel rootkit 来替换 sys_settimeofday()。之后只要透过一些特别的参数,就可以请求系统来完成攻击者想要完成的事情。
(5)改变文件的执行 - 有时攻击者可能想要替换掉某些文件,例如 "login",但并不想要更改文件,此时 Kernel rootkit 可以替换 sys_execve()。这样系统会持续执行 "login" 并泄漏 "login" 程序的版本给攻击者。
目前最流行的内核级别rootkit,包含 linux 上的 knark 与 Solaris 上的Loadable Kernel Module,其中 knark 还包含了以下的程序:
(1)hidef:用来隐藏文件。
(2)unhidef:用来设定执行文件重新导向,使攻击者的木马可以被执行。
(3)nethide:可以隐藏 /proc/net/tcp 与 /proc/net/udp 字符串,这也是netstat 撷取资料的地方,攻击者可以用这个工具将目标主机上使用中的联机讯息隐藏起来。
(4)taskhack:可以改变正在执行中的程序,因此攻击者可以将 /bin/sh 的程序,更改成为 root 的使用者账号。
(5)rexec:可以从远程在 knark 服务器上执行命令,也可以用来支持 ip 造假的功能。
(6)rootme:可以将权限提升到 root。
三、防止 rootkit 的攻击基本思路
知道了这些 Rootkit 工具包之后,那么我们如何杜绝黑客 使用 rootkit 程序包来攻击我们的主机呢?由于 rootkit 主要是藉由主机的漏洞来攻击的,因此, 您必须要确定『不必要的服务请务必关闭』, 此外『随时更新主机上面各套件的修补程序』。关闭不必要的服务应该很简单,至于更新套件的修补程序, 最好借助专业工具软件提供的在线更新方式来维护, 这样对于系统管理员来说,会比较轻松。这样还不够喔!因为 rootkit 也很可能会伪装成互联网上面合法的软件, 来吸引您安装他。例如前几年,着名的 OpenSSL 网站上所提供的套件竟然被发现已经被黑客 置换掉所以,在您安装取得的套件之前,请先以 MD5 或者其它指纹数据进行档案的比对, 以确定该档案是没有问题的。当然,最好还是不要安装来路不明的套件较好。而为了确认一下我们的主机是否被 rootkit 程序包所攻击, 其实我们还可以透过其它的软件工具来检查主机的某些重要程序,例如下面提到的 ps, lsof 等的。 这就是我们这篇文章要提到的chkrootkit。
四、Solaris服务器的基本安全检查
这里我们分如下几个步骤:
1.查看登陆系统的用户:
我们用w命令显示当前所有登陆系统的用户,如图1所示,输出标题行显示了当前系统时间,该系统已运行的时间,当前登陆用户数,最近1分钟,5分钟和15分钟内的平均系统负载。 USER字段显示当前登陆的用户名。TTY字段显示了会话的控制终端,tty表示从控制台登陆,pts/typ则可以表示通过一个网络连接,
2.查看系统开放的端口:
我们用netstat –an命令来显示当前系统开放的端口,有时系统开放的端口比较多,一页显示不了,我们可以用|more这个管道命令使结果分页显示,便于我们查看输出行通常有5个结果,其中比较重要的是proto显示了使用协议,local address显示了使用的本地ip,这对于NAT地址转换的情况比较有用,还有foreign address显示了外部ip,state显示了当前这个连接的状态。
3.使用lsof,
使用 lsof 您可以检查打开的文件,并根据需要在卸载之前中止相应的进程。同样地,如果您发现了一个未知的文件,那么可以找出到底是哪个应用程序打开了这个文件。在 UNIX 环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”。通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件。在有些情况下,当您使用 ls 请求目录清单时,将出现相应的条目。在其它情况下,如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字,不存在相应的目录清单。但是在后台为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,所以能够查看这个列表将是很有帮助的。完成这项任务的实用程序称为 lsof,它对应于“list open files”(列出打开的文件)。几乎在每个 UNIX 版本中都有这个实用程序。
lsof下载安装
#wget ftp://ftp.sunfreeware.com/pub/freeware/intel/10/lsof-4.77-sol10-x86-local.gz
#gunzip lsof-4.77-sol10-x86-local.gz
#pkgadd -d lsof-4.77-sol10-x86-local
lsof的使用
只需输入 lsof 就可以生成大量的信息,如图1所示。因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
图1 lsof命令输出
每行显示一个打开的文件,除非另外指定,否则将显示所有进程打开的所有文件。Command、PID 和 User 列分别表示进程的名称、进程标识符 (PID) 和所有者名称。Device、SIZE/OFF、Node 和 Name 列涉及到文件本身的信息,分别表示指定磁盘的名称、文件的大小、索引节点(文件在磁盘上的标识)和该文件的确切名称。根据 UNIX 版本的不同,可能将文件的大小报告为应用程序在文件中进行读取的当前位置(偏移量)。图5来自一台可以报告该信息的 Sun Solaris 10 计算机,而 Linux 没有这个功能。
查找网络连接
网络连接也是文件,这意味着可以使用 lsof 获得关于它们的信息。假设您已经知道 PID,但是有时候并非如此。如果您只知道相应的端口,那么可以使用 -i 参数利用套接字信息进行搜索。下面显示了对 TCP 端口 22 的搜索。
# lsof -i :22
搜索活动的连接使用下面命令:
# lsof -i @192.168.1.10
五、使用chkrootkit工具软件
chkrootkit简介
仅仅做了以上工作是不够的,Linux和几乎所有的UNIX都支持LKM(Loadable Kernel Modules),用普通的方法无法检测其存在,这给应急响应带来了极大的挑战性。对于我们来说,解决的办法是找到那些rootkit.所谓 rootkit, 就是有心人士, 整理一些些常用的木马程序,做成一组程序套件, 以方便 黑客攻入主机时, 在受害的主机上,顺利地编译和安装木马程序。有时lkm rootkit虽然被成功装载,但在系统的某些细节上会出现“异常”,甚至可能使系统在运行一段时间后彻底崩溃。还有,lkm虽然活动在ring0核心态,但是攻击者往往会在系统的某处留下痕迹,比如攻击者为了让系统每次关闭或重启后能自动装入他安置的内核后门,可能会改写 /etc/modules.conf或/etc/rc.local等。我们可以通过chkrootkit来检测。 在此 介绍 http://www.chkrootkit.org/ 推出的 chkrootkit.
顾名思义, chkrootkit 就是, 检查 rootkit 是否存在的一种便利工具.chkrootkit 可以在以下平台使用:
Linux 、FreeBSD 、OpenBSD 、Solaris HP-UX , Tru64, Mac OS X截至目前(05/08/2001)为止, 最新版本是: chkrootkit v0.48 。它可以侦测以下63种 rootkit 及 worm,如表-1 。
01. lrk3, lrk4, lrk5, lrk6
02. Solaris rootkit;
03. FreeBSD rootkit;
04. t0rn (and variants)
05. Ambient''s Rootkit (ARK)
06. Ramen Worm;
07. rh[67]-shaper;
08. RSHA;
09. Romanian rootkit;
10. RK17;
11. Lion Worm;
12. Adore Worm;
13. LPD Worm;
14. kenny-rk;
15. Adore LKM;
16. ShitC Worm;
17. Omega Worm;
18. Wormkit Worm;
19. Maniac-RK;
20. dsc-rootkit;
21. Ducoci rootkit;
22. x.c Worm;
23. RST.b trojan;
24. duarawkz;
25. knark LKM;
26. Monkit;
27. Hidrootkit;
28. Bobkit;
29. Pizdakit;
30. t0rn v8.0;
31. Showtee;
32. Optickit;
33. T.R.K;
34. MithRa''s Rootkit;
35. George;
36. SucKIT;
37. Scalper;
38. Slapper A, B, C and D;
39. OpenBSD rk v1;
40. Illogic rootkit;
41. SK rootkit.
42. sebek LKM;
43. Romanian rootkit;
44. LOC rootkit;
45. shv4 rootkit;
46. Aquatica rootkit;
47. ZK rootkit;
48. 55808.A Worm;
49. TC2 Worm;
50. Volc rootkit;
51. Gold2 rootkit;
52. Anonoying rootkit;
53. Shkit rootkit;
54. AjaKit rootkit;
55. zaRwT rootkit;
56. Madalin rootkit;
57. Fu rootkit;
58. Kenga3 rootkit;
59. ESRK rootkit;
60. rootedoor rootkit;
61. Enye LKM;
62. Lupper.Worm;
63. shv5;
1.配置pkg-get
solairs有一种工具,这就是pkg_get,由blastwave.org推出的。用作者的话说是:“一个用来自动抓取www.sunfreeware.com上的包的工具. 模拟了Debian linux上的"apt-get".”传统的Solaris命令功能并不够强大--这个软件可以补充很多包管理的功能。这个工具简单到仅使用如下命令就可以获取sunfreeware.com上一个包的最新版本。
# pkg-get installsoftwore
这条命令会自动下载适合你的体系结构和为你的OS修订的版本software(如果存在的话),并安装它。如果你已安装了一个较老的版本,就可以使用''upgrade''代替 ''install'',这样就会用新的版本覆盖老的版本(即升级)。
下载pkg-get: http://www.blastwave.org/pkg_get.pkg
安装pkg-get: #pkgadd -d pkg_get.pkg all
如果在solaris8下安装有问题,请打下面几个补丁patch:
110380-04 (x86 110403)
110934-11 (x86 110935)
pkg-get将会安装在/opt/csw/bin/目录下。从blastwave安装的软件均安装到该目录中,请把/opt/csw/bin/设置到你的PATH环境变量中。编辑/etc/profile文件:
PATH=/opt/csw/bin:/usr/sfw/bin:/usr/sbin:/usr/bin:/usr/openwin/bin:/usr/dt/bin:/usr/ccs/bin
2.pkg-get主要参数
pkg-get -a :显示所有软件包。
pkg-get -i gcc :安装gcc软件及其使用相关库文件。
pkg-get -D open :搜索所有相关软件包
pkg-get -U 升级使用软件包
3.使用pkg-get在线安装chkrootkit
pkg-get install chkrootkit
4.独立下载安装chkrootkit
#wegt http://mirrors.easynews.com/sunfreeware/i386/10/chkrootkit-0.45-sol10-intel-local.gz
#gunzip chkrootkit-0.45-sol10-intel-local.gz
#pkgadd –d chkrootkit-0.45-sol10-intel-local
图2是chkrootkit安装成功界面。