一种基于半监督学习的恶意代码分析方法和系统与流程

文档序号:11262109阅读:231来源:国知局

本发明涉及,尤其涉及。本发明涉及恶意代码分析技术,具体涉及一种基于半监督学习的恶意代码分析方法和系统。



背景技术:

恶意软件是指任何对计算机和网络存在着潜在危害的计算机软件。目前,恶意代码的数量和种类逐年增加,并且制作技术发展迅速,对全球网络环境安全带来巨大威胁。在商业领域广泛使用的是模式匹配方法,但是其对恶意代码的变种检测却无能为力。如今基于监督学习、无监督学习以及半监督的学习方式已经被采纳用于解决恶意代码变种的检测问题并在算法上已有成熟的研究成果,本发明从特征提取与特征降维的角度研究恶意代码的家族分类,而现有的研究成果中特征提取主要集中在单一特征的提取或一类特征(静态特征或动态行为特征)提取,并且对恶意代码特征的降维研究较少。

在kaggle上微软发起的恶意代码分类大赛[https://www.kaggle.com/c/malware-classification]中,一组获奖选手利用反汇编文件与字节码文件提取静态特征包括:文件属性特征和pesection、操作码序列、字节码序列等代码特征,并利用数据挖掘技术先用随机森林算法对特征进行选择,再利用nmf算法降维,最后用监督学习分类算法对样本分类。王毅等[王毅,唐勇,卢泽新,等.恶意代码聚类中的特征选取研究[j].信息网络安全,2016(9):64-68]人对恶意代码聚类中的特征选取展开了研究,提取opcode序列、函数调用图、系统调用三类特征,并基于dbscan对多特征向量聚类,证明了单一特征中使用系统调用序列的效果最好,并且采用多特征向量进行聚类的结果要优于单一特征。另外,igorsantos等人[santosi,sanzb,laordenc,etal.opcode-sequence-basedsemi-supervisedunknownmalwaredetection[j].lecturenotesincomputerscience,2011,6694(11):50-57.]提出采用llgc(局部与全局一致性算法)来检测基于操作码序列特征的未知恶意软件。

可见,现有的关于恶意代码分类技术研究成果中,大多提取单一的特征类型,会导致难以描述恶意软件的代码与行为的全部性质与特点。另外,对于提取了多特征的恶意代码分类研究中,对特征选择与特征抽取部分没有详细讨论,高维特征会使分类效率下降,并易出现过拟合现象。除此之外,目前基于监督学习的恶意代码分类无法解决标记样本数量较少的问题。

基于上述原因,本发明研究并提出了基于多维特征的分析方法,提取恶意代码的静态特征与动态特征,并对高维特征的降维提出了行之有效的处理方法,最后运用半监督学习方式,解决了对少量标记恶意代码样本的分类问题。



技术实现要素:

有鉴于此,本发明提供了一种基于半监督学习的恶意代码分析方法和系统,其基于多维特征进行分析,提取恶意代码的静态特征与动态特征,通过降维减少后续处理难度,并运用半监督学习方式,解决了对少量标记恶意代码样本的分类问题。

为了解决上述技术问题,本发明是这样实现的:

一种基于半监督学习的恶意代码分析方法,包括:

步骤1、获取恶意代码样本集中每个样本的反汇编文件和动态行为报告;

步骤2、从每个样本的所述反汇编文件和动态行为报告中提取原始特征数据,包括4种静态特征与4种动态特征;所需提取的原始特征数据是通过分析恶意代码的反汇编文件和行为所确定的有效区分恶意代码家族的特征;所述静态特征包括:加壳信息、操作码序列、pe节以及关键字function后的函数名称;加壳信息包括是否加壳与加壳类型;

所述动态特征包括:系统调用序列、释放文件信息、ip地址和注册表路径;释放文件信息包括释放文件类别数、释放文件总数和各个类型的释放文件对应数量;

步骤3、将所述原始特征数据进行序列化,每一种特征均产生多维度的特征项;

步骤4、对所述特征项进行降维处理,得到较低维度的特征项:使用特征打分器对每一维的特征项进行打分,分数的高低反映特征数据的重要性;特征打分器集成信息增益、随机森林和l1/l2逻辑回归三项特征选择标准,对三项特征选择标准的得分进行归一化处理,然后取平均分作为特征打分器的打分结果;筛选掉分数较低的特征项,最后得到用于训练分类模型的特征项;

步骤5、基于降维后的特征项,利用半监督分类算法训练得到用于区分恶意代码所属种群的特征分类器;利用该特征分类器对待分析的恶意代码进行处理,得到预测的恶意代码所属种群的分析结果。

优选地,所述步骤1在获取动态行为报告时,通过搭建的cuckoosandbox安全环境执行恶意代码,提取json格式的动态行为报告。

优选地,所述加壳信息的序列化方式为:用1维特征项表示样本是否加壳,并用0,1标记;统计所有样本加壳类型共n1种,是否加某种壳也用0,1标记,产生n1维特征项;加壳信息序列化后得到m×(n1+1)的0、1矩阵,其中m为样本数量;

所述操作码的序列化方式为:使用n-gram模型进行序列化处理,其中n=3,4,5;

所述pe节的序列化方式为:统计所有样本中出现的分节共n5个,计算每个样本出现这n5个分节的次数,序列化后得到的是m×n5的数值矩阵;

所述关键字function后函数名称的序列化方式为:tf-idf转化为词频矩阵;

所述系统调用序列的提取和序列化方式为:提取动态行为分析报告中字段category为‘registry’、‘process’、‘file’、‘system’、‘services’和‘network’的api函数和时间点;再根据时间点的大小对api函数排序,得到具有执行先后顺序的api函数序列即为系统调用序列;使用n-gram模型对api函数序列进行序列化处理;

所述ip地址的提取和序列化方式为:提取动态行为分析报告中的ip地址,判断ip地址所属区域;统计所有样本的区域类型n2种,每个样本使用0,1标记是否属某区域;序列化后得到的是m×n2的0、1矩阵;

所述释放文件信息的序列化方式为:统计所有样本的释放文件类型共n3个,计算每个样本各类型的数量;序列化后得到m×(n3+2)的矩阵,其中两维记载样本中释放文件的总数和释放文件的类型总数;

所述注册表路径的提取和序列化方式为:当调用的api函数名包含regcreatekey、regdeletekey、regsetvalue、regdeletevalue、regreplacekey、regunloadkey中的任何一个,则对此api对应的注册表操作路径‘regkey’的值进行提取;统计路径字符串个数n4,每个样本使用0,1标记是否修改某注册表路径;序列化后得到的是m×n4的0、1矩阵。

优选地,使用n-gram模型对特征进行序列化处理为:

令n-gram模型中的n分别取3,4,5,针对每一种取值,按照公式(1)获得的g值从大到小提取n-gram序列的前1000个序列;

g=(每个n-gram总个数)/(包含该n-gram的样本数)(1)。

优选地,所述步骤4的降维过程进一步包括:对筛选后的特征项集合进一步运用主成分分析法pca进行抽取特征,得到更低维度的用于训练分类模型的特征项。

优选地,步骤5的半监督分类算法采用局部与全局一致性算法llgc。

本发明提供的基于半监督学习的恶意代码分析系统包括:原始特征文件获取模块、特征提取模块、预处理模块、特征选择模块和分析模块;

原始特征文件获取模块,用于获取恶意代码样本集中每个样本的反汇编文件和动态行为报告;

特征提取模块,用于从每个样本的所述反汇编文件和动态行为报告中提取原始特征数据,包括4种静态特征与4种动态特征;所需提取的原始特征数据是通过分析恶意代码的反汇编文件和行为所确定的有效区分恶意代码家族的特征;

所述静态特征包括:加壳信息、操作码序列、pe节以及关键字function后的函数名称;加壳信息包括是否加壳与加壳类型;

所述动态特征包括:系统调用序列、释放文件信息、ip地址和注册表路径;释放文件信息包括释放文件类别数、释放文件总数和各个类型的释放文件对应数量;

预处理模块,用于将所述原始特征数据进行序列化,每一种特征均产生多维度的特征项;

特征选择模块,用于对所述特征项进行降维处理,得到较低维度的特征项:使用特征打分器对每一维的特征项进行打分,分数的高低反映特征数据的重要性;特征打分器集成信息增益、随机森林和l1/l2逻辑回归三项特征选择标准,对三项特征选择标准的得分进行归一化处理,然后取平均分作为特征打分器的打分结果;筛选掉分数较低的特征项,最后得到用于训练分类模型的特征项;

分析模块,用于基于降维后的特征项,利用半监督分类算法训练得到用于区分恶意代码所属种群的特征分类器;利用该特征分类器对待分析的恶意代码进行处理,得到预测的恶意代码所属种群的分析结果。

优选地,所述预处理模块的序列化为:

对于加壳信息的序列化方式:用1维特征项表示样本是否加壳,并用0,1标记;统计所有样本加壳类型共n1种,是否加某种壳也用0,1标记,产生n1维特征项;加壳信息序列化后得到m×(n1+1)的0、1矩阵,其中m为样本数量;

对于操作码的序列化方式:使用n-gram模型进行序列化处理,其中n=3,4,5;

对于pe节的序列化方式:统计所有样本中出现的分节共n5个,计算每个样本出现这n5个分节的次数,序列化后得到的是m×n5的数值矩阵;

对于关键字function后函数名称的序列化方式:tf-idf转化为词频矩阵;

对于系统调用序列的序列化方式为:使用n-gram模型对api函数序列进行序列化处理;

对于ip地址的序列化方式为:判断ip地址所属区域,统计所有样本的区域类型n2种,每个样本使用0,1标记是否属某区域;序列化后得到的是m×n2的0、1矩阵;

对于释放文件信息的序列化方式为:统计所有样本的释放文件类型共n3个,计算每个样本各类型的数量;序列化后得到m×(n3+2)的矩阵,其中两维记载样本中释放文件的总数和释放文件的类型总数;

对于注册表路径的序列化方式为:统计路径字符串个数n4,每个样本使用0,1标记是否修改某注册表路径;序列化后得到的是m×n4的0、1矩阵。

优选地,所述特征提取模块的提取方式为:

对于所述系统调用序列的提取过程为:提取动态行为分析报告中字段category为‘registry’、‘process’、‘file’、‘system’、‘services’和‘network’的api函数和时间点;再根据时间点的大小对api函数排序,得到具有执行先后顺序的api函数序列,即为系统调用序列;

对于注册表路径的提取过程为:当调用的api函数名包含regcreatekey、regdeletekey、regsetvalue、regdeletevalue、regreplacekey、regunloadkey中的任何一个,则对此api对应的注册表操作路径‘regkey’的值进行提取,作为提取的注册表路径。

优选地,所述预处理模块使用n-gram模型对特征进行序列化处理为:

令n-gram模型中的n分别取3,4,5,针对每一种取值,按照公式(1)获得的g值从大到小提取n-gram序列的前1000个序列;

g=(每个n-gram总个数)/(包含该n-gram的样本数)(1)。

有益效果:

(1)本发明基于多维特征进行分析,提取恶意代码的静态特征与动态特征,通过降维减少后续处理难度,并运用半监督学习方式,解决了对少量标记恶意代码样本的分类问题。

(2)本发明基于静态和动态特征进行恶意代码族群分类,通过分析大量恶意代码样本提取能体现恶意代码之间差异性与相似性的4类静态特征和4类动态特征。4类静态特征包括加壳信息、pe分节、操作码序列和关键字function后函数名称,均能够体现开发者在制作恶意软件中的编程习惯,例如同一家族的恶意代码通常会使用同种加壳算法叠加壳;4类动态特征包括:系统调用序列、释放文件、ip地址和注册表路径,能够反映恶意代码执行期间行为的共同特征,例如本发明提出的释放文件特征,勒索软件在执行期间会释放jpg格式文件而分析蠕虫软件释放文件类型均为可执行文件。

(3)本发明基于信息增益、随机森林和l1/l2的逻辑回归构建特征打分器,能够有效改善基于单一特征选择方法对特征重要性评估的局限性。由于本发明提取及预处理后得到的特征数据集,存在噪音、有关联与无关联等情况。对于相关联的特征项,使用l1/l2的逻辑回归方法,优化了仅使用l1逻辑回归时,只能保留多个对目标值具有同等相关性的特征中的一个的缺陷;而对于不相关特征,使用随机森林方法能够得到一个近似最优解;使用过滤式特征选择方法信息增益用来平衡了随机森林与l1/l2逻辑回归对特征打分的误判。并且,实验也证明使用随机森林与特征打分器分别选择后的特征集合在分类验证时,其准确率分别为0.50与0.94,分类准确率有显著提升。

(4)本发明使用n-gram处理操作码与系统调用序列时,选取n为3,4,5,并根据公式计算得到n-gram序列平均出现频率g,选取g值大小前1000的n-gram序列;在这个处理过程中,把n-gram序列特征维度进行约束,提高了特征选择时的处理效率。

附图说明

图1为本发明恶意代码分析方法的具体实施方式流程图。

具体实施方式

下面结合附图并举实施例,对本发明进行详细描述。

本发明提供了一种基于半监督学习的恶意代码分析系统,按照恶意代码分析流程,主要包含了原始特征文件获取模块、特征提取模块、预处理模块、特征选择模块和分析模块五个部分。如图1所示。

原始特征文件获取恶意代码样本集中每个样本的反汇编文件和动态行为报告。特征提取模块主要通过分析恶意代码的反汇编文件和行为,找到可以有效区分恶意代码家族的静态特征与动态特征,并从每个样本的反汇编文件和动态行为报告中提取这些原始特征数据,其包括多种静态特征与多种动态特征。预处理模块实现了利用自然语言处理的思想及模型等方式,将原始特征数据进行序列化,每一种特征均产生多维度的特征项,从而转化为可以直接用于特征选择的数据集。特征选择模块使用特征打分器对每一维的特征项进行分数计算,分数的高低反映了该项特征数据的重要性,特征打分器集成多种特征选择标准,对各项特征选择标准的得分进行归一化处理,然后取平均分作为特征打分器的打分结果;筛选掉分数较低的特征项,从而实现降维,最后得到了可以用于训练分类模型的、较低维度的特征向量。分析模块是实现恶意代码分析的核心部分,其基于降维后的特征项,通过训练模型得到用于区分恶意代码所属种群的特征分类器;利用该特征分类器对待分析的恶意代码进行处理,得到预测的恶意代码所属种群的分析结果,从而实现对未知代码的家族化,并给出分析结果报告。

下面针对每一个环节进行详细描述。

步骤(1):原始特征文件获取

反汇编文件与动态行为报告的获取参考现有的静态与动态分析技术。获取反汇编文件时,首先分析文件类型即文件是否加壳;若查壳结果为加壳,则需要先进行脱壳处理再反汇编,否则直接进行反汇编。动态行为报告的获取,通过搭建的cuckoosandbox安全环境执行恶意代码,提取其json格式的动态分析报告。

步骤(2):特征提取

特征提取部分提取了4类静态特征,分别是加壳信息、操作码序列、pesection(节)、关键字function后函数名称;和4类动态特征,分别为系统调用序列、释放文件信息、ip地址、注册表路径。静态特征与动态特征的提取要分别读取反汇编文件和解析json文件。本发明在研究中证明了以下特征均为可有效区分恶意代码族群的特征。具体提取方法如下:

加壳特征:包括是否加壳与加壳类型;本发明使用c++脚本模拟peid的查壳原理,实现对恶意软件的查壳分析。

pesection特征:以行为单位遍历反汇编文件,提取每行冒号前的字符串。提取处理后,每一个恶意代码样本得到一个与其对应的pe节字符串文件。

操作码特征:遍历读取反汇编文件中的操作码,提取处理后,每个恶意代码样本得到一个与其对应的操作码序列文件。

关键字function后函数名称:提取反汇编文件中关键字function与press之间的函数名称字符串,提取处理后,每个样本对应一个函数名称特征文件。

系统调用序列:提取json报告中字段category=‘registry’、‘process’、‘file’、‘system’、‘services’、‘network’的api函数和时间点(time字段);再根据时间点的大小对api函数排序,排序后得到具有执行先后顺序的api函数序列,也称系统调用序列。提取处理后,每一个恶意代码样本得到一个与其对应的系统调用序列文件。

释放文件信息:将释放文件类型数、释放文件总数、各个类型的释放文件数量作为一类区分恶意代码的动态特征。提取时,获取json文件中‘dropped’字段内关键字‘type’的值即为释放文件类型,然后对所有的类型进行处理。

ip地址:提报json报告中的建立连接的目的ip地址,使用接口判断ip地址所属区域,将“区域”字符串去重后,作为一类动态特征。

注册表路径:对json报告内注册表特征提取时,首先筛选category=‘registry’的api调用;若调用的api函数名包含regcreatekey、regdeletekey、regsetvalue、regdeletevalue、regreplacekey、regunloadkey中的任何一个,则对此api对应的注册表操作路径‘regkey’的值进行提取。

步骤(3):预处理(序列化)

预处理主要完成特征的序列化,将其转化为可以直接用于特征选择的数据类型。具体处理方法与处理结果如表1。

表1预处理方法与结果

如表中所述的预处理方法中,有5种特征使用简单的数学统计方法预处理;使用n-gram(n=3,4,5)的方法对操作码与系统调用序列进行划分;对function函数字符串利用词袋模型结合统计方法tf-idf进一步处理特征。

系统调用和操作码的n-gram序列数量庞大,需要进行筛选,筛选规则如公式(1),令n-gram模型中的n分别取3,4,5,针对每一种取值,按照公式(1)获得的g值从大到小提取n-gram序列的前1000个序列。

g=(每类n-gram总个数)/(包含该n-gram的样本数)(1)

例如:样本a的api的3-gram序列有(1,2,3)、(3,1,4)、(4,7,9),样本b的api的3-gram序列有(1,2,3)、(8,9,2)、(1,2,3);其中,3-gram序列(1,2,3)的总个数为3,包含序列(1,2,3)的样本数为2;因此,计算得到的g=3/2。

按照上述的筛选规则,n-gram序列对应的n取3、4、5时,各分别得到了1000个特征序列,一共有3000个,并统计每个样本中这3000个n-gram序列出现的次数;最终对系统调用序列n-gram预处理的结果是m*3000的特征矩阵,其中m为样本数量。

步骤(4):特征选择

特征选择部分提出了特征打分器,该打分器由信息增益、随机森林和l1/l2正则项的逻辑回归共三项特征选择标准构成,其中:信息增益则使用信息增益公式计算得到的数值作为分数;随机森林是利用训练模型中得到的特征重要性作为得分;使用l1/l2正则项的逻辑回归,由于仅使用l1逻辑回归选择时,只能保留多个对目标值具有同等相关性的特征中的一个,即l1中系数为0的特征不代表不重要,所以,使用l2正则项来优化。因此,使用l1与l2正则项的逻辑回归进行打分时,若一个特征项在l1中的权值是非0的,那么在l2中选择权值与其差别不大且在l1中权值是0的特征项构成同类集合,最后,将这个集合中的特征平分l1的权值,平分后的权值作为l1与l2逻辑回归模型的打分值。另外,对上述三项的得分进行归一化处理,使其得分范围都在[0,1]之间;最后计算三项分数的平均分作为特征打分器的打分结果,范围区间是[0,1]。

根据特征选择的打分器的结果,对特征项得分由大到小排序;选择得分在前25%的特征项,得到特征项集合a;最后,运用pca(主成分分析)算法对a进行特征抽取,得到特征项集合b。

步骤(5):分析

恶意代码分析模块基于上述4个研究内容,利用得到的较低维度的特征向量,结合llgc(learningwithlocalandglobalconsistent)半监督分类算法训练得到分类器;当有新增的恶意代码需要分析时,先将该样本经前期处理得到特征向量,再输入分类器,得到预测的该样本所属族群的报告。

综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1