090情报工程第1卷第6期2015年12月doi:10.3772/j.issn.2095-915x.2015.06.013一种基于机器学习的分布式恶意代码检测方法董立勉1,左晓军1,曲武2,王莉军3(1.国网河北省电力公司电力科学研究院河北050021;2.北京启明星辰信息安全技术有限公司核心研究院北京100193;3.中国科学技术信息研究所北京100038)摘要:随着恶意代码规模的快速增长,传统的恶意代码检测方法已经逐渐失效。主流的启发式技术由于其动态执行的特点,在许多应用中难以推广。因此,通过恶意代码的静态特征,将可疑恶意代码PE文件分类到相应的恶意代码家族是相当重要的。在本文,基于对恶意代码PE文件的分析结果,提出元数据的概念,并于此实现了恶意代码快速检测原型,PE-Classifier。在spark分布式环境中,通过使用随机森林分类算法,基于恶意代码元数据,能够对恶意代码进行快速和精准地分类和检测。实验结果表明,通过对大量的恶意代码PE样本元数据分析,本文提出的原型系统PE-Classifier能够根据元数据相似性判断样本的语义相似性,从而辅助检测,使得反病毒软件更为有效。关键词:恶意代码检测,随机森林算法,元数据,Spark中图分类号:TP391AdistributedApproachtoFastMalwareClassificationBasedonMachineLearningDONGLiMian1,ZUOXiaoJun1,QUWu2,WANGLiJun3(1.HebeiElectricPowerResearchInstitute,Hebei,050021,China;2.CoreResearchInstitute,BeijingVenustechCybervisionCo.Ltd.,Beijing100193,China;3.InstituteofScientificandTechnicalInformationofChina,Beijing100038)Abstract:Withtherapidincreaseofmalware,conventionalmalwaredetectionapproachesincreasinglyfail,ISSN:2095-915XVol.1No.690-101Dec2015TECHNOLOGYINTELLIGENCEENGINEERING情报工程ISSN:2095-915X第1卷第6期90-1012015年12月091modernheuristictechnologiesoftenperformdynamically,whichisnotpossibleinmanyapplicationsduetorelatedeffortandthescaleoffiles.Therefore,itisimportantformalwareanalysisthatitisclassifyingunknownmalwarefilesintomalwarefamiliesinordertocharacterizethestaticmalwarecharacteristicaccuracy.Inthispaper,weintroduceadistributedapproachtoperformfastmalwareclassificationbasedongenemetadataofmalwarePEexecutable.Weuseamachinelearningtechniquecalledrandomforestalgorithmtoclassifymalwarefastandaccurately.Theresultsoflargescaleclassificationsshowthatourprototypesystemsuccessfullydeterminedsomesemanticsimilaritybetweenmalwareaccordingtothegenemetadata,andmaketheantivirusmoreeffective.Keywords:Malwareclassification,randomforestalgorithm,metadata,spark1引言1983年,Cohen第一次形式定义了计算机病毒[1],并逐渐演进为恶意代码检测。恶意程序,通常被定义为恶意代码,被分类为病毒(Virus)、特洛伊木马(Trojans)、蠕虫(Worms)、逻辑炸弹(Logicbomb)和其他种类。当前,恶意代码仍然是计算机系统和网络最主要的威胁之一。根据2014年赛门铁克(Symantec)报告,244封邮件中至少有1封邮件带有恶意代码附件,而其中仅有13.9%能够被识别和阻断。而这些恶意代码中,大部分是基于以前恶意代码变种而来,变种行为通常使用工具进行修改而成,自动化程度很高,几乎可以批量生产。这些变种恶意代码可以轻易的绕过反病毒软件,实现免杀目的。仅当变种恶意代码签名被添加到反病毒软件时,这些恶意代码才能够被查杀。显然,基于签名的商业反病毒软件对于恶意代码变种或0-day攻击几乎是无效的。当前,恶意代码研究己经开始聚焦于更加通用和可扩展的特征,这些特征能够替代或补充传统的恶意代码签名识别恶意代码变种或0-day攻击。其中,这些研究主要包括两类方法,静态分析和动态分析。静态分析,无需运行恶意代码,仅通过分析PE文件的代码统计信息和程序结构进行分析。动态分析,需要在模拟环境或真实环境中运行恶意代码,通过分析其恶意行为进行检测。在本文,通过对恶意代码PE样本(本文提到的恶意代码特指恶意代码PE样本)大规模统计分析的基础上,提出元数据的概念,并于此实现了恶意代码快速检测原型PE-Classifer。在Spark分布式环境中,PE-Classifer提取恶意代码和良性代码的元数据,并使用分布式随机森林算法训练分类器。最后,基于分类器对PE文件进行快速和精准地分类。本文的贡献描述如下:1)基于恶意代码PE文件的元数据,使用随机森林算法训练分类模型,最后自动执行恶意代码快速检测,准确分类恶意代码和良性代码;2)为了处理大规模恶意代码样本,包括元数据的提取和模型训练。本文基于Spark分布式环境,实现了分布式元数据的提取和模型训练,解决了特征提取模块和模型训练模块的横向扩展问题;3)PE-Classifer原型系统作为传统反病毒软一种基于机器学习的分布式恶意代码检测方法092情报工程第1卷第6期2015年12月件的补充,提升反病毒软件的检测能力;4)PE-Classifer原型系统有助于研究人员了解恶意代码PE文件内部的语义信息,可进一步用于恶意代码家族分类。本文组织如下:第2节介绍该领域的相关工作,第3部分展示了PE-Classifer原型系统的检测原理及方法论。第4部分进行实验评估和结果展示。最后,进行总结和未来展望。2相关工作2.1恶意代码检测在恶意代码检测研究领域,按照检测方法所在的位置可分为基于主机的检测和基于网络的检测[2]。基于主机的检测技术又可分为特征签名技术、校验和技术、启发式方法和机器学习方法。基于网络检测技术可分为DPI技术和蜜罐的检测技术。而根据恶意代码的运行状态,检测技术又可以分为静态检测技术和动态检测技术。静态检测技术对恶意代码样本进行分析判断其是否为恶意,对于特征签名提取技术和校验和判别技术都可归为此类。在动态检测技术中,恶意代码在虚拟机或仿真器中虚拟执行获得恶意代码的主机行为特征,并进行相关语义分析来判别样本是否具有恶意行为。传统基于签名的恶意代码检测方法难以适应恶意代码变种检测的需求。当前,许多研究人员开始聚焦于使用数据挖掘算法进行未知恶意代码检测,以此寻找恶意代码与特征之间的关联关系。为了表示恶意代码样本,研究人员广泛使用n-gram[3][4]或API调用[4][5][6][7][8]作为主要特征进行分析,进而训练分类器进行检测。n-gram算法最早用于文本分类和信息检测中,核心思想是计数连续n个词出现的频率。Tony等人[9]首先提出使用n-gram特征的差异性进行恶意代码检测。该方法通过自动统计算法从恶意代码PE文件中自动提取ByteCode特征,然后训练分类器进行检测。Henchiri等人[10]提出一类新的n-gram特征提取方法。首先,该方法首先对恶意代码PE文件进行扫描,统计n-gramPE文件中出现的频率。接下来。根据已标注的恶意代码家族建立一个符合频率支持的n-gram特征列表,通过恶意代码家族n-gram特征的差异性,即过滤掉一个恶意代码家族出现较为频繁但在其他家族出现较少的特征,从而获得更具有普适性的特征,并在此基础上区分恶意代码和良性代码。Moskovitch等人[11]提出利用OpCode代替ByteCode进行统计获得恶意代码的特征,实验结果表明该特征比ByteCode更为有效。孔德光[12]提出使用多维特征,包括Opcode序列、调用流图特征、系统调用序列图,对恶意代码家族特征进行统计和分析,并结合语义特征来表述恶意代码的“行为”特征,从而对分类结果加权投票后给出恶意代码的分类信息。2.2分布式处理框架为了实现PE-Classifer原型系统,需要统筹考虑存储、计算和建模框架。对于存储框架,本文选择HDFS来管理PE文件元数据,HDFS是一个主/从架构,从终端用户的视角看,它与传统的文件系统一样,完全可以使用目录对文件进行增删改查。但是,由于其分布式存储的特征,HDFS集群被设计成拥有一个NameNode节点和若干个DataNode节点。NameNode负责管理文件系统的描述元数据,DataNode负责存储实际的数据文件。用户通过与NameNode和DataNodes的交互访问文件系统。该过程分为两个阶段,用户访问NameNode节点以获取文件的元数据,而真正的文件CRUD(Create、Read、Update和Delete)操作时直接与DataNode节点进行交互的。093Spark是UCBerkeleyAMP实验室实现的Map-Reduce并行计算框架,拥有基于Hadoop的Map-Reduce实现所具有的优点,但不同于Hadoop的Map-Reduce实现,SparkJob的中间输出和结果可以保存在内存,从而中间过程无需读写HDFS,很大程度上降低了磁盘IO的开销。因此,Spark框架能更好的适用于数据挖掘与机器学习等需要迭代的Map-Reduce算法。在基于Spark计算框架建模过程中,本文主要使用Spark上一个机器学习算法库MLLib,借助Spark的内存计算能力,使得机器学习的模型计算时间大大缩减。为了解析和获取恶意代码的元数据特征,本文使用Pandas,Scikit-learn等Python数据分析包对恶意代码的PE文件进行分析,获得的恶意代码元数据。3PE-Classifier检测原理本节,恶意代码检测的原型系统PE-Classifier的检测原理将会被详细描述。通过引入数据挖掘技术,PE-Classifier能够精确地检测新的恶意代码及其变种。图1显示了恶意代码检测系统PE-Classifier的架构,核心模块包含分布式特征提取模块、特征选择和变换模块以及基于Spark的随机森林分类模块:1)分布式特征提取模块:基于Spark并行计算框架,该模块对于PE文件进行批量分析获取56个特征,形成56维的特征向量;2)特征选择和变换模块:基于PCA算法对56维特征向量进行处理,降低维度;3)基于Spark的随机森林分类算法。3.1检测原理本文提出的方法,其核心检测原理是恶意代码二进制PE文件包含的特征标识可充分用于恶意代码自动识别和分类,其原理假设描述如下:1)为了绕过AV的签名检测,恶意代码通过变种来剔除或规避签名,但恶意代码PE文件包含的特征在一定程度上是稳定的;2)由于恶意代码的工作原理导致其PE文件特征和结构与源于商业开发环境的良性代码差异较大,这种差异仅体现在功能上,并不影