查看: 2572|回复: 4
收起左侧

图文并茂的手把手教你查杀木马 1

[复制链接]
huxiqiuzhen
发表于 2007-11-16 16:42:31 | 显示全部楼层 |阅读模式
转自http://www.zhulinfeng.com/bbs/dispbbs.asp?boardID=3&ID=4&page=1
这次偶们从一开始讲起,就从各位从朋友手中接过一台问题电脑,满怀信心的准备在朋友面前显摆显摆时开始~~现在,让我们打开电脑,准备检查!
  
  序章,检查前的准备工作
   (对下面说的SSDT、INLINE-HOOK不明白,请先看上面的内容)
   先要准备好一些专业的工具,并检测SSDT是否被HOOK 或INLINE-HOOK,如果被HOOK请判断是否是您安装的杀毒软件、所用的安全防护软件或所用的检查工具所为,如果不是,恭喜,你查到木马了!
   如果实在无法判断是否为正常HOOK,请暂时关闭杀毒软件,然后全部恢复被HOOK的SSDT!
   关闭了杀软后会不会不安全?如果开着就很安全的话,相信你也不会手工查杀了,更何况只是暂时关闭它。
   不恢复行不行?最好是先恢复,除非你用的工具不依赖于SSDT,什么样的工具不依赖于SSDT后面详说。
  
  第一章 进程篇
  
   先关闭所有无关的程序,然后,偶们开始检查当前进程,当前进程是什么呢?当前进程就是现在所有正在运行的程序!查看当前进程,就是查看现在有哪些程序正在运行,如果有未知的程序呢?可能就是木马了,因为通常木马也是做为一个程序存在的。
   怎么看当前进程呢? 请借助专业工具,实在没有工具时,再同时按下Ctrl + Alt + Delete键调出任务管理器来查看。
   那什么样子的程序是未知程序呢?
   这里,我要再强调一下子,一定要找一个能够对进程文件进行数字签名验证的进程查看工具,不然你无法区分某一进程是否为可疑进程,只凭文件名字是完全不够用的。
   如果一个进程不是系统进程,也不是你正在运行的某一程序的进程,那这个进程就是我们说的可疑进程。(不能通过数字签名验证的为非系统进程)
  
   找到了可疑进程又如何呢?杀掉后删除么?
   NO,不要杀它~不杀的原因有三点:
   1、杀掉它的结果是什么,很难预料,如果其正在与其它程序或内核驱动进行交互,你杀它,很可能就是自杀,会把系统杀崩的。
   2、杀掉并删除它,并不会清除它写入注册表的启动项,这样每次开机时仍然会尝试加载这个程序,虽然文件已经不在,无法使木马运行,但每次的试图加载,都是需要时间的,这也是系统变慢的一个原因所在。
   3、最后,只凭上面的检测,只能说明这个进程是可疑进程,但无法就此确认这就是木马,所以,你现在杀掉它,很可能会误杀~
  
   那应该怎么办呢?答案是不理它,找到后,把文件名字记下来,然后进行下一步的检查工作,暂时不要理它。
  
   如果没找到呢?
   那说明,你的机器可能很干净,没有木马。
   或者,木马是进程隐藏或无进程木马。
  
   进程隐藏型的怎么办呢?
   我们先了解一些木马隐藏进程的手段~
  
  当前流行的木马隐藏进程的手段如下:
  
  0、初级隐藏,查找任务管理器窗口枚举子窗口找到列进程的列表框,把自己的名字抺去~,这种用一般专业工具即可查。
  1、中级隐藏,HOOK Win32API 过滤掉马儿自己的进程。只要是驱动级别的进程管理工具基本都可以查。
  2、中高级隐藏,HOOK SSDT NtQuerySystemInformation,过滤掉马儿自己的进程,具有恢复SSDT功能的驱动级工具可查。
  3、次高级隐藏,INLINE HOOK SSDT,过滤掉自己进程,恢复INLINE的或直接枚举进程链的可查。
  4、准高级隐藏,自活动进程链中摘除自己的进程,基于线程调度链表检测技术的工具可查。
  5、高级隐藏,绕过内核调度链表隐藏进程,基于HOOK-KiReadyThread技术来检测的工具可查。
  
  对于隐藏进程,请使用具有相应功能的检查工具来检查~
  
  当然了,我们也不一定死乞白咧的非要把木马隐藏的进程找出来,实在找不出,就当没有或当作无进程的木马,直接进行下一步检查就可以了。
  因为,进程检查只是检查的手段之一,看不到、杀不掉木马的进程,并不防碍我们把木马清掉。
  
  OK,无论对进程的检查结果如何,我们接下来都要开始下一步的检查,模块检查!
  
  参照图如下:
  
  下面的图是一张进程检查图(请以数字签名验证的结果为主,以文件路径名字为辅来判断,瑞星杀毒软件的进程不是系统进程,但通过文件名字与路径,我们可以知道,这是瑞星的主控程序,呵呵,不要死心眼,要多方面结合起来判断~ ^-^):
  

第二章 模块篇
  
   模块是什么?模块,是指具备某一种或某一类功能的特殊功能模块,其外在的表现形式通常为各种动态库文件(通常以.dll为扩展名字)或插件文件(通常以.OCX为扩展名字)。它们由应用程序加载,来为程序提供某一特定的功能。
   就像我们的电视机,如果加了一个卫星天线,就可以收到更多的节目一样,卫星天线本身是与电视机无关的,但它一但被电视机所用,就可以为电视机提供额外的功能。卫星天线相对于电视机,也就是相当于模块相对于程序。
   每个进程都有几个到上百个不等的模块,每个模块都有其特定的用途,当然了,如果某个模块是木马的话,也有其木马用途。
   当进程检查流行起来,且检查的越来越深入时,木马的制造者们开始制作无进程木马,木马是做为一个模块出现的,这样它将不存在于进程列表中。无论你用何等高级的进程检测技术都无法检测到模块木马的存在。
   一台电脑中,进程可能有十几个或几十个,但模块却有好几百个,数量的增多也增加了我们检测的难度。
   对检测工具的要求,仍然是需要具备数字签名验证的能力,否则手工从几百个模块文件中挑出木马,真的很累~(木马模块的检查,请看下面的图)
  
   找到后怎么办呢?
   呵呵,上次有朋友遇到过这问题,结果是他用暴力手段给卸载并删除了~,应该这样处理么?
   答案仍然是否定的!
  不要暴力卸载并删除~~原因么?原因先缓一缓再说,我们先了解一下儿模块木马的启动运行机制,然后再解释为什么不要暴力卸载删除。
  
   模块木马分为两种:一种是静态加载的,一种是动态注入的。
   静态加载的,是把自己的木马文件,在注册表的某键下注册,这样,系统会在开机或运行某一程序时自动的加载在这一键下注册的所有模块,这样,木马就实现了进入到程序中,并执行其非法活动的目的。(在注册表的哪些键下注册可以让系统加载,在后面的启动项检查中会有解释)
   动态加载的,这类木马就是所谓的进程注入型木马,它的实现不但需要有一个模块文件,还需要有一个将模块文件注入到进程中的注入程序。先将注入程序启动,然后由注入程序将模块木马注入到其它的进程中,完成注入后,注入程序就结束了运行,这样,你仍然无法看到进程。
  
   现在明白为什么不能暴力卸载并删除了么?
   暴力卸载并删除后,如果是静态加载的,那注册表中仍然会留下加载项,每次开机或相关程序运行时仍然会偿试加载该模块,如果多了,会导至系统运行变慢。
   如果是动态加载的,那你卸载并删除的仅仅是模块木马,注入程序却仍然留在你的机器上。如果此木马设计的比较合理,那它应该是有模块文件备份的,这样,当你再次开机时,会发现,你暴力删除的模块文件又重新回到了你的机器上,你永远删不干净。如果此木马设计的不合理或比较狠毒,那就只有上帝和木马的制造者才知道会发生事情了~~ -_-!
  
   即然不能暴力删除,那找到后应该如何呢?与进程一样,抄下模块文件的路径与名字,然后,开始下一步的检查,暂时不要理它。
  
   即然说到了无进程木马,那就不得不说“线程注入型木马”,进程注入型的木马注入到进程中的是一个模块,也就是说,必须有一个模块文件的存在,这样我们可以找到这个模块并通过对其文件进行签名验证来找出注入木马;而线程注入型的木马,注入到进程中的却只是一段代码,是没有文件存在的,虽然可以查看每个进程的各个线程,但想发现并找出哪一个线程是木马的,不能说绝不可能,但也几乎是不可能的了,能找出的是非常高的高人,绝不是我~看看下面的第二张图,是EXPLORER.exe的线程列表,能看出什么么?
   (顺便说一句,那张图是ProcessExplorer的截图,非常非常出名且非常非常好用的进程管理工具,在这里可以下载:www.sysinternals.com
   那对这种线程注入型的木马又怎么办呢?
   幸好,线程注入型的木马也需要有一个注入程序来配合,我们找出线程很难,但找出他的注入程序就好办多了。
   现在,无论你是否找到了可疑的模块或线程,我们都要开始下一步的检查,启动项检查!
  
   参照图如下:


第三章 自启动项篇
  
   自启动项是什么?自启动项,就是程序在系统的某处进行登记之后,每次开机系统会自动将程序运行,而程序登记的项,就叫做自启动项。
   木马都不会甘心只运行一次就结束的,它若想在你的电脑中安家,就肯定要每次开机都运行起来,这样,才能达到自我保护、且正常进行木马工作的目的。
   一般的木马都会有一处或多处自启动项,这也成了查找木马时必查的一步。(这只说的是一般的木马,当然就还有二般的不需要自启动项的木马,这个我们放在后面说)
   查找木马的自启动项,很关键也很重要,相对的对工具的要求也很高。
   系统中到底有多少处地方可以让程序自动运行呢?汗~~偶也不知道,偶只能说N多~~所以,要找个查的全的工具来检查,且要找好几个来检查,这样结合起来,应该就够全了。任何一个也不敢说它能把系统中所有的启动位置全列出来。所以,对启动项检查工具的第一要求是要够全!
   只全就够了么?当然还不够,还有一点跟上面相同,也要能进行数字签名验证的,免得它起个系统文件的名字蒙混过去。
   还有就是要能够检测隐藏的启动项,同样的,我们先了解木马隐藏启动项用到的技术:
  
  0、木马没隐藏,只是找了个隐蔽的位置而已,这就要看所用的工具程序枚举的项够不够全了。
  1、木马隐藏在应用层次,HOOK了Win32API中的相关注册表枚举函数,这样的马儿很容易检测,任何一个驱动级别的检测程序都可以胜任。
  2、木马隐藏在内核层,HOOK了SSDT,这样的马儿,一般的就不行了,得找能恢复SSDT的专业检测程序。
  3、木马隐藏在内核层且很无耻,INLINE-HOOK了相关服务函数,这样的马儿绝大多数检程序就都不行了,需要找能恢复INLINE-HOOK的程序。
  4、木马隐藏在最底层,通过查找特征码的方法INLINE-HOOK了微软未公开的底层函数如Cm*系列的函数,嘿,已经很难再比它更底层了,这样的马儿只有采用HIVE文件扫描方式的检测程序或专门恢复底层INLINE-HOOK的工具才能找到它。
  
   这四种隐藏方式都是已经有流氓软件或木马使用先例的~,所以不要报有侥幸心理,认为木马不会采用这种高级的技术,所以,检查启动项最好是多用几个工具配合起来检查,功能强的通常不够全,嘿,可能高手都比较懒吧~
  
   OK,我们开始检查吧~ 先把HOOK、INLINE-HOOK都恢复了,再运行工具开始检查,还记得我们前面找到的可疑模块与可疑进程么,这时就用到了,把找出来的启动项与那些对比一下儿,看看是不是有它们的启动项在里面。
   有?OK,备份注册表,然后删除启动项。删除不掉?是不是忘记恢复HOOK了?恢复了,那打开注册表编辑器,看看你有没有权限删除这个键,在欲删除的键上面按右键(参照下面的图二),选权限,再选“完全控制”就可以删除了,呵呵,这只是它玩的一个小障眼法儿。
   删除后,又有了?这也没关系,这时你有两个选择,一是先结束掉它的进程,卸载掉它的模块,以使它失去重写的能力。二是,开启“系统锁定”功能,把系统临时锁起来,不允许任何程序对注册表进行写入。这时再删除它就没问题了。
  
   删除完成后,重启计算机。
  
   不是记下了可疑的进程与模块了么?再检查一下子,看它们还在不在?不在了,恭喜,你完成了你的木马查杀工作。
  
   还在?
   呵呵,也不要怕,如果还在,证明你并没有真正的完全清除掉它的启动项;可能原因是:
   1、这只木马还采取了触发式的启动机制。
   2、它还有其它的保护机制,比如影子程序或驱动;
  
  
   接下来让我们继续解剖触发式启动的木马~~
  
  参照图如下:


欢迎访问我的百度空间 http://hi.baidu.com/huxi_qiuzhen/blog

[ 本帖最后由 huxiqiuzhen 于 2007-11-17 01:06 编辑 ]
200311310
发表于 2007-11-16 17:13:10 | 显示全部楼层

评分

参与人数 1经验 -2 收起 理由
心跳為妳 -2 抱歉,纯表情回复

查看全部评分

hhj9920
发表于 2007-11-16 17:22:06 | 显示全部楼层
全文收藏了。很有借鉴作用。谢谢楼主哦
大小宝
发表于 2007-11-16 19:47:45 | 显示全部楼层
这不是菜鸟能做的事情啊
於陵闲云
发表于 2007-11-17 14:39:47 | 显示全部楼层
好好学习一下。拜读高手大作!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-3-19 14:06 , Processed in 0.136012 second(s), 19 queries .

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

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