您的位置:首页 > 其它

病毒分析流程总结

2015-04-27 15:48 148 查看
        前段时间拜读了《恶意代码分析实战》一书,算是对整个病毒分析的流程和常用方法有个大致的了解,现在总结一下,也算是给自己做的一个笔记。

        首先,病毒分析师必须具备以下知识:编程、汇编/反汇编、逆向分析、PE文件结构以及一些常用行为分析软件。下面开启我们的旅程。

       

        一、在一个已经感染了病毒的机器上如何找到病毒文件?

               找到病毒才能对其分析,找到病毒文件就是就是分析的第一步,一般来讲,病毒运行必然会创建一个进程,而这个进程就是我们找到他的突破口,一个打开的进程,可以通过任务管理器右键打开文件所在位置来找到其映像文件的地址,这样就能找到病毒文件了

               但是,现在的病毒越来越精明了,你可能会遇到一个病毒将其自身的进程隐藏了,一般来讲,隐藏进程的方式就是“脱链”,在PEB(进程环境块)中 有三条链表,其中一条链表的指向进程,该链表的每一个元素代表着每一个进程,如果想对某进程隐藏,那么进行“脱链”(即删除聊表中的一项)即可,不要奇怪,脱链操作只是在链表中删除,系统中还是存在该进程的,就好像你用CloseHandle关闭一个进程句柄,但是该进程仍然继续运行一样。对于这样一个隐藏了自己的进程,可以用Rootkit工具,如Xuetr、冰刃等进行查看,当然可能还有一些暴利查进程的工具也是可以查到的。

               好了,找到了病毒文件,下面可以对其进行分析了,分析病毒一般是要在虚拟机中运行,如果你不怕死,也可以在自己物理机上跑起。。。

      

        二、如何通过静态基础分析获取一些相关信息?

               拿到一个程序,先别着急盲目的跑起,我们先获取一些基本的信息,这些东西可能会对你在后面的分析起到很大的作用。

               首先,我们用PEID查看一些基本信息,如果没有壳,也没有隐藏导入表,那么你运气还不错,快看看导入表吧,一个程序想对你的电脑进行某些操作,那么它必然会调用系统API,而导入表可以告诉我们这个程序调用了哪些API,我们凭借这些导入函数,可以大致猜测一下这个程序作了什么,例如我们看到CopyFile,就可以猜测一些这个程序是不是自我复制了等等。总之,导入表可以告诉我们太多太多的信息,有经验的病毒分析人员基本可以凭借导入表就能确定分析方向了。但是,这些只对没有加壳和没有隐藏导入表,并且是正常调用API的病毒有效,如果加了壳,你可以先尝试脱壳再来查看导入表,更郁闷的是有些黑客为了隐藏调用函数,使用了GetProcAddress配合函数指针来调用API,这样的话,导入表就无法对我们提供有效的帮助了。即便如此,这仍然是病毒分析的第一步。

                可以对我们提供有效信息的不是只有导入表,查看字符串也经常会有一些意外收获,这个时候我们可以使用微软提供的控制台工具Strings查看程序的字符串信息,通过查看字符串,可以获取很多提示,比方说看到一个网站我们就可以猜测这是否是一个下载者?看到一个IP我们就可以猜测这是否是一个远程控制软件?当然,查看字符串的前提跟查看导入表一样----没有加壳,否则这些信息很可能被隐藏了,可以考虑脱壳后再来查看。

        三、如何确定病毒究竟干了些什么?

               这个时候那就需要用到动态基础分析了,别犹豫,上虚拟机,跑起来看看吧,跑之前我们先要打开一些行为监控软件,最常用的是微软提供的Process Monitor,这款软件功能非常强大,可以监控到注册表、文件、进程、模块、网络、用户等等等等信息,用之前先要对其设置一下,按CTRL+L打开过滤对话框,选择名称,然后输入你要分析的病毒的名字,然后添加包含。

               PM监控获取的信息太庞大了,不利于我们观察,我们要对齐进行一些筛选,一般来讲,凡是涉及打开、关闭、查询、枚举等这一类不会对具体内容进行影响的操作我们将其过滤掉,重点观察设置、写入、删除、复制等这些有实际影响的操作,然后可以根据行为来进行分析它究竟干了些什么,当然你也需要时刻关注他的进程树,微软提供的另一款工具Process Explorer可以很好的做到这一点,注意观察,看看该程序是否打开了其他子进程,往往很多病毒并不在自己的进程里做什么,而是生成另一个文件或者建立另一个进程来操作。

         四、逆向分析

               对于很多病毒,我们只需要通过上面的操作来确定他干了些什么就可以了,但是有一些情况我们必须对其进行逆向剖析,第一种情况就是感染型病毒,普通的恶意软件,我们可能只是需要知道他们干了些什么就行了,但是对于感染型病毒,我们还应该知道他们具体感染了宿主程序的哪个部分,这样才能对被感染程序进行修复,而这些只有通过逆向分析才能获得。

               另一种情况就更加的体现了行为分析这种方式的弊端了,那就是有些病毒的恶意行为不是一直都表现出来的,可能需要特殊条件才触发,比如等个一两年,再比如一些特定的条件才触发,这个时候我们也只能通过逆向分析来对其进行剖析。

               至于逆向分析的方式,有静态的IDA和动态的OD,一般来讲,至于用哪个,那就得结合实际情况了。

        五、脱不掉壳的程序怎么办?

               脱不掉壳的情况也分好多种,如果是一般的墙壳,虽然脱不掉,仍然可以用OD动态分析,在一些关键的API下断点,看看他传了哪些参数猜测一下做了什么。

               但是对于vmp这样的虚拟机壳,那就只能进行动态分析草草了事了,如果vmp恰好又是感染型的呢?如何得知他究竟感染了文件的哪个部分?解决的方法就是让他感染一个文件,分析该文件感染前和感染后的区别吧。

        总结:以上这些只是常规的一些分析流程,但是具体分析起来,各种意料不到的情况,曾经面试的时候有人问我,病毒分析师最重要的是什么,我就回答了俩字"感觉",很多时候是靠感觉猜的,当然这个感觉是建立在知识和经验的基础上。另外,在实际的反病毒过程中,经常会碰到反调试和反虚拟机等各种情况,那些都是经验之谈了,这里不再赘述,写到这里也累了,收场吧。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  病毒分析