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已被大多数的防毒软件归类为具危害性的
恶意软件。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
实时监控嫌疑人员的不法行为,它不只能搜集证据,还有利于及时采起行动!
1、背景知识
咱们通嫌常所说的智能机器,大至
超级计算机,中到我的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
killall
不会杀死被入侵者隐藏的进程。
ifconfig
若是入侵者启动了
嗅探器,这个程序就阻止PROMISC标记的显示,使系统管理员难以发现网络
接口已经处于混杂模式下。
cro避ntab
隐藏有关攻击者的crontab条目。
tcpd
阻止向日志中记录某些链接
syslogd
过滤掉日志中的某些链接信息
提高本地普通用户权限的程玖序。运行
chfn,在它提示输入新的用户名时,若是用户输入rookit密码,他的权限就被提高为root。默认的rootkit密码是satori。
chsh
也是一个提高本地用户权限的程序。运行chsh,在它提示输入新的shell时,若是用户输入rootkit密码,他的权限就被提高为root。
passwd
和上面两个程序的做用相同。在提示你输入新密码时,若是输入rookit密码,权限就能够变成root。
login
容许使用任何账户经过rootkit密码登陆。若是使用root账户登陆被拒绝,能够尝试一下rewt。当使用
后门时,这个程序还可以禁止记录命令的历史记录。
这些程序为远程用户提供
后门,能够向远程用户提供inetd、rsh、ssh等服务,具体因版本而异。随着版本的升级,Linux Rootkit IV的功能也愈来愈强大,特征也愈来愈丰富。通常包括以下网络服务程序:
inetd
rshd
为攻击者提供远程shell服务。攻击者使用rsh -l rootkitpassword host command命令就能够启动一个远程root shell。
sshd
工具程序
全部不属于以上类型的程序均可以归如这个类型,它们实现一些诸如:
日志清理、报文
嗅探以及远程shell的端口绑定等功能,包括:
fix
文件属性伪造程序
linsniffer
报文嗅探器程序。
sniffchk
一个简单的bas澈h 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 进入您的系统是可以使用的最佳办法。为了实现这个目的,可使用与防范全部攻击计算机的
恶意软件同样的深刻防卫策略。深度防卫的要素包括:病毒扫描程序、按期更新软件、在
主机和网络上安装
防火墙,以及
强密码策略等。