Chinaunix首页 | 论坛 | 博客
  • 博客访问: 929743
  • 博文数量: 245
  • 博客积分: 11429
  • 博客等级: 上将
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-15 00:16
文章存档

2011年(56)

2010年(174)

2009年(15)

分类: LINUX

2010-11-22 15:40:01

所谓 rootkit ,是一类入侵者经常使用的工具。这类工具通常非常的隐秘、令用户不易察觉,通过这类工具,入侵者建立了一条能够常时入侵系统,或者说对系统进行实时控制的 途径。所以,我们用自由软件 chkrootkit 来建立入侵监测系统,来保证对系统是否被安装了 rootkit 进行监测。

chkrootkit 在监测 rootkit 是否被安装的过程中,需要使用到一些操作系统本身的命令。但不排除一种情况,那就是入侵者有针对性的已经将 chkrootkit 使用的系统命令也做修改,使得 chkrootkit 无法监测 rootkit ,从而达到即使系统安装了 chkrootkit 也无法检测出 rootkit 的存在,从而依然对系统有着控制的途径,而达到入侵的目的。那样的话,用 chkrootkit 构建入侵监测系统将失去任何意义。对此,我 们在操作系统刚被安装之后,或者说服务器开放之前,让 chkrootkit 就开始工作。而且,在服务器开放之前,备份 chkrootkit 使用的系统命 令,在一些必要的时候(怀疑系统命令已被修改的情况等等),让 chkrootkit 使用初始备份的系统命令进行工作。

当入侵者成功侵入机器之後,首要的目标就 是抹掉入侵系统的相关记录以及隐藏自己的行踪,一旦忽略了这些事情,入侵者很容易被系统管理者逮到,而一般入侵者最常使用的方法就是使用 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 不断的发展,入侵者的匿踪技巧越来越高超,要发现入侵者越来越困难,只能依赖系统管理者平时做好完善的安全政策,不让入侵者有可趁之机,如此才能确保系统安全的长久之道。

下载安装使用
tar xvzf chkrootkit.tar.gz

#Change to chkrootkit source directory
cd chkrootkit

#Compile chkrootkit
make sense

#To run chkrootkit, type
./chkrootkit

加入自动化任务 如果出现问题就发送邮件通知
0 3 * * * (cd /path/to/chkrootkit; ./chkrootkit 2>&1 | mail -s "chkrootkit output" root)
阅读(903) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-23 14:46:00

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com