1、什么是后门
入侵者于入侵之后,常常会去清除自身所留下的痕迹,并且留下再次得以进入的便利途径,清除所留痕迹,主要关涉两个方面的问题,怎样去隐藏文件以及怎样去隐藏进程,为了隐藏文件,入侵者能够拥有多种选择,替换一些系统常用命令,比如“ls, “du, “fsck“,在底层层面,将硬盘里的一些区域标记成坏块,进而把文件放置在那里,或者是,更加过分的情况下,把文件放进引导块里。存在多种用于隐藏进程的选择,比如说替换“ps”程序,借助修改argv进而让程序呈现出象是一个合法的服务程序的样子,又或者是于内核进程列表里屏蔽该进程。
在众多事物当中,Rootkit属于其中最为有名的那一种类别。在Rootkit这个范畴里面,涵盖了日志清理器,还有后门,以及伪造样式的ps、ls、who、w、netstat等程序。借助Rootkit,当系统遭受入侵之后,管理员凭借这些命令没办法获取到系统精确的状态信息描述。并且Rootkit还能为入侵者提供一条再次进入系统的便捷路径。在近期有一项新出现的技术,也就是LKM技术被发现了。它借助现代操作系统所具备的模块技术,以作为内核的一部分来进行运行。存在这样一种 rootkit,它比传统的技术更为强大,进一步来讲,它还更不容易被发觉。一旦它被安装并运行至目标系统之上那状态,察觉到它以及并清除它就会变得格外困难。
那些程序里,存在着一种程序,它会给入侵者提供便利,使其下次能更轻易进入,而这类程序通常被称作是后门。后门对于入侵者而言,有着两点意义:其一,是为了避免管理员在给系统打补丁之后,自身没办法再次进入;其二,是为了防止别的入侵者进入。因为后门会给系统安全带来极大影响,所以在系统被入侵之后,清除后门就变成了一个重要问题。
2、常见的后门种类
那后门程序的目的在于,哪怕系统管理员已然弥补了系统漏洞,入侵者依旧能够获取对系统的访问权限。常见的那些后门存在着,通过修改配置文件,借助建立系统木马程序,利用修改系统内核等来达成,让入侵者在之后从非特权用户身份得以使用root权限。
更改配置文件,更改配置文件属于最为简易的一种增添后门的方式,所以它获得广泛运用,一般而言,入侵者较为青睐去更改的配置文件涵盖有:
(1).rhosts文件,位于用户根目录下,此文件通常被R协议用来判断主机与账号之间的信赖关系。要是一个账号根目录下的.rhosts文件里包含“++”,那么任何人在任何地方都能够不用密码凭借这个账号进行登录。特别是在超级用户根目录下面,这种情况更有可能出现。
(2)hosts.equiv文件。是系统信任主机的列表。
(3)inetd.conf文件,或者是xinetd.d目录。一般而言,是入侵者把一个shell绑到一个特定的tcp端口,任何一个人telnet这个端口就能获取交互的shell。通常情况下,是在该文件里增加或者修改一行来达成这件事的。
(4)ssh认证密钥,入侵者将自身的公共密钥放置到目标机器的ssh配置文件“authorized_keys”当中,进而能够凭借该账号去访问机器,此举无需密码。
(5)Cron 存在后门情况,即为入侵者在 cron 里将一些任务进行增加或者修改之后,会在某个特定时间使程序运行起来,进而借此取得对系统的访问权限。
(6)开启任务,一般而言,于/etc/rc.d/或者在/etc/rc?.d/之处,侵入者能够增添某些启动的服务程序,凭借如此自己可以借助这些服务程序把控住系统,于改动这些配置文件之际,常常还跟着系统其他地方文件的变动与增添。
建立起系统木马程序,任何一个服务程序都能够摇身一变成为木马来给远程用户予以访问权限,举例来说,借助修改in.telnetd或者是login程序,一旦入侵者输入某一特定的密码,那就能够获取超级用户权限,入侵者平常总是习惯去改动的木马程序存在着:
远程登录程序如telnetd、login等,借助对这些登录程序加以修改,致使入侵者凭借自行予以定义的一个口令,便能够得着系统的控制权。
当入侵者实施行动时,会针对系统的一些,起到动态连接作用的库进行修改,以此来当作,能够达成隐秘目的的后门,而借由这样的做法,对于入侵者而言,存在好多处,其中一方面在于这种方式比较难于察觉,另一方面呢,被系统管理员检查识别出来的这种可能性,会相对小那么一些。
新增一些服务程序,这些程序有的通过inetd启动,有的通过rc脚本启动,会被入侵者较为方便地去使用这样的后门,但这种后门也较易于被查得到。
修改该内核,像Knark,它属于新一代的rootkit工具,其依据LKM(loadable kernel module)技术,能够有效地将后门的信息给隐藏起来。运用knark,能够:
1)隐藏或显示文件或目录;
2)隐藏TCP或UDP连接;
3)程序执行重定向;
4)非授权的用户权限增加(“rootme”);
5)改变一个运行进程的UID/GID的工具;
6)非授权的、特权程序远程执行守护进程;
7)Kill –31来隐藏运行的进程。
运用程序执行重新定向与文件隐藏联合起来的方式,入侵者能够去执行各类后门程序。执行重定向是于内核级别开展的,所以文件检测工具不会察觉到程序文件被更改,原本的执行程序并未被改动,因而配置检测工具在路径环境里也不会发觉任何异常情况。
要是将Knark与另一个用于隐藏系统当下加载模块的LKM工具modhide相结合,那便有可能达成,甚至借助lsmod命令都无法察觉到knark的存在,作为Knark作者专门设计的一款清理程序,knarkfinder能够用于找出knark为之隐藏的程序。
3、常用的检测和清除的工具软件
当知晓了木马的各类之别后,实际上,木马的清除已然相对轻易了。于此处我们仅是简要阐述一下其中有可能会用到的工具软件。
(1)lsof
lsof 是一个用于查看进程所打开文件的工具。于系统恢复进程里运用此工具,平常存在如下两个意义,其一,能够发觉一个处于运行状态的进程所开启的文件,如此,利于凭借可疑进程探寻那些入侵者遗留之物的确切位置;其二,可用于找出某个端口所对应的进程,在系统恢复进程中,时常会借助外部扫描程序去查验系统有无木马存在,要是察觉到提供后门的端口,那么就得明确这一端口是被哪个程序所占用,此时运用lsof程序,便能达成这个目的。当然,lsof的作用并非仅限于此,它还具备对一些在系统当中出现的故障展开调试的能力。
依靠进程前往探寻该进程所运用的文件以及设备,属于lsof最为基础的功能,其格式是这样的:lsof –p pid ,有时候不清楚该进程的进程号,又或者是想要知晓某个命令所运用的文件或者设备,这个时候能够运用-c选项,也就是lsof –c command ,借此找出这个命令所打开的文件跟设备。有时候发觉了一个入侵者的配置文件,期望晓得哪些进程打开了这个配置文件,此时能够运用lsof filename来找出所有打开此文件的进程。

lsof在系统恢复进程里,最为常用之处是其用以定位端口与进程关系的这种能力。通过lsof的-i选项能够达成这个目的。lsof可采用–iprotocol@host:port的形式,其中protocol、host、port均可省略,protocol能够涵盖TCP、UDP等。把“lsof –i@aaa.bbb.ccc”进行操作,会列出全部和“aaa.bbb.ccc”开展网络会话的进程,“lsof –iTCP@aaa.bbb.ccc”能列出当中使用TCP连接形式的进程,“lsof –iTCP@aaa.bbb.ccc:21”列出当中所有运用21端口的进程。凭借这一办法,能够轻易地发觉与某一个端口相对应的进程,进而发现入侵者遗留下来的物品。
(2)Tripwire
Tripwire是个完整性检测工具,它能检测对文件系统的未授权修改,对系统恢复和遗留物的发现极为有用,它通过比较文件的数字摘要来判定一个文件有无被更改,如此一来已被添加、删除或更改内容的文件就能被找出,系统管理员便可据此采取相应措施。Eugene Spafford和Gene Kim于1992年在普度大学开发了Tripwire。1998年其软件包被商业化,如今由Tripwire Security Inc.(http://www.tripwiresecurity.com)来维护。该公司提供商业及免费两种版本的软件包。这些软件包能在绝大多数UNIX系统中运行。为准确判断出文件内容是否被修改,Tripwire使用了10种单向哈西函数。其程序涵盖,RSA Data Security公司的MD5哈西函数,和MD4哈西函数,以及MD2哈西函数;Snefru,也就是Xerox安全哈西函数;SHA编码,和Haval编码。而且它还含有俩个传统的CRC过程。其缺省安装表现为,为每个数据条目运用两个签名,这致使攻击者借由填充额外字符去掩盖踪迹变得极为困难。
运行Tripwire首次时,程序会创建一个有签名的初始数据库。再次运行之时,它会借助tw.config文件去生成一个全新的签名数据库。随后,它会对两个数据库展开比较,推行用户所定义的任意屏蔽选项,也就是排除那些常常更改的文件,最终经由电子邮件或者显示器于终端上输出一份能够读懂的报告。
Tripwire存在四种操作模式 ,一种是数据库生成 ,一种是完整性检查 ,一种是数据库更新 ,还有一种是交互式更新。
数据库生成模式产生一个初始数据库,为未来的比较打下基础。
Tripwire的主要模式为完整性检查,通过将当前文件签名与初始数据库作比较,以此来开展检查。
存在两种更新模式,其设立的目的在于,方便用户对Tripwire数据库进行调整,以此去掉那些自己不感兴趣的结果,或者去掉正常的系统发生变化之后而产生的内容是也。
Tripwire默认运用MD5和Snefru算法开展校验,这两种算法一块给予强大的保护,然而与此同时也会耗费不少的CPU时间,所以对安全性与Tripwire性能之间予以均衡是颇为重要的,能够挑选运行程序的6个签名算法及其两个校验和当中的随便一个来保护文件,不过这些里边有些算法开销颇大,尤其是Snefru运行迟缓,绝大多数情形下,运行MD5一种就行了。
用于Tripwire的配置文件,能够使使用者精准地把控程序监测的文件以及目录。文件tw.config之中,存有一个关于这些文件和目录的列表,文件的每一行,都与一个选项屏蔽相互关联,它会告知程序,哪些文件属性的改变能够被忽略。
可构成选项屏蔽的是由几个标志所组成的,其中每个标志都包含不一样的一个属性。就比如说,“s”这个标志代表的是文件大小,“a”所代表的是访问时间戳。而每个标志前面存在的增加“+”或者删除“-”这样的符号,其体现的是对于后面属性变化是否应当进行监视。有一个tw.config条目是这样的:
/home/xyz+s -a
它的意思是,对文件/home/xyz进行跟踪,跟踪的是该文件大小的变化情况,并且要忽略掉文件访问时间的变化情况。
表1所示是一些常见标志的含意。
表1 常见标志的含意
Tripwire签名过程中的每一个,都被赋予了一个标识,针对这个标识,用户能够指明,要为文件或者目录条目使用哪些算法,其中,Tripwire缺省使用的算法是1和2,Tripwire的签名编号,就如同表2所展示的那样。
表2 Tripwire的签名编号
Tripwire具备灵活性,然而其选项或许呈现出较为复杂的状况,为弥补这种复杂性,设计者借助创建包含常用选项标志组合的模板的方式, 在多数情形下,用户于tw.config里运用模板,5个主要模板的形态正如表3里面所展示的那样。
表3 常用选项标志组合的模板
R 模板处于缺省状态,此时如果模式位、i 节点号、链接数、uid、gid、文件大小、修改时间以及 MD5 和 Snefru 签名其中有任意变化,Tripwire 都会进行报告,它会忽略访问和 i 节点时间戳的变化。
条目前面的“!”是作为例外标志存在的,要是条目属于一个文件,那就表明不包含这一文件,要是条目属于一个目录,也就意味着不包含那其中所有的文件。“=”这个标志所代表的意思是“only”,要是后面跟着的条目是一个目录,那就只会针对该目录展开监测,而不会把其中的文件涵盖进去。
也能够将模板跟标志予以混合,像那个“R - 2”,它所表达的意思是在缺省检测之时是不会去使用Snefru的。
完成配置之后,运行名为 tripwire 的命令,会让 Tripwire 于完整性检查模式里运行,此时会开展比较工作,并且报告任何存在的差异。
能使之于交互模式里,或者于数据库更新模式当中,跑去运行Tripwire。于交互模式内,每当察觉到有文件或者是目录取获增添、被删除又或者是作了修改时 ,便会去提示用户,想要着手更新数据库。键入命令tripwire -interactive,从而让Tripwire在交互模式之下开展运行。数据库更新模式于命令行那里给出一种能够快速升级数据库的办法,要是才全新安装了文件/usr/local/bin/new.file,能够借用下述命令以更新数据库:
把“tripwire”更新,更新到“/usr/local/bin/new.file” ,这一操作要执行 ,执行该操作。
该命令也可以用来更新目录中所有的文件。
(3)chkrootkit
与上述两个具备通用功能的软件不一样,chkrootkit是特意为找出系统里的rootkit去设计的,它是由一连串小的程序构成的,大体上能够找出所有著名的后门程序。组成chkrootkit的是七个小程序,其中主程序为chkrootkit,它的功能是发现各类后门,其余几个不一样,ifpromisc用于检测特定网络接口是不是处于混杂模式,chklastlog、chkwtmp、chkwtmpx用于检测系统的三个日志文件有没有曾经遭到破坏,chkproc用于发现LKM木马以及隐藏的进程,strings和UNIX自带的strings相类似。
这件工具运用起来特别容易,这里就不再详细叙述了。需要着重留意的是,这个程序仅仅检测出各个遗留下来的东西的存在,它并没有把这些遗留下来的东西消除掉,所以在检测完毕之后,还得采取办法将相应的后门以及遗留下来的东西从系统里去除。