[普及文]NT内核简介——HIPS与现代木马序言--------------------------------------------------------------------很多年前,安全软件不像现在这样复杂。那时的天是蓝的,水是清的,木马是跑在R3的,杀软是全靠特征码的。当时打开任务管理器看两眼就可以知道有没有木马运行。然而,好景不长,随着NT内核的大范围普及(2000/XP......),一种新兴的木马——Rootkit型木马诞生了。(Rootkit的本义并不指木马,其意义与其本义相比有所引申,但是大量的木马使用了Rootkit技术)当时最具代表性的,在国外来说,是HackerDefender(hxdef100),在国内来说,则是大名鼎鼎的灰鸽子。这类木马的普遍特点是,能够良好地隐藏自身,躲过常规分析手段和杀软的检测,包括注册表关键位置隐藏,文件隐藏等等,这些木马一度让当时的杀软束手无策,用户更是摸不着头脑,因为常规检测方法已经无法发现它们了。于是,一类叫作ARK的工具被发明了,ARK——Anti-Rookit,反Rootkit工具,当时在国内的代表是Icesword、DarkSpy等,在国外则是RootkitDetector等。这些ARK工具同样使用了Rootkit技术,于是能够发现Rootkit木马的踪迹。而一些杀软为了遏制Rootkit木马,也在自己的杀软中应用了Rootkit技术。同时,越来越复杂的文件加壳技术使传统特征码杀毒引擎捉襟见肘,许多杀软一方面大力改进启发式引擎,一方面融入了最初的HIPS的雏形,即简单的注册表控制等功能。同时一些早期的HIPS工具也开始逐渐应用Rootkit技术,如WinPatrol、SSM等等。时至今日,Rootkit技术已经广泛应用于木马、安全软件、流氓软件中。现代木马几乎全部是Rootkit木马,而安全软件也几乎都应用了Rootkit技术,臭名昭著的某"XX上网"中也大量应用了Rootkit技术。以下的"现代木马"均指Rootkit木马.----------------------------------------------------------------------正文现代木马如何隐藏自身?HIPS如何监视系统动作?为了解释这个问题,首先简介一个概念:接口。简单介绍如下:以家用电器为例,我们要用影碟机看电视的时候,只需要把影碟机的接口插到电视上去就行了,我们没有必要知道接口接进电视里面以后是怎么走线的,因此任何一个人都会使用影碟机。如果没有接口,那么用影碟机的人还得知道影碟机的线具体要插到哪块电路板上,要不要滤波,要不要做其他处理,这样的话,会用影碟机的人就没有几个了。另一个例子,一个班主任带领一个班。他想知道谁没有交作业,并不需要一本一本的去翻。他只需要找学习委员这个“接口”告诉他:“我要查作业”。然后,学习委员也不必自己亲自一本本去翻,他只要告诉各科课代表这些“接口”,告诉他们:“你们去统计一下各科作业。”,各科课代表再去告诉下一层接口——小组长们:“去检查一下你们组的作业。”,小组长检查完作业以后,把情况报告课代表,课代表报告学习委员,学习委员报告班主任。这样,班主任不费力气的就统计完了作业,整个过程,每个人都只负责解释上一层的命令给下一层,直到最底层去执行命令。那么现在开始简介NT内核:拿我们常用的下载工具迅雷来说.如果没有接口,当迅雷储存文件的时候,就要先把文件转成2进制,然后计算当前可用的空间开始于磁盘的第几柱面...第几扇区之类的详细信息,然后检查分区的文件系统是什么,检查完以后,针对相应的文件系统采用不同的记录方式,甚至需要检查硬盘的品牌,然后使用对应的控制电流来让硬盘将指定区域的小磁块磁化成"1"或者"0"现在来看一幅WindowsNT内核的示意图:(细节部分并没有详细画出,这幅图画出了WindowsNT内核操作系统中,应用程序执行某些操作时的基本流程图)。当有了接口,迅雷只需要调用相应的Win32API,告诉系统,文件的位置和内容,然后Win32API会被Windows系统继续解释成NativeAPI,经过内核调用KiSystemService处理程序,在SSDT里找到NtWriteFile函数的位置,然后继续调用,进一步被解释成驱动程序指令,传递给文件系统驱动(FSD),在这之前,如果有过滤驱动,那么先通过过滤驱动,由过滤驱动一层层解释给下一层,最后达到FSD层,之后被进一步解释,直至解释成控制硬盘读写的电流.每个接口要做的都只是把上一层命令解释给下一层接口,最终难以直...