首页
论坛
专栏
课程

[原创]恶意代码的特征的定义和提取

2012-9-21 20:59 6588

[原创]恶意代码的特征的定义和提取

2012-9-21 20:59
6588
一.恶意代码特征的定义
多年来,各大杀毒软件公司和网络安全公司都一直致力于恶意代码的检测。随着杀毒与反杀毒的不断的博弈,杀毒技术取得了长足的进步。但是不管技术如何发展,都要依靠恶意代码的特征进行检测。
虽然这项技术已经应用多年,但到目前为止,恶意代码的特征依然没有一个明确的定义,这与计算机技术的高速的发展是直接相关的。结合网上的不明确的定义以及我的理解,我将恶意代码的特征定义如下:恶意代码的特征就是它所特有的、非恶意代码所没有的特征。
看到上面给出的定义,应该有不少人会发笑:这简直就是一句废话。事实的情况就的这样:恶意代码的特征有时候是很难确定的,因为从本质上来讲,恶意代码与非恶意代码一样,都是一段代码,有很多的共同之处,所以要区别本身就是很难的;而且随着病毒变种的发展,恶意代码的特征变得不是那么明确,特征变成了一系列恶意代码的特征,抑或多种恶意代码同时拥有一种特征。
给出了上面的定义,并不能很好的解决问题,我们需要将问题继续细化。纵观恶意代码检测方法,不管是早期的特征码匹配法,还是后来发展起来的虚拟机技术、基于语义的恶意代码检测算法,使用的恶意代码的特征无外乎两种:恶意代码的特征码以及恶意代码的行为特征。
恶意代码的特征码就是从恶意代码体内不同位置提取的一系列字节,杀毒软件就是通过这些字节及位置信息来检验某个文件是否为恶意代码。
恶意行为我们定义为是多个不重复的内置恶意动作和一组有先后顺序的扩展恶意动作,这就是恶意些行为的描述。
有了以上两个定义,我们一下了变得豁然开朗,抽象的概念变得具体化。这两种特征理解起来也非常的浅显。
反病毒这个行业和人类社会定罪什么其实是非常接近的。首先看一下人的指纹技术,指纹技术第一步初犯的时候截取指纹,就像我们发现了一个病毒,截获它的样子,然后再犯的时候就可以从指纹库提取指纹,然后对照一下,确定到底是不是病毒,所以说指纹技术应该是特征码技术的鼻祖了。
而恶意行为检测类似于当今的法律。第一步首先把程序看成一个人,接着就可以制订适用于这些人的法律,必须是适用于这些人的而不是我们人类社会的法律,第三监视这些人的动作,第四把这些动作整理归纳、搜集,最后再根据法律,就是刚才适用于这些人的法律来判定这个人到底是好是坏过程,思维的逻辑也非常的简单。
有了以上两种定义,我们要做的应该是怎么把以上的想法变成实际可行的动作?
二.恶意代码特征的提取
有了以上的理论指导,我们就应该将它付诸于实践。必须指出的是,特征的提取方法并不是一成不变的,而是随着技术的发展和现实安全情况循序发展的。
恶意代码特征码的提取
恶意代码的特征码识别技术是一项非常传统的检测技术。在病毒查杀刚刚起步时,应用的就是这种技术,只不过是比较特殊的一种用法:整个文件进行比对。由于当时的病毒的种类和数量都很少,所以杀毒软件将整个文件与样本进行比对,若相同则认为是恶意代码。那么你肯定会说:这种方法实在太弱智了,只要对文件做一点点修改,杀毒软件就无法查杀。但是这种低级的方法并不是没有用,比如当一种病毒大流行时,杀毒软件公司没有能力在短时间内找到很好的解决办法,那么这种最原始的办法可能就变成了最有效的办法。
但是随着恶意代码技术的不断发展,恶意代码有了自我变异的能力,种类和数量也成指数增长。这种原始的方法不管是从速度上还是准确性上都不再满足要求,于是就有了现在的恶意代码的特征码检测法。
首先我们必须论证一下特征码检测的合理性。从哲学的角度说,对于每一个个体都有自己的个性,而每一类事物也应该有共性。特征码检测就是基于这样一个思想。每一种恶意代码都应该有一个或多个部分是与其它不同的,如果我们能把它们找出来,那么它们就可以作为这种恶意代码的特征;一个特征码或多或少的可能造成误报,那么我们可以从中提取出3段或更多特征码,这样不仅可以减少误报,也可以大大提高检测的准确性。
基于上述分析,我们可以总结出:特征码是只有该(类)恶意代码才可能会有的串一串二进制字符串,这字符串通常是文件里对应代码或汇编指令的地址,一般提取2个以上的代码段,有时会直接采用入口点的代码段来制作特征码。
我们当然需要一个结构来描述和存储我们所提取出来的特征码,例如:
{BS_PHY_FILE,0,32,0x58,0x35,0x4F,0x21,0x50,0x25,0x40,0x41,0x50,0x5B,0x34,0x5C,0x50,0x5A,0x58,0x35,0x34,0x28,0x50,0x5E,0x29,0x37,0x43,0x43,0x29,0x37,0x7D,0x24,0x45,0x49,0x43,0x41,}
它表明这是一个简单文件特征,特征起始地址0,特征长度32,后面32个字节是具体特征值。
有了定义,有了描述结构,我们需要一个特征码提取法:
1.获取一个病毒程序的长度,根据长度可以将文件分为几份,份数根据样本长度而定,可以是3~5份,也可以更多。
2.每份中选取通常为16或32个字节长的特征串。这里一般要用到查重算法,从大量的恶意代码样本中提取相同的部分,这部分自然应该是特征串。
3.如果选出来的信息是通用信息,即很多文件该位置都是一样的信息,那么舍弃,调整偏移量后重新选取。
4.如果选取出来的信息是全零的字节。那么也要调整偏移后重新选取。当然调整的偏移量多少可以人为事先规定,也可以自动随机调节。
5.最后,将选取出来的几段特征码及它们的偏移量存入病毒库,标示出病毒的名称即可。
上述就是一个特征码提取的基本方法。刚开始的特征码提取工作都是由恶意代码分析人员人工提取的,但是随着恶意代码的急剧增长,手工已远远不能满足要求,于是有了自动化的特征码提取器,这就需要对上述的基本方法做一些改进。

图1. Kv300中的特征码

有了检测方法,相应的对策也就相继出现了。模糊变换、等价指令替换、加壳以及花指令相继出现。这些都给特征码检测技术带来了一些麻烦,于是相应的脱壳、去花、模糊匹配等技术也被加到了特征码检测技术中。
特征码检测技术的优点非常明显:简单、快速、准确,误报率很低;但缺点也是显而易见的:相应的检测必然滞后于恶意代码的出现,只有有了恶意代码的样本才能完成特征的提取;更要命的是,随着变形技术的不断发展,使得检测难度越来越大,特征码检测技术变得越来越复杂,越来越吃力。
人们需要一种新的方法和技术来帮助或取代特征码检测技术,以适应互联网环境下愈来愈严峻的安全形势,于是基于行为的恶意代码检测技术应运而生。
三.行为特征的提取
其实行为特征检测法才是最原始的检测方法。最初的时候,我们总是根据一个代码的行为来判断它是不是恶意的,这也符合对恶意代码的定义。但是由于当时的理论和技术水平所限,不能很好的用计算机来完成这项复杂的工作,所以没有成型。随着各项技术的不断发展,这种基于行为的恶意代码检测技术也变得越来越成熟,成为了现在广泛使用的技术。
既然是基于行为的恶意代码检测技术,那么就自然要有行为特征。
首先,我们必须搞清楚什么是恶意行为特征。一个孤立的行为是不能作为恶意行为特征的。比如修改注册表,正常的软件也可能做出这样的动作。因此,恶意行为我们定义为是多个不重复的内置恶意动作和一组有先后顺序的扩展恶意动作。
然后,我们必须搞清楚哪些应该是我们关注的内容。一般来说,我们监控的行为包括以下几个部分:
修改注册表启动项(RUN、GINA)
修改关键文件(PE文件、系统配置文件)
控制进程(启动、关闭、修改进程)
访问网络资源(创建socket、对外发起连接)
修改系统服务(创建、修改、关闭系统服务)
控制窗口(隐藏窗口、截取指定窗口消息)
最后,我们必须构建一个恶意代码的模型出来,界定具有怎样恶意行为才是成为恶意代码。这个应该是最重要的,也是最难的。在此我提出两种方法:
1.基于状态状态机的检测模型
我们可以将我们监控的行为构建一个状态机模型,然后我们监控这些行为,当这些行为的发生满足状态机时,我们就可以认为它是恶意的。
例如,当一段代码首先开放了一个端口,然后向主机发送了一些数据,最后创建文件、写文件,并执行了这个文件。这样一系列连贯的动作按顺序发生,我们就可以认为这个程序是恶意的。

图2. 一个基于状态机检测模型的示例

2.污点跟踪法
我们可以将某些关键数据或部位作为污点,当这些被修改时,我们可以验证这次修改的合法性。若非法,则说明这个程序应该是恶意的。

图3. 内存栈结构

例如,在缓冲区溢出攻击时,常常采用覆盖返回地址的方法。因此,在call时,我们可以将返回地址做一个备份,当ret时,我们将此时的返回地址和我们记录的返回地址做比对,若不相同,则说明发生了缓冲区溢出,很有可能是一个缓冲区溢出攻击。

综上所述,不管恶意代码检测技术如何发展,恶意代码的检测都是要依靠恶意代码的特征来检测的,而恶意代码的特征只有两种:特征码和特征行为。
随着恶意代码检测理论和技术的不断发展,恶意代码的特征的提取方法也将不断改进,变得更加准确,更加智能化,以适应日益严峻的互联网安全问题。

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

上传的附件:
最新回复 (16)
qiuailang 1 2012-9-28 20:36
2
0
求回复,求邀请码啊!这个写的有那么烂吗?
ryomi 2012-9-29 09:02
3
0
每天挂机赚钱自己买邀请码中......
airyaire 2012-9-29 11:37
4
0
我也是每天挂机中
qiuailang 1 2012-9-29 15:43
5
0
这是一个非常漫长的过程啊!
uukn 2012-10-4 16:48
6
0
只能这样吗?比如高危api拦截,不要执行了在看行为,那不就要弄一个虚拟机
hanhanamm 2012-10-5 04:55
7
0
每天挂机赚钱自己买邀请码中......
lisalan 2012-10-5 10:34
8
0
昨天挂了 6小时,结果只有2KX入账,无比心痛中
活着回来 2012-10-5 11:20
9
0
看不懂或不吸引人的帖子就没回复……
D你!
qiuailang 1 2012-10-26 10:36
10
0
什么意思?没太搞明白!可以和我讨论啊!
地狱怪客 2 2013-3-5 09:39
11
0
这个不错。。。真的
abcdeg 2017-3-13 19:05
12
0
楼主有特征码提取器吗
nchxmoon 2017-3-16 19:45
13
0
厉害
forestjade 2017-3-18 09:18
14
0
写得挺好的,看完了也算是对我解惑释疑了。
Hao_O 2019-9-22 17:17
15
0
楼主,如果想去具体实现对特征码的提取,可以去学习什么内容?
pureGavin 2019-9-22 18:38
16
0
Hao_O 楼主,如果想去具体实现对特征码的提取,可以去学习什么内容?
我之前做反病毒的时候主要是提取yara的特征,就是把文件用十六进制编辑器打开,然后找到有代表性的代码或者字符串(一般是两个都要的)
Hao_O 2019-9-24 00:24
17
0
非常感谢楼主!
我还想问一下,对抗特征(白特征)是如何从正常软件中提取的,这个有具体的一个代码吗?
游客
登录 | 注册 方可回帖
返回