基于恶意代码的检测技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012.4
9
基于恶意代码的检测技术研究
沈承东1 宋波敏2
1海军计算技术研究所 北京 100841 2华中科技大学计算机学院 湖北 430074
摘要:恶意代码检测是保证信息系统安全的一个重要手段,从传统的特征码匹配到启发式检测,甚至基于神经网络的代码检测,整个检测手段在向着更加智能化更加具有自动适应能力的方向发展,检测系统也越来越具有自动分析与自动学习的能力。
关键词:代码检测;特征码识别;启发式检测;专家系统;神经网络
0 前言
本文通过分析一些常见的检测方法,并通过分析其原理,来判断各种方法的优势和劣势。因为各种新型恶意代码的出现,在识别能力和处理量上,对于检测程序都有了新的要求。伴随着这些变化,一些更加智能化的检测手段相继出现。这些手段改进的一个主要目标,就在于将静态的比对方法,通过知识库中各个点间的相互联系,甚至自动的获取知识分析,来达到检测的目的。这些方法的出现,一方面是应对新型恶意代码的需要出现的,另一方面也是在各种资源成本与检测效益间的平衡中发展起来的。
1 特征码识别法
这是一种最常见的检测方法,它用恶意代码中特有的特征代码检测,这些字节序列是不太可能出现在正常文件中,通过查询比对即可以检测出一批恶意代码。比如依据如下原 则:抽取的代码比较特殊,所以不大可能与普通正常程序代 码吻合。抽取的代码要有适当长度,一方面保证特征代码的 惟一性,另一方面又不要保证有太大的空间。
例如KMP 算法的时间复杂度为 O( m+n ), 如果待检测的特征代码个数为k ,而特征代码平均长度为M ,待检测代码长度为N ,则可以设系统资源消耗为Pay 。
data[] //特征库,字符串数组 for( code ;data[];data++) {
If( Kmp( code,data ))
//通过KMP 算法检查data[]的每一项 {
Do sth; //满足条件,报警
}
}
其最终的时间复杂度为 O( K ·(M+N) ),
Pay=k(m+n)·α(α是一个稳定的系数,它与具体系统有关)。
可以看到,Pay(系统资源消耗)其随着特征代码量k 的增加呈线性变化,其随着k 的增长线性增长。这种检测方法它有一个弱点就是:现今随着恶意代码量呈指数级增长之势,如果要保证安全性,那么配套就需要庞大的特征库,这样就造成检测代码的工作量,伴随着特征库的增大随之放大。与此同时一些新型代码采用了加壳,变形,多态等各种新技术来躲避查杀,这样就更加加重了特征码检测的难度,因此单纯依靠特征码比对,已不足以应对新型代码。并且在恶意代码检测方面,很重要的一点就是,做到早发现,早处置,就 可以减少损失,但这种检测方法属于事后补救方式。同时整个检测系统的可靠性,强烈依赖于特征库的完整性,如果特征库并没有随时更新,其面对新代码也就无能为力。所以,这种方法伴随着时代发展,已经不再很适合应对各种新情况了。
2 启发式检测技术
启发式扫描技术检测程序,实际上就是以特定方式实现对代码行为的检测,通过对代码行为的观测来推测代码动机。从工作原理上可以分为静态启发以及动态启发两种。 启发式实现检测程序可以实现能够分析自动文件代码的逻辑结构,并判断是否含有恶意程序特征,或者通过在一个虚拟
2012.4
10的模拟执行环境中,通过模拟性质的执行代码来判断输入其中的代码其是否有恶意属性,并最终决定处理动作。一般前者被称为静态代码分析,而后者则被称为动态启发式。
2.1 静态启发式检测
其原理在于,恶意代码与普通程序在启动时,它们的行为存在明显差异。利用这个区别,检测程序就可以通过扫描程序的特征指令,并与一般的常规指令比较,观察命中的条数综合起来就可以判别代码是否为恶意代码,这种方法也可以作为特征码识别的一种补充。与特征码识别最大的不同就在于,这种方式判断的依据在于代码的行为特征,而非其他。
比如恶意代码最初的指令却极有可能是一些危险指令例如写盘操作或者解码指令,或者搜索某敏感路径下的可执行程序等等,依据出现这些可疑行径的情况进行分析,同专门的指令库进行比较,则可以判定此代码的恶意属性。依靠专家经验,可以建立一个恶意指令知识库,那么如同特征码库一样就可以通过定期更新的办法维持对一些新型代码的查杀能力。
静态启发式检测,主要可以通过反汇编方式,实现在不执行代码的情况下,通过核对病毒头指令,来达到检测的目的。因为主要查杀的目标在于代码的最开始一段,这样可以省去很多系统资源。
这种方法的资源消耗同特征码识别相比类似,但是他的特征库可以做的更小一些。对比特征库动辄上万的记录,恶意指令库要小上很多,作为一种补充措施它相比起来更加高效一些。但是由于完备性不够,实用效果并不如动态启发好,只适宜于用作补充措施。
2.2 动态启发式检测
动态启发式的原理在于,最初可以假设并不知道某个程序是否带有恶意代码属性,如此就可以先虚拟出一个执行环 境,让代码在其中并模拟执行。如果是恶意代码,代码在模拟执行的时候,就会如期产生一些危险动作。这样一来就可以通过探针发现。它的关键思想是,模拟实验方法以及纠正思想。如图1所示。
图1 动态启发式检测示意图
这种方法的一个关键思路,就是虚拟机制。可以是模拟执行动态监测,或者设置报警诱发装置。它通过虚拟机技术来仿真内存和CPU 以及文件系统和网络连接进而模拟代码的执行过程。又或者采用蜜罐技术设置陷阱门,进而诱发恶意行为而产生警报。这种方法由于代码执行区间在虚拟机中,所以不会在真实环境中威胁用户数据。
由于动态启发式判断技术具有许多其他检测方法不可替代的优势,故而仍然是现阶段检测未知病毒比较有效可靠的方法并得到了广泛的应用。
3 主动防御技术
这种方法检测的原理在于,人们依靠对病毒行为规律分析和深入归纳总结,并结合安全专家判定恶意代码的经验历史,可以提炼出恶意代码识别规则知识库通用规则,并依此模拟人类专家发现新病毒的机制,通过对各种程序执行的动作进行监视,并尝试自动分析程序动作之间的逻辑关系,依靠知识库的知识进行动作识别,以达到主动防御的目的。在具体的行为检查方面,以检测工具具体利用的方法不同,可以大致分为基于专家系统的检测和基于神经网络的检测两种。整个解决办法的模型如图2所示。
图2 主动防御检测模型
3.1 专家系统检测
专家系统是一个智能计算机系统,它的知识库依靠某个领域专家水平的知识与经验,即能够利用人类专家的行业知识和解决方法。亦即专家系统是一个具有大量的行业知识经 验的计算机系统,专家系统与传统的计算机程序系统有着完 全不同的体系结构,通常它由知识库、推理机、知识获取机制、解释机制和人机接口等几个基本独立部分所组成。专家系统依靠知识库和推理机,在用户输入后推理分析得出结论,并产生知识。而推理机用来将用户输入的信息与知识库中各个规则进行匹配比较。这种方法应用到在恶意代码检测
领域,病毒代码即为输入,由专家系统推理产生代码的行为判定,如图3所示。