[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 安全技术 > 系统 > 正文
Rootkits
本文出自:http://www.cert.org.tw/newsletter作者: (2001-10-31 07:00:00)
 当入侵者成功侵入机器之後,首要的目标就是抹掉入侵系统的相关记录以及隐藏

自己的行踪,一旦忽略了这些事情,入侵者很容易被系统管理者逮到,而一般入侵者

最常使用的方法就是使用rootkits。许多人会以为rootkits是用来取得系统中root权

限的神奇程式,然而事实上,rootkits是一堆能窃取密码,监听网路流量,留下後门

等的程式集,如果入侵者在系统中成功植入rootkits,一般人将很难发现已经被入侵

,或是只是觉得系统"怪怪的",却不知道哪边出了问题,而对於入侵者来说,将能轻

易控制系统,而且通行无阻。

底下将介绍rootkits如何达成这些目的,以及如何预防侦测rootkits。

 

Rootkits 是一些工具集,trojaned 程式,窜改过的系统程式的集合,工具集中的程

式通常用来抹掉系统中相关的纪录,?

plastlog/utmp/wtmp这些会记录使用者登入

状况的系统记录档,trojaned 程式会留下後门,让入侵者能再次轻易地进入系统之中

,而被窜改过的系统程式会隐藏入侵者的档案、行程、连线等等,管理者通常信任这

些程式的输出,而让管理者难以发现入侵者的踪迹。

 

    目前最常见的 rootkit 是 Linux Rootkit(lrk),以 lrk 为例,底下列出这些程

式及其功用,工作集包含有:

● fix - 改变档案的 timestamp 和 checksum,用来把窜改过的程式的timestamp 和

  checksum,更动为和原先的系统中的程式相同。

● linsniffer - 窃取特定网路讯息(ftp / telnet / imap..)的sniffer。

● sniffchk - 检查 linsniffer 是否在运作。

● wted - 查阅或移除 wtmp 中指定的栏位。

● z2 - 移除某个使用者最後的 utmp/wtmp/lastlog 纪录

 

包含的 trojaned 程式有:

● inetd - 会listen在某个port(预设是5002),任何人只要利用这个 port 进入系统

  就拥有 root 权限。

● bindshell - 将 root shell bind 在某个 port。

● chfn / chsh / login / passwd / su - 输入特定密码就能拥有 root shell。

● rshd - 让入侵者以特定帐号登入就能以 root 权限执行程式。

● sshd - 入侵者以特定帐号密码登入就能拥有 root shell。

 

窜改过的系统程式有:

● crontab - 执行特定的 crontab 档案,并且隐藏这些栏位。

● du / find / ls  - 隐藏特定的档案,通常是与 rootkit 相关的档案。

● ifconfig - 当启动 PROMISC 时(sniffing),不显示 PROMISC flag。

● netstat - 隐藏指定 address / uid / port 的连线。

● killall - 无法删除指定的行程。

● pidof / ps / top  - 输出结果时滤掉指定的行程,例如以 root 执行的行程,或

  行程名称内有特定字串的行程。

● syslogd - 移除系统纪录档中包含特定字串的讯息。

● tcpd - 不会纪录以及允许特定连线。

 

    此外,还有一些 rootkits 会以 kernel module 的方式载入系统之中,置换掉某

些 system calls,或是取代掉某些 kernel 的功能,另外,也有的 rootkits 会取代

系统中的 library,使得使用到这些 library 的程式相当於都有潜在的问题。那我们

要如何预防这些 rootkit 安装到系统内部呢?在此提供几点建议:

● 将放置系统程式的档案系统设定为唯读或是使用 chattr 将重要档案设定为唯读。

● 不要启用 kernel module 的功能。

● 重要的程式使用 static-link 的方式避免连结到被窜改过的 library。

● 使用 md5 或是 pgp 等严密的验演算法确认档案的正确性。

 

    若要侦测 rootkits 窜改系统档案,一般使用 tripwire,提供许多演算法如

MD5 / Snefu / SHA 等,可以验档案是否被窜改,如果与原先的档案不符,将提醒

管理者。可参阅 http://www.tripwire.org/ 得到更多详细讯息。

 

    如果怀疑自己可能已经被植入 rootkits,可以使用 chkrootkit 来检查,

chkrootkit 提供许多工具检查是否被植入 rootkits,例如 chkrootkit 会检查几个

可能被窜改过的系统程式,以及检查是否有 rootkits 常使用的工具,此外

ifpromisc 用来检查 PROMISC flag 是否开启, chkwtmp / chklastlog 可用来确认

lastlog / wtmp 的正确性,另外如果系统拥有 process file system,就可以使用

chkproc 来比对 ps 的输出和 process file system 的差异。可参阅

http://www.chkrootkit.org/ 得到更多详细讯息。

 

    我们也可以利用一些简单的方式来检查是否被植入 rootkits,例如使用 echo *

的输出和 ls 的输出比对,或着是检查 /dev/底下有没有任何"正常"(regular)的档案

,通常/dev/ 底下都是 block special file 或是 character special file,像 lrk

的设定档预设值就是放在 /dev/ 底下,或着使用 nmap 等类似的 port scanner 来检

查系统是否有对外开出任何不正常的 port,另外也建议使用没有被'污染'的系统程式

来检查系统,并更动PATH使用正常的程式来一一检查可能被入侵的系统。

 

    以上大略介绍过 lrk,其他 *NIX 平台的 rootkits 大致上相同,而对於Windows

平台的NT Rootkits,除了隐藏档案目录之外,也隐藏 registry,甚至拥有自己的

TCP/IP Stack,一但被植入非常难发现。

 

    随着 rootkits 不断的发展,入侵者的匿踪技巧越来越高超,要发现入侵者越来

越困难,只能依赖系统管理者平时做好完善的安全政策,不让入侵者有可趁之机,如

此才能确保系统安全的长久之道。

 

参考资料:

o USENIX ;login: - rootkits

   http://www.usenix.org/publications/login/1999-9/features/rootkits.html

o Rootkits: Hiding a Succesful System Compromise

   http://www.cchem.berkeley.edu/College/unix/docs/rootkit.htm

o TheoryGroup - Rootkits - How Intruders Hide

   http://www.theorygroup.com/Theory/rootkits.html

o Tripwire.org - Home of the Tripwire Open Source Project

   http://www.tripwire.org/

o chkrootkit -- locally checks for signs of a rootkit

   http://www.chkrootkit.org/

(http://www.fanqiang.com)
    进入【UNIX论坛

相关文章
 

★  樊强制作 欢迎分享  ★