打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
NT内核简介:HIPS与现代木马

  随着NT内核的大范围普及(2000 / XP ......),一种新兴的木马——Rootkit型木马诞生了。(Rootkit的本义并不指木马,其意义与其本义相比有所引申,但是大量的木马使用了Rootkit技术)

  当时最具代表性的,在国外来说,是Hacker Defender(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"

  现在来看一幅Windows NT内核的示意图:

  (细节部分并没有详细画出,这幅图画出了Windows NT内核操作系统中,应用程序执行某些操作时的基本流程图)。

  当有了接口,迅雷只需要调用相应的Win32 API,告诉系统,文件的位置和内容,然后Win32 API会被Windows系统继续解释成Native API,经过内核调用KiSystemService处理程序,在SSDT里找到NtWriteFile函数的位置,然后继续调用,进一步被解释成驱动程序指令,传递给文件系统驱动(FSD), 在这之前,如果有过滤驱动,那么先通过过滤驱动,由过滤驱动一层层解释给下一层,最后达到FSD层,之后被进一步解释,直至解释成控制硬盘读写的电流.每个接口要做的都只是把上一层命令解释给下一层接口,最终难以直接使用的电流控制可以用一条简单易记的接口调用来实现.因而编写软件才显得如此容易.

  再介绍一个概念:运行级别(ring).在x86的处理器上(主要是IntelAMD的主流处理器),可以存在四个运行级别ring0-3,Windows NT系列系统(XP/2003......)使用其中的两个,就是ring3和ring0两个级别,用户程序运行于ring3级别,而ring3级别的程序不被允许直接访问硬件,这样一方面也是为了防止程序错误的操作导致系统崩溃或者硬件故障.对应的,系统内核运行于ring0级别,拥有对全部内存区域的访问特权,也可以直接访问硬件.

  现在加入运行级别的概念,再重新看一下这幅图:

  可能有些乱,我们来整理一下.(以下的"函数",通通替换为"功能",以方便理解.)

  1.首先,应用程序产生一个请求,比如他要修改注册表,那么他调用Win32 API接口中的注册表操作相关功能.(RegOpenKey等等),实质是调用advapi32.dll中的相应功能.

  (Win32 API的功能主要位于kernel32.dll advapi32.dll user32.dll gdi32.dll等库中)

  2.advapi32.dll中的功能受到调用,于是他继续解释而调用ntdll.dll中的功能(Native API接口).

  (Native API的所有功能封装于ntdll.dll,但是ntdll.dll并不是真正的执行者,他的任务只是将调用传到内核.)

  3.ntdll.dll 中的功能受到调用(NtCreateKey等等),于是他把对应的功能编号存入eax寄存器,然后使用SYSENTER指令,导致"自陷"(早期使用触发 Int 2e中断的方式,不过他们的效果是一样的),KiSystemService处理程序将运行.

  (这个就像你在银行里取钱,你把存单放到玻璃下面的凹槽里去,然后叫柜员,他会把存单取走,然后给你钱,看起来是你取出了钱,但事实上是银行内部提出的钱.ntdll.dll就是取钱人,他把功能代号(存单)放到eax寄存器里(玻璃下方的凹槽),然后引发自陷以触发KiSystemService(叫柜员),柜员就会去实际处理交易(执行对应功能).)

  4.KiSystemService从eax寄存器里取出功能代号,在一种叫做SDT的结构中查找对应的Native API函数,这种结构在系统中一共有4个,其中一个叫做SSDT,位于ntoskrnl.exe(或者ntkrnlpa.exe)中,记录了系统关键功能的位置,涉及文件操作,注册表操作,进程操作等.还有一个叫做Shadow SSDT,位于win32k.sys中,记录了和用户与图形界面有关的功能,虽然都不是非常关键的功能,但也包括设置系统钩子等比较"特殊"的功能,另外两个SDT的位置则预留,也就是说,有人工创造SDT的可能.(不过这基本上是没有意义的)

  5.找到位置后调用该功能,也就是内核中关于该功能的实际操作被执行,当然,之后还是一层又一层的接口,但通常情况下,这里已经是易于控制的最后一层接口.(某些高级木马使用了Object Hook,也就是说存在更底层的接口被控制的可能)对于注册表操作,他们会被解释成Cm****系列功能,当然最后还是要变成文件操作.

  6.最后对一类特殊的调用进行解释,那就是调用驱动程序对象,很多功能最后会涉及到硬件操作,比如写文件.写文件的时候,系统会调用文件系统驱动(FSD), 如果之前有文件系统过滤驱动(FSD FilterDriver),那么会先通过文件系统过滤驱动,并经由他们层层解释后,最后传给底层文件系统驱动(FSD),FSD是易于控制文件操作的最低一层接口.前面那个例子中,注册表修改的操作最终被解释为写文件的操作(因为修改注册表的本质是修改Hive文件),也要经过FSD,并经由FSD进一步解释,继续传递给下一层接口.

  这样就明白了,在这些调用的传递过程中,任何一个环节遭到了阻断都有可能导致失败.而通过"挂钩"这些关键功能,就可以实现对这些功能的控制.

  挂钩有很多方式,但是目的只有一个,就是---比原功能更早获得通知,然后自行决定要不要继续把他传递下去,或者自行决定要不要把包含不利信息的结果传递回去.

  (就相当于你冒充学习委员,班主任让你查作业,你让真正的学习委员去查作业,真正的学习委员给你报了一串名单,里面有你,你把自己的名字去掉,再交给班主任.这样就可以躲过检查.)

  比如现代木马隐藏自身,他们可以修改SSDT中的文件操作功能的位置(Nt****File系列功能),让他们指向自己,然后自己再调用真正的文件操作功能,返回信息时,他们只要把其中包含自身的信息抹掉即可.如图,当这样调用结果返回给应用程序时,其中并不包含自己(灰鸽子),应用程序自然也就不知道灰鸽子的存在了.

  设置"钩子"的位置很多,可以选择Win32 API下钩,可以选择挂钩ntdll.dll中的函数,但这是不保险的,因为他们都处于ring3级别(想起来我们的图了么?),也就是说,你设置的钩子可以被一个普通程序轻易绕过,或者消除.

  所以大多数人选择在SSDT/Shadow SSDT下挂钩,或者安装文件过滤驱动等等,这些动作受到ring0保护,普通程序无法查知,也无法修改.(更高级的还有Object Hook)

  同理,HIPS类软件使用和现代木马一样的手段,实现对于关键动作的监控.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
关于WIN32/API/SDK/MFC四者之间的联系和区别--<转载>_若是海边一粒沙_百...
Native Application 开发详解
高级木马的自我保护技术与查杀之策(图文详解)
大话dll导出函数与dll封装的关系的思想原理
成功解决(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
木马各种隐藏技术披露
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服