分享

手工查杀木马病毒6

 菜园子图书馆 2014-01-27
B、自动播放式的触发启动

自动播放本是用于光盘的,当插入一个电影光盘到光驱时,系统会自动播放里面的内容,这就是自动播放的本意,播放什么是由光盘中的AutoRun.inf文件指定的。此文件的内容,通常如下:

[autorun]
open=AutoRun.exe

icon=AutoRun.ico

  Open那一行,指出了自动播放时系统自动运行的程序,icon指出了所显示的图标。后来有人用于了硬盘与U盘,在U盘或硬盘的分区,创建Autorun.inf文件,并在Open中指定木马程序,这样,当你打开硬盘分区或U盘时,就会触发木马程序的运行。

  这类启动,大部分安全工具都进行了监管,在狙剑的自启动项中会列出每个磁盘或分区的自动播放式的自启动程序。
 
C、感染式的触发启动

  这就涉及到病毒了,电脑病毒通过感染正常的程序来实现自己的传播与启动。

  计算机病毒是什么呢?其实也是一段程序,只是其完成的是特殊的工作。上面我们说过了,程序就是一份计划书,里面存的是指令序列,标明了程序所完成的工作流程。那么病毒程序的工作流程是什么样子的呢?通常情况下,病毒程序的工作流是这样的“查找其它符合感染条件的程序à 判断是否已经感染 à 如果是则查找下一个,如果不是则修改其工作流程进行感染à 执行其它任务。”

  病毒程序又是如何感染其它程序的呢?病毒的感染其实就是对正常程序工作流程的修改,仍然用我们在进程篇中的那个例子来说明:正常情况下,一个程序存储的是一个工作的流程,如:动手取原料--à加工---à组装---à验收等等。而一旦被病毒感染后,这个流程就会被病毒修改,修改成这个样子:找老马分派工作-à 老马执行了病毒体 -à 动手取原料 -à加工---à组装---à验收等等,前两步工作就是病毒感染时硬给加上去的,以后每次执行被感染的程序时,都将从“找老马分派工作”开始,然后由老马完成自己的工作后,再转而执行此程序本应该进行的工作。

  也就是说,病毒将自己的病毒体附加到了正常的程序上面,并修改了程序的入口地址为病毒体的执行地址,最后再由病毒体执行完毕后跳回原程序的入口地址来执行原程序的功能,这一切对用户来说都是不可见的。

  用户一旦运行被感染的程序,实际上也就完成了病毒木马的触发启动。

  病毒的清除并不复杂,不外乎就是一个分析,从被感染程序中找到病毒体,清掉,再恢复原程序的入口地址,就OK了。但难就难在病毒与病毒是各不相同的,而新病毒又层出不穷,这就使得这种分析与清除工作需要大量的人力与精力。所以,也只有有实力的大公司才有可能很好的维护一个病毒库,并不断的分析新病毒来更新病毒库。

  所以,朋友们遇到感染型的病毒后,最先要做的就是提交样本给杀毒软件公司,而不是找安全工具的开发者求助,一个安全工具的开发者,我相信是有能力清除病毒的,但我同样相信,他是没有精力去做这些事情的,这种工作不是一个人可以做得来的。
 
D、修改式的触发启动

  修改式的触发启动,主要是指修改原本为正常启动的环节,实现自身的启动,这个与感染式的比较像,但又不同。他们的修改并非大量的,而是有针对性的。

  有修改引导扇区的、有修改系统文件的。修改方法与病毒感染大致相同,就是在正常的指令序列中插入自己调用病毒或木马程序的指令,以实现在自己的启动。

  这种方式隐蔽性很强,但却很难逃过以数字签名验证为主要手段的启动项检查,因为一旦系统文件被修改,即不再能通过数字签名验证,前面提到的修改Userinit.exe的木马就是这样的一个例子。

  这种方法启动的木马,还使得清理起来比较困难,因为他们修改了系统文件,需要用原有的文件进行还原性的替换修复,如果手头有系统安装盘还好一点,没有就比较麻烦了。

  狙剑提供了系统文件修复的功能,其实这一功能也是调用的系统本身自带的系统文件修复,只是进行了少许的加工罢了。比如:有的光盘系统安装目录与原版系统盘并不相同,这样,用系统自带的系统文件修复功能时,即使你插入了系统安装盘,也会提示你找不到系统盘,而改进后的就可以手选择安装目录了。再比如,装机器时,有些装机员习惯在机器上拷贝一份安装目录,这样就不用频繁的插入系统光盘了。而这个硬盘上的目录,通常是不能用于系统文件修复的。改进后的多了一个全盘扫描系统安装目录的功能,你可以指定或让狙剑自动扫描安装目录后,再进行修复。

  修改引导区的,现在已经很少见到了,很多杀软都提供了恢复引导区的功能,相反,这种很少见的木马启动方式,安全工具反而很少有提供恢复的。

E、事件触发启动

  呵,分类是我自己分的,名字也是自己取的,是否贴切很难说,大家就凑合着看吧。事件是指当你进行某项工作时,比如:下载与文件关联不同的是这种触发并不区分你下载的是哪一类的文件,也无须打开下载的文件,只要有下载的事件发生,就会触发。

  用过迅雷的朋友可能有体会,一旦下载东西,迅雷就会自动打开,而无论先前迅雷是否已经运行。试想,如果木马也有同样的本事,我们一下载东西就打开木马,那岂不是很可怕?
目前我只发现了迅雷有这种功能,是否还有其它事件触发启动的程序存在,还不得而知。
总之,启动的方式多种多样,手法也是各有不同,想一网打尽几乎是不可能的,只能是尽力的发现、加入、再有发现、再加入。而以上说的也只是常见的,还有一些并不常见的,我也就不多说了,因为没发现有利用的,这里也就不提了,以免被坏人利用。

  下面我们开始聊聊自启动项的隐藏与保护,虽然分成了隐藏与保护,但两者使用的也大多是相同的技术,也就合在一起聊了,能保护也就能隐藏,反之亦然。
 
4、自启动项的隐藏、保护与查杀

  自启动项的隐藏与保护,跟进程的差不多,不外乎还是HOOK,系统提供给程序开发人员对注册表操作的功能函数常用的有如下几个:RegCreateKey RegOpenKey用于打开创建注册键;RegDeleteKeyRegDeleteValue用于删除注册键及注册值;RegEnumKeyRegEnumValue用于枚举注册键及注册值;还有RegQueryValu来获取值。另外还有一套*Ex函数,其实功能都是一样的。

  而系统查看或删除注册键与值时,也是用的上面的几个API。而上面的一些个API是用于应用层的,它们又会调用系统内核中的Nt*系统的功能服务来进行接下来的处理(*代表了Nt开头的那些与注册表相关的系统服务),而Nt*系统服务又调用了Cm*底层功能代码来进行操作,当然了,最终的操作都要实现在HIVE文件上面去。

  进程篇中的SSDT-HOOKSSDT-INLINEHOOK在注册表HOOK时是完全有效的,HOOK应用层的RegCreateKeyRegOpenKeyRegDeleteKey都可以实现注册键的防删除,而HOOK RegEnumKey就可以实现注册键的隐藏,这种HOOK可以对付系统与大多数应用层的安全工具的检查;而HOOK NtCreateKey等则同样可以实现隐藏与防删除且层次更深,而HOOK Cm*系统注册表操作函数,则更加邪恶,且已经有这类程序出现。总之,在注册表操作的任何一个环节进行HOOK,都可以实现隐藏与防删除的目的。
 
  例如:在安装了著名的虚拟光驱程序Daemon Tools后,此工具的驱动会禁止用户删除其注册项,SPTD.sys就是它的驱动。
 
  打开狙剑,选择“扩展功能”à SSDT检查”就可以看到sptd.sys对注册表相关函数的HOOK

  有了进程篇的相关例子,这里就不再细说了,原理都是一样的,还有对Inline-HOOK的检测可以用“内核代码扫描”。内核代码扫描不仅能找到Inline-HOOK Nt*系列函数木马,同样能找到Inline-HOOK Cm*系列函数的木马。只不过HOOK Cm*系统函数的木马层次更深一些而已。

  而如果直接用狙剑的自启动项管理对自启动项进行操作,则无须手动检查与恢复HOOK,狙剑在扫描与清除自启动项时,会自动恢复相关的HOOK(有些HOOK有防恢复机制,也很难用手工来恢复,所以也就没必要非手工恢复它,交给工具去做就可以了)。

  注册表由于其特殊性,使得我们多了一个检查与清除木马自启动项的终极手段,那就是直接操作HIVE文件,当然了,HIVE文件的重要性使得系统对其保护很严密,这对直接操作HIVE文件造成了一定的麻烦,而风险性也进一步的提高。这使得当前绝大多数安全软件,对操作HIVE文件来查杀木马都望而却步,但其效果却无疑是目前最好的。
 
  打开狙剑,选择“其它功能”à “注册表编辑器”就可以打开如上图所示的狙剑注册表编辑器,这个编辑器跟系统自带的那个Regedit.exe最大的不同就是,狙剑注册表编辑器是直接操作的HIVE文件,而没有使用任何的Reg*Nt*Cm*等系统的注册表操作函数,这样,所有的注册表相关HOOK对这里的操作将完全没有任何效果。

  注意看这个:HKEY_LOCAL_MACHINE\SYSTEM键,再与我们上面讲到的,复制System注册表文件后,用Regedit.exe的加载配置单元,加载后的内容是不是一样的?都缺少CurrentControlSet这一个子键。
在左侧的列表中按右键,可以选择“仅显示自启动相关项”,这时与自启动无关的项将被隐藏,方便使用注册表编辑器进行木马的查找。而如何使用注册表编辑器在HIVE级别上清除木马的自启动项呢?
 
  仍然以我们上面用到的系统还原的驱动为例来说明,找到这个键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sr。注意在右则,是这个驱动的注册内容,在上面按右键,可弹出操作菜单,里面提供了几个功能“清除项值”、“修改项值”、“修改项名”。
l清除项值:这个功能用于一般的自启动项,结果是会将“数据”那一栏的内容清零。比比如我们可以将ImagePath一项的数据清零,那么对于一般的驱动来说这个操作就可以禁止驱动的加载了。

l修改项值:这个功能是修改“数据”那一栏的内容,这个用来做什么呢?呵,充分发挥想像,可以做很多事情。比如:将Start那一项的值改为4 ! 为什么改为4呢?如果上面注册表基础知识那一章看得仔细就应该知道,改为4是禁用此驱动的意思。或将ImagePath一项的数据中原来的Sr.sys改为:SS.sys 只改了一个字母,但驱动的加载是铁定会失败的,因为系统会在加载时努力的寻找SS.sys,结果当然是找不到了。

l修改项名:这个修改的是第一列的项名字,也就是“StartImagePath……”等。呵,如何用,我就不多说了,相信也不用我多说了。项名字都是固定了,稍加改动就会使得系统认为这是无效项。
 
  操作HIVE无疑是最底层的也是功能强大的,但用起来肯定不如使用自启动项管理方便,所以,一般情况下,这个是用不到的。

  但一旦遇到变态的木马时,有这个功能,会让我们感到心里有底。比如:一旦清除木马的启动项,系统马上就蓝屏的情况我就遇到过,这是木马变态般的自我保护,而其保护的基理就是注册了注册表改变通知的消息,一旦其注册表项被改变,他就会接到系统的通知,而他一旦接到通知,就会马上使系统崩溃,让我们对其所做的修改无效。

  为什么马上系统崩溃就会使修改无效呢?这是因为系统的缓存机制在起作用,正常情况下,我们的修改只体现在了缓存中,系统通常是5秒钟为间隔的将缓存中的数据向磁盘中更新,而修改后马上崩溃,将使得系统来不及向磁盘中写入修改后的信息,导致修改无效。(后面删除文件一章中我们还会讲到这个。)
对这个变态的木马,我的处理,只是简单的将其“Start”中的值改为了4,重启系统后,它就自然死亡了。原理也很简单,直接操作HIVE文件绕过了系统所有的注册表操作环节,系统也不知道我们做了更改,即然系统都不知道,木马自然也得不到通知了。

  总之,越向底层走,功能越强大,但操作就越不方便,风险也就越大。像狙剑的“终极修复”就是一个例子。终极修复其实也是一个操作注册表文件的例子,在系统初装时,系统会在Windows\Repair目录下,保存一份注册表HIVE文件的完整备份,这是最原始的也是最简洁干净的注册表文件。

  终极修复利用的就是这个备份的注册表文件,用这一套文件取代现有文件,将会使得系统的全部配置回复到初装系统时的状态,那些木马病毒的自启动项自然也就不存在了。回复后的系统将是高效的、简洁的、干净的。好像微软的官方网站上也曾有过利用这种方法修复崩溃系统的思路,但现实中,却偶有修复后,无法进入系统的情况发生。原因肯定是安全相关的,但具体机理却一直不清楚,微软在安全方面的确开放的资料很少很少。

  因为这种风险的存在,使得这种修复被灌以了“终极”这个名字,终极的意思就是最终的手段,不到最后关头切勿使用。而有的朋友看漫画看多了,认为终极就是最利害的意思,为此强烈批评狙剑的终极修复其实原理很简单,不配终极这个词,这实在是让人无言以对。

  至此,自启动项的内容我们就聊完了,下面我们准备继续聊的就是文件篇。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多