标题：rootkit
rootkit是什么
Rootkit是什么？估计很多朋友并不明白，简单的说，Rootkit是一种特殊的恶意软件，它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息，比较多见到的是Rootkit一般都和木马、后门等其他恶意程序结合使用。Rootkit通过加载特殊的驱动，修改系统内核，进而达到隐藏信息的目的。技术是双刃剑，我们研究它的目的在于，透过我们的研究，用这项技术来保护我们的系统，使我们的系统更加健壮，充分发挥这个技术的正面应用。
在网络安全中经常会遇到rootkit，NSA安全和入侵检测术语字典( NSA Glossary of Terms Used in Security and Intrusion Detection)对rootkit的定义如下：A hacker security tool that captures passwords and message traffic to and from a computer. A collection of tools that allows a hacker to provide a backdoor into a system, collect information on other systems on the network,mask the fact that the system is compromised, and much more. Rootkit is a classic example of Trojan Horse software. Rootkit is available for a wide range of operating systems. 
好多人有一个误解，他们认为rootkit是用作获得系统root访问权限的工具。实际上，rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。通常，攻击者通过远程攻击获得root访问权限，或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。进入系统后，如果他还没有获得root权限，再通过某些安全漏洞获得系统的root权限。接着，攻击者会在侵入的主机中安装rootkit，然后他将经常通过rootkit的后门检查系统是否有其他的用户登录，如果只有自己，攻击者就开始着手清理日志中的有关信息。通过rootkit的嗅探器获得其它系统的用户和密码之后，攻击者就会利用这些信息侵入其它的系统。
rootkit的功能
最早Rootkit用于善意用途，但后来Rootkit也被骇客用在入侵和攻击他人的电脑系统上，电脑病毒、间谍软件等也常使用Rootkit来隐藏踪迹，因此Rootkit已被大多数的防毒软件归类为具危害性的恶意软件。Linux、Windows、Mac OS等操作系统都有机会成为Rootkit的受害目标。
Rootkit出现于二十世纪90年代初，在1994年2月的一篇安全咨询报告中首先使用了rootkit这个名词。这篇安全资讯就是CERT-CC的CA-1994-01，题目是Ongoing Network Monitoring Attacks，最新的修订时间是1997年9月19日。从出现至今，rootkit的技术发展非常迅速，应用越来越广泛，检测难度也越来越大。
rootkit介绍Rootkit是一种奇特的程序，它具有隐身功能：无论静止时（作为文件存在），还是活动时，（作为进程存在），都不会被察觉。换句话说，这种程序可能一直存在于我们的计算机中，但我们却浑然不知，这一功能正是许多人梦寐以求的——不论是计算机黑客，还是计算机取证人员。黑客可以在入侵后置入Rootkit，秘密地窥探敏感信息，或等待时机，伺机而动；取证人员也可以利用Rootkit实时监控嫌疑人员的不法行为，它不仅能搜集证据，还有利于及时采取行动。！
一、背景知识
我们通常所说的智能机器，大至超级计算机，中到个人PC，小至智能手机，通常都有两部分组成：硬件和软件。并且，设备的智能是通过软件来实现的。所有软件中，有一种是必不可少的，那就是操作系统。操作系统可以简单理解为一组高度复用的核心程序，一方面，它要管理低层的硬件设备，另一方面，为上层其它程序提供一个良好的运行环境。真是同人不同命，同为软件，操作系统却享有至高无上的特权：它不仅管理硬件，而且其他所有软件也都受制于它。
因为在应用程序和硬件之间隔着操作系统，所以应用程序不能直接访问硬件，而是通过调用操作系统提供的接口来使用硬件。也就是说，对应用程序而言，硬件是不可见的。当然，凡事是没有绝对的，应用程序绕过操作系统来直接访问硬件也不是不可能的，但这样做会付出高昂的代价。设想一个软件开发商在开发一款功能丰富的软件，功能本身就够他头痛得了，现在他还得操心某个数据在某个磁道的某个簇上，某个字符在某品牌显示器上的颜色的二进制代码等等繁琐的事情，不用说财力和物力，单说开发周期就是无法容忍的。所以，现在的应用程序都是使用操作系统提供的简单明了的服务来访问系统的，因为毕竟没有谁愿意自讨苦吃。
二、内核的主要功能
从上文中我们已经了解，内核在系统中处于核心枢纽的地位，下面我们具体介绍内核中与Rootkit紧密相关的几个主要功能，更重要的是这些功能对Rootkit的意义所在：
进程管理。进程可以简单理解为运行中的程序，它需要占用内存、CPU时间等系统资源。现在的操作系统大多支持多用户多任务，也就是说系统要并行运行多个程序。为此，内核不仅要有专门代码来负责为进程或线程分配CPU时间，另一方面还要开辟一段内存区域存放用来记录这些进程详细情况的数据结构。内核是怎么知道系统中有多少进程、各进程的状态等信息的？就是通过这些数据结构，换句话说它们就是内核感知进程存在的依据。因此，只要修改这些数据结构，就能达到隐藏进程的目的。
文件访问。文件系统是操作系统提供的最为重要的功能之一。内核中的驱动程序把设备的柱面、扇区等原始结构抽象成为更加易用的文件系统，并提供一个一致的接口供上层程序调用。也就是说，这部分代码完全控制着对硬盘的访问，通过修改内核的这部分代码，攻击者能够隐藏文件和目录。
安全控制。对大部分操作系统来说，因为系统中同时存在多个进程，为了避免各进程之间发生冲突，内核必须对各进程实施有效的隔离措施。比如，在MS-Windows系统中，每个进程都被强制规定了具体的权限和单独的内存范围。因此，对攻击者而言，只要对内核中负责安全事务的代码稍事修改，整个安全机制就会全线崩溃。
内存管理。现在的硬件平台（比如英特尔的奔腾系列处理器）的内存管理机制已经复杂到可以将一个内存地址转换成多个物理地址的地步。举例来说，进程A按照地址 0x0030030读取内存，它得到值的是“飞机”；然而，进程B也是按照同样的地址0x0030030来读取内存，但它取得的值却是“大炮”。像上面这样，同一个地址指向截然不同的两个物理内存位置，并且每个位置存放不同的数据这种现象并不足以为怪——只不过是两个进程对虚拟地址到物理地址进行了不同的映射而已。如果这一点利用好了，我们可以让Rootkit躲避调试程序和取证软件的追踪。
上面介绍了内核的主要功能，以及它们对 Rootkit的重大意义。说到这里，我们就要切入正题了，即：只要我们颠覆（即修改）了操作系统的核心服务（即内核），那么整个系统包括各种应用就完全处于我们的掌控之下了。要想颠覆内核，前提条件是能把我们的代码导入内核。
其中针对SunOS和Linux两种操作系统的rootkit最多(树大招风:P)。所有的rootkit基本上都是由几个独立的程序组成的，一个典型rootkit包括： 
1 以太网嗅探器程程序，用于获得网络上传输的用户名和密码等信息。 
2 特洛伊木马程序，例如：inetd或者login，为攻击者提供后门。 
3 隐藏攻击者的目录和进程的程序，例如：ps、netstat、rshd和ls等。 
4 可能还包括一些日志清理工具，例如：zap、zap2或者z2，攻击者使用这些清理工具删除wtmp、utmp和lastlog等日志文件中有关自己行踪的条目。 
一些复杂的rootkit还可以向攻击者提供telnet、shell和finger等服务。 
还包括一些用来清理/var/log和/var/adm目录中其它文件的一些脚本。 
攻击者使用rootkit中的相关程序替代系统原来的ps、ls、netstat和df等程序，使系统管理员无法通过这些工具发现自己的踪迹。接着使用日志清理工具清理系统日志，消除自己的踪迹。然后，攻击者会经常地通过安装的后门进入系统查看嗅探器的日志，以发起其它的攻击。如果攻击者能够正确地安装rootkit并合理地清理了日志文件，系统管理员就会很难察觉系统已经被侵入，直到某一天其它系统的管理员和他联系或者嗅探器的日志把磁盘全部填满，他才会察觉已经大祸临头了。但是，大多数攻击者在清理系统日志时不是非常小心或者干脆把系统日志全部删除了事，警觉的系统管理员可以根据这些异常情况判断出系统被侵入。不过，在系统恢复和清理过程中，大多数常用的命令例如ps、df和ls已经不可信了。许多rootkit中有一个叫做FIX的程序，在安装rootkit之前，攻击者可以首先使用这个程序做一个系统二进制代码的快照，然后再安装替代程序。FIX能够根据原来的程序伪造替代程序的三个时间戳(atime、ctime、mtime)、date、permission、所属用户和所属用户组。如果攻击者能够准确地使用这些优秀的应用程序，并且在安装rootkit时行为谨慎，就会让系统管理员很难发现。 
LINUX ROOTKIT IV 
前面说过，大部分rootkit是针对Linux和SunOS的，下面我们介绍一个非常典型的针对Linux系统的rootkit--Linux Rootkit IV。Linux Rootkit IV是一个开放源码的rootkit，是Lord Somer编写的，于1998年11月发布。不过，它不是第一个Linux Rootkit，在它之前有lrk、lnrk、lrk2和lrk3等Linux Rootkit。这些rootkit包括常用的rootkit组件，例如嗅探器、日志编辑/删除工具、和后门程序的。 
经过这么多年的发展，Linux Rootkit IV功能变的越来越完善，具有的特征也越来越多。不过，虽然它的代码非常庞大，却非常易于安装和使用，只要执行make install就可以成功安装。如果你还要安装一个shadow工具，只要执行make shadow install就可以了。注意：Linux Rootkit IV只能用于Linux 2.x的内核。下面我们简单地介绍一下Linux Rootkit IV包含的各种工具，详细的介绍请参考其发布包的README文件。 
隐藏入侵者行踪的程序 
为了隐藏入侵者的行踪，Linux Rootkit IV的作者可谓煞费心机，编写了许多系统命令的替代程序，使用这些程序代替原有的系统命令，来隐藏入侵者的行踪。这些程序包括： 
ls、find、du 
这些程序会阻止显示入侵者的文件以及计算入侵者文件占用的空间。在编译之前，入侵者可以通过ROOTKIT_FILES_FILE设置自己的文件所处的位置，默认是/dev/ptyr。注意如果在编译时使用了SHOWFLAG选项，就可以使用ls -/命令列出所有的文件。这几个程序还能够自动隐藏所有名字为：ptyr、hack.dir和W4r3z的文件。 
ps、top、pidof 
这几个程序用来隐藏所有和入侵者相关的进程。 
netstat 
隐藏出/入指定IP地址或者端口的网络数据流量。 
killall 
不会杀死被入侵者隐藏的进程。 
ifconfig 
如果入侵者启动了嗅探器，这个程序就阻止PROMISC标记的显示，使系统管理员难以发现网络接口已经处于混杂模式下。 
crontab 
隐藏有关攻击者的crontab条目。 
tcpd 
阻止向日志中记录某些连接 
syslogd 
过滤掉日志中的某些连接信息 
木马程序 
为本地用户提供后门，包括： 
chfn 
提升本地普通用户权限的程序。运行chfn，在它提示输入新的用户名时，如果用户输入rookit密码，他的权限就被提升为root。默认的rootkit密码是satori。 
chsh 
也是一个提升本地用户权限的程序。运行chsh，在它提示输入新的shell时，如果用户输入rootkit密码，他的权限就被提升为root。 
passwd 
和上面两个程序的作用相同。在提示你输入新密码时，如果输入rookit密码，权限就可以变成root。
login 
允许使用任何帐户通过rootkit密码登录。如果使用root帐户登录被拒绝，可以尝试一下rewt。当使用后门时，这个程序还能够禁止记录命令的历史记录。 
木马网络监控程序 
这些程序为远程用户提供后门，可以向远程用户提供inetd、rsh、ssh等服务，具体因版本而异。随着版本的升级，Linux Rootkit IV的功能也越来越强大，特征也越来越丰富。一般包括如下网络服务程序： 
inetd 
特洛伊inetd程序，为攻击者提供远程访问服务。 
rshd 
为攻击者提供远程shell服务。攻击者使用rsh -l rootkitpassword host command命令就可以启动一个远程root shell。
sshd 
为攻击者提供ssh服务的后门程序。 
工具程序 
所有不属于以上类型的程序都可以归如这个类型，它们实现一些诸如：日志清理、报文嗅探以及远程shell的端口绑定等功能，包括： 
fix 
文件属性伪造程序 
linsniffer 
报文嗅探器程序。 
sniffchk 
一个简单的bash shell脚本，检查系统中是否正有一个嗅探器在运行。 
wted 
wtmp/utmp日志编辑程序。你可以使用这个工具编辑所有wtmp或者utmp类型的文件。 
z2 
utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过，如果用于Linux系统需要手工修改其源代码，设置日志文件的位置。 
bindshell rootkit
在某个端口上绑定shell服务，默认端口是12497。为远程攻击者提供shell服务。 
如何发现rootkit 
很显然，只有使你的网络非常安全让攻击者无隙可乘，才能是自己的网络免受rootkit的影响。不过，恐怕没有人能够提供这个保证，但是在日常的网络管理维护中保持一些良好的习惯，能够在一定程度上减小由rootkit造成的损失，并及时发现rootkit的存在。 
首先，不要在网络上使用明文传输密码，或者使用一次性密码。这样，即使你的系统已经被安装了rootkit，攻击者也无法通过网络监听，获得更多用户名和密码，从而避免入侵的蔓延。 
使用Tripwire和aide等检测工具能够及时地帮助你发现攻击者的入侵，它们能够很好地提供系统完整性的检查。这类工具不同于其它的入侵检测工具，它们不是通过所谓的攻击特征码来检测入侵行为，而是监视和检查系统发生的变化。Tripwire首先使用特定的特征码函数为需要监视的系统文件和目录建立一个特征数据库，所谓特征码函数就是使用任意的文件作为输入，产生一个固定大小的数据(特征码)的函数。入侵者如果对文件进行了修改，即使文件大小不变，也会破坏文件的特征码。利用这个数据库，Tripwire可以很容易地发现系统的变化。而且文件的特征码几乎是不可能伪造的，系统的任何变化都逃不过Tripwire的监视(当然，前提是你已经针对自己的系统做了准确的配置:P，关于Tripwire和aide的使用请参考本站的相关文章)。最后，需要能够把这个特征码数据库放到安全的地方。
Rootkit 是一种特殊类型的malware（恶意软件）。Rootkit 之所以特殊是因为您不知道它们在做什么事情。Rootkit 基本上是无法检测到的，而且几乎不可能删除它们。虽然检测工具在不断增多，但是恶意软件的开发者也在不断寻找新的途径来掩盖他们的踪迹。 
Rootkit 的目的在于隐藏自己以及其他软件不被发现。它可以通过阻止用户识别和删除攻击者的软件来达到这个目的。Rootkit 几乎可以隐藏任何软件，包括文件服务器、键盘记录器、Botnet 和 Remailer。许多 Rootkit 甚至可以隐藏大型的文件集合并允许攻击者在您的计算机上保存许多文件，而您无法看到这些文件。 
Rootkit 本身不会像病毒或蠕虫那样影响计算机的运行。攻击者可以找出目标系统上的现有漏洞。漏洞可能包括：开放的网络端口、未打补丁的系统或者具有脆弱的管理员密码的系统。在获得存在漏洞的系统的访问权限之后，攻击者便可手动安装一个 Rootkit。这种类型的偷偷摸摸的攻击通常不会触发自动执行的网络安全控制功能，例如入侵检测系统。 
找出 Rootkit 十分困难。有一些软件包可以检测 Rootkit。这些软件包可划分为以下两类：基于签名的检查程序和基于行为的检查程序。基于签名（特征码）的检查程序，例如大多数病毒扫描程序，会检查二进制文件是否为已知的 Rootkit。基于行为的检查程序试图通过查找一些代表 Rootkit 主要行为的隐藏元素来找出 Rootkit。一个流行的基于行为的 Rootkit 检查程序是 Rootkit Revealer. 
在发现系统中存在 Rootkit 之后，能够采取的补救措施也较为有限。由于 Rootkit 可以将自身隐藏起来，所以您可能无法知道它们已经在系统中存在了多长的时间。而且您也不知道 Rootkit 已经对哪些信息造成了损害。对于找出的 Rootkit，最好的应对方法便是擦除并重新安装系统。虽然这种手段很严厉，但是这是得到证明的唯一可以彻底删除 Rootkit 的方法。 
防止 Rootkit 进入您的系统是能够使用的最佳办法。为了实现这个目的，可以使用与防范所有攻击计算机的恶意软件一样的深入防卫策略。深度防卫的要素包括：病毒扫描程序、定期更新软件、在主机和网络上安装防火墙，以及强密码策略等。