查看: 2433|回复: 2
收起左侧

疱丁解马-木马查杀深度剖析之进程篇(四)

[复制链接]
於陵闲云
发表于 2007-12-17 19:20:33 | 显示全部楼层 |阅读模式
本文转自狙剑安全论坛 作者MuseHero


第四种无进程木马就是利用技术手段隐藏进程的木马

    这显然就不属于无进程了,上面说的三种,的确是没有自己的进程,只是利用了其它的进程。而利用技术手段隐藏进程的木马,则是有自己的进程,但是如果你破解不了他的隐藏技术,那你就看不到它的进程。就像上面我们拿出来的那个HIDE.exe一样,在任务管理器中看不到它的进程,而在狙剑中却能看到,这就是隐藏与破解隐藏后的结果了。
    进程是如何隐藏的呢?这无可避免的会涉及到一些技术问题,下面我们尽量简单明了的说一说,详细的实现细节,请参阅相关资料。在这里,我所想达到的目的,并非是让您也同样写出一个能隐藏自身的木马,而是让您明白,什么样的手段可以隐藏木马的进程,木马又为什么会隐藏,而想破解这种解藏将它揪出来,又需要什么样的技术,好有针对性的选择一些专业工具。
    同时,需要注意的是,隐藏进程的技术同样适用于隐藏DLL模块程序、隐藏驱动程序,下面为了描述方便,统一说为进程。
       Windows系统给我们的开发人员提供了几种列出系统中所有的进程、模块、与驱动程序的方法,最常见的也是最常用的方法就是调用系统APICreateToolHelp32SnapshotEnumProcessEnumProcessModules等,如果您不是开发人员,您不用关心这几个是什么东西,只需要明白,他们是获取进程列表的第一层手段,我们调用这几个其实就是在告诉系统,我们需要进程列表,然后系统就会将列表返回给我们。
    而这几个API在接到请求后又做了什么呢?他们会调用ZwQuerySystemInformationZwQuerySystemInformation会调用KiSystemService切入内核进入R0权限,然后自SSDT表中查取得NtQuerySystemInformation的地址,并调用其指向的实际代码,而NtQuerySystemInformation的作用则是自系统的数据结构中取相应的数据,再顺原路返回去。
    在中间任何一个环节进行拦截都可以实现隐藏进程的目的,这种拦截有一个名字叫做“HOOK”,在切入内核进入R0权限前进行HOOK,称为应用层HOOK,而在之后进行HOOK则是内核HOOK,后者需要用驱动才能实现了。
    什么是HOOK?什么是SSDT?我们来举例说明:
       Windows操作系统就像一个为我们管理电脑的服务公司,而他的工作机制是逐级上报,各负其责的,他派了一个服务人员时刻的跟着我们,看我们都有什么要求。
    当我们想查看系统中都有什么进程时,我们会告诉服务员,我们想了解当前都有哪些进程,那么服务员就会把我们的要求报上去,报给谁呢?他要先知道哪个部门负责哪个工作才行,SSDT表就是做这个的,SSDT表就像是一个路标,指明了什么样的工作应该由哪一个部门负责处理。通过查表得知负责的部门后,工作就被移交到了那个部门,工作完成后,部门会把工作结果交回给服务员,服务员再交给我们,而我们也就得到我们想要的结果了。
    应用层HOOK呢,就像是服务员被木马偷偷的替换了,当我们提出要求时呢,他会检查是否对他有害,或将对他有害的信息去掉,比如我们想查看进程,那他在将结果交给我们时,却把木马的进程自结果中抹去了,这样,我们自然是看不到木马进程了。
    而最常见的内核HOOK,则是HOOKSSDT,上面说了SSDT就是一张表,标明了什么工作应该由什么部门负责。而SSDT HOOK也就是木马将表上的内容给改了,本来交给A部门负责的工作被改成了交给由木马负责,这样,服务员在上报我们的请求时,一查表发现查看进程的工作是由木马负责的,他就把这请求交给木马了,而木马呢?他可是知道表中原来的内容是什么的呀,他只是对请求进行一下过滤,发现没有对自己有害的,就直接转交给原部门了,对自己有害的,自然也就视情况滤掉或涂改了。
    我们先看看SSDT到底是什么样子的,看下图(04-14):





    依次选择狙剑---à扩展功能---àSSDT检查---à筛选可疑项,就可以看到上图,那就是一个SSDT表,从左到右依次是序号、当前地址、所在模块、HOOK类型、原地址、函数名。
    上面都是狙剑自己对SSDTHOOK,当前安全软件很多也用到了SSDT-HOOK技术来实现对系统的安全防护。
    例如上面的第11号函数,所在模块是“D:\workspace\狙剑\SnipeSword.sys”,HOOK类型是“HOOK”,函数是“NtAdjustPrivilegesToken”。这是狙剑本身对SSDT的一个HOOK,用的技术就是HOOKHOOK的函数是用于增加进程权限的。HOOK这个的目的是“在木马进程为自己增加权限的时候进行拦截,提醒用户注意”这在主动防御一章中会详细讲解。
     每一个函数都实现了某一种功能,比如:结束进程是由NtTerminateProcess来完成的(上图中最后的那个257号函数),如果HOOK了这个,那么在进程结束前,就有机会更改结果了,可以拒绝被结束。看下图(03-15





    当你试图在任务管理器中结束狙剑的进程时,系统会拒绝你的操作,其实这并不是系统拒绝的,而是狙剑自己,由于狙剑HOOKSSDT,所以,结束进程的工作服务员都交给他去做了,他一旦发现结束的就是他自己,那他直接告诉服务员这个进程不能结束,然后服务员就把这个结果给我们了,其实我们的这个请求并没有真的到达应该送交的部门。
而上面提到的查看进程用的NtQuerySystemInformation也在这里面,注意找一找就会发现了,如果想隐藏进程就可以把这个给HOOK了。
    需要特别注意一下子“HOOK类型”,上面的显示是“HOOK”,还有一种是“Inline-HOOK”,什么是Inline-HOOK呢?
    上面说过了,SSDT就像是一个标明了什么工作由哪个部门来做的表,SSDT-HOOK就是更改了这个表的指向。而Inline-HOOK呢?他并没有更改表的指向,查找进程的工作在表中仍然指向了负责查找进程的部门。但是呢,木马却把那个部门中的人员替换了,这样仍然能达到它的目的。
       Inline-HOOK更加的复杂、更加的邪恶、也更加的不稳定,而应用范围却是更加的广泛,查找起来更加的困难。要知道,对比SSDT表中的指向是否正确,是否指向了正确的部门,要简单一些,不就是一张表么,拿原来的表对比一下就知道了。但Inine-HOOK却是替换的公司人员,Windows就像一个大公司,有成千上百的人,天知道他替换了哪一个,我们先看看下面的图(03-16):





    当试图结束IceSword.exe时,会出来上面的图,IceSword.exe是另一款知名的安全程序“冰刃”的主程序,当您试图在任务管理器中结束IceSword.exe的进程时,就会出来“无法中止进程”的对话框。
    但是,当你检查SSDT表时,却发现,它并没有对SSDT进行HOOK,那它是如何实现进程不被结束的呢?
    看下图03-17





    选择狙剑---à扩展功能---à内核代码扫描 就可以得到上图。
       当然了,正常情况下,列表应该是空的,但当我运行起IceSword.exe(冰刃)后,再检查,就会出来上图中的7Inline-HOOK项了。
    内核代码扫描,是对内核代码中的Inline-HOOK进行检查,并列出被InlineHOOK的项。
   上图中,IceSword.exe的驱动IsDrv122.sysHOOK7个函数,前六个的功能分别是“结束线程、结束进程、创建进程、创建线程、打开线程、打开进程”后面的那个与进程无关我们不去理它。但从上面6Inline-HOOK来看,你应该知道为什么他不会被结束了吧?
       还不能确定吗?那么,选中这些Inline-HOOK项,然后再在Inilne-HOOK的列表中按右键,选则“恢复选中的Inline-HOOK”,然后,你再打开任务管理器,试试结束IceSword.exe的进程,是不是可以结束了?
讲到这里,不知朋友是否发现了一问题?我上面说了,NtQuerySystemInformation是负责查询进程的,但是那个隐藏进程的测试程序Hide.exe运行起来后,无论在“SSDT检查”中还是在“内核代码扫描”中,都没有任何有关这个函数的任何HOOKInline-HOOK的痕迹,这又是怎么回事呢?
    不要着急,我们接着讲更深层次的进程隐藏技术。
    简单的总结一下:程序就像是为了实现某一目的而定的计划书;进程呢?就是组织工人分配资源开始执行这份计划;而Windows操作系统呢?就是一个为我们管理电脑也是管理这些执行计划的工人的服务管理公司;我们有什么要求呢?就交给服务员将我们的要求提要给Windows,由Windows来组织工人执行我们的要求,并将结果返回给我们。如果木马替换了服务员、更改了SSDT表、或替换了Windows服务公司某职能部门的人员,我们得到的可能就是一个错的结果,或我们的要求得不到执行,就像结束进程一样。
    如果不替换任何人员,也不更改SSDT表,还有没有办法隐藏进程呢?有的,那就是更改系统的数据结构。
    举例来说,我们查询进程其实就是向Windows发出“查询当前正在有哪几组工人正在工作”的请求,而Windows在内部又是如何查询的呢?他当然会去人力部,因为人力部有工人的档案啊,在职的离职的都有,只要将档案一翻,就明白当前有多少工人了,再把结果给我们,它的工作就完成了。
    更改数据结构,也就是更改档案了,虽然人员都没问题,但档案已经被修改了,木马会偷偷的潜入人力部把它自己的档案从人力部的档案柜中偷偷的销毁,这样,当系统去查询的时候,就查不到他的档案了,系统会认为没有这组工人,虽然查询过程与查询的人员都没有问题,但结果仍然是错误的。当然了,进入人力部是需要有一定权限的,不是谁都可以进去销毁东西的,注意到与Hide.exe在一起还有一个Sys.sys文件吗?这个文件也是一个驱动程序,它的工作就是获取R0权限,以便顺利的进入内核更改数据。
    而Hide.exe之所以可以隐藏,就是因为它把系统活动进程链中(即人力部)的进程数据更改了。
那为什么Windows查不到它,专业工具却可以查到呢?这个道理很简单,因为Windows是正规公司,它的工作流程是固定的,查询工人的事情,他就是去人力部,人力部没有相关工人的信息,他就认为没有这工人,他并不会偿试去其它地方看一看。
    其实,工人们是不可能只在一个地方登记的,进入公司要在人力部登记、领工具却还要在仓库登记、发工资要在财务部登记、吃饭要在食堂登记……。
    如果木马只是抹去了活动进程链中的数据,那么还可以从窗口、线程、句柄、对像、Csrss.exe中等许多地方找到它的信息。
    当然了,木马也会尽力的把自己的痕迹全部抹去,并且已经有马儿这么做了。
于是,基于线程调度链的进程枚举技术就出现了,什么叫线程调度链呢?在系统中CPU的时间分配是以线程为单位的,一个程序要想得到执行,必须要有线程存在于这个线程调度链中,不然,他得不到时间的分配,也就得不到执行的机会。
    还以我们上面的例子来说明,木马可以抹去人力部的资料,反正已经进来了,那里有没有也无所谓了;也可以抹去仓库中的资料,工具已经到手了,抹就抹去吧;也可以抹掉财务的资料,豁出去了,为了完成木马大业就不要钱了;但是他不能抹去食堂的资料,不是么?食堂可是按人员档案备饭的,抹掉了,没他的资料也就意味着没他们的饭吃,还不得给饿死啊?而这关键的他无法抹去的资料也就是系统中的“线程调度链”,抹去了,他自己活不下去。
    但不要小瞧了木马的智慧,它们也有自己的法子,什么办法呢?他们准备了一份假资料,在有人查询时呢,就用假资料替换掉真资料,而在食堂做饭时呢,再用真资料替换掉假资料,也就是自己构造了一个进程调度链。
    开始时还真是没人发现,不过,没有不透风的墙,出来混总是要还的,这技术最后还是让人知道了,即然知道了他们会随时替换,那查询时当然也就知道注意了,于是它又开始想其它办法,斗争就这么持继了下去。
    总之,安全与木马的斗争还远远没有结束,胜负还仍然没有分出(好像也很难分出),剿杀木马的工作仍然任重而道远,还我清净河山的愿景,还需我们大家齐心合力的来实现。
    上面对“进程”从外到里由浅到深的都讲了讲,当然了,讲的绝不对不全,因为实在太多了,就以隐藏来说,各路高人的各种奇思妙想多不胜数,多到根本无法尽述,比如欺骗眼睛的技术,就是你查时不管你,但你看时却自列表中抹掉,让你看不到,就像明明真实的资料放到了你面前,但偏偏有一个阴影档住了某处。
    但不管如何,邪恶永不能战胜正义,只要我们都关注,总有它们无处藏身的一天。
    另外,不得不说的是,查看进程只是检查手段的一种,结束进程也绝不意味着就清除了木马。所以,我们还要继续下去。看看还有什么地方可以抓到它,清除它。
    而下一章,就是另一个关键点,自启动项的检查、隐藏与清除。


    进程篇到这里就讲完了,接下来是下面的这些:
四、木马的查杀之自启动项篇


五、木马的查杀之文件篇


六、木马的查杀之主动防御篇



疱丁解马-木马查杀深度剖析之自启动项篇(一)
http://bbs.kafan.cn/viewthread.php?tid=172735&extra=page%3D2








[ 本帖最后由 於陵闲云 于 2007-12-18 18:13 编辑 ]

评分

参与人数 1经验 +2 收起 理由
huxiqiuzhen + 2 您的付出是论坛发展的长久动力!

查看全部评分

xrw
发表于 2007-12-17 20:40:27 | 显示全部楼层
谢谢,学习中
packet
发表于 2007-12-17 20:47:47 | 显示全部楼层
Professional!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-11 11:15 , Processed in 0.127683 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表