首页
社区
课程
招聘
[原创]病毒分析之我见
发表于: 2011-9-12 03:35 163992

[原创]病毒分析之我见

2011-9-12 03:35
163992

这两天逛了几个国内知名的反病毒的论坛或是版块,不知道是各位同行没有兴趣讨论还是为什么。
病毒分析报告看到了不少,可是难道我们真正需要的只是一个答案?一份报告吗?或许我们更需要的是如何提高自身的分析能力。我们都想有更高的收入,但对于一个公司来说,付出更高的回报也许不是问题,前提是员工能创造更大的价值,怎样才能让自己的逆向能力合法的转化为更高的回报呢?也许这个帖子能有些帮助

先声明一下,都是些个人看法,欢迎有兴趣的朋友讨论,权当抛砖引玉了

通常情况下,病毒分析需求可以归为以下3类:

1. 练手
2. 快速响应
3. 深度分析

针对不同的缘由,我们分析的入手点及侧重点又会有所不同

先从练手开始。为什么要练手?纯爱好的不在此文讨论范围呢。如果是工作需要,或是为将来的工作做准备,第一个该考虑的问题是“选材”。
不是每个样本都适合用来练手的,如果要我来推荐,我会选以下几种样本。

下载器类的木马(Downloader),原因很简单,普及。这类型的木马会在日常工作重复出现,虽然大多数情况下都不需要做完整的白盒分析,但这会是一个好的开始。
机器人类的后台木马(Bot),这类型的木马通常都是受利益驱动的,会有越来越多的专业开发者加入此类木马的开发,所以有可能是最复杂也是最不能回避的一类威胁。
信息收集类的木马(Infostealer),这类型的木马同样可能是受利益驱动的,但相对而言,前者可能造成的后续危害更大,不过此类威胁也不能忽视,例如盗窃银行网游帐号的,或自动转账等等。
网络蠕虫(Worm),worm可能有很多种传播方式,邮件,im, p2p,文件共享,usb等等,单纯从练手的角度考虑,每种类型的最好都接触一次。
文件感染型病毒(File infector virus),同上,病毒感染和传播也可能有多种途径,但是。。。。个人以为最多拿一个样本熟悉一下就够了。为什么?因为稀少,有必要为不到1%的潜在问题花费大量时间去准备吗?个人认为是不值得的,做好其他99%的工作,剩下那1%完全可以在工作中积累和弥补
还有一类非常重要,但至少在练手初期不推荐的木马,rootkit。。。没必要在刚开始的时候折腾自己,至于对于其他诸如MBR,BIOS,各种算法等等的作为爱好研究一下还好,但如果浪费很多精力用来练手。。。不划算

个人以为接下来该考虑的问题是“怎么练”。
对于以工作为目的的病毒分析而言,最重要的是什么?答案很简单,快
你需要快速的识别提交的样本是否是病毒,是哪一类病毒,应该做什么类型的检测或是修复等等
所以对于“怎么练”这个问题,要做的第一件事是快速识别,而对于快速识别来说,没有什么比在虚拟机或是专用的病毒测试机器上运行它更快了,当然运行+监视结果不是个100%准确的办法,可能有的威胁需要条件触发等等。鱼和熊掌不可得兼,重要的是在最短的时间内尽可能多的作出响应。除此之外也还有一些可以考虑的手段,例如观察字符串,调用的API等等。快速识别虽然看起来并不是什么技术含量很高的步骤,但必不可少。

接下来这步不是这里能多做讨论的,怎么加,加什么类型的检测与修复代码,这一步不同公司有不同的引擎,有针对有选择的练习可以事半功倍

回到大多数朋友口中的逆向或者说白盒分析来,怎么锻炼出色的逆向病毒能力呢?

除了毅力+细心之外,我想提几个需要注意的问题。

为什么要逆向病毒。逆向病毒和逆向其他类型的程序完全不同,你需要的是熟悉了解病毒的各种机制,然后有针对性的做修复或是给客户提供建议如何预防。
这里首先要提出来的是“壳的问题”。
熟悉越多的壳,对你的工作会越有帮助,但如果哪位朋友为了分析病毒去学习脱壳,那就有些南辕北辙了。为什么?因为我们不需要一个脱完壳后还可以运行的病毒,如果能脱壳当然好,但即便不能,我们也不是不能分析了。
1. 运行 2.选择合适的断点 3.挂起可能存在的反调试监控线程 4. 然后挂上去调试,或是把运行的程序从内存中dump出来静态分析等等,方法可能有很多,最重要的是怎样快,就怎样好。另一方面,几乎所有的高危威胁,都不会只用公开的壳,所以过于在意怎么脱壳不见得会有多少帮助

在壳之后,我想问的是“静态”还是“动态”?这不是一个有100%答案的问题,具体问题具体分析,但原则上来说,能静态搞定的,没必要动态调试。静态不容易理解的,再试着调试。

接下来的问题是一些新入行朋友常纠结的“F7的问题”。步入Step into是必需的,但看到call就Step into绝对不是个好习惯。一个出色的逆向工程师最与众不同的是会选择什么时候F8(Step over)什么时候F9(Run),以及在需要的时候Alt+F7(load script),有时候某个函数看起来很复杂,步入分析可能要很久,但如果学会猜测+验证,也许一个简单的F8就搞定了。我们不需要知道每个函数是怎么实现的,我们只需要知道病毒想干什么,会干什么。这个猜测不是一天两天能练出来的,但如果你试着坚持下去,慢慢的会感受到它的妙处

除此之外,不要过度依赖于某个工具或是插件,常见的工具病毒作者也知道,如果有针对的做了处理,部分过度依赖工具的朋友没准就被忽悠进去了

最后再聊两句深度分析。深度分析通常会消耗掉非常可观的时间,如果不是客户需求,或是某一类非常活跃的威胁,不值得。深度分析也并不仅仅包括逆向,甚至可能会包含地下网络的追踪与调查,域名与服务器的分析,等等,有技术相关的,也有不相关的。本文不讨论其他内容,对于完整的逆向分析而言,除了上面提到过的之外,还有以下几点建议:

1. 在条件允许的情况下,不妨找一些同一家族的早期变种用于参考,这些早期变种或许可以帮助你更好的理解正在分析的新变种。例如Spyeye, 近期版本Spyeye不再直接使用字符串比较,而是不可逆的校验码,换句话说,如果没有原始字符串,要理解起来还真会浪费一些时间
2. 不是每个病毒都可以完美脱壳后再分析的。例如Zeus,Zeus解密使用到的一个密钥是基于原始文件第三节的虚拟地址计算出来的,无论多完美的脱壳,这个值肯定会变。
3. 对于复杂的恶意代码,如果静态分析或完整的动态调试都不太容易的话,试着Ctrl+N单调某一个函数未尝不是个办法。
4. 有时间的话,用常见的编译器(例如VC,Delphi,VB等)编译一些程序逆来玩,这样可以熟悉一些常见的编译器函数,例如strlen。
5. 有时间的话,熟悉熟悉各类加密解密,压缩算法, 撞上的时候会省不少时间。
6. 善用google和baidu,参考别人的分析报告并不是什么坏事,但不要依赖,最后的报告必须是基于自己的分析。
7. Olly确实比其他调试器强大,但是如果你的IDA能搞定呢?别忘了IDA随时可以添加备注,一个好的IDB对于以后的工作或许也有帮助,所以在允许的时候,我更推荐IDA

就先到这里吧,希望对各位热爱反病毒的朋友能有所帮助,也欢迎大家讨论或提出更多的问题和建议,:)


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 6
支持
分享
最新回复 (94)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
从火星回来过中秋
2011-9-12 08:04
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哎,我分析能看懂在进行什么数据操作,就是不知程序到底在干什么
2011-9-12 08:29
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
4
在q上已经听乌龟大师讲过一次了,受益匪浅
2011-9-12 08:40
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
5
如果有必要的话,试着分段总结,逐个分析子函数
恶意代码通常目的性较为明确,如果不是少部分大型专业的恶意代码的话,一般都不会太难
对于高级语言开发的恶意代码,可以参考主贴中的一个建议,没事多熟悉常见的编译工具,试着自己写写小程序自己逆,熟悉了以后再看别人的代码会轻松不少
2011-9-12 08:40
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
6
有空多聊聊,互相学习,:)
2011-9-12 08:42
0
雪    币: 416
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我都是跟蹤病毒動作的,而且在很多時候,病毒通常用靜態分析會分析不出東西 = =。

所以我大多都用動態,然後再一一去解決。

IDA我是都沒有再用= =,因為太依賴她,會導致自己的匯編能力降低。
2011-9-12 09:49
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
8
静态练顺手了以后你会发现比动态调试快
至于最后那句话我没看明白,为什么会导致汇编能力降低?
2011-9-12 09:54
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
9
期待下文啊,支持支持
2011-9-12 09:59
0
雪    币: 270
活跃值: (97)
能力值: ( LV8,RANK:140 )
在线值:
发帖
回帖
粉丝
10
学习
2011-9-12 10:04
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
11
不错,学习。。。。方向更重要啊
2011-9-12 10:16
0
雪    币: 1149
活跃值: (888)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
12
lz  说的 能静态的不动态去解决
        优秀的逆向工作者能很有感觉的跟进,或者略过一个call...

这两点我深度认可....好文章.....继续额...额只是个爱好者....
2011-9-12 10:20
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
13
呵呵,n年前我的最爱是softice,但后来慢慢的发现w32dasm能解决的话没必要用softice,再后来又发现ida比w32dasm要好多了
2011-9-12 10:29
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
楼主写一篇经典的逆向心得吧,我们老期待呢 !
2011-9-12 10:37
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
15
之前我也发过一些逆向的帖子,如果你搜索一下可以看到的

但之所以会有这个帖子,就是看到有很多病毒分析,却没有讨论怎样提高的。

逆向这个工作有其特殊性,最需要的就是专研,而不是教程,我写一个教程撑死了也不过是示范一下某一个样本是怎样工作的,但对大家其实不会有什么帮助,毕竟你工作中遇到的样本形形色色。
2011-9-12 10:45
0
雪    币: 7161
活跃值: (1175)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好文章,学到了很多!
2011-9-12 10:55
0
雪    币: 292
活跃值: (347)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
看见无尽样本已经迷失了。
好文谢谢!!
2011-9-12 13:07
0
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
18
那为什么不能够动静结合呢?
2011-9-12 13:18
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
19
mark一下,受教了。
2011-9-12 14:10
0
雪    币: 1099
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
弱弱的问句,如果在病毒分析,要具备哪些技术呢?
2011-9-12 15:24
0
雪    币: 255
活跃值: (49)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
21
顶一下 特别希望大牛们多出 bootkit和shellcode的分析文章 ^_^
2011-9-12 17:26
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我手里有ZeroAccess样本。谁有兴趣写个分析文章啊??
2011-9-12 17:51
0
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
学习学习 看看 逛逛!
2011-9-12 18:33
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
24
相信很多人都分析过,但你真正需要的不是某一个样本的分析结果,而是如何提高自己的分析能力
2011-9-12 18:43
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
25
黑盒不需要什么技术,只需要细心以及熟悉使用各类相关工具
白盒一般来说至少需要汇编及逆向,当然也可能需要更多,一步一步来就是了
2011-9-12 18:46
0
游客
登录 | 注册 方可回帖
返回
//