分类: LINUX
2010-11-22 15:40:01
当入侵者成功侵入机器之後,首要的目标就 是抹掉入侵系统的相关记录以及隐藏自己的行踪,一旦忽略了这些事情,入侵者很容易被系统管理者逮到,而一般入侵者最常使用的方法就是使用 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 等,可以验档案是否被窜改,如果与原先的档案不符,将提醒管理者。可参阅 得到更多详细讯息。
如果怀疑自己可能已经被植入 rootkits,可以使用 chkrootkit 来检查,chkrootkit 提供许多工具检查是否被植入 rootkits,例如 chkrootkit 会检查几个可能被窜改过的系统程式,以及检查是否有 rootkits 常使用的工具,此外ifpromisc 用来检查 PROMISC flag 是否开启, chkwtmp / chklastlog 可用来确认lastlog / wtmp 的正确性,另外如果系统拥有 process file system,就可以使用chkproc 来比对 ps 的输出和 process file system 的差异。可参阅 得到更多详细讯息。
我们也可以利用一些简单的方式来检查是否被植入 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 不断的发展,入侵者的匿踪技巧越来越高超,要发现入侵者越来越困难,只能依赖系统管理者平时做好完善的安全政策,不让入侵者有可趁之机,如此才能确保系统安全的长久之道。
下载安装使用chinaunix网友2010-11-23 14:46:00
很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com