基于n-gram模型的恶意代码检测系统_第1页
基于n-gram模型的恶意代码检测系统_第2页
基于n-gram模型的恶意代码检测系统_第3页
基于n-gram模型的恶意代码检测系统_第4页
基于n-gram模型的恶意代码检测系统_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于n-gram模型的恶意代码检测系统

0检测方法设计随着越来越多人使用互联网服务,网络已成为人们日常生活中不可或缺的一部分。不同于早期只能进行简单通信交流的网络,如今的Internet上可以进行各类交互活动,其中就包括电子商务。正因为网上商品流通以及网上银行的存在,许多恶意攻击者就利用恶意软件来达到他们获取经济利益的目的。Christodorescu等人分析恶意代码的方法一般可分为静态分析方法与动态分析方法,两者的区别在于被分析的这段程序、软件是否需要执行。顾名思义,静态分析指的是不需要执行程序这类情况。如采用反汇编等不执行恶意代码的分析方法对恶意代码进行分析,常用的如IDA动态分析,指的是执行一个程序并对其运行过程中的活动进行分析。动态分析的方法有函数调用监控、函数参数分析、信息流追踪、指令追踪等多种方法本文的主要贡献如下:(1)提出了一种改进的N-gram算法,通过添加特征值的出现频次信息,能提取出更加有效的N-gram特征;(2)提出了恶意代码动态行为特征分析检测的基础框架,包括虚拟安全环境的搭建、恶意样本的获取及其动态特征提取模块、特征模型的建立及分析模块;(3)利用多种机器学习方法对得到的n-gram特征进行了分析检测,得出了准确率达90%的检测效果。1相关工作恶意软件检测方面已经有多种研究技术。Chess等尽管传统的基于签名的恶意软件检测方法在一些研究工作Canali等2提高算法2.1模型的n-gram一个n-gram指的就是一串标记中的一段子串,该子串含有n个连续的标记,此处的标记在不同的应用场景下有不同的意义。n-gram已经被应用到众多领域,最早应该是应用于文本分析中,文献将一串数据转化为n-gram,这样可以将这串数据表示为向量形式,从而能更好地与其他数据串进行比较。另外,我们也可以将两组数据的n-gram分布进行比较从而判断这两组数据的相似度。一组数据的n-gram分布指的是这组数据中所有n-gram的各自个数。在文献上面所举的例子n-gram中的n=2,事实上,n可以有不同的大小,当n=1时,指的就是unigram,也即是1-gram,当n=2时指的是bigram,当n=3时指的是trigram,n不小于4时一般就称为n-gram。n-gram模型在多种领域均有所应用,如n-gram用来对程序活动建模从而检测软件漏洞以及识别网络载荷中的恶意代码,其他情形还包括对恶意代码感染文档的检测以及基于触发系统调用的恶意进程的检测。本文拟采用的API调用作为n-gram中的标记。程序运行时会调用一系列的API调用,使用窗口大小为n的滑动窗口对单个程序的API调用序列进行扫描,每次窗口中的长为n的序列就为一个n-gram。举一个例子来说,一个应用程序按以下顺序调用了7个API调用:5,7,3,11,5,7,3。如果此处n=3,那么对于这个应用程序的n-gram模型即为集合M={<5,7,3>,<7,3,11>,<3,11,5>,<11,5,7>,<5,7,3>},以上的数字代表的是API调用,相同数字即表示相同的API调用,由该程序的3-gram集合可知集合中的元素可以相同,上例中3-gram<5,7,3>即出现了两次。在获得了部分恶意程序以及部分良性程序的n-gram模型之后,我们可以将所有的恶意程序的n-gram模型合成为一个代表恶意的n-gram模型总集MU=M2.2基于api调用的控制程序设计2.1节介绍了n-gram的基本概念,同时定义了将API调用用作标记时的n-gram以及如何获取代表恶意特征的n-gram。上述方法获得的n-gram特征主要是从直观上代表了恶意代码的恶意性,而且和测试集合中元素的选取也有关系,可能得到的结果中的n-gram并不能代表恶意性,因为仅仅只是出现在恶意程序集合而未出现在良性程序集合中不足以视为特征。Hwang等对于程序单次运行所产生的API调用序列,将其中每一个API标记为类似A1、A2、A3等,这些API调用可以分为以下几种类型:(1)文件管理:涉及文件操作的动作,比如创建文件、打开文件、搜索文件。(2)进程线程:进程线程有关操作,如创建多个线程。(3)注册表:涉及注册表操作的动作,如创建一个注册表项。(4)网络管理:涉及网络连接的操作,如访问某个URL地址。(5)内存管理:涉及内存操作的动作,如为进程创建堆,获取当前进程的一个堆。(6)动态链接库:涉及动态链接库的动作,如载入指定的动态链接库。如2.1节中介绍的例子,如果窗口大小为3,则第一个窗口覆盖了该API调用序列中位于最前的3个调用,即A5、A7、A3,调用A5引发了调用A7、A3,由此即可得到如下的一条改进n-gram规则:上述规则中的c表示置信度,s表示支持系数,w表示窗口大小,f表示最小出现次数。对于规则式(1),s表示的是API调用A5出现的概率,c表示的是A7、A3出现在A5后的概率,可以形式化地表示为s=Prob[A5],c=Prob[A5,A7,A3)]/Prob[A5]。支持系数s表示的是该条规则在所有监测记录的API调用序列中出现的概率,置信系数c表示的是在规则左侧出现的前提下该条规则出现的概率。参数s、c均有一个最小的阈值s0、c0,最小出现次数f表示序列建立成规则需要出现的最小次数。下面通过一个实际API调用序列进行说明,该例子来自于Backdoor.Win32.Agent.egt实际运行时产生的序列。API调用A5在这里为CreateFileA,而其后的A7、A3分别为WriteFileA、CloseHandle。当窗口大小为3时,CreateFileA后紧接着发生WriteFileA、CloseHandle的置信度为c=0.16,该条规则的支持系数为s=0.01。最小出现次数f=10,表示需要达到10次该条规则才能生成,放入规则库。通过定义联合规则,我们可以获取一个API调用序列内部各调用之间的相互关系,如下式所示,其中L3检测基本架构本节将描述我们如何进行恶意代码特征提取以及特征建模,并在此基础上提出了一个完整的恶意代码动态行为特征分析检测基本体系框架。为了能获得恶意代码的动态行为特征,我们使用了虚拟机环境,虚拟机使用的是VirtualBox,虚拟操作系统为WindowsXP,之所以选择虚拟环境是因为在进行动态运行恶意代码时实际主机可以避免影响,虚拟机具有存储快照的功能。即使在虚拟机中运行的恶意代码对操作系统产生了修改甚至是破坏行为,使用快照功能存储的备份也可以将系统快速恢复到运行恶意代码前的状态。事实上,虚拟机的这一功能除了能保护实际系统不被修改破坏之外,还可以保证不同恶意代码运行的环境是完全相同的,从而保证了实验结果的可比性。事先通过OpenMalware由于提取的原始特征含有信息量较大,在进行下一步处理之前需要删除无用信息,恶意代码动态行为语义特征主要体现在调用的API上,故只需提取其中API项即可,且API项中只需API名称,不考虑API参数。图1所示即为本文提出的恶意代码动态行为特征分析检测基本架构。第一步搭建用于动态运行恶意代码的虚拟环境,前文已经叙述虚拟环境对于检测恶意代码的作用。第二步于虚拟环境下执行恶意代码,并提取恶意代码动态行为语义特征。本文选取恶意代码执行期间调用的API序列作为语义特征。第三步是使用提取的语义特征进行模型建立,即将原始的、未组织的语义信息元素建立为加工过且结构化的语义模型。本文对恶意代码运行期间的API调用序列进行加工,抽象为能代表其语义特征的改进n-gram。第四步为建立模型库,进行相似性检测。可采用的检测方法根据特征不同而有所不同,如使用机器学习(决策树、k-近邻、神经网络等)方法进行检测。4结果分析4.1实验结果验证以下实验采用了数据可以分为两部分,即恶意程序部分及良性程序部分,其中恶意程序共分为6类,每类20个,良性程序共20个。在恶意程序检测研究方面暂时没有标准的数据集,实验中所测的恶意程序样本均来自OffensiveComputing由第3节系统架构中描述可知,APIMonitor监测到的原始数据项比较多,需要通过进一步的筛选从去除无关的特征,得出API数据项部分,由于只需要API名称,所以也去除了API参数。N-gram在实验中n取值为3,所以每一个特征项为一个3-gram,即顺序相连的三个API名称。通过对以上样本检测结果的分析,最后得出的特征项共有492个。K折交叉验证在机器学习中应用很多,本实验也采用该方法来进行实验结果验证。这里k取值为10,即所有的数据会被划分10次,每一次均分为10份,其中9份用作训练集,1份用作测试集。用来进行分类的工具为Weka为了检测分类器的有效性,我们使用TPR、FPR、Precision、F-Measure几个指标进行衡量。TPR,即TruePositiveRate,本实验中表示所有恶意代码能被检测出的概率,用公式表示即为TPR=TP/(TP+FN),其中TP为正确检测到的恶意代码数量,FN表示被判定为良性程序的恶意代码数量。FPR,即FalsePositiveRate,表示所有良性程序被检测为恶意程序的概率,用公式表示即FPR=FP/(FP+TN),其中FP为被检测未恶意程序的良性程序的数量,TN为被正确认定为良性程序的数量。Precison,即准确率,表示被检测为恶意程序的程序中真正是恶意程序的程序所占的比例。即Precison=TP/(TP+FP)。F-Measure,用来综合衡量Precison和Recall(召回率,与TPR计算相同),是P和R的加权调和平均。用公式来表示即为F-Measure=[(a^2+1)×P×R]/[a^2×(P+R)],其中P表示准确率,R表示召回率,参数a取1时,表示最为常见的F1-Measure,F1=2PR/(P+R)。由表2可知,不同的分类器对于实验数据的检测效果相差比较大,根据最大的F1-Measure值可知,决策树J48分类器的效果最好,且其TPR接近90%,FPR小于7%,准确率也超过了91%。K-近邻分类器中K=1时,检测效果最好,K=3时次之,K=2,4,5,6,7时均全部检测出了恶意程序,不过仅检测出了25%的良性程序,K=8,9,10时,所有程序均被认定为恶意程序。支持向量机中LinearKernel的效果最好。4.2实验结果及分析不同的分类器在可处理的数据类型、建模机制等方面存在区别,所以需要使用一些评定指标来比较不同分类器的性能,4.1节已经对分类器的准确率等可反映检测效果的指标进行了数据比较。本节将在使用不同分类器的情况下对建模时间进行测试,使用的实验数据及分类器仍然与4.1节相同。实验所用计算机的相关配置如下,处理器型号为IntelCorei5-2400CPU,主频为3.10GHz,记录建模时间的工具为Weka。基于改进n-gram模型特征的各分类器建模时间如表3所示,对每一个分类器分别做10次建模,记录其所用建模时间,记录的精度为0.01秒,取平均值后即得表3中的平均建模时间。由表3可知,建模时间较久的一个是贝叶斯网络,主要是采用HillClimber和TAN的贝叶斯网络,建模时间分别为0.781秒、1.392秒。K近邻的建模时间用时最少,在实验精度(0.01秒)下用时不足0.01秒,故表3中记录为0,实验对K近邻方法从K=1到K=10均进行了测试,由于建模时间均不足0.01秒,故表3只使用了一行记录KNN分类器的建模时间。决策树和支持向量机的建模时间基本上在几十毫秒的量级,两者之间决策树的建模速度要稍快于支持向量机。综合检测效果以及建模时间来看,贝叶斯网络由于建模时间较长,且检测效果并不明显具有优势,所以性能最差。决策树:J48和支持向量机:LinearKernel的效果最好,尤其是决策树:J48,表2中FPR接近最优,其他三项参数也均为最优,同时该方法的建模时间耗时较少,在实验样本特征数量前提下为10毫秒级别,与其他几个分类器相比,在时间可接受的情况下获得了较好的检测效果。4.3提取特征信息并进行交叉验证AlazabM等本文同样是先获取了恶意样本及良性样本的API调用特征,并根据调用特征得出了各样本的3-gram特征及其相关联的概率、频次信息,概率、频次信息可以反映连续gram之间的上下文语义,从而增强了特征,为检测时提供了更多的信息。之后对得到的特征信息分别采用了四大类分类器进行建模,并进行了交叉验证。表4为本文部分实验结果与文献由表4可知本文使用的决策树在准确度上较Alazab.M等KolbitschC等由本文与文献5动态特征分析检测恶意软件已经变得越来越有危害,所以提高反病毒扫描器对于多态、变形等恶意代码的检测能力是极其重要的。然而目前商用的反病毒扫描器一般

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论